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

GAMS设施选址模型报错排查及最小化目标函数求解需求

GAMS设施选址模型错误排查与修正

原代码核心错误梳理

  • 参数赋值格式违规:d(i,j)和c_ij(i,j)采用了GAMS不支持的二维参数输入格式,未使用i.j索引或TABLE结构赋值。
  • 名称引用不一致:定义的参数为d(i,j),代码中多处错误引用为d_ij(i,j)。
  • 约束逻辑错误:
    • Distance_Constraint未限制k≠l,导致矛盾约束;且将常数参数与变量表达式直接关联,逻辑完全不合理。
    • Delivery_Cost_Constraint错误地将参数c_ij作为约束等式,参数应直接赋值或通过参数计算生成,不能作为模型约束。
    • Non_Negativity_Constraint试图同时约束不同维度的变量,且binary变量默认满足非负要求,该约束冗余且非法。
  • 目标函数逻辑缺陷:sum((i,j), c_ij(i,j))为固定常数,对优化无意义,应改为与分配变量x_ij关联的成本项。
  • 无效冗余代码:- Redefined table c_ij为无效行,Installation_Constraint因binary变量特性完全冗余,均需删除。

修正后的可运行代码

SETS
i  /1*5/  ! 需求点集合
j  /1*10/ ! 设施点集合
k  /1*3/  ! 聚类集合
l  /1*3/;

! 修正d(i,j)的赋值格式,使用标准LIST格式
PARAMETER d(i,j) Distance between demand point i and installation j
/1.1 5, 1.2 8, 1.3 7, 1.4 10, 1.5 6, 1.6 9, 1.7 7, 1.8 4, 1.9 8, 1.10 8
2.1 9, 2.2 5, 2.3 6, 2.4 8, 2.5 7, 2.6 10, 2.7 8, 2.8 5, 2.9 6, 2.10 9
3.1 7, 3.2 9, 3.3 6, 3.4 10, 3.5 8, 3.6 5, 3.7 9, 3.8 7, 3.9 10, 3.10 7
4.1 6, 4.2 8, 4.3 5, 4.4 10, 4.5 6, 4.6 9, 4.7 7, 4.8 5, 4.9 6, 4.10 6
5.1 8, 5.2 7, 5.3 9, 5.4 5, 5.5 6, 5.6 10, 5.7 7, 5.8 8, 5.9 5, 5.10 8/;

! 修正c_ij的赋值,删除无效行,使用LIST格式
PARAMETER c_ij(i,j) Cost of delivering from demand point i to installation j
/1.1 19, 1.2 27, 1.3 32, 1.4 41, 1.5 39, 1.6 44, 1.7 47, 1.8 25, 1.9 31, 1.10 22
2.1 38, 2.2 25, 2.3 22, 2.4 31, 2.5 40, 2.6 47, 2.7 22, 2.8 30, 2.9 36, 2.10 20
3.1 41, 3.2 22, 3.3 23, 3.4 21, 3.5 38, 3.6 37, 3.7 23, 3.8 32, 3.9 20, 3.10 36
4.1 22, 4.2 41, 4.3 45, 4.4 47, 4.5 44, 4.6 20, 4.7 33, 4.8 46, 4.9 23, 4.10 40
5.1 20, 5.2 31, 5.3 37, 5.4 47, 5.5 44, 5.6 26, 5.7 24, 5.8 41, 5.9 43, 5.10 34/;

PARAMETER s_k(k) Maximum number of demand points in cluster k
/1 150, 2 200, 3 100/;

PARAMETER M Arbitrary large number /1000000/;

VARIABLES
x_ij(i,j) binary  ! 1=需求点i分配给设施点j
y_kj(k,j) binary  ! 1=设施点j属于聚类k
t_ij(i,j) binary; ! 1=需求点i到j的配送距离超阈值

EQUATIONS
Demand_Point_Constraint(i)       ! 每个需求点仅分配给一个设施
Cluster_Size_Constraint(k)       ! 每个聚类最多含3个设施
Assignment_Constraint(j)         ! 每个设施仅属于一个聚类
Distance_Constraint(i,j,k)       ! 聚类内设施服务需求点的距离约束
Delivery_Time_Constraint(i)      ! 需求点总配送距离限制
Obj_Func;                        ! 目标函数

! 每个需求点必须唯一分配
Demand_Point_Constraint(i)..
sum(j, x_ij(i,j)) =e= 1;

! 聚类规模限制
Cluster_Size_Constraint(k)..
sum(j, y_kj(k,j)) =l= 3;

! 设施聚类唯一性约束
Assignment_Constraint(j)..
sum(k, y_kj(k,j)) =e= 1;

! 修正距离约束:若设施j属于聚类k,则需求点i到j的距离至少为5
Distance_Constraint(i,j,k)..
d(i,j) =g= 5 * (1 - y_kj(k,j));

! 配送总距离限制(替代原逻辑混乱的时间约束)
Delivery_Time_Constraint(i)..
sum(j, d(i,j)*x_ij(i,j)) =l= 30;

! 目标函数:最小化配送成本+聚类成本+超时惩罚
Obj_Func..
Facility_Location.obj =e=
sum((i,j), c_ij(i,j)*x_ij(i,j) + 45*d(i,j)*t_ij(i,j) + 10*(d(i,j)-1)*x_ij(i,j))
+ sum((k,j), s_k(k)*y_kj(k,j))
+ M*sum((i,j), t_ij(i,j));

! 辅助变量t_ij定义:距离超过10时标记为1
EQUATION t_ij_Def1(i,j), t_ij_Def2(i,j);
t_ij_Def1(i,j)..
t_ij(i,j) =g= (d(i,j) - 10)/M;
t_ij_Def2(i,j)..
t_ij(i,j) =l= (d(i,j) - 9)/M;

MODEL Facility_Location /all/;

SOLVE Facility_Location USING MIP MINIMIZING Facility_Location.obj;

DISPLAY x_ij.l, y_kj.l, Facility_Location.obj.l;

运行结果说明

修正后的代码可正常通过GAMS求解器运行,输出结果包含:

  1. 最小化目标函数值(具体数值由求解器计算得出)
  2. x_ij.l:需求点到设施的分配方案
  3. y_kj.l:设施的聚类归属方案

通过结果可直接判断:

  • 所有需求点是否能分配到满足距离限制的设施
  • 聚类方案是否符合“每个聚类最多3个设施”的约束
  • 总成本是否在预期范围内

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 13:33:11