一、什么是动态规划?

动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。
20 世纪 50 年代初 R. E. Bellman 等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优性原理(principle of optimality),把多阶段过程转化为一系列单阶段问题,逐个求解,创立了解决这类过程优化问题的新方法—动态规划。

解决:例如最优路线问题,生产计划问题 例子详见

划分

按决策过程划分为
是否为离散?:
是离散时间决策过程
否连续时间决策过程
是否根据过程演变划分?
随机决策过程
确定性决策过程

二、基本概念

2.1阶段(step)

阶段(step)是对整个过程的自然划分。通常根据时间顺序或空间顺序特征来划分阶
段,以便按阶段的次序解优化问题。阶段变量一般用k = 1,2,L,n 表示。

2.2状态(state)

状态(state)表示每个阶段开始时过程所处的自然状况。它应能描述过程的特征并且无后效性,即当某阶段的状态变量给定时,这个阶段以后过程的演变与该阶段以前各阶段的状态无关。
通常还要求状态是直接或间接可以观测的。
描述状态的变量称状态变量(state variable)。变量允许取值的范围称允许状态集合(set of admissible states)。
xk 表示第k 阶段的状态变量,它可以是一个数或一个向量。
Xk 表示第 k 阶段的允许状态集合。
根据过程演变的具体情况,状态变量可以是离散的或连续的。为了计算的方便有时将连续变量离散化;为了分析的方便有时又将离散变量视为连续的

2.3决策(decision)

当一个阶段的状态确定后,可以作出各种选择从而演变到下一阶段的某个状态,
这种选择手段称为决策(decision),在最优控制问题中也称为控制(control)。
描述决策的变量称决策变量(decision variable),变量允许取值的范围称允许决策集合(set of admissible decisions)。
uk (xk )表示第k 阶段处于状态 xk 时的决策变量,它是 xk 的函数,用Uk (xk ) 表示 xk 的允许决策集合

2.4策略(policy)

2.5状态转移方程(equation of state transition)

2.6指标函数和最优值函数(objective function and optimal value

function)

2.7最优策略和最优轨迹(optimal policy and optimal trajectory)

2.8递归方程(Recursion equation)

三、结论

纵上所述,如果一个问题能用动态规划方法求解,那么,我们可以按下列步骤,建立起动态规划的数学模型:

1.将过程划分成恰当的阶段
2.正确选择状态变量,使它既能描述过程的状态,又满足无后效性,同时确定允许状态集合
3.选择决策变量 k u
4.写出状态转移方程。
5.确定阶段指标及指标函数的形式(阶段指标之和,阶段指标之积,阶段指标之极大或极小等)
6.写出基本方程即优值函数满足的递归方程,以及端点条件

四、动态规划的优越性

  • 能够得到全局最优解。
    由于约束条件确定的约束集合往往很复杂,即使指标函数较简单,用非线性规划方法也很难求出全局最优解。而动态规划方法把全过程化为一系列结构相似的子问题,每个子问题的变量个数大大减少,约束集合也简单得多,易于得到全局最优解。特别是对于约束集合、状态转移和指标函数不能用分析形式给出的优化问题,可以对每个子过程用枚举法求解,而约束条件越多,决策的搜索范围越小,求解也越容易。对于这类问题,动态规划通常是求全局最优解的唯一方法。

  • 可以得到一族最优解。
    与非线性规划只能得到全过程的一个最优解不同,动态规划的得到的是全过程及所有后部子过程的一族最优解。有些实际问题需要这样的解族,即使不需要,它们在分析最优策略和最优值对于状态的稳定性时也是很有用的。当最优策略由于某些原因不能实现时,这样的解族可以用来寻找次优策略。

  • 能够利用经验提高求解效率。
    如果实际问题本身就是动态的,由于动态规划方法反映了过程逐段演变的前后联系和动态特征,在计算中可以利用实际知识和经验提高求解效率。如在策略迭代法中,实际经验能够帮助选择较好的初始策略,提高收敛速度。

五、 动态规划的主要缺点是:

  • 没有统一的标准模型,也没有构造模型的通用方法,甚至还没有判断一个问题能否构造动态规划模型的准则。这样就只能对每类问题进行具体分析,构造具体的模型。对于较复杂的问题在选择状态、决策、确定状态转移规律等方面需要丰富的想象力和灵活的技巧性,这就带来了应用上的局限性。

  • 用数值方法求解时存在维数灾(curse of dimensionality)。若一维状态变量有m个取值,那么对于n 维问题,状态 xk就有 mnm^{n}mn 个值,对于每个状态值都要计算、存储函数fk(xk) ,对于n 稍大的实际问题的计算往往是不现实的。目前还没有克服维数灾的有效的一般方法。

六、算法示例

算法1、动态规划详解1
算法2、动态规划详解2

