GAMS多OD对运输网络模型:eq3与eq4索引错误修正求助
修正GAMS多OD对运输网络模型中的eq3和eq4索引错误
你的eq3和eq4存在索引重复定义和求和范围错误的问题,以下是修正后的语法及完整代码:
错误分析与修正要点
方程eq3(链路流量守恒)
原代码重复嵌套(r,s)索引,导致GAMS无法正确识别求和范围。正确逻辑是:链路a的流量x(a)等于所有OD对(r,s)下,属于该OD对的路径b上的流量f(r,s,b)乘以路径b经过链路a的指示变量del(r,s,b,a)的总和。
修正后的eq3:
eq3(a)..x(a)=e=sum((r,s,b)$paths(r,s,b), f(r,s,b)*del(r,s,b,a));
或拆分求和(可读性更强,效果一致):
eq3(a)..x(a)=e=sum((r,s), sum(b$paths(r,s,b), f(r,s,b)*del(r,s,b,a)));
方程eq4(OD对流量守恒)
原代码sum中错误包含(r,s)索引,且未约束路径b属于当前OD对(r,s)。正确逻辑是:每个OD对(r,s)的总路径流量之和等于该OD对的需求demand(r,s,'d')。
修正后的eq4:
eq4(r,s)..sum(b$paths(r,s,b), f(r,s,b))=e=demand(r,s,'d');
完整修正后的代码
/ minimize travel time in multiple origin destination pair sets a "links" /l1*l19/ b "path sets" /p1*p25/ r "origin node" /1,4/ s "destination node" /2,3/; table demand(r,s,*) "demand between rs pairs" d 1.2 11000 1.3 24000 4.2 13000 4.3 6000 ; Table link_data(a,*) "free travel time ta0" length ta0 Capacity l1 7 7 800 l2 9 9 400 . . l19 11 11 600 ; set paths(r,s,b) "paths in origin r to destiantion s" /1.2.p1*p8, 1.3.p9*p14, 4.2.p15*p19, 4.3.p20*p25 / ; table del(r,s,b,a) "parameter to show path b passes through link a from r to s" l1 l2 l3 l4 l5 l6 l7 l8 l9 l10 l11 l12 l13 l14 l15 l16 l17 l18 l19 1.2.p1 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1.2.p2 1 0 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 . . 1.3.p14 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 1 1 0 0 4.2.p15 0 0 0 1 0 0 0 0 0 0 0 1 0 1 1 0 0 0 0 . . 4.3.p25 0 0 1 0 0 1 0 0 0 0 0 1 0 1 0 1 0 0 0 ; variables of "objective function" t(a) "travel time in link a" x(a) "vehicle in link a" f(r,s,b) "vehicle flow in origin r to destination s on path b"; f.lo(r,s,b)=0; x.up(a)= link_data(a,'capacity')*10; x.lo(a)=0; equations eq1,eq2,eq3,eq4; eq1..of=e=sum(a,t(a)); eq2(a)..t(a)=e=link_data(a,'ta0')*(1+0.15*(x(a)/link_data(a,'Capacity'))**4); eq3(a)..x(a)=e=sum((r,s,b)$paths(r,s,b), f(r,s,b)*del(r,s,b,a)); eq4(r,s)..sum(b$paths(r,s,b), f(r,s,b))=e=demand(r,s,'d'); Model mc / all /; solve mc minimizing of using NLP ; display f.l ;
修正说明
- eq3:移除重复的
(r,s)索引嵌套,通过$paths(r,s,b)过滤出合法的路径-OD对组合,确保求和范围正确。 - eq4:仅对当前OD对
(r,s)下的路径b求和,保证每个OD对的流量总和匹配对应需求,避免索引混淆。
内容的提问来源于stack exchange,提问作者yousuf
相关产品推荐
相关产品推荐

