动态规划课程设计模板
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
课程名称: 动态规划 实验名称: 产量与库存问题 专 业: 信息与计算科学 姓 名: 张睿 学 号: 02-16
一、 问题描述
产量与库存问题
(1) 某企业生产并销售某种产品,6个月每个月的销售量,单位数量费用,储存费用
见表6.10.初始,终结库存均为0.问应如何安排每月生产,才能充分保证供应而总费用最小?
(2)示。假定:不论在任何时期,生产每批产品的固定费用F 为8(千元),单位产品的生产成本费用为2(千元),单位产品每时期(阶段)库存货H 为2(千元),最初库存量S1为1个单位,仓库容量为4个单位,计划期末库存量为0.任何一个时期生产能力所允许的最大生产批量B 不超过6个单位。在满足上述给定条件下,该厂如何安排各个时期的生产与库存,才能使所花的总成本费最低?
二、 建立动态规划模型
问题(1)求解:
为了便于问题的求解,我们先做如下合理假设:
(1) 生产在每月初时进行,且生产完毕后,产品会立刻按照每月的销售量
出售,方便计算库存量。
(2) 工厂只生产整数单位的产品。 (3) 生产时不算库存费用
阶段变量:1,2,3,4,5,6k =,将问题中的六个月分为六个阶段,即阶段变量
1,2,3,4,5,6k =。
状态变量:k V ,k V 为第k 个月末的库存量。
决策变量:k x ,表示第k 个月的生产量。
()k k C x 为第k 个月的生产成本,k d 为第k 个月的销售需求,()k h V 为第k 个
月的库存费用。
状态转移方程:111k k k k V V x d +++=+-。
目标函数:(,)k k k G V x 表示第k 个月的总生产成本。(,)()()k k k k k k G V x C x h V =+。 最优值函数:()k k f V 为第一个月到第k 个月的总的生产成本。因此动态规划的基本方程为:
11000()min {(,)()},1,2,3,4,5,6()()0
k k k
k k k k k k k x V d f V G V x f V k DP f V --≤≤+=+=⎧⎪⎨
=⎪⎩ 其中:()=p k k k k C x x ⋅,p k 为第k 个月的单位生产费用。()k k k h V s V =⋅,k s 为第k 个月的单位储存费用。
通过对上述模型进行编程求解(程序见三),则可得出最优的生产方案如下
在通过线性规划(程序见三),解出同是此解,说明此动态规划模型正确。
问题(2)求解
基本假设同问题(1)相同
阶段变量:,1,2,3k k =,表示题中所给的三个时期。
状态变量:,1,2,3,4k v k =,表示第k 个阶段的库存量,04k v ≤≤。其中0v 表示第1个时期前的库存量,011v s ==。
决策变量:k x ,表示第k 个月的生产量,06k x ≤≤。
P 为单位产品的生产费用。F 为生产每批产品的费用,k d 为k 时期的需求量,
H 为单位产品库存费用。
状态转移方程:111k k k k v v x d +++=+-
最优值函数:()k k f V 为第一个月到第k 个月的总的生产成本。因此动态规划的基本方程为:
110min(,6)
001()min {()},1,2,3()()2
k k k k k k k k k x V d f V P x F H v f v k DP f V H s --≤≤+=⋅++⋅+=⎧⎪⎨
=⋅=⎪⎩当1k =时:
104v ≤≤,1110x d v v =+-
11001100(0){()}
(4){4()}
f P x F f v f P x H F f v =⋅++=⋅++
+
一次下去一直算到三个时期结束。
三、程序及结果
问题(1) Matlab 程序: function L global d;
d=[60,55,50,45,40,30];%定义需求矩阵 global p;
p=[825,775,850,850,775,825];%定义生产单位费用矩阵 global s;
s=[40,30,35,20,40,0];%定义单位储藏费用 V1=0:220;%第一个月 F1=[]; for i=1:221
F1(V1(i)+1)=825*(V1(i)+d(1))+40*V1(i); % F1(i)=f1(V1(i)); end
V2=0:165;%第二个月 F2=[]; for i=1:166 f2=[];
x2=0:(d(2)+V2(i)); for j=1:(d(2)+V2(i)+1)
f2(j)=775*x2(j)+30*V2(i)+F1(d(2)+V2(i)-x2(j)+1); end
F2(V2(i)+1)=min(f2); end
V3=0:115;%第三个月 F3=[]; for i=1:116 f3=[];
x3=0:(d(3)+V3(i)); for j=1:(d(3)+V3(i)+1)
f3(j)=850*x3(j)+35*V3(i)+F2(d(3)+V3(i)-x3(j)+1);
end
F3(V3(i)+1)=min(f3);
end
V4=0:70;%第四个月
F4=[];
for i=1:71
f4=[];
x4=0:(d(4)+V4(i));
for j=1:(d(4)+V4(i)+1)
f4(j)=850*x4(j)+20*V4(i)+F3(d(4)+V4(i)-x4(j)+1);
end
F4(V4(i)+1)=min(f4);
end
V5=0:30;%第五个月
F5=[];
for i=1:31
f5=[];
x5=0:(d(5)+V5(i));
for j=1:(d(5)+V5(i)+1)
f5(j)=775*x5(j)+40*V5(i)+F4(d(5)+V5(i)-x5(j)+1);
end
F5(V5(i)+1)=min(f5);
end
x6=0:30;%第六个月
f6=[];
for j=1:31
f6(j)=825*x6(j)+F5(d(6)-x6(j)+1);
end
%往回算出生产量
F6=min(f6);%第6月
c6=find(f6==F6);
F6%最小费用
c6=c6-1
c5=find(f5==F5(31));%第5月
c5=c5-1
f4=[];%第4月
x4=0:d(4);
for j=1:(d(4)+1)
f4(j)=850*x4(j)+F3(d(4)-x4(j)+1);
end
c4=find(f4==170175);
c4=c4-1
f3=[];%第3月