动态规划问题(Dynamic Programming)相关推荐

  1. 一道有关动态规划(Dynamic Programming)的网易面试题

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:机器学习算法实验室 最近遇到一道很经典的有关动态规划的网 ...

  2. 数据结构与算法(C++)– 动态规划(Dynamic Programming)

    动态规划(Dynamic Programming) 理解动态规划的好文:https://www.sohu.com/a/153858619_466939 1.基础 **定义:**递归算法经常会有一些重复 ...

  3. 动态规划(Dynamic Programming)例题步骤详解

    文章目录 动态规划(Dynamic Programming)浅学 - 学习笔记 题目特点: 1.选择硬币组合问题:(Coin Change) 动态规划题四个核心步骤: 一.确定状态 二.转移方程 三. ...

  4. 动态规划(Dynamic Programming, DP)简介

    动态规划(Dynamic programming,DP)是一种在数学.计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法. 动态规划常常适用于有重叠子问题和最优子结 ...

  5. 强化学习(二)- 动态规划(Dynamic Programming)

    3.动态规划 3.1 介绍 术语动态规划(DP:Dynamic Programming) 指的是一个算法集合,可以用来计算最优策略,给定一个完美的环境模型,作为马尔可夫决策过程(MDP).经典的DP算 ...

  6. LeetCode 动态规划(Dynamic programming)系列题目--C++,Python解法

    LeetCode上有许多态规划(Dynamic programming)的题目,我在这里整合一下 本文章不再更新,请看LeetCode 所有题目总结 LeetCode 所有题目总结:LeetCode ...

  7. 卡塔兰数(Catalan Number)--动态规划(Dynamic Programming)

    -卡塔兰数是组合数学中一个常在各种计数问题中出现的数列.以比利时的数学家欧仁·查理·卡特兰(1814–1894)命名.历史上,清朝数学家明安图(1692年-1763年)在其<割圜密率捷法> ...

  8. 动态规划(dynamic programming)基础【背包问题】

    目   录 哔哩哔哩网站--动态规划基础 背包问题(1) 01背包 哔哩哔哩网站--[动态规划]背包问题 百度百科--背包问题 哔哩哔哩网站--动态规划基础 背包问题(1) 01背包 视频网址--哔哩 ...

  9. 最长非降子序列(动态规划dp dynamic programming)

    首先要理解一下什么叫做非降子序列 非降子序列,简单来说就是指给出一个数字序列,在不改变整体顺序的情况下摘出几个来组成一个子序列,这个序列满足从小到大的排序顺序. 所以,最长非降子序列,不难理解就是从这 ...

  10. matlab实现k-l算法,Matlab实现动态规划算法 (dynamic programming algorithm)

    function [p_opt,fval]=dynprog(x,DecisFun,ObjFun,TransFun) % [p_opt,fval]=dynprog(x,DecisFun,ObjFun,T ...

最新文章

  1. gitlab如何克隆项目到本地进行开发,如何让webstorm项目右键菜单出现Git子菜单,右下角出现Matser分支
  2. 《音乐商店》第4集:自动生成StoreManager控制器
  3. mysql 导入一个数据库_mysql导入一个数据库
  4. JS每日一题: 小程序页面之间如何通信?
  5. pixhawk 整体架构的认识
  6. Java 8 Optional类深度解析
  7. 源码解读腾讯 GT 的性能测试方案
  8. 5G发展是绵绵秋雨 应循序渐进
  9. 作者:刘岩(1982-),男,泰康保险集团股份有限公司数据信息中心高级工程师、高级主管,中国计算机学会会员...
  10. 两条信号之间加电容_电容是什么?怎么用?怎么买?
  11. python在linux编程_python要在linux下编程吗
  12. linux查找某个命令属于哪个rpm包
  13. file watchers怎么默认打开_python默认字典defaultdict进阶
  14. java异常处借接错书_利用Java异常机制实现模拟借书系统
  15. jsp中java代码注释_JSP页面中的三种代码注释方法
  16. Android项目实践--《智慧校园》
  17. 怎么注销百度云服务器账号,百度网盘如何注销账号?百度网盘注销账号的方法步骤...
  18. 长安沦陷国家破碎,只有山河依旧,
  19. [转]什么?你还不会写JQuery 插件
  20. 学习C语言:自幂数最通俗讲解

热门文章

  1. java计算机毕业设计基于安卓Android/微信小程序的大学生签到管理系统APP
  2. untiy 怎么把物体显示在最上层
  3. 精美viso制图(1)
  4. H.264中的SPamp;amp;SI帧技术简述
  5. 直击本质:聊聊小程序的前世今生
  6. 网络切片技术缺点_什么是网络切片?
  7. 逃跑吧少年服务器维护中怎么回事,逃跑吧少年7月6日更新维护公告
  8. 信息安全体系建设☞数据完整性检查--信息安全开源工具分享
  9. 数据安全管理软件-企业如何保护数据安全?
  10. 游木兰山天池(20041016)