Optimization AMPL中的不可能推导上界

Optimization AMPL中的不可能推导上界,optimization,mathematical-optimization,ampl,Optimization,Mathematical Optimization,Ampl,我打算进行一个优化,在这个优化中,我希望最大化系统中的流量,使其受到一些时间约束和一些“必须满足这些路线”约束。第一个时间限制规定,每辆车不得超过24小时的工作负荷(以分钟表示)。第二个时间约束是次行程消除约束,该约束还规定,在车辆有时间行驶之前,不能激活“访问”节点处的开始时间等。约束3说明,K1和N1之间的道路必须使用不超过9次,使用任何车辆k。最后一个约束规定,来自特定节点的所有车辆必须在一天结束时返回 maximize maxamount: sum{i in V, j in V, k

我打算进行一个优化,在这个优化中,我希望最大化系统中的流量,使其受到一些时间约束和一些“必须满足这些路线”约束。第一个时间限制规定,每辆车不得超过24小时的工作负荷(以分钟表示)。第二个时间约束是次行程消除约束,该约束还规定,在车辆有时间行驶之前,不能激活“访问”节点处的开始时间等。约束3说明,K1和N1之间的道路必须使用不超过9次,使用任何车辆k。最后一个约束规定,来自特定节点的所有车辆必须在一天结束时返回

 maximize maxamount: sum{i in V, j in V, k in K} x[i,j,k];

 subject to TimeConstraint {k in K}: 
     sum{i in V, j in V} traveltime[i,j]*x[i,j,k] <= 1440; 

 subject to StartTime{i in V,j in V, k in K}:
     starttime[i] + servicetime[i] +traveltime[i,j] - 1300 * (1 - x[i,j,k]) <= starttime[j];

 subject to Constraint3:
     sum{k in K} x["K1","N1",k] <= 9;

 subject to EndNode{k in K}: 
     sum{i in V}x[i,"K1",k] - sum{j in V} x["K1",j,k]= 0;
最大化最大金额:和{i in V,j in V,k in k}x[i,j,k];
受时间约束{k in k}:
和{i in V,j in V}旅行时[i,j]*x[i,j,k]
当i=j时,i和j之间的旅行时间非常大(因此程序不会选择这些路线)

如果
traveltime[i,j]
=
M
(非常大),则
i=j的
StartTime
读取

servicetime[i] + M - 1300 * (1 - x[i,j,k]) <= 0     <=>
1300 * x[i,j,k] <= 1300 - servicetime[i] - M
输出:

set V :=
(1,2)    (2,3)    (3,4)    (4,5)    (5,6)    (6,7)    (7,8)    (8,9)    (9,10)
(1,3)    (2,4)    (3,5)    (4,6)    (5,7)    (6,8)    (7,9)    (8,10)   (10,1)
(1,4)    (2,5)    (3,6)    (4,7)    (5,8)    (6,9)    (7,10)   (9,1)    (10,2)
(1,5)    (2,6)    (3,7)    (4,8)    (5,9)    (6,10)   (8,1)    (9,2)    (10,3)
(1,6)    (2,7)    (3,8)    (4,9)    (5,10)   (7,1)    (8,2)    (9,3)    (10,4)
(1,7)    (2,8)    (3,9)    (4,10)   (6,1)    (7,2)    (8,3)    (9,4)    (10,5)
(1,8)    (2,9)    (3,10)   (5,1)    (6,2)    (7,3)    (8,4)    (9,5)    (10,6)
(1,9)    (2,10)   (4,1)    (5,2)    (6,3)    (7,4)    (8,5)    (9,6)    (10,7)
(1,10)   (3,1)    (4,2)    (5,3)    (6,4)    (7,5)    (8,6)    (9,7)    (10,8)
(2,1)    (3,2)    (4,3)    (5,4)    (6,5)    (7,6)    (8,7)    (9,8)    (10,9);
== 1 ==========================
将代码段更改为

set N = {'K1', 'K2','K3','K4'};
set V := {i in N, j in N: i != j};
display V
试一试。我得到:

set V :=
(K1,K2)   (K1,K4)   (K2,K3)   (K3,K1)   (K3,K4)   (K4,K2)
(K1,K3)   (K2,K1)   (K2,K4)   (K3,K2)   (K4,K1)   (K4,K3);
== 1 ==========================

我希望这有帮助

非常感谢您的投入!我一直在寻找如何定义X以避免使用I=j,使用的例子是,可以写集V:=1..n;在{i in V,j in V:i!=j}内设置A;然而,这给出了一个错误(关于“{”)。你知道一个人是否可以在另一件事中获得所需的吗?你是否声明了“n”作为参数?如果你用“=”改变“in”内的“in”,会发生什么?使用两个集合n:='K1','K2','K3','K4';集合V:={i in n,j in n:i!=j};集合V={i in n,j in n:i!=j};产生相同的错误,即编译器没有将{放在它所在的位置。奇怪的是,我发现该代码与前面链接中提供的代码没有任何区别。非常感谢您的帮助!不幸的是,即使使用了一系列不同的“:=”和“=”组合,它也无法工作在设置之前。非常奇怪,即使在从bat上复制您的代码片段时,我也会收到相同的错误。这不应该是因为我们使用相同的在线编辑器时也出现了一些更新。除了在线编辑器之外,我唯一使用的是Notepad++。我记得在我经常使用AMPL的那一天,有一些模糊的错误消息..Ju为了让它更清楚,我继续,把你的代码贴在底部窗口上,当我按下“发送”键时,我在上面的窗口上收到了输出。我可能可以在调试方面提供更多帮助,你可以发布更多的代码吗?这从原来的问题中选择了另一条路径,但是可以随意更新和扩展它(或者发布一个新的问题,添加一个新的标题)。
set V :=
(K1,K2)   (K1,K4)   (K2,K3)   (K3,K1)   (K3,K4)   (K4,K2)
(K1,K3)   (K2,K1)   (K2,K4)   (K3,K2)   (K4,K1)   (K4,K3);
== 1 ==========================