The company Coco has two plants that can produce two types of cocoa powder. The first factory has a total capacity of 400 tons per month and the second of 500 tons per month. The marketing department has provided estimations for the maximum amount of every product that may be sold in each of the next four months, and also the expected sales prices. Several raw materials are used in the production with known raw material requirements per ton of finished products. Finished products and raw material may be stored at the factories from one tim period to the next, incurring a given cost per ton and per time period. The raw material storage capacity at the factories is limited to 300 tons. How should the two plants be operated during the planning period to maximize the total profit?
Original model
Let PRODS be the set of finished products, FACT the set of factories, RAW the set of raw materials, and TIMES={1,...,NT} the set of time periods under consideration.
We define decision variables makepft representing the quantity of product p made at factory f during time period t. Furthermore, to model the transition from one time period to the next and to account for the different types of cost incurred, we need several other sets of variables: sellpft, the amount of product p sold at factory f in period t; buyrft the amount of raw material r bought at f in t; and finally pstockpft and rstockrft (both defined for t=1,...,NT+1) respectively the amount of product and raw material held in stock at factory f at the beginning of period t.
Let further MXSELLpt be the maximum sales quantity of product p in period t, MXMAKEf the capacity limit of factory f, and MXRSTOCK the raw material storage capacity.
Let IPSTOCKpf be the quantity of product p initially held in stock at factory f and IRSTOCKrf the initial stock level of raw material r. We denote by CPSTOCK and CRSTOCK respectively the unit cost for storing finished product and raw material.
The objective function of maximizing the total profit is to maximize the sales revenues (REVp), minus the cost of production (CMAKEpf), buying raw material (CBUYrt), and storing finished products and raw material.
maximize
REVpt · sellpft
-
CMAKEpf · makepft -
CBUYrt · buyrft
-
CPSTOCK · pstockpft -
CRSTOCK · rstockrft
The possibility to store products between time periods gives rise to three sets of constraints: the inventory balance constraints for finished products (PBalpft) and for raw material (RBalrft), and the limit on the raw material storage capacity (MxRStockft). The stock pstockp,f,t+1 of product p at the beginning of t+1 is given by the stock at the beginning of t plus the production in t reduced by the amount sold on t. The stock rstockr,f,t+1 of raw material r at the beginning of t+1 is given by the corresponding stock at the beginning of t plus the amount bought in t reduced by the quantity used in production during t.
∀ p ∈ PRODS, ∀ f ∈ FACT, ∀ t ∈ TIME: PBalpft:= pstockp,f,t+1 = pstockpft + makepft - sellpft
∀ r ∈ RAW, ∀ f ∈ FACT, ∀ t ∈ TIME:
RBalrft:= rstockr,f,t+1 = rstockrft + buyrft -
REQpr · makepft
∀ f ∈ FACT, ∀ t ∈ {2,...,NT+1}: MxRStockft:=
rstockrft ≤ MXRSTOCK
We further have two sets of capacity constraints: the production capacity of the factories is limited (constraints MxMakeft) and we can only sell up to a given maximum amount of finished products per time period (constraints MxSellft).
Below the complete mathematical model is given. The initial stock levels (t=1) of finished products and raw material are fixed to the given values.
maximize
REVpt · sellpft
-
CMAKEpf · makepft -
CBUYrt · buyrft
-
CPSTOCK · pstockpft -
CRSTOCK · rstockrft
∀ p ∈ PRODS, ∀ f ∈ FACT, ∀ t ∈ TIME: PBalpft:= pstockp,f,t+1 = pstockpft + makepft - sellpft
∀ r ∈ RAW, ∀ f ∈ FACT, ∀ t ∈ TIME:
RBalrft:= rstockr,f,t+1 = rstockrft + buyrft -
REQpr · makepft
∀ p ∈ PRODS, ∀ t ∈ TIME: MxSellpt:=
sellpft ≤ MXSELLp
∀ f ∈ FACT, ∀ t ∈ TIME: MxMakeft:=
makepft ≤ MXMAKEf
∀ f ∈ FACT, ∀ t ∈ {2,...,NT+1}: MxRStockft:=
rstockrft ≤ MXRSTOCK
∀ p ∈ PRODS, ∀ f ∈ FACT: pstockpf1 = IPSTOCKpf
∀ r ∈ RAW, ∀ f ∈ FACT: rstockrf1 = IRSTOCKrf
∀ p ∈ PRODS, ∀ f ∈ FACT, ∀ t ∈ TIME: makepft≥ 0, sellpft≥ 0
∀ r ∈ RAW, ∀ f ∈ FACT, ∀ t ∈ TIME: buyrft ≥ 0
∀ p ∈ PRODS, ∀ f ∈ FACT, ∀ t ∈ {1,...,NT+1}: pstockpft ≥ 0
∀ r ∈ RAW, ∀ f ∈ FACT, ∀ t ∈ {1,...,NT+1}: rstockrft ≥ 0
Problem decomposition
We now decompose the problem described above according to production locations. Notice that this is not the only way of decomposing this problem: we may just as well choose a decomposition by products or by time periods. However, both of these choices result in a larger number of global constraints than the decomposition by factories, meaning that the master problem may become more difficult to solve.
For every factory f we obtain the following subproblem (including the sales limit constraints MxSell in the form of bounds in the submodels is not required, but may lead to better, that is, more exact or faster solutions).
maximize
REVpt · sellpt
-
CMAKEp · makept -
CBUYrt · buyrt
-
CPSTOCK · pstockpt -
CRSTOCK · rstockrt
∀ p ∈ PRODS, ∀ t ∈ TIME: PBalpt:= pstockp,t+1 = pstockpt + makept - sellpt
∀ r ∈ RAW, ∀ t ∈ TIME: RBalrt:= rstockr,t+1 = rstockrt + buyrt -
REQpr · makept
∀ t ∈ TIME: MxMaket:=
makept ≤ MXMAKE
∀ t ∈ {2,...,NT+1}: MxRStockt:=
rstockrt ≤ MXRSTOCK
∀ p ∈ PRODS, ∀ t ∈ TIME: MxSellpt:= sellpt ≤ MXSELLp
∀ p ∈ PRODS: pstockp1 = IPSTOCKp
∀ r ∈ RAW: rstockr1 = IRSTOCKr
∀ p ∈ PRODS, ∀ t ∈ TIME: makept≥ 0, sellpt≥ 0
∀ r ∈ RAW, ∀ t ∈ TIME: buyrt ≥ 0
∀ p ∈ PRODS, ∀ t ∈ {1,...,NT+1}: pstockpt ≥ 0
∀ r ∈ RAW, ∀ t ∈ {1,...,NT+1}: rstockrt ≥ 0
The master problem only contains a single set of global constraints, namely the sales limit constraints MxSell (for clarity's sake, the non-negativity constraints are left out here).
maximize
REVpt · sellpft
-
CMAKEpf · makepft -
CBUYrt · buyrft
-
CPSTOCK · pstockpft -
CRSTOCK · rstockrft
∀ p ∈ PRODS, ∀ t ∈ TIME: MxSellpt:=
sellpft ≤ MXSELLp
In the decomposition algorithm, the decision variables in the master problem are expressed via the solutions (proposals) generated by the subproblems, such as
∀ p ∈ PRODS, ∀ f ∈ FACT, ∀ t ∈ TIME: sellpft =
Prop_sellpftk·weightfk
where Prop_sellpftk stands for the solution value of variable sellpt in the kth proposal generated by subproblem f and Prop_costfk is the objective value this proposal. For every subproblem f we need to add a convexity constraint Convexf on the weightfk variables.
maximize
Prop_costfk·weightfk
∀ p ∈ PRODS, ∀ t ∈ TIME: MxSellpt:=
Prop_sellpftk·weightfk ≤ MXSELLp
∀ f ∈ FACT: Convexf:=
weightfk = 1
∀ f ∈ FACT, ∀ k ∈ 1,...,nPROPf: weightfk≥ 0
We shall refer to this problem as the modified master problem. Without going any further into technical detail we simply remark that a correspondence exists between the solution of the original problem and those of the modified master problem.