zoukankan      html  css  js  c++  java
  • 第九章 (一)动态规划

     动态规划=分治(不是等分,是多阶段)+避免重复计算

    是一个多阶段决策问题

    核心是状态和状态转移方程

    数字三角问题(单向无环最长/最短路径问题):

    现有一张地图,各结点代表城市,两结点间连线代表道路,线上数字表示城市间的距离。如图所示,试找出从结点A到结点E的最短距离

    递推公式(状态转移方程):

     递归

    如果用递归的方法,独立性太强而这种dp问题各个阶段之间具有联系,如果用递归就会有大量的重复计算(不仅仅是某个节点的重复而是这个节点的子树的重复计算)

    为了避免重复计算,我们应该把已经得到的结果保留下来。将计算变为查询,用空间换取时间。

    下面给出两种实现思路:

    递推:使用递推公式,由底向顶填表

    记忆化搜索(保证每个节点只访问一次也是需要记录)

    数学模型

    动态规划模型的基本要素

    1.阶段
    阶段(step)是对整个过程的自然划分。通常根据时间顺序或空间特征来划分阶段,以便按阶段的次序解优化问题。阶段变量一般用k=1,2,..,n表示。

    2.状态
    状态(state)表示每个阶段开始时过程所处的自然状况。它应该能够描述过程的特征并且具有无后向性即当某阶段的状态给定时,这个阶段以后过程的演变与该阶段以前各阶段的状态无关,即每个状态都是过去历史的一个完整总结。通常还要求状态是直接或间接可以观测的。
    描述状态的变量称状态变量(state variable)。变量允许取值的范围称允许状态集合(set of admissible states)。用xk表示第k阶段的状态变量,它可以是一个数或一个向量。用Xk表示第k阶段的允许状态集合。在引言的例子中x2可取B1,B2,X2={B1,B2}。
    n个阶段的决策过程有n+1个状态变量,xn+1表示xn演变的结果

    3.决策
     当一个阶段的状态确定后,可以作出各种选择从而演变到下一阶段的某个状态,这种选择手段称为决策(decision) 。
     描述决策的变量称决策变量(decision variable)。变量允许取值的范围称允许决策集合(set of admissible decisions)。用uk(xk)表示第k阶段处于状态xk时的决策变量,它是xk的函数,用Uk(xk)表示了xk的允许决策集合。在引言的例子中u2(B1)可取C1,C2,C3。决策变量简称决策。

    4.策略
    决策组成的序列称为策略(policy)。由初始状态x1开始的全过程的策略记作p1n(x1),即p1n(x1)={u1(x1),u2(x2),...,un(xn)}。由第k阶段的状态xk开始到终止状态的后部子过程的策略记作pkn(xk),即pkn(xk)={uk(xk),uk+1(xk+1),...,un(xn)}。类似地,由第k到第j阶段的子过程的策略记作pkj(xk)={uk(xk),uk+1(xk+1),...,uj(xj)}。对于每一个阶段k的某一给定的状态xk,可供选择的策略pkj(xk)有一定的范围,称为允许策略集合(set of admissible policies),用P1n(x1),Pkn(xk),Pkj(xk)表示。

    5.状态转移方程
    在确定性过程中,一旦某阶段的状态和决策为已知,下阶段的状态便完全确定。用状态转移方程(equation of state)表示这种演变规律,写作:

     引言中例子的状态转移方程为:xk+1=uk(xk)

    6.指标函数和最优值函数 

    指标函数(objective function)是衡量过程优劣的数量指标,它是关于策略的数量函数,从阶段k到阶段n的指标函数用Vkn(xk,pkn(xk))表示,k=1,2,...,n。

    能够用动态规划解决的问题的指标函数应具有可分离性(可以将大问题分解为子问题),即Vkn可表为xk,uk,Vk+1 n的函数,记为:可以看出来这个结构是递归的)

     

    动态规划算法的基本步骤

    1.分析最优解的性质,并刻划其结构特征。 (无后向性)
    2.递归地定义最优值。
    3.以自底向上的方式或自顶向下的记忆化方法(备忘录法)计算出最优值。
    4.根据计算最优值时得到的信息,构造最优解。

  • 相关阅读:
    Java 常提到的自然序(Natural Ordering)
    设计模式(三)行为模式
    设计模式(二)结构模式
    设计模式(一)建造者模式
    设计模式的概念以及面向对象设计原则
    Java源码 HashMap<K,V>
    mybatis注解使用
    spring整合mybatis
    数据库中的表批量映射为对象
    返回用户提交的图像工具类
  • 原文地址:https://www.cnblogs.com/code-fun/p/12601441.html
Copyright © 2011-2022 走看看