You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何限制变量定义域?运输问题缩减变量规模的技术问询

解决GAMS大规模网络下变量数量优化的问题

核心实现方案

在GAMS中完全可以实现只保留满足possible_edge(i,j,d)条件的变量,避免为所有(i,j,d)组合生成变量,具体有两种实用方法:

方法1:变量声明阶段直接过滤

修改变量定义语句,在声明时就附加条件$possible_edge(i,j,d),GAMS会仅为符合条件的组合创建变量,从根源上减少变量总数:

binary variable x(i,j,d)$possible_edge(i,j,d);

方法2:约束中动态过滤变量

如果需要保留全量变量的声明结构,但仅在约束逻辑中使用符合条件的变量,可以在约束定义时加入条件判断:

equation flow_constraint(i,d);
flow_constraint(i,d).. sum((j)$possible_edge(i,j,d), x(i,j,d)) =e= demand(i,d);

这种方式适合需要保留变量全量结构,但实际计算只用到部分变量的场景,不过变量总数仍为全量,优先推荐方法1。

关于possible_edge参数的生成建议

结合你提到的最短路径+距离阈值逻辑,可按以下步骤生成参数:

  1. 通过最短路径算法计算源节点i到所有节点j的最短距离distance(i,j);
  2. 为每个需求d设定距离阈值threshold(d);
  3. 定义参数时加入双重条件判断(确保仅考虑实际存在的边):
parameter possible_edge(i,j,d);
possible_edge(i,j,d) = 1$(distance(i,j) < threshold(d) and edge(i,j) = 1);

内容的提问来源于stack exchange,提问作者Rainbow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 15:30:44