我遇到了一个问题,我没有找到任何解决方案来阅读集合的AMPL文档。
我想要建模的是,一个城市,例如Kir,必须有来自另一个城市的9个交付,例如Sto。但是,这些交付必须在某些特定终端到达Kir,每个终端每天只开放少量时间(约2分钟)。原点节点必须如此。必须从特定终端指定来自Sto的路线(因此路径可以是"在结果中跟随")。
我已经开始使用"在K"中设置V来建模。集合的操作,但要求V必须是相同的集合,或K的子集,其中K是表示节点的集合" - Kir,Sto等等,V是终端名称的集合"终端1","终端2"等。
我已经开始检查实例"设置K维4"例如:
set K dimension 4;
data;
set K:=
Sto Kir Terminal1 Terminal2
Bod Kir Terminal3 Terminal2;
其中集合K表示来自哪个城市(例如Sto)应该驱动交付(例如Kir),其中Sto中的离开终端是Terminal1并且Kir中的交付终端是Terminal2。这具有必须手动指定大量组合(在Kir单独存在大约22个终端等)的缺点。我也不知道如何对约束进行建模。例如" one dimension"我以前有过:
subject to yvar{i in V, j in V}:
sum{k in H} x[i,j,k] <= maxVisits[i,j];
其中V是单独的城市集合,H是车辆集合,maxVisits表示从城市i到城市j的最大交付量,如果使用车辆k从i到j进行交付,则x为1。我不明白如何使用四维集K来建模。
此致
答案 0 :(得分:1)
对此进行建模的一种方法是将x
编入K
和H
,并将总和更改为包含终端:
var x{K, H} binary;
subject to yvar{i in V, j in V}:
sum{(i,j,t,u) in K, k in H} x[i,j,t,u,k] <= maxVisits[i,j];
求和中的索引(i,j,t,u) in K
将迭代成对的终端,这些终端是从城市i
到城市j
的路线的终点。请注意,i
和j
在此处已修复,因为它们是在约束索引{i in V, j in V}
中定义的。