例子:最短路径问题。

下图中,连接两个节点的线段上标注着节点间的距离,请问A到D点的最短距离是多少?

静态规划

有一个很简单的思路,穷举所有可能的途径,从中选择最短的一条。这个方法的缺点是速度慢,因为问题规模较大时,穷举全部路径要面临一个天文数字的计算量。

当然这种方法也有优点,在穷举过程中,我们始终保存着一个可行解。如果不愿意继续计算,停止计算后,总能得到一个不算太差的可行解,运气好的话可能就是最优解。如果以后有时间了,想接着进行穷举,理论上也是可以的。这种方法,从一个或多个可行解开始,通过不断迭代对现有可行解优化,最后得到最优解。这种方法称为静态规划。

线性规划的单纯性解法,是一种静态规划方法。首先生成线性规划的一个可行解,然后不断迭代优化可行解,最后得到最优解。在迭代计算过程中,始终保持一个可行解或近优解,这是静态优化的一个显著特征。

忽然想起了机器学习里面有一种所谓的在线式学习方法,大概也是按照这个模式去寻找模型最优解的。比如各种神经网络模型求解过程应该都属于这类静态划问题。

当然,上面这个问题如果用静态规划的路子求解,可以穷举所有可能的途径,从中选择最短的一条。如果问题规模比较大,采用穷举的方法性能就太差了,所以才会考虑其他更好的方法。动态规划就是出于这样一种考虑被发明出来了。

动态规划

前面的问题求解可以分成 A->B,B->C,C->D 三个阶段完成。采用拆分的方法,把问题分解成多个相互联系的单阶段问题,通过求解每个单阶段问题,完成问题求解。这种方法称为动态规划

前面的问题比较简单,我们很容易用手工标出从A点出发到各个节点的最短距离,参见下图。

如果我们用F(X)表示节点X到A点的最短距离,很明显

F(D) = min( F(C1)+2, F(C2)+1, F(C3)+3 )

在动态规划问题中,F(X)称为状态,上述状态关系式称为状态转移方程。在上式中,F(D)的求解问题归结为了F(C1)、F(C2)、FC3)三个子问题。同样,可以得到:

F(C2) = min( F(B1)+3, F(B2)+1 )

状态转移

动态规划的关键就是确定状态转移方程,所谓状态实质上就是动态规划的子问题。动态规划的解决方法,是利用状态转移方程把问题归结的子问题求解。换句话讲,把最终状态的求解归结为其他状态的求解,这大概是状态转移的要表达的含义。

穷举状态 vs 穷举路径

动态规划真正的威力在于它的高效率。状态转移模型中,状态的数量远远少于状态转移路径的数量。采用传统的搜索算法暴力穷举每条路径,算法复杂度远远高于遍历状态节点。

浅析静态规划和动态规划相关推荐

  1. sql表中只有子节点的递归_动态规划与静态规划、递归、分治、回溯

    动态规划算是运筹学或者算法中的硬骨头了.不是说算法本身有多难,而是学完用完之后还是感觉到对其领会的不够深入,一种能用其术,不知其道的感觉.在很多教材或者回答中,经常看多将动态规划放在递归这一部分中.当 ...

  2. 智能汽车路径规划学习-动态规划算法、A*算法

    动态规划算法 动态规划时运筹学的一个分支,是求解多阶段决策过程最优问题的数学方法. 各个阶段决策的选取不是任意确定的,它依赖于当前面临的状态,又影响以后的发展.当各个阶段的决策确定后,就组成了一个决策 ...

  3. 浅析NOIP中的动态规划

    浅析NOIP中的图论[1] 浅析NOIP中的图论[2] 一.背包DP 背包是初学动态规划的经典模型,附:背包九讲 1[NOIP2018]货币系统 [完全背包] 题意:给定一个包含n个元素的集合A,求一 ...

  4. 多边形之间相交求交点的算法_路径规划算法总结

    本文来自知乎网友@搬砖的旺财,地平线机器人算法工程师.作者根据自己本科和硕士阶段的学习经历,整理归纳了所接触过的规划算法. 1.自主机器人近距离操作运动规划体系 在研究自主运动规划问题之前,首先需建立 ...

  5. 【Java数据结构与算法】第十八章 动态规划和KMP算法

    第十八章 动态规划和KMP算法 文章目录 第十八章 动态规划和KMP算法 一.动态规划 1.介绍 1.爬楼问题 2.扔鸡蛋问题 3.背包问题 二.KMP算法 1.引入 2.介绍 2.代码实现 一.动态 ...

  6. 运筹优化(七)--动态规划解析

    其实,在各种算法领域,动态规划的思想随处可见,用同事的话说,就是一种很朴素的方法,我之所以记录这么多文字,是今天看完动态规划,突然发现,有时候,静下心,好好理解理解最最基础的理论原理,你对这个算法的体 ...

  7. Apollo星火计划学习笔记——Apollo速度规划算法原理与实践

    文章目录 1. 速度规划算法总体介绍 1.2 不同场景下的ST图 1.2.1 主车向前匀速行驶 1.2.2 主车先向前匀速行驶,后停车 1.2.3 主车跟随前车行驶 1.2.4 主车跟随前车刹停 1. ...

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

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

  9. 路径规划五种算法简述及对比

    以下是本人在学习路径规划过程中的一些总结,借着机会写了一下,有不妥之处欢迎批评指正,谢谢. 路径规划部分在无人车架构体系当中分属控制或决策部分,如图1,是实现无人化驾驶的关键技术之一.路径规划模块性能 ...

最新文章

  1. 从宇宙、互联网和脑的关系看元宇宙的终极形态
  2. MySQL日期和时间类型
  3. 解决ASP.NET中的各种乱码问题
  4. MySQL数据库-笔记06【SQL的4种连接查询、事务】
  5. C#求数组中元素的全排列
  6. bv值是什么意思_BVR电线是什么意思BVR电线电缆规格型号
  7. java mail header_java使用mail发送邮件时出现乱码如何解决
  8. PaddlePaddle︱开发文档中学习情感分类(CNN、LSTM、双向LSTM)、语义角色标注
  9. 关于使用npm下载资源包的一些常用命令
  10. 基于深度学习的人脸表情识别实现
  11. Hibernate tools的hbm2ddl和hbm2java
  12. [Solved] Pandas--TypeError: ‘bool‘ object is not iterable
  13. 中小企业外贸软件ERP平台搭建介绍
  14. Docker化Node.js网络应用
  15. 会计 金融管理 计算机网络技术,天津海运职业学院专业排名,招生专业目录(10篇)...
  16. 怎么用电脑屏幕录制工具录制游戏
  17. [转]Unix下针对邮件,搜索,网络硬盘等海量存储的分布式文件系统项目(关于GFS、MogileFS分布式文件系统邮件列表)
  18. 基于AM5728的PROFIBUS 通信测试
  19. Map List的拼接实现输出整个学期的成绩单
  20. 队列链式存储 - Java实现

热门文章

  1. 惠民计算机学校,惠民县职业中等专业学校
  2. mima.php密码找回,蝉知系统忘记后台管理员密码怎么办?
  3. py sel采集部署linux报错
  4. 为什么说学习编程有助于提升专注力?
  5. Linux中fstat、stat和lstat的用法与区别
  6. 华为OD机试用Python实现 -【云短信平台优惠活动】(2023-Q1 新题)
  7. 基于stm32C8T6的红外遥控器制作 stm做遥控器
  8. hive 时间转字符串_hive日期函数
  9. 大数据对思维方式的重要影响
  10. css如何透过上层div点击下层的元素解决方法