1

我有这个小代码:

 param n, integer, > 0; # number of clients
param m, integer, > 0; # number of facilities
param g, integer, > 0;

set I := 1..n;
set J := 1..m;
set G := 1..g;

param d{i in I, j in J};/* distance for client i to factory j*/
param w{i in I, j in J};/* distance for client i to factory j*/
param l{j in J}; # distance from factory j to factory 1
param F{j in J}; # cost of open a factory in J
param s{i in I, g in G};

问题出在 s 上,它总是说 drdrd.mod:13: syntax error in literal set ,如果我将 G 中的 g 更改为 J 中的 j,一切正常。不可能有3个不同的集合吗?

还有一个我无法解决的问题,如果我在 I 中放入 2 而不是 i,在 I 中放入 2(因为我想考虑前 2 个数字),它也会显示相同的错误消息。

谢谢你的时间。

4

1 回答 1

0

g被定义为参数

param g, integer, > 0;

所以你不能用它作为索引名

param s{i in I, g in G};

要解决此问题,请重命名索引(或参数):

param s{i in I, gg in G};
于 2016-04-20T16:35:07.673 回答