Euing Gas
{ 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
Back To Top
|
Maximal Home Page
|
List of Models |
Previous Page
|
Next Page