MPL Model Library MPL Model Library EuingGas, Example 7, Winston { Exmpl9.2-7_EuingGas.mpl } { Winston, Operations Research, Applications and Algorithms, 4th ed. } { Chapter 9.2, Example 7, Piecewise Linear (MIP), Size: 5x6, Page 492 } TITLE EuingGas; INDEX gasoline := 1..2; gasoline2 := gasoline; level := 1..3; bpoint := 1..4; DATA Price[gasoline] := (12,14); CurrentAvail[gasoline] := (500,1000); MaxPurchase := 1500; PriceBreak[level] := (25,20,15); LowerBreakpoint[level] := ( 0,500,1000); UpperBreakpoint[bpoint] := (0, 500,1000,1500); !MinOilConstituent[ ExcessCostA[level] := FORMULA(LowerBreakpoint * (PriceBreak[level-1] - PriceBreak[level])); ExcessCost[level] := SUM(level=1..level: ExcessCostA); PurchaseCost[bpoint] := FORMULA(UpperBreakpoint * PriceBreak[level:=bpoint-1] + ExcessCost[level:=bpoint-1]); VARIABLES Purchase; PartPurchase[bpoint]; AmntOil[gasoline,gasoline2]; BINARY VARIABLES AssignPiecewise[level]; MODEL MAX Profit = SUM(gasoline,gasoline2: AmntOil * Price) - SUM(bpoint: PartPurchase * PurchaseCost); SUBJECT TO MaxOil1Usage[gasoline=1] -> OUSG: SUM(gasoline2: AmntOil) <= Purchase + CurrentAvail; MaxOil2Usage[gasoline=2] -> TUSG: SUM(gasoline2: AmntOil) <= CurrentAvail; Oil50Constituent[gasoline2=1] -> OCON: AmntOil[gasoline:=2] <= AmntOil[gasoline:=1]; Oil60Constituent[gasoline2=2] -> OCON: 0.6 * AmntOil[gasoline:=2] <= 0.4 * AmntOil[gasoline:=1]; PurchaseCalc -> PrC: Purchase = SUM(bpoint: UpperBreakpoint * PartPurchase); ! PurchasePriceCalc[level] -> PPC: ! PurchaseCost = PriceBreak * Purchase + ExcessCost; PiecewiseConA[bpoint] -> PCA: PartPurchase <= SUM(level: AssignPiecewise WHERE (level=bpoint) OR (level=bpoint-1)); AssignOneLevel -> AOL: SUM(level: AssignPiecewise) = 1; AssignOnebpoint -> AOBP: SUM(bpoint: PartPurchase) = 1; END Return to MPL Model Library