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