我打算进行优化,但是我收到了一个我无法找到原因的错误。编译器抱怨servicetime,startlimit和endlimit不是无效的。特别是编译器在约束TimeConstraint中抱怨服务时间没有价值[' ORIGINS']。
有问题的约束是:
subject to TimeConstraint {k in H}: sum{i in UNI, j in UNI} servicetime[i]*x[i,j,k] <= 1440;
其中:
set ORIGINS;
set DESTINATIONS;
set UNI;
param servicetime{UNI} integer > 0;
var x{UNI,UNI, H} binary;
param startlimit{UNI};
param endlimit{UNI};
.dat文件是:
set ORIGINS := 1 2 3 4 5 6 7;
set DESTINATIONS := 8 9 10 11 12 13 14;
set UNI = ORIGINS union DESTINATIONS;
param: startlimit endlimit servicetime:=
1 0 1440 360
2 0 1440 360
3 0 1440 360
4 0 1440 360
5 0 1440 360
6 0 1440 120
7 0 1440 120
8 0 1440 360
9 0 1440 360
10 0 1440 360
11 0 1440 360
12 0 1440 360
13 0 1440 120
14 0 1440 120;
我看不出这是怎么回事。对我来说这看起来准确。希望有人能对此有所了解! 的问候,
答案 0 :(得分:1)
AMPL数据格式不允许使用表达式,因此ORIGINS
,union
和DESTINATIONS
在字面上被解释为字符串而不是数据语句中的集合表达式ORIGINS union DESTINATIONS
< / p>
set UNI = ORIGINS union DESTINATIONS;
您可以通过初始化模型文件中声明中的集来解决此问题:
set ORIGINS;
set DESTINATIONS;
set UNI = ORIGINS union DESTINATIONS;
param servicetime{UNI} integer > 0;
...