分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net

动态规划(Dynamic Programming,DP)是将多阶段决策问题进行公式化的一种技术,是算法设计方法之一。

动态规划的原理

动态规划是一种解决多阶段决策问题的优化方法,把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系逐个求解。

动态规划求解的基本步骤

采用动态规划求解的问题一般要具有以下3个性质

(1)最优性原理:如果问题的最优解所包含的子问题的解也是最优的,就称该问题具有最优子结构,即满足最优性原理。

(2)无后效性:即某个阶段的状态一旦确定,就不受这个状态以后决策的影响。也就是说,某个状态以后的过程不会影响以前的状态,只与当前状态有关。

(3)有重叠于问题:即子问题之间是不独立的,一个子问题在下一阶段决策中可能被多次使用。

动态规划所处理的问题是一个多阶段决策问题,一般由初始状态开始,通过对中间阶段决策的选择,达到结束状态。这些决策形成了一个决策序列,同时确定了完成整个过程的活动路线。

动态规划的设计都有着一定的模式,一般要经历以下几个步骤

(1)划分阶段:按照问题的时间或空间特征把问题划分为若干个阶段。在划分阶段时注意划分后的阶段一定是有序的或者是可排序的,否则问题无法求解。

(2)确定状态和状态变量:将问题发展到各个阶段时所处的各种客观情况用不同的状态表示出来。当然,状态的选择要满足无后效性。

(3)确定决策并写出状态转移方程:因为决策和状态转移有着天然的联系,状态转移就是根据上一阶段的状态和决策来推导出本阶段的状态。所以如果确定了决策,状态转移方程也就可以写出。但事实上常常是反过来做,根据相邻两个阶段的状态之间的关系来确定决策和状态转移方程。

(4)寻找边界条件:给出的状态转移方程是一个递推式,需要一个递推的终止条件或边界条件。一般情况下只要解决问题的阶段、状态和确定状态转移决策,就可以写出状态转移方程(包括边界条件)。

在实际应用中可以按以下几个简化的步骤进行设计

(1)分析最优解的性质,并刻画其结构特征。

(2)递归地定义最优解。

(3)以自底向上或自顶向下的记忆化方式计算出最优值。

(4)根据计算最优值时得到的信息构造问题的最优解。

注意:动态规划是一种求解思路,注重决策过程,不同的问题得到的模型可能不一样,关键是掌握其原理,利用递推关系求最优解。

算法设计与分析-动态规划相关推荐

  1. 算法设计与分析-----动态规划

    算法设计与分析-----动态规划(c语言) 一.动态规划 1.定义 2.动态规划问题的解法 3.动态规划求解的基本步骤 4.动态规划与其他方法的比较 5.求解整数拆分问题 6.求解最大连续子序列和问题 ...

  2. 算法设计与分析——动态规划(二):钢条切割

    分类目录:<算法设计与分析>总目录 相关文章: · 动态规划(一):基础知识 · 动态规划(二):钢条切割 · 动态规划(三):矩阵链乘法 · 动态规划(四):动态规划详解 · 动态规划( ...

  3. 算法设计与分析——动态规划(五):最长公共子序列

    分类目录:<算法设计与分析>总目录 相关文章: · 动态规划(一):基础知识 · 动态规划(二):钢条切割 · 动态规划(三):矩阵链乘法 · 动态规划(四):动态规划详解 · 动态规划( ...

  4. 计算机算法设计与分析 动态规划 实验报告,动态规划法解最长公共子序列(计算机算法设计与分析实验报告).doc...

    动态规划法解最长公共子序列(计算机算法设计与分析实验报告) 实报 告 实验名称:任课教师::姓 名:完成日期:二.主要实验内容及要求: 要求按动态规划法原理求解问题: 要求交互输入两个序列数据: 要求 ...

  5. 算法设计与分析——动态规划(一)矩阵连乘

    动态规划--Dynamic programming,可以说是本人一直没有啃下的骨头,这次我就得好好来学学Dynamic programming. OK,出发! 动态规划通常是分治算法的一种特殊情况,它 ...

  6. 算法设计与分析——动态规划——数字三角形问题

    数字三角形问题 1.题目描述:给定一个由n行数字组成的数字三角形,如图3-7所示.设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大. 算法设计:对于给定的由n行数字组成的数字 ...

  7. 算法设计与分析—动态规划算法

    动态规划算法 1.动态规划算法基本思想 2.动态规划算法求解步骤 3. 0-1背包问题 在现实生活中,存在这样一类问题,它们的活动过程不仅可以分成若干阶段,而且在任意一个阶段(不妨设为第i个阶段)以后 ...

  8. 算法设计与分析——动态规划——矩阵连乘问题

    动态规划与分治法的异同: 相同点:其基本思想都是将待求解问题分解为若干子问题,先求解子问题,再结合这些子问题的解得到原问题的解. 差异点:与分治法不同的是,适合用动态规划法求解的问题经分解得到的子问题 ...

  9. 算法设计与分析——动态规划——石子合并问题

    1.石子合并问题 在一个圆形操场的四周摆放着n堆石子.现要将石子有序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分.设计一个算法,计算出将n堆石子合并成 ...

  10. 算法设计与分析——动态规划——01背包问题

    #include<iostream> #include<iomanip> using namespace std; //前i个物品装入容量为j的背包中获得的最大价值//0-1背 ...

最新文章

  1. 学习kaneboy的 sps区域列表的管理入口程序
  2. 各种数据库连接的总结
  3. Head First设计模式一:策略模式
  4. python找不到指定的模块是什么意思_Python找不到指定的模块
  5. 【图像融合】拉普拉斯金字塔融合
  6. [转]关于ORA-00979 不是 GROUP BY 表达式错误的解释
  7. clickhouse入门与安装
  8. 【pytorch】梯度爆炸/消失解决办法
  9. 400毫米降水线每年150公里北移
  10. JS打开新窗口的2种方式
  11. MatLab 求平均值,方差,标准差
  12. AVR单片机开发11——1602液晶屏幕
  13. linux时间设置与同步--NTP
  14. 三行代码,使用第三方网站统计访客数据
  15. 调用第三方应用App
  16. iOS 玩转微信——通讯录
  17. 使用fastboot命令刷机
  18. 一名准菜鸟程序员(bushi)的自我介绍
  19. Windows Server 2016之RDS部署之添加RD虚拟化主机
  20. 计算机科学与导论论文样例,计算机科学导论论文684413422

热门文章

  1. Arduino U8glib库中的中文字体
  2. 黑苹果安装镜像制作方法
  3. c语言 库仑计_android电池(四):电池 电量计(MAX17040)驱动分析篇【转】
  4. vb mysql 实例,vb数据库(vb编辑access数据库实例)
  5. vb连接mysql数据库报错_vb6连接mysql数据库
  6. 2020年中国标准化发展现状分析,数字化为标准化领域带来新挑战「图」
  7. VS2017中无法识别PlaySound标识符解决办法(《逐梦旅程:Windows游戏编程之从零开始》FirstBlood篇)
  8. java门诊收费系统源码_基于java的医院门诊收费系统的设计与实现.doc
  9. c 语言tcp实现电子词典项目
  10. 小确幸BBS论坛-2-首页