最优化方法:七、动态规划
主要参考书目:
- 最优化方法及其应用/郭科,陈聆,魏友华.-北京:高等教育出版社,2007.7(2013.7重印)
基本原理
这一部分的描述比较数学化,这里完全照搬书本。
实例一、楼梯问题
- 问题描述
一个人爬楼梯,每次只能爬一个或两个台阶,假设有n个台阶,那么这个人有多少种不同的爬楼梯方法。 - 思路分析
该问题并不涉及优化,而是方法计数。
逆序考虑该问题,要上到第n层,一定是从第n-1层爬一级或者从n-2层爬两级。
则可得到上n层台阶的方法f(n)=f(n−1)+f(n−2),n>2f(n)=f(n−1)+f(n−2),n>2f(n)=f(n-1)+f(n-2),n>2
而f(1)=1,f(2)=2.f(1)=1,f(2)=2.f(1)=1,f(2)=2. 代码实现
Pythondef ladder(n):if n==1:return [1]elif n==2:return [1,2]rel= [0]*(n+1)rel[0]=0rel[1]=1rel[2]=2for i in range(3,n+1):rel[i]=rel[i-1]+rel[i-2]return rel[1:]print(ladder(5)) input()
实例二、背包问题
- 问题描述
某人拥有一个容量为V的背包,有一天他找到了一个宝藏,该宝藏有n个,其价值为v[n],所需容量为w[n],求该人如何选择带走的东西能使利益最大化? 思路分析
不妨把问题具体化:V=120;n=5;w=[40,50,70,40,20];v=[10,25,40,20,10].V=120;n=5;w=[40,50,70,40,20];v=[10,25,40,20,10].V=120;\\ n=5;\\ w=[40,50,70,40,20];\\ v=[10,25,40,20,10].
该问题其实是一个0-1规划:max(10x1+25x2+40x3+20x4+10x5)s.t. 40x1+50x2+70x3+40x4+20x5≤120xi=0 or 1;max(10x1+25x2+40x3+20x4+10x5)s.t.40x1+50x2+70x3+40x4+20x5≤120xi=0or1;max(10x_1+25x_2+40x_3+20x_4+10x_5)\\ s.t.\ \ \ 40x_1+50x_2+70x_3+40x_4+20x_5 \le 120 \\ x_i =0\ or\ 1;
此处仍用动态规划的方法解决该问题,考虑动态规划问题中的要素:
阶段:考虑第k个物品是否放入,即是第k个阶段。
状态:当前背包所剩容量,当前决定到哪一个物品即是当前的状态sksks_k。
决策:当前这个物品要还是不要ukuku_k。
策略:当前物品及当前物品以后的物品要还是不要pk,npk,np_{k,n}。
状态转移方程:当前的决策会使当前状态变为下一阶段的状态:if u_k==1s_(k+1)=s_k+[-1,-w[k]] elseif u_k==0`s_(k+1)=s_k+[-1,0]
阶段指标函数:即第k次决策所带来的收益dkdkd_k,放入就是v[k],不放入就是0。
过程指标函数:即第k次决策及其以后使用某策略获得的收益Vk,nVk,nV_{k,n}。
最优指标函数:fk=max(Vk,n)fk=max(Vk,n)f_k=max(V_{k,n})。
不难看出,对于该问题:f(n,V)=max(f(n−1,V−w(n))+v(n),f(n−1,V));f(n,V)=max(f(n−1,V−w(n))+v(n),f(n−1,V));f(n,V)=max(f(n-1,V-w(n))+v(n),f(n-1,V));
特别地,f(1,V)={0, V<w[1]v[1], V≥w[1]f(1,V)={0,V<w[1]v[1],V≥w[1]f(1,V)=\left\{\begin{matrix} 0,\ V
代码实现
Pythonimport numpy as npdef bag(i,V):w=[0,40,50,70,40,20]v=[0,10,25,40,20,10]choose=[0,0,0,0,0,0]if i == 1:if V >= 40:choose[1]=1return [v[i],choose]if V < 40:choose[1]=0return [0,choose]choose[i]=1if V >= v[i]:ret0=bag(i-1,V-w[i])[0]+v[i]ret1=np.array(bag(i-1,V-w[i])[1])+np.array(choose)ret1=ret1.tolist()if ret0 < bag(i-1,V)[0]:ret0=bag(i-1,V)[0]ret1=bag(i-1,V)[1]return [ret0,ret1]return bag(i-1,V)print (bag(5,120)) input ()
实例三、最短路问题
- 问题描述
在有n个节点的网络中求i,j两点间的最短路径。 思路分析
首先不考虑含回路的路线,含回路的路线必定不是最短路。
(1)函数迭代法
编程实现(matlab)function f = TheShortestWay(c,n) len_n=size(c,1); c_std=std(c,n,len_n); for i=2:len_n-1f_old=c_std(len_n,:);f_tmp=repmat(f_old',1,len_n);f_new=min(f_tmp+c_std);if f_new==f_oldbreak;endc_std(len_n,:)=f_new; end f=rstd(f_new,n,len_n);%%std.m function c_std = std(c,n,len_n) %将目标点换为最后一个点 c_std=c; c_std(:,len_n)=c(:,n); c_std(:,n)=c(:,len_n); tmp=c_std; c_std(len_n,:)=tmp(n,:); c_std(n,:)=tmp(len_n,:); end%%rstd.m function f=rstd(f_new,n,len_n) f=f_new; f(len_n)=f_new(n); f(n)=f_new(len_n); end
(2)策略迭代法
如果初始策略是直接前往目的点则策略迭代与函数迭代相同。
最优化方法:七、动态规划相关推荐
- matlab多种分配方案_基于MATLAB的水资源优化分配问题动态规划解法
基于 MATLAB 的水资源优化分配问题动态规划解法 摘要:介绍了动态规划的基本原理,针对水资源分配问题进行了 动态规划方法分析.针对具体问题采用逆序解法的表格法进行了计 算,然后用 matlab 编 ...
- matlab如何处理动态分配,基于MATLAB的水资源优化分配问题动态规划解法
摘要:介绍了动态规划的基本原理,针对水资源分配问题进行了动态规划方法分析.针对具体问题采用逆序解法的表格法进行了计算,然后用MATLAB编制了相应的计算程序进行计算,避免了繁琐的人工计算.结果表明该方 ...
- 《深度学习,统计学习,数学基础》人工智能算法工程师手册:程序员写的AI书,50 章一网打尽...
来源:专知 本文约3400字,建议阅读10+分钟. 免费开源人工智能手册,带你快速上手写代码! [ 导读 ]市面上很多人工智能相关的书籍.大部分的书,面向小白,内容深度不够:小部分教材书或者科研书,内 ...
- 机器学习的宝典-华校专老师的笔记
华校专,清华航天学院工程力学本科,国防科大计算机专业硕士.清华四年每年成绩都是本系头名,曾任阿里巴巴资深算法工程师,现任智易科技首席算法研究员,<Python 大战机器学习>的作者. 这是 ...
- 《深度学习,统计学习,数学基础》人工智能算法工程师手册
[ 导读 ]市面上很多人工智能相关的书籍.大部分的书,面向小白,内容深度不够:小部分教材书或者科研书,内容艰深,又过于复杂.那么有没有,面向算法工程师(程序员)人群的,面向有一定数学基础.算法基础,能 ...
- 《AI算法工程师手册》
本文转载自:http://www.huaxiaozhuan.com/ 这是一份机器学习算法和技能的学习手册,可以作为学习工作的参考,都看一遍应该能收获满满吧. 作者华校专,曾任阿里巴巴资深算法工程师, ...
- 机试指南第七章-动态规划-笔记及背包问题
第七章 动态规划 一.递归求解: 递归问题的关键是解决初始值和递推公式,从而将复杂问题分解为简单问题直至初始值对应的极简问题,从而得到答案. 套路:初始值+递归公式. Trick:将求出的值存 ...
- 运筹优化(七)--动态规划解析
其实,在各种算法领域,动态规划的思想随处可见,用同事的话说,就是一种很朴素的方法,我之所以记录这么多文字,是今天看完动态规划,突然发现,有时候,静下心,好好理解理解最最基础的理论原理,你对这个算法的体 ...
- 算法模板:动态规划之线性DP【沈七】
算法模板:动态规划之线性DP 前言 线性DP 数字三角形模型 摘花生 最小路径和 不同路径模型 不同路径(有障碍) 过河卒 (综合应用) 最长上升子序列模型 木棍加工 导弹拦截 完结散花 参考文献 前 ...
最新文章
- 图解自监督学习,人工智能蛋糕中最大的一块
- springboot定时发送短信_springboot 整合websocket实现消息推送(主动推送,具体用户推送,群发,定时推送)...
- 在Cisco路由器上配置WCCP
- 强制浏览器使用兼容模式,Web.config,httpProtocol
- linux 监控命令
- webpack图解-学习笔记
- [转载] JAVA面向对象之代码块 继承 方法的重写 super关键字与重写toString()方法介绍
- Google Protocol Buffers浅析(四)
- wt在matlab中什么意思,new wt.是什么意思
- 母版页Master中Html控件img,a,javascript相对路径问题
- idea导入导出 settings 设置文件
- Ubuntu 屏幕录像
- iOSAPP创建桌面快捷方式
- Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE]
- IIS7用FastCGI运行PHP配置
- 立象Argox CP-2140E 打印机驱动
- python+Anaconda3+pycharm完整的下载安装过程及配置过程
- 友盟第三方登录 无法切换账号 退出 取消授权
- 基于qt中QCalendarWidget的双日历时间范围选择控件(自定义)
- 服务器维护进度,第二大区服务器维护进度最新消息