【问题标题】:Generalized Traveling Salesman Problem in zimplzimpl 中的广义旅行商问题
【发布时间】:2021-08-27 08:06:33
【问题描述】:

我是 zimpl 新手,目前正在尝试为 GTSP 建模。设置是我们将节点分组为集群。 我的问题是我不知道如何在 zimpl 中实现哪个节点属于哪个集群。

到目前为止我做了什么:

set V:= {1..6}; set A:= {<i,j> in V*V with i < j};
set C:= {1,2,3};
set W:= {<p,q> in C*C with p < q};
set P[]:= powerset(C); set K:= indexset(P);

我猜有些东西丢失了,因为我想将节点 1,2 分组到集群 1 中,3,4 在集群 25,6 在集群 3 中。

也许有人可以帮忙! 谢谢

【问题讨论】:

  • 您好,我猜这不可能是全部代码。您可以发布您想使用 ZIMPL 建模的数学模型吗?我猜应该从一些数据文件中读取集群节点分配?

标签: modeling traveling-salesman scip


【解决方案1】:

您可以使用索引集(就像您实现C 的幂集一样)并根据需要分配集。试试这个例子:

set Clusters[C]:= <1> {1,2}, <2> {3,4}, <3> {5,6};

使用以下行检查您的输入是否正确:

do forall <p> in C do print Clusters[p];

这将打印出来

List: |1|{<1>,<2>}
List: |1|{<3>,<4>}
List: |1|{<5>,<6>}

到控制台。

【讨论】:

    【解决方案2】:

    如果您想从文件中读取集群城市对应关系,ZIMPL user guide 中有一个关于如何实现该目标的详细部分。 不过,我认为它不能在一行中读取任意数量的条目。 因此,我会将 GTSP 实例文件的集群部分转换为节点集群分配列表,即(以here 为例):

    GTSP_SET_SECTION:
    1 4 5 -1
    2 1 2 3 10 11 12 13 14 -1
    3 8 9 17 -1
    4 6 7 15 16 -1
    

    我会先变成

    1 4
    1 5
    2 1
    2 2
    2 3
    2 10
    ...
    

    然后您可以将其读为:

    members[C] := read "cluster.txt" as "<1n> 2n";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      • 2021-07-09
      • 2018-03-26
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多