动态规划问题(Dynamic Programming)
一、什么是动态规划?
动态规划(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)相关推荐
- 一道有关动态规划(Dynamic Programming)的网易面试题
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:机器学习算法实验室 最近遇到一道很经典的有关动态规划的网 ...
- 数据结构与算法(C++)– 动态规划(Dynamic Programming)
动态规划(Dynamic Programming) 理解动态规划的好文:https://www.sohu.com/a/153858619_466939 1.基础 **定义:**递归算法经常会有一些重复 ...
- 动态规划(Dynamic Programming)例题步骤详解
文章目录 动态规划(Dynamic Programming)浅学 - 学习笔记 题目特点: 1.选择硬币组合问题:(Coin Change) 动态规划题四个核心步骤: 一.确定状态 二.转移方程 三. ...
- 动态规划(Dynamic Programming, DP)简介
动态规划(Dynamic programming,DP)是一种在数学.计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法. 动态规划常常适用于有重叠子问题和最优子结 ...
- 强化学习(二)- 动态规划(Dynamic Programming)
3.动态规划 3.1 介绍 术语动态规划(DP:Dynamic Programming) 指的是一个算法集合,可以用来计算最优策略,给定一个完美的环境模型,作为马尔可夫决策过程(MDP).经典的DP算 ...
- LeetCode 动态规划(Dynamic programming)系列题目--C++,Python解法
LeetCode上有许多态规划(Dynamic programming)的题目,我在这里整合一下 本文章不再更新,请看LeetCode 所有题目总结 LeetCode 所有题目总结:LeetCode ...
- 卡塔兰数(Catalan Number)--动态规划(Dynamic Programming)
-卡塔兰数是组合数学中一个常在各种计数问题中出现的数列.以比利时的数学家欧仁·查理·卡特兰(1814–1894)命名.历史上,清朝数学家明安图(1692年-1763年)在其<割圜密率捷法> ...
- 动态规划(dynamic programming)基础【背包问题】
目 录 哔哩哔哩网站--动态规划基础 背包问题(1) 01背包 哔哩哔哩网站--[动态规划]背包问题 百度百科--背包问题 哔哩哔哩网站--动态规划基础 背包问题(1) 01背包 视频网址--哔哩 ...
- 最长非降子序列(动态规划dp dynamic programming)
首先要理解一下什么叫做非降子序列 非降子序列,简单来说就是指给出一个数字序列,在不改变整体顺序的情况下摘出几个来组成一个子序列,这个序列满足从小到大的排序顺序. 所以,最长非降子序列,不难理解就是从这 ...
- matlab实现k-l算法,Matlab实现动态规划算法 (dynamic programming algorithm)
function [p_opt,fval]=dynprog(x,DecisFun,ObjFun,TransFun) % [p_opt,fval]=dynprog(x,DecisFun,ObjFun,T ...
最新文章
- gitlab如何克隆项目到本地进行开发,如何让webstorm项目右键菜单出现Git子菜单,右下角出现Matser分支
- 《音乐商店》第4集:自动生成StoreManager控制器
- mysql 导入一个数据库_mysql导入一个数据库
- JS每日一题: 小程序页面之间如何通信?
- pixhawk 整体架构的认识
- Java 8 Optional类深度解析
- 源码解读腾讯 GT 的性能测试方案
- 5G发展是绵绵秋雨 应循序渐进
- 作者:刘岩(1982-),男,泰康保险集团股份有限公司数据信息中心高级工程师、高级主管,中国计算机学会会员...
- 两条信号之间加电容_电容是什么?怎么用?怎么买?
- python在linux编程_python要在linux下编程吗
- linux查找某个命令属于哪个rpm包
- file watchers怎么默认打开_python默认字典defaultdict进阶
- java异常处借接错书_利用Java异常机制实现模拟借书系统
- jsp中java代码注释_JSP页面中的三种代码注释方法
- Android项目实践--《智慧校园》
- 怎么注销百度云服务器账号,百度网盘如何注销账号?百度网盘注销账号的方法步骤...
- 长安沦陷国家破碎,只有山河依旧,
- [转]什么?你还不会写JQuery 插件
- 学习C语言:自幂数最通俗讲解