Thanks ROb. I added the set {PTCD} to my other two general constraints. I have not changed anything on the specific constraints that I will layer once the skeleton of the problem is built. Here is my code for the toy model. When I ran this, it said "the best solution does not satisfy feasibility tolerance" and so the solution status said "failed". cas; caslib _all_ ASsign; proc optmodel; set<str> Ports=/'sea' 'air'/; set<str> DC=/'A1' 'U1'/; set<str> LSP=/'M' 'O' 'C'/; set <str> Transit=/'W','E','G'/; num Containers {Ports,DC}= [2000,3000,1000,4000]; print containers; var Is_LSP {LSP} binary; var IsLSPDC {LSP,DC} binary; var IsPortsLSPDC {Ports,LSP,DC} binary; var IsPortsTransitLSPDC {Ports,Transit,LSP,DC} binary; /* declare Constants*/ num Min_Qty_LSP=2000; /*RATES*/ num InboundLinehaul {Ports,Transit,LSP,DC}= [40,10,30,5,20,10, 20,6,30,7,3,5, 2,6,2,60,18,4, 32,70,2,30,18,40, 19,10,2,29,3,9, 42,36,79,10,5,14 ]; set PTCD = {p in Ports,t in Transit, c in LSP,d in DC : Inboundlinehaul[p,t,c,d] <=40}; var Assign {PTCD} binary; /* DECISON VARIABLE */ var ContainersfromPortstoLSPtoDC {Ports,Transit,LSP,DC}>=0; /* IMPLIED VARIABLE */ impvar Inbound_Linehaul_Costs= sum {p in Ports, t in Transit,c in LSP, d in DC} InboundLinehaul [p,t,c,d] *ContainersfromPortstoLSPtoDC [p,t,c,d]; impvar ContainersatLSP{c in LSP}=sum{p in Ports,t in Transit,d in DC} ContainersfromPortstoLSPtoDC [p,t,c,d]; impvar ContainersatTransitLSP{t in Transit, c in LSP}=sum{p in Ports,d in DC} ContainersfromPortstoLSPtoDC [p,t,c,d]; /* declare Objective Function*/ Min TotalCost = Inbound_Linehaul_Costs; /* GENERAL CONSTRAINTS */ con Min_Qty_at_LSP_is_Respected {c in LSP}: sum{<p,t,(c),d> in PTCD} ContainersfromPortstoLSPtoDC[p,t,c,d]*Assign[p,t,c,d] >= Min_Qty_LSP*Is_LSP[c]; con ModelOutput_Same_As_ModelInput {p in Ports, d in DC}: sum {<(p),t,c,(d)> in PTCD} ContainersfromPortstoLSPtoDC[p,t,c, d]*Assign[p,t,c,d] = Containers [p,d]; con CheckLSP {c in LSP}: Sum{<p,t,(c),d> in PTCD} ContainersatLSP[c]*Assign[p,t,c,d] <= 10000*Is_LSP[c]; /*con UseProperRates {p in ports, t in transit, c in LSP, d in DC: InboundLinehaul [p,t,c,d] >=40}: IsPortsTransitLSPDC[p,t,c,d] = 0;*/ /*SPECIFIC CONSTRAINTS - You can comment / uncomment based on what you want */ /*Constraint for retricting LSP-DC: given LSP can go to only "x" number of DC */ num MAEU_DCs=1; **con LSP_DC: sum{d in DC} IsLSPDC['ONEY',d] = MAEU_DCs; **con LSP_DC_Link{p in Ports, t in Transit,c in LSP, d in DC}: ContainersfromPortstoLSPtoDC[p,t,c,d] <= 10000 * IsLSPDC[c,d]; /*Constraint for retricting Ports-LSP-DC: given Ports-DC combo can be served by only 1 LSP */ num NumberofLSPsPerPorts_DC=1; **con OneLSPPerLane {p in Ports,d in DC}: sum{c in LSP} IsPortsLSPDC[p,c,d] = NumberofLSPsPerPorts_DC; **con Ports_LSP_DC_Link{p in Ports,c in LSP, t in Transit,d in DC}: ContainersfromPortstoLSPtoDC[p,t,c,d] <= 10000 * IsPortsLSPDC[p,c,d]; /* Have These Many LSPs open*/ num NumberofLSPsopen=2; **con HaveAtleastTheseManyLSPopen: Sum{c in LSP} Is_LSP [c]=NumberofLSPsopen; /* Forcing the demand via a given LSP and a DC Combo*/ num O_FU1=0.1*10000; **con Allocation_ONEY_FU1:sum{p in Ports, t in Transit} ContainersfromPortstoLSPtoDC[p,t,'ONEY','FU1']=ONEY_FU1; /* Forcing the demand via a given Transit Route */ NUM A_W=0.4*10000; **con Allocation_W{t in Transit}:sum {p in Ports,c in LSP,d in DC} ContainersfromPortstoLSPtoDC[p,'W',c,d]=Alloc_W; /* Forcing a Maximum at a given LSP*/ **num Max_Qty_LSP=10; **con MaxatLSP {c in LSP}: ContainersatLSP[c] <=Max_Qty_LSP*Is_LSP[c]; expand; solve with lso;
... View more