Replacing one arc with two new ones, depending on the old one

Dear all,

I am working on a shortest path algorithm. Similar to the Clarke&Wright savings algorithm. I want to run it in GAMS but got stuck at one point. The code already finds the “cheapest” customer to insert. I somehow can’t get GAMS to insert the customer between two existing customers. I tried to reproduce the interesting part of the code here.
The set “newarcs” consists of the initial routes from a Depot to the first customer and back. Let’s say the algorithm identified the optimal position for customer two to be between the Depot and customer one (oldarc).

Arc 0.1 needs to be removed → newarcs(oldarc) = no;
Then two new arcs are needed: 0.2 from Depot to newcustomer and 2.1 from customer 2 to 1 in order to close the gap. I wrote that explicitly in the code here, but need to find a way to implement that in a general way.
Something like: “If Oldroute is 0.1, then take first element of that route an add new customer and build a route from newcustomer to the second element of oldroute”
I tried option and various $-conditionals but none had the right effect here.

Advice for how to solve this would be greatly appreciated,

bestregards,

Isidor


Sets

node / 0, 1, 2, 3, 4 /
newcustomer(node) ;

alias (node,anode) ;

newcustomer(“2”) = yes;

set

allarcs(node,anode)
newarcs(node,anode);

singleton set oldarc(node,anode) ;

allarcs(node,anode)$(not sameas(node,anode)) = yes;
newarcs(“0”,“1”) = yes; newarcs(“1”,“0”) = yes;
oldarc(“0”,“1”) = yes;


newarcs(oldarc) = no;

newarcs(“0”,newcustomer) = yes;
newarcs(newcustomer,“1”) = yes;



display node, anode, test, allarcs, oldarc, newarcs


\

To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at http://groups.google.com/group/gamsworld.
For more options, visit https://groups.google.com/d/optout.

As a little update:

I did find a $libinclude utility that could help me with finding a solution. ($libinclude cdomain).
I am however not able to execute it, as it is not in my directory and the links on the page http://www.mpsge.org/domain/ don’t seem to be working on my notebook.
Anyone familiar with the routine? And also I do not fully understand how to include a $libinclude in a loop. I do not really understand the instructions given in the user’s guide.

bestregards!

Am Donnerstag, 9. Juli 2015 16:28:29 UTC+2 schrieb Isidor Frimp:

Dear all,

I am working on a shortest path algorithm. Similar to the Clarke&Wright savings algorithm. I want to run it in GAMS but got stuck at one point. The code already finds the “cheapest” customer to insert. I somehow can’t get GAMS to insert the customer between two existing customers. I tried to reproduce the interesting part of the code here.
The set “newarcs” consists of the initial routes from a Depot to the first customer and back. Let’s say the algorithm identified the optimal position for customer two to be between the Depot and customer one (oldarc).

Arc 0.1 needs to be removed → newarcs(oldarc) = no;
Then two new arcs are needed: 0.2 from Depot to newcustomer and 2.1 from customer 2 to 1 in order to close the gap. I wrote that explicitly in the code here, but need to find a way to implement that in a general way.
Something like: “If Oldroute is 0.1, then take first element of that route an add new customer and build a route from newcustomer to the second element of oldroute”
I tried option and various $-conditionals but none had the right effect here.

Advice for how to solve this would be greatly appreciated,

bestregards,

Isidor


Sets

node / 0, 1, 2, 3, 4 /
newcustomer(node) ;

alias (node,anode) ;

newcustomer(“2”) = yes;

set

allarcs(node,anode)
newarcs(node,anode);

singleton set oldarc(node,anode) ;

allarcs(node,anode)$(not sameas(node,anode)) = yes;
newarcs(“0”,“1”) = yes; newarcs(“1”,“0”) = yes;
oldarc(“0”,“1”) = yes;


newarcs(oldarc) = no;

newarcs(“0”,newcustomer) = yes;
newarcs(newcustomer,“1”) = yes;



display node, anode, test, allarcs, oldarc, newarcs


\

To unsubscribe from this group and stop receiving emails from it, send an email to gamsworld+unsubscribe@googlegroups.com.
To post to this group, send email to gamsworld@googlegroups.com.
Visit this group at http://groups.google.com/group/gamsworld.
For more options, visit https://groups.google.com/d/optout.