【发布时间】:2018-10-03 20:25:23
【问题描述】:
我正在处理一个旅行推销员问题,但不知道如何解决它。问题包含十个工人,十个应该开车去的工作场所和一辆接一辆的汽车。每公里收费1.5美元。此外,所有节点(包括工人和工作场所)都位于 10*10 矩阵中,矩阵中每个块之间的距离为 1 公里。
该问题应使用 AMPL 解决。
我已经在 excel 中计算了每个坐标之间的距离,并将矩阵复制粘贴到 AMPL 中的 dat.file 中。
This is my mod.file so far (without the constrains):
param D > 0;
param D > 0;
set A = 1..W cross 1..D;
var x{A}; # 1 if the route goes from person p to work d,
# 0 otherwise
param cost;
param distance;
minimize Total_Cost:
sum {(w,d) in A} cost * x[w,d];
【问题讨论】:
-
x如何指定路由?它标识了哪些人去哪个工作场所,但不是按照什么顺序。您可能想要寻找更符合您要查找的内容的表示。
-
好点,我也忘了写 x 应该是二进制的,这是因为汽车不应该在同一条路线上行驶两次。问题还在于指定了所有路由,但没有指定它们之间的路由,所以我不知道我应该如何在 AMPL 中编写它。另外我知道解决方案只能在 AMPL 中解决,并且不需要计算与 excel 的距离,但我认为这可能更容易。需要很多帮助...
-
我不太清楚这里的问题。每个工人是否已经被分配到特定的工作,或者该分配是否是问题的一部分?汽车可以同时搭载多名工人,还是需要先将每个工人停在他们的工作场所,然后再接下一个?
-
每个工人都被分配到一个特定的工作,是的。有一辆汽车接走一名工人,然后将他送到他的工作场所,然后再接下一辆。我们现在已经设法找到了一条路线,但不知道如何消除 subtours。感谢您的回复!
标签: ampl