【问题标题】:AMPL: Model terminals within a destination cityAMPL:目的地城市内的模型终端
【发布时间】:2014-10-06 06:30:41
【问题描述】:

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

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

我已经开始对集合使用“在 K 中设置 V”操作进行建模,但这要求 V 必须是相同的集合,或者是 K 的子集,其中 K 是表示“节点”的集合 - Kir, Sto 等,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 对其进行建模。

问候,

【问题讨论】:

    标签: ampl neos-server


    【解决方案1】:

    对此建模的一种方法是在KH 上对x 进行索引,并将总和更改为包括终端:

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

    【讨论】:

    • 昨晚我一直在思考这个问题,想知道关于 4 维集合 K 的实现,我知道它有一些不足之处。它将以某种方式禁止程序寻找“新”解决方案,即终端路线的新组合等,因为它是预先定义的解决方案。嗯……好吧,想想看,我想这是如何指定数据的问题。肯定会尝试使我的代码适应这个答案!非常感谢您的回答!
    猜你喜欢
    • 1970-01-01
    • 2011-10-12
    • 2020-05-14
    • 2017-06-29
    • 2012-03-29
    • 2016-08-15
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多