动态规划
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
动态规划是解决多阶段决策过程最优化问题的一种方法.
该方法是由美国数学家贝尔曼(R.Bellman)等人在2O世纪50年代初提出的.他们针对多阶段决策问题的特点,提出了解决这类问题的最优化原理,并成功地解决了生产管理、资
源分配等方面的许多实际题,从而建立了运筹学的一个新分支——动态规划.
动态规划是现代企业管理中的一种重要决策方法,可用于解决最优路径、资源分配、生产计划与库存、投资、装载、排序等问题,还可用于生产过程的最优控制等.由于它有独特的解题思路,因而在处理某些优化问题时,比线性规划或非线性规划方法更有效.
而Matlab是一个功能强大的用于基于矩阵运算的强大数值计算软件,将Matlab语言应用到动态规划中去,对实际问题进行程序设计和计算,可以达到计算简便的目的.
一、动态规划基本概念
使用动态规划方法解决多阶段决策问题,首先要将实际问题写成动态规划模型,此时要用到以下概念:
1)阶段
将所给问题的过程,按时间或空间特征分解成若干互相联系的阶段,以便按次序去求解每阶段的解,每个阶段就是一个子问题,常用字母k表示阶段变量.
2)状态
各阶段开始时的客观条件叫做状态.描述各阶段状态的变量称为状态变量,常用s k表示第k阶段的状态变量.状态变量s k的取值集合称为状态集合,用s k表示.
3)决策
当各段的状态取定以后,就可以作出不同的决策(或选择),从而确定下一阶段的状态,这种决定称为决策.表示决策的变量称为决策变量,常用u k(s k)表示第k阶段当状态为s k时的决策变量.在实际问题中,决策变量的取值往往限制在一定范围内,称此范围为允许决策集合,常用D k(s k)表示第k阶段从状态s k出发的允许决策集合,显然有“u k∈D k(s k).
4)策略
一个由每个阶段的决策按顺序组成的集合称为策略,用p表示,即
p(s1)={u1(s1),u2(s2),.......,u n(s n),}。一个n阶段决策过程,从1到n叫作问题的原过程.对于
任意给定的k(1≤k≤n),从第k阶段状态s k到第n阶段状态s n的过程称为原过程的一个后部子过程.后部子过程的策略记为p k(s k)={u k(s k),u k+1(s k+1),......,u n(s n)},在实际问题中,可供选择的策略有一定的范围,此范围成为允许策略集合。允许策略集合中达到最优效果的策略成为最优策略
5)状态转移
动态规划中本阶段往往是上一阶段状态和上一阶段的决策进行综合的结果.如果给定了第k段的状态s k,且该阶段决策为u k(s k),则第k+1段的状态s k+1也就完全确定.它们的关系可表示为:
s k+1=T k(s k,u k)
由于上式表示了由k阶段到k+1阶段的状态转移规律,所以称该式为状态转移方程.
6)指标函数
用于衡量所选定策略优劣的数量指标称为指标函数.一个n阶段决策过程,从1到n叫作问题的原过程.对于任意一个给定的k(1≤k≤n),从第k阶段到第n阶段的过程称为原过程的一个后部子过程。V1,n(s1,p1,n)表示初始状态为s1采用策略p1,n时原过程的指标函数值。而V k,n(s k,p k,n)表示在第k阶段,状态为s k采用策略p k,n时后部子过程的指标函数值.最优指标函数记为f k(s k),它表示从第k阶段状态s k采用最优策略p k,n到过程终止时的最佳效益值.f k(s k)与V k,n(s k,p k,n)间的关系为:
f k(s k)=V k,n(s k,p k,n)=optimize V k,n(s k,p k,n)
当k=1时,f1(s1)就是从初始状态s1到全过程结束的整体最优函数.
二、动态规划基本思路
1)将多阶段决策过程划分阶段,恰当地选择状态变量、决策变量以定义最优指标函数,从而把问题化成一族同类型的子问题,然后逐个求解.
2)求解时从边界条件开始,逆序过程行进,逐段递推寻优.在每一个子问题求解时,都要使用它前面已求出的子问题的最优结果.最后一个子问题的最优解,就是整个问题的最优解.
3)动态规划方法是既将当前一段与未来各段分开,又把当前效益和未来效益结合起来考虑的一种最优化方法,因此每段的最优决策选取是从全局考虑的,与该段的最优选择一般是不同的.
三、动态规划函数使用说明
由于我们的目的是使用动态规划解题,而不是要我们直接编写动态规划的MATLAB程序,那我们下面直接给出一个现成的动态规划的MATLAB源代码,这里不讨论它到底是是如何运行的,我们只是说明下该函数如何使用
1.function [p_opt,fval]=dynprog(x,DecisFun,ObjFun,TransFun)
2.% 自由始端和终端的动态规划,求指标函数最小值的逆序算法递归计算程序
3.%输入参数
4.% x各阶段状态变量的可能取值,第k列代表第k阶段状态变量可能取值
5.% DecisFun(k,x)决策函数,由阶段k的状态变量x求出相应的允许决策变量
6.% ObjFun(k,x,u)阶段指标函数
7.% TransFun(k,x,u)状态转移函数,其中x是阶段k的某状态变量,u是相应的
决策变量
8.%输出参数
9.% p_opt动态规划的规划过程,p_opt=[阶段序号,状态变量,决策变量,指标
函数]
10.% fval总目标函数值,是一个列向量,第i元素代表第一个状态变量取第i个
可能值时的总目标
复制代码
function [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个可能值时的总目标
四、动态规划实例分析
某公司拟将某种设备5台分配给甲、乙、丙3个工厂,各工厂利润与设备数量之间的关系