# Homework 5 solution

```Math 4630/5630
Homework 5 Solutions
Problem 1. Solving Inventory Problems by Dynamic Programming.
Recall the inventory considered in the class. Here is a modified version of it.
• A company is producing airplanes
• 4 production periods
• No inventory at the beginning
• Can produce at most 3 airplanes in each period
• Can keep at most 2 airplanes in inventory
• Set-up cost for each period is 3
• The cost of keeping 1 unit in inventory for one period of time is 1
• The production costs and demands for each period of time are given in the following
table:
Period
1
2
3
4
Demand
1
1
2
1
Unit cost
3
4
5
4
Determine a production schedule to minimize the total cost while satisfying the
demand. You need to draw a dynamic programming network and show your
calculations of optimal policies. Give all the optimal solutions if there are multiple
optimal solutions.
Solution
# f(n,s) represents the minimum cost starting from state s of period n
f :=
1 0 29
# at state 0 (no inventory) of stage 1 the minimum cost is 29
2 0 24
2 1 20
2 2 17
3 0 19
3 1 15
32 9
40
41
50
;
7
1
0
# The set of optimal decisions at each state
set opt[1,0] := 2 3;
# at the original state, zero inventory at the beginning of period 1, there are two
optimal decisions, produce 2 or produce 3
set opt[2,0] := 3;
set opt[2,1] := 0;
set opt[2,2] := 0;
set opt[3,0] := 3;
set opt[3,1] := 2;
set opt[3,2] := 0;
set opt[4,0] := 1;
set opt[4,1] := 0;
There are two optimal solutions:
1) x1 = 3, x2 = 0, x3 = 2, x4 =0 with total cost 29
2) x1 = 2, x2 = 0, x3 = 3, x4 =0 with total cost 29
Here is the full AMPL model which includes the recursive formula for computing f(n,s).
param start; # first year of demand
param end; # last year of demand
param demand {n in start..end};
param invLimit;
param prodLimit;
param unitCost {n in start..end};
param setupCost;
param invCost;
param cost{n in start..end, i in 0..prodLimit}:=
if i=0 then 0 else (setupCost + i * unitCost[n]);
# cost of producing i units in period n
set options{n in start..end, s in 0..invLimit}:=
{i in 0..prodLimit: i+s &gt;= demand[n]
and i+s-demand[n] &lt;= invLimit};
# set of allowed production levels
param f{n in start..end+1, s in 0..invLimit}:=
if n = end + 1 then 0 else
min{i in options[n,s]} (cost[n,i] + s*invCost + f[n+1, s+i-demand[n]]);
set opt{n in start..end, s in 0..invLimit}:=
{ i in options[n,s]:
f[n,s] = cost[n,i] + s*invCost + f[n+1, s+i-demand[n]] };
data;
param start:= 1;
param end:= 4;
param demand:=
11
21
32
4 1;
param invLimit:= 2;
param prodLimit:= 3;
param unitCost:=
13
24
35
4 4;
param setupCost:= 3;
param invCost:= 1;
Problem 2. Solving Resource Allocation Problems by Dynamic Programming.
A company is planning its advertising strategy for next year for its three major products.
Since the three products are quite different, each advertising effort will focus on a single
product. In units of millions of dollars, a total of 6 is available for advertising next year,
where the advertising expenditure for each product must be an integer greater than or
equal to 1. The vice-president for marketing has established the objective: Determine
how much to spend on each product in order to maximize total sales. The following table
gives the estimated increase in sales (in appropriate units) for the different advertising
expenditures:
Product
expenditure
1
2
3
1
7
4
6
2
10
8
9
3
14
11
13
4
17
14
15
Use dynamic programming to solve this problem. You need to draw a dynamic
programming network and show your calculations of optimal policies. Give all the
optimal solutions if there are multiple optimal solutions.
Solution
# f(n,s) represents the maximum sales amount starting from state s of period n
f :=
1 6 28
2 2 10
2 3 14
2 4 17
2 5 21
31 6
32 9
3 3 13
3 4 15
;
# The set of optimal decisions at each state
set opt[1,6] := 1 3;
set opt[2,2] := 1;
set opt[2,3] := 2;
set opt[2,4] := 1 2 3;
set opt[2,5] := 2;
set opt[3,1] := 1;
set opt[3,2] := 2;
set opt[3,3] := 3;
set opt[3,4] := 4;
There are two optimal solutions:
1) x1 = 1, x2 = 2, x3 = 3 with total sales 28
2) x1 = 3, x2 = 2, x3 = 1 with total sales 28
Here is the full AMPL model which includes the recursive formula for computing f(n,s).
set products;
param totalamount:= 6;
set amounts;
param sales {n in products, i in amounts};
set states{n in products}:=
if n=1 then 6
else 6-(n-1)-3 .. 6-(n-1);
set options{n in products, d in states[n]}:=
if n=3 then d else 1..min( 4, d+n-3 );
param f{n in products, d in states[n]}:=
if n=3 then sales[n,d] else
max{i in options[n,d]} (sales[n,i]+ f[n+1,d-i]) ;
set opt{n in products, d in states[n]: n!=3}:=
{ i in options[n,d]:
f[n,d] = sales[n,i]+ f[n+1,d-i] };
data;
set products:= 1 2 3;
set amounts:= 1 2 3 4;
param sales:
1
1
7
2
4
3
6
;
2
10
8
9
3
14
11
13
4:=
17
14
15
```