| |||||||||||||||||||||||||||||||||||||
Introductory examples Description
Further explanation of this example: 'Applications of optimization with Xpress-MP', Introductory examples (Chapters 1 to 5) of the book 'Applications of optimization with Xpress-MP'
Source Files By clicking on a file name, a preview is opened at the bottom of this page. Data Files pricebrinc3.mos (!****************************************************** Mosel Example Problems ====================== file pricebrinc3.mos ```````````````````` Incremental pricebreaks formulated with piecewise linear expressions This model represents the situation where we buy a certain number of items and we get discounts incrementally. The unit cost for items between 0 and B1 is C1, whereas items between B1 and B2 cost C2 each, and items between B2 and B3 cost C3 each. We model the incremental price breaks via 'pwlin' expressions. Three different versions can be used for representing this particular case of a continuous cost function. This general constraint is handled directly by the MIP solver although the constraint formulation requires the nonlinear module 'mmxnlp'. (c) 2021 Fair Isaac Corporation author: S. Heipcke, July 2021 *******************************************************!) model "Incremental pricebreaks (pwlin)" uses "mmxnlp" declarations NB = 3 ! Number of price bands BREAKS = 0..NB COST: array(1..NB) of real ! Cost per unit within price bands x: mpvar ! Total quantity bought B,CBP: array(BREAKS) of real ! Break points, cost break points end-declarations DEM:= 150 ! Demand B:: [0, 50, 120, 200] COST:: [0.8, 0.5, 0.3] CBP(0):= 0 forall(i in 1..NB) CBP(i):= CBP(i-1) + COST(i) * (B(i)-B(i-1)) ! Objective: total price (uncomment one of the three following options) ! 1- Specification as a list of slopes with associated intervals: ! (only points of slope changes are specified, the start value is 0): !TotalCost:= pwlin(x, union(i in 1..2) [B(i)], union(i in 1..3) [COST(i)]) ! 2- Specification as a list of piecewise linear segments (pws) with associated intervals: TotalCost:= pwlin(union(i in 1..3) [pws(B(i-1), CBP(i-1)+COST(i)*(x-B(i-1)))]) ! 3- Specification as a list of points: !TotalCost:= pwlin(x, union(i in 0..3) [B(i), CBP(i)]) ! Meet the demand x = DEM ! Solve the problem minimize(TotalCost) ! Solution printing writeln("Objective: ", getobjval, " (avg price per unit: ", getobjval/DEM, ")") forall(i in 1..NB) writeln("Interval ", i, ": ", minlist(B(i)-B(i-1),x.sol-B(i-1)), " (price per unit: ", COST(i), ")") end-model | |||||||||||||||||||||||||||||||||||||
© Copyright 2023 Fair Isaac Corporation. |