Search code examples
modelingtraveling-salesmanscip

Generalized Traveling Salesman Problem in zimpl


I am new to zimpl and I am currently trying to modell the GTSP. The setting is that we have nodes which are grouped into clusters. My problem is i dont know how to implement in zimpl which node belongs to which cluster.

What I did so far:

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);

I am guessing something is missing because i want to group node 1,2 in cluster 1, 3,4 in cluster 2 and 5,6 in cluster 3.

Maybe someone can help! thanks


Solution

  • If you want to read in the cluster-city correspondance from a file, there is an extensive section on how to achieve that in the ZIMPL user guide. I don't think it can read an arbitrary number of entries in a line, though. So I would instead convert the cluster-part of the GTSP instance file into a list of node-cluster assignments, i.e. (taking the example from 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
    

    I would first turn into

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

    Then you could read that in as:

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