AMPL运行报错v需下标、语法错误问题排查求助
AMPL代码报错修复方案
报错1:v needs to be subscripted 修复
- 错误原因:你提前在集合定义部分声明了
set v {D};(这是一个依赖D下标的集合族,单独使用v时必须加下标),而定义Y变量时用了v in V作为临时索引变量,和已声明的集合v重名,触发语法校验错误。 - 修复方法:将Y变量定义的索引变量改名,避免重名,修改为:
var Y {d in D, vi in V, f in F} binary; #target item need to collect
报错2:syntax error 对应maxmimize行修复
- 错误原因:关键字拼写错误,AMPL中目标函数最大化的关键字是
maximize,你多写了一个字母m,写成了maxmimize。 - 修复方法:修正拼写即可:
maximize numberSpatialTemporal:
其他隐藏问题修复(否则后续运行仍会报错)
- mod文件中
set M =1..5;和data文件中set M:=M1 M2 M3;冲突,mod文件中M是数值集合,data中是字符串集合,将mod文件中M的定义改为set M;即可,由data文件赋值。 - 删除mod文件中多余的无效行
enter code here。 - data文件中D集合只有D1~D5,但是你定义了
set Rsm[D6]:=v3 v2;,不存在D6元素,直接删除这行即可。 - 集合P和参数定义混淆:mod中声明了
set P;,但data中写的是param P: P1 P2 P3 P4 P5 := ...,属于格式错误,改为先声明集合P:set P:=P1 P2 P3 P4 P5;,再对应修改参数f、Pt的定义,两个参数都是二维参数,mod中定义要改为:
param Pt{F, P}; #rounted path param f{P, P}; #network flow is collecting the target telemetry item
- 目标函数求和索引错误:当前写的
sum {m in M, p in P, p in Rsm, d in D}重复定义了p,且Rsm是依赖D的集合族,修改为:
sum {m in M, d in D, p in Rsm[d]} (S[m,d,p] * t[m,p]);
内容的提问来源于stack exchange,提问作者CHIN JUN NAN
相关产品推荐
相关产品推荐

