AMPL:订阅无效

时间:2014-10-10 12:07:03

标签: ampl

我打算进行优化,但是我收到了一个我无法找到原因的错误。编译器抱怨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;

我看不出这是怎么回事。对我来说这看起来准确。希望有人能对此有所了解! 的问候,

1 个答案:

答案 0 :(得分:1)

AMPL数据格式不允许使用表达式,因此ORIGINSunionDESTINATIONS在字面上被解释为字符串而不是数据语句中的集合表达式ORIGINS union DESTINATIONS < / p>

set UNI = ORIGINS union DESTINATIONS;

您可以通过初始化模型文件中声明中的集来解决此问题:

set ORIGINS;
set DESTINATIONS;
set UNI = ORIGINS union DESTINATIONS;
param servicetime{UNI} integer > 0;
...