#################### Simultaneous Escape Routing Problem ########################## Date: 16 March 2015 ################################### # MODEL 1 LOCAL ROUTING: #Sets: set Rows; set Columns; set Points within Rows cross Columns; set Boundarypoints within Points; set Connectingpoints within Points; set SD within Points; set Localflows within SD; set LFandBP within Points; set Destination {Localflows} within Points; set Pointsneighbors {Connectingpoints} within Points; set Boundarypointsneighbors {Boundarypoints} within Points; #Decision Variable: var X{SD,Points} binary; #Objective function: minimize connectingpoints: sum{(i,j) in SD}(sum{(l,m) in Points} X[i,j,l,m]); #Constraint 1:This constraint will ensure selection of #source. subject to source_select{(i,j) in Localflows}: X[i,j,i,j]=1; #Constraint 2:This constraint will ensure selection of #source neighbor. subject to source_neighbor{(i,j) in Localflows}: sum{(l,m) in Pointsneighbors[i,j]} X[i,j,l,m]=1; #Constraint 3:This constraint will ensure continuation. subject to Continuity{(i,j) in Localflows, (l,m) in Connectingpoints diff Localflows}: 2 * X[i,j,l,m] <= sum{(a,b) in Pointsneighbors[l,m]} X[i,j,a,b]; #Constraint 4:This constraint will ensure that flow received at #dest through one point. subject to UniPathDest{(i,j) in Localflows}:sum{(l,m) in Boundarypoints} X[i,j,l,m]=1; #Constraints for 2nd point: #Constraint 5:This constraint will ensure selection of #source. subject to source_select_1{(i,j) in Localflows,(a,b) in Destination[i,j]}: X[a,b,a,b]=1; #Constraint 6:This constraint will ensure selection of #source neighbor. subject to source_neighbor_1{(i,j) in Localflows,(a,b) in Destination [i,j]}:sum{(l,m) in Pointsneighbors[a,b]} X[a,b,l,m]=1; #Constraint 7:This constraint will ensure continuation. subject to Continuity_1{(c,d) in Localflows,(i,j) in Destination [c,d], (l,m) in Connectingpoints diff Destination[c,d]}: 2 * X[i,j,l,m] <= sum{(a,b) in Pointsneighbors[l,m]} X[i,j,a,b]; #Constraint 8:This constraint will ensure that flow #received at dest through one point. subject to UniPathDest1{(i,j) in Localflows, (a,b) in Destination[i,j]}:sum{(l,m) in Boundarypoints} X[a,b,l,m]=1; #constraint 9: dual selection prohibitation. subject to Dual1{(a,b) in Connectingpoints}:sum{(i,j) in SD} X[i,j,a,b]<=1; #Constraint 10: prohibits loop. subject to loop{(a,b) in Localflows,(l,m) in Connectingpoints }:sum{(c,d) in Pointsneighbors[l,m]} (X[a,b,c,d])<=2; ####Model 2: ###Global Routing #parameters: param startx {Localflows} default 0.0; param starty {Localflows} default 0.0; param endx {Localflows} default 0.0; param endy {Localflows} default 0.0; #Decision Variable: var Y{Localflows,Boundarypoints} binary; #Objective function: maximize flow: sum{(i,j) in Localflows}(sum{(c,d) in Boundarypointsneighbors[startx[i,j],starty[i,j]]} Y[i,j,c,d]); #constraints: #Constraint 1: source selection. subject to source_select_2{(a,b) in Localflows}: Y[a,b,startx[a,b],starty[a,b]]=1; #Constraint 2: source neighbor selection. subject to source_neighbor_2{(a,b) in Localflows}: sum{(c,d) in Boundarypointsneighbors[startx[a,b],starty[a,b]]} (Y[a,b,c,d])<= 1; #Constraint 3: Continuity. subject to connectedge_2{(a,b) in Localflows, (l,m) in Boundarypoints diff {(startx[a,b],starty[a,b])} diff {(endx[a,b],endy[a,b])}}: 2 * Y[a,b,l,m] <= sum{(c,d) in Boundarypointsneighbors[l,m]} Y[a,b,c,d]; #Constraint 4: Continuity2 subject to checking{(a,b) in Localflows, (l,m) in Boundarypoints }:sum{(c,d) in Boundarypointsneighbors[l,m]} (Y[a,b,c,d])<=2; #Constraint 5: Destination selection. subject to dest_select {(a,b) in Localflows}: Y[a,b,endx [a,b],endy[a,b]]<=1; #Constarint 6: destination neighbor selection. subject to Edge_dest{(a,b) in Localflows}:sum{(c,d) in Boundarypointsneighbors[endx[a,b],endy[a,b]]} (Y[a,b,c,d])=1; #constraint 7: dual selection prohibitation. subject to Dual_2{(a,b) in Boundarypoints}:sum{(i,j) in Localflows} Y[i,j,a,b]<=1;