proc optmodel; set CollectionPoint={'CP1','CP2','CP3'}; set OriginFacility={'CP1','CP2','CP3','RSSD'}; set DestinationFacility={'RSSD','RF1','RF2'}; number Supply{CollectionPoint}=[2000 1500 2500]; number Capacity{DestinationFacility}=[6000 3500 3000]; number FixedCost{DestinationFacility}=[700 1500 1300]; number VariableCost{DestinationFacility}=[5.4 74.8 83.6]; number TransportCost{OriginFacility,DestinationFacility}=[ 28.4 66.4 56.2 26.1 62.4 46.2 23.8 73.9 53.6 9999 17.6 19.2 ]; var Flow{OriginFacility,DestinationFacility} >= 0; var OpenFacility{DestinationFacility} binary; minimize TotalCost = /*Facilities Fixed Costs*/ sum{j in DestinationFacility}(FixedCost[j]*OpenFacility[j]) + /*Facilities Variable Costs*/ sum{j in DestinationFacility}(VariableCost[j]*sum{k in OriginFacility}(Flow[k,j])) + /*Transportation Costs*/ sum{k in OriginFacility}(sum{j in DestinationFacility}(TransportCost[k,j]*Flow[k,j])) ; con SupplyConst{i in CollectionPoint}: sum{j in DestinationFacility}(Flow[i,j])=Supply[i]; con CapacityConst{j in DestinationFacility}: sum{k in OriginFacility}(Flow[k,j])<=Capacity[j]; con LinkingConst{j in DestinationFacility}:sum{k in OriginFacility}(Flow[k,j])-OpenFacility[j]*6000<=0; con BalanceFlow: sum{j in DestinationFacility}(Flow['RSSD',j])-sum{k in OriginFacility}(Flow[k,'RSSD'])=0; con Pmin: OpenFacility['RF1']+OpenFacility['RF2']>=1; con Pmax: OpenFacility['RF1']+OpenFacility['RF2']<=2; solve; print TotalCost OpenFacility Flow; quit;