proc optmodel; set Depot={'CDC','ID1','ID2'}; set IntermediateDepot={'ID1','ID2'}; set PointDelivery={'ConvStore','RetailStore','APS','HomeOffice'}; number Depot_Capacity{Depot}=[99999 20000 5000]; number Depot_Handling{Depot}=[0 1.35 1.60]; number ID_Transport{IntermediateDepot}=[2.4 2.45]; number ID_FixedCost{IntermediateDepot}=[1100 900]; number POD_Transport{Depot,PointDelivery}=[ 6.00 5.85 6.25 8.15 2.20 2.10 9999 9999 9999 9999 1.05 3.40 ]; number POD_DeliveryProcessing{PointDelivery}=[0.50 0 0.75 0]; number POD_Demand{PointDelivery}=[4500 15000 1000 3000]; var ID_Flow{IntermediateDepot} >= 0; var Use_ID{IntermediateDepot} binary; var POD_Flow{Depot,PointDelivery} >= 0; minimize TotalCost = /*Intermediate Depot Fixed Costs*/ sum{k in IntermediateDepot}(ID_FixedCost[k]*Use_ID[k]) + /*Transportation Cost to Intermediate Depot*/ sum{k in IntermediateDepot}(ID_Transport[k]*ID_Flow[k]) + /*Intermediate Depot Handling Cost*/ sum{i in Depot}(Depot_Handling[i]*sum{j in PointDelivery}(POD_Flow[i,j])) + /*Transportation Cost to Point of Delivery*/ sum{i in Depot}(sum{j in PointDelivery}(POD_Transport[i,j]*POD_Flow[i,j])) + /*Point of Delivery Processing Cost*/ sum{j in PointDelivery}(POD_DeliveryProcessing[j]*sum{i in Depot}(POD_Flow[i,j])) ; con Demand{j in PointDelivery}: sum{i in Depot}(POD_Flow[i,j])>=POD_Demand[j]; con Capacity{i in Depot}: sum{j in PointDelivery}(POD_Flow[i,j])<=Depot_Capacity[i]; con LinkingConstraint{k in IntermediateDepot}:sum{j in PointDelivery}POD_Flow[k,j]<=Use_ID[k]*23500; con BalanceFlow{k in IntermediateDepot}: sum{j in PointDelivery}(POD_Flow[k,j])=ID_Flow[k]; con Pmin: sum{k in IntermediateDepot}Use_ID[k]>=0; con Pmax: sum{k in IntermediateDepot}Use_ID[k]<=2; solve; print TotalCost ID_Flow Use_ID POD_Flow; quit;