1

我遇到了一个问题,我没有找到任何解决方案来阅读集的 AMPL 文档。

我想建模的是,一个城市,比如 Kir,必须有来自另一个城市的例如 9 个交付,例如 Sto。但是,这些货物必须在某些特定的航站楼到达 Kir ,每个航站楼每天只开放一小段时间(大约 2 分钟)。源节点也必须如此。必须从特定终端指定来自 Sto 的路线(因此可以在结果中“遵循”路径)。

我已经开始对集合使用“在 K 中设置 V”操作进行建模,但这要求 V 必须是相同的集合,或者 K 的子集,其中 K 是表示“节点”的集合 - Kir、Sto 等on 和 V 是终端“Terminal1”、“Terminal2”等名称的集合。

我已经开始检查例如定义为例如“设置 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 个终端等)。我也不知道如何对约束进行建模。例如我之前的“一维”集:

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 对其进行建模。

问候,

4

1 回答 1

1

对此建模的一种方法是索引x并更改总和以包括终端:KH

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将遍历作为从 cityi到 city的路线端点的终端对j。注意ij在这里是固定的,因为它们是在约束索引中定义的{i in V, j in V}

于 2014-10-06T23:23:05.067 回答