主要参考书目:

  • 最优化方法及其应用/郭科,陈聆,魏友华.-北京:高等教育出版社,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.
  • 代码实现
    Python

    def 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

  • 代码实现
    Python

    import 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)策略迭代法


    如果初始策略是直接前往目的点则策略迭代与函数迭代相同。

最优化方法:七、动态规划相关推荐

  1. matlab多种分配方案_基于MATLAB的水资源优化分配问题动态规划解法

    基于 MATLAB 的水资源优化分配问题动态规划解法 摘要:介绍了动态规划的基本原理,针对水资源分配问题进行了 动态规划方法分析.针对具体问题采用逆序解法的表格法进行了计 算,然后用 matlab 编 ...

  2. matlab如何处理动态分配,基于MATLAB的水资源优化分配问题动态规划解法

    摘要:介绍了动态规划的基本原理,针对水资源分配问题进行了动态规划方法分析.针对具体问题采用逆序解法的表格法进行了计算,然后用MATLAB编制了相应的计算程序进行计算,避免了繁琐的人工计算.结果表明该方 ...

  3. 《深度学习,统计学习,数学基础》人工智能算法工程师手册:程序员写的AI书,50 章一网打尽...

    来源:专知 本文约3400字,建议阅读10+分钟. 免费开源人工智能手册,带你快速上手写代码! [ 导读 ]市面上很多人工智能相关的书籍.大部分的书,面向小白,内容深度不够:小部分教材书或者科研书,内 ...

  4. 机器学习的宝典-华校专老师的笔记

    华校专,清华航天学院工程力学本科,国防科大计算机专业硕士.清华四年每年成绩都是本系头名,曾任阿里巴巴资深算法工程师,现任智易科技首席算法研究员,<Python 大战机器学习>的作者. 这是 ...

  5. 《深度学习,统计学习,数学基础》人工智能算法工程师手册

    [ 导读 ]市面上很多人工智能相关的书籍.大部分的书,面向小白,内容深度不够:小部分教材书或者科研书,内容艰深,又过于复杂.那么有没有,面向算法工程师(程序员)人群的,面向有一定数学基础.算法基础,能 ...

  6. 《AI算法工程师手册》

    本文转载自:http://www.huaxiaozhuan.com/ 这是一份机器学习算法和技能的学习手册,可以作为学习工作的参考,都看一遍应该能收获满满吧. 作者华校专,曾任阿里巴巴资深算法工程师, ...

  7. 机试指南第七章-动态规划-笔记及背包问题

    第七章     动态规划 一.递归求解: 递归问题的关键是解决初始值和递推公式,从而将复杂问题分解为简单问题直至初始值对应的极简问题,从而得到答案. 套路:初始值+递归公式. Trick:将求出的值存 ...

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

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

  9. 算法模板:动态规划之线性DP【沈七】

    算法模板:动态规划之线性DP 前言 线性DP 数字三角形模型 摘花生 最小路径和 不同路径模型 不同路径(有障碍) 过河卒 (综合应用) 最长上升子序列模型 木棍加工 导弹拦截 完结散花 参考文献 前 ...

最新文章

  1. 图解自监督学习,人工智能蛋糕中最大的一块
  2. springboot定时发送短信_springboot 整合websocket实现消息推送(主动推送,具体用户推送,群发,定时推送)...
  3. 在Cisco路由器上配置WCCP
  4. 强制浏览器使用兼容模式,Web.config,httpProtocol
  5. linux 监控命令
  6. webpack图解-学习笔记
  7. [转载] JAVA面向对象之代码块 继承 方法的重写 super关键字与重写toString()方法介绍
  8. Google Protocol Buffers浅析(四)
  9. wt在matlab中什么意思,new wt.是什么意思
  10. 母版页Master中Html控件img,a,javascript相对路径问题
  11. idea导入导出 settings 设置文件
  12. Ubuntu 屏幕录像
  13. iOSAPP创建桌面快捷方式
  14. Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE]
  15. IIS7用FastCGI运行PHP配置
  16. 立象Argox CP-2140E 打印机驱动
  17. python+Anaconda3+pycharm完整的下载安装过程及配置过程
  18. 友盟第三方登录 无法切换账号 退出 取消授权
  19. 基于qt中QCalendarWidget的双日历时间范围选择控件(自定义)
  20. 服务器维护进度,第二大区服务器维护进度最新消息

热门文章

  1. 大数据下的日志--ElasticSearch部分(一)--初识
  2. 微软MFC技术运行机制
  3. java 静态工厂方法代替构造器的好处
  4. Wifi分析之三:Wifi连接分析
  5. Unity MlAgent 使用介绍
  6. css 圆形光晕,CSS实现运动光环
  7. 进化计算之遗传算法的简单介绍
  8. pythonqmks201906_201906
  9. 理想与现实的巨大差距
  10. snprintf用法和注意