1 / 11
文档名称:

动态规划编程.docx

格式:docx   大小:22KB   页数:11页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

动态规划编程.docx

上传人:daoqqzhuanyongyou2 2022/6/20 文件大小:22 KB

下载得到文件列表

动态规划编程.docx

相关文档

文档介绍

文档介绍:动态规划编程
动态规划是解决多阶段决策过程最优化问题的一种方法.
该方法是由美国数学家贝尔曼(R. Bellman) 段决策问题的特点,提出了解决这类问题的最优化原理,并成功地解决了生产管理、unction [p_opt,fval]=dynprog(x,DecisFun,ObjFun,TransFun)
%自由始端和终端的动态规划,求指标函数最小值的逆序算法递归计算程序
x各阶段状态变量的可能取值,第k列代表第k阶段状态变量可能取值
DecisFun(k,x)决策函数,由阶段k的状态变量x求出相应的允许决策变量
ObjFun(k,x,u)阶段指标函数
TransFun(k,x,u)状态转移函数,其中x是阶段k的某状态变量,u是相应的
%输入参数
%
%
%
% 决策变量
%输出参数
% p_opt动态规划的规划过程,p_opt=[阶段序号,状态变量,决策变量,指标 函数]
% fval总目标函数值,是一个列向量,第i元素代表第一个状态变量取第i 个可能值时的总目标
复制代码
该函数的下载参见[数学建模工具箱】-221-1-
I、动态规划实例分析
某公司拟将某种设备5台分配给甲、乙、丙3个工厂,各工厂利润与设备数量之间的关系如
下表所示,问这5台设备如何分配使3个工厂的总利润为最大?
利.
设4 御

甲/
*
LW
*
LL—
LL*3
12-P

LLP
13
应用动态规划方法分析如下
阶段k
将问题按工厂分为3个阶段,k=1,2,3
状态sk
给第k个工厂分配前拥有的设备台数,显然s1=5
决策uk
分配给第k个工厂的设备台数,显然
分给第一个工厂可以0到si台之间
分给第二个工厂也可以0到s2台之间
分给第三个工厂的为s2台
function u=decisfun(k,s,u)
if k==3
u=s;
else
u=0:s;
end
复制代码
状态转移Tk
前后两个状态之间的关系如下
s2=s1-u1, s3=s2-u2
function s_next=transfun(k,s,u)
s_next=s-u
复制代码
阶段指标Vk
第k阶段的指标函数,表示配给第k个工厂uk台设备所获得的利益,显然 Vk=w(uk,k)
function V=subobjfun(k,s,u)
w=[0 0 0
3 5 4
7 10 6
9 11 11
12 11 12
13 11 12];
w=-w;%由于函数只能求最小值,现在求最大值,故取符号
%第k阶段,决策变量为u时,对应的目标值
V=([0 1 2 3 4 5]==u)*w(:, k);%或者直接使用 V=w(u,k)
复制代码
各阶段状态变量可能取值
由已知,我们容易知道
s1={5}
s2={0,1,2,3,4,5}
s3={0,1,2,3,4,5}

1.
s=nan*ones(6,3);%没有取值的地方使用nan代替
s(1,1)=5;
s(:,2) = [0 1 2 3 4 5]’;
s(:,3) = [0 1 2 3 4 5]’;
复制代码
根据上面的分析,我们编写程序如下
function matlabsky
%动态规划函数求解问题演示实例
%by dynamic
%see also
%
%
%计算各状态变量可能取值,第k列代表第k个状态变量的可能取值,没有的 使用NaN代替
s=nan*ones(6,3);
s(1,1)=5;
s(:,2) = [0 1 2 3 4 5]';
s(:,3) = [0 1 2 3 4 5]';
%直接调用dynprg函数
[p_opt,fval]=dynprog(s,***@DecisFun,***@ObjFun,***@TransFun)
14.
function u=DecisFun(k,s,u)
%决策函数
if k==3
u=s;
else
u=0:s;
end
function s_next=TransFun(k,s,u)
%状态转移函数
s_next=s-u;
25.
function V=ObjFun(k,s,u)
%阶段目标函数
w=[0 0 0
3 5 4
7 10 6
9 11 11
12 11 12
13 11 12];
w=-w;