运筹说 第67期 | 动态规划模型的建立与求解

news2024/12/24 8:52:37

通过前一期的学习,我们已经学会了动态规划的基本概念和基本原理。本期小编带大家学习动态规划模型的建立与求解。

动态规划模型的建立

 概述

建立动态规划的模型,就是分析问题并建立问题的动态规划基本方程。

成功地应用动态规划方法的关键,在于识别问题的多阶段特征,将问题分解成为可用递推关系式联系起来的若干子问题,而正确建立基本递推关系方程的关键又在于正确选择状态变量,保证各阶段的状态变量具有递推的状态转移关系s_{k+1}=T_{k}(s_{k},u_{k})

 例题展示

接下来小编将以资源分配问题为例介绍动态规划的建模条件及解法,详见例1。资源分配问题是动态规划的典型应用之一,资源可以是资金、原材料、设备、劳力等,资源分配就是将一定数量的一种或几种资源恰当地分配给若干使用者,以获取最大效益。

例1:某公司有资金10万元,若投资于项目i(i=1,2,3)的投资额为x_{i}时,其收益分别为g_{1}(x_{1})=4x_{1},g_{2}(x_{2})=9x_{2},g_{3}(x_{3})=2x_{3}^{2},问应如何分配投资数额才能使总收益最大?

首先这是一个与时间无明显关系的静态最优化问题,可列出其静态模型:

x_{1},x_{2},x_{3},使maxz=4x_{1}+9x_{2}+2x_{3}^{2},且满足约束

为了应用动态规划方法求解,可以人为地赋予它“时段”的概念。将投资项目排序,依次对项目1、2、3投资,即把问题划分为3个阶段,每个阶段只决定对一个项目应投资的金额,从而转化为一个3段决策过程。通常可以把决策变量u_{k}定为原静态问题中的变量 x_{k} ,即设u_{k}=x_{k}(k=1,2,3)

状态变量和决策变量有密切关系,状态变量一般为累计量或随递推过程变化的量。针对本例,可以把每阶段可供使用的资金定为状态变量s_{k},初始状态s_{1}=10u_{1}为可分配用于第一种项目的最大资金,则当第一阶段(k=1)时,有

第二阶段(k=2)时,状态变量为余下可投资于其余两个项目的资金,即

一般地,当第k段时

于是有

阶段k:本例中取1,2,3。

状态变量s_{k}:第k段可以投资于第k项到第3个项目的资金。

决策变量x_{k} :决定给第k个项目投资的资金。

状态转移方程:s_{k+1}=s_{k}-x_{k}

指标函数:v_{k,3}=\sum_{i=k}^{3}{g_{i}(x_{i}})

最优指标函数f_{k}(s_{k}) :当可投资金为s_{k}时,投资第k-3项所得的最大收益。

基本方程为

用动态规划方法逐段求解,便可得到各项目最佳投资金额, f_{1}(10)就是所求的最大收益。

三 模型建立要点

1.分析题意,识别问题的多阶段特性,按时间或空间的先后顺序适当地划分为满足递推关系的若干阶段,对非时序的静态问题要人为地赋予“时段”概念。

2.正确地选择状态变量,使其具备两个必要特征:

(1)可知性;即过程演变的各阶段状态变量的取值,能直接或间接地确定。

(2)能够确切地描述过程的演变且满足无后效性。即由第阶段的状态出发的后部子过程,可以看作是一个以为初始状态的独立过程。

3.根据状态变量与决策变量的含义,正确写出状态转移方程或转移规则。

4.根据题意明确指标函数 v_{k,n},最优指标函数f_{k}(s_{k}) 以及阶段指标v_{k}(s_{k},u_{k}) 的含义,并正确列出最优指标函数的递推关系及边界条件(即基本方程)。

逆序解法与顺序解法

动态规划的求解有两种基本方法:逆序解法(后向动态规划方法)、顺序解法(前向动态规划方法)。

上一期的例题求解实际使用的就是逆序解法,即寻优的方向与多阶段决策过程的实际行进方向相反,从最后一段开始计算逐段前推,求得全过程的最优策略。与之相反,顺序解法的寻优方向与过程的行进方向相同,计算时从第一段开始逐段向后递推,计算后一阶段要用到前一阶段的求优结果,最后一段计算的结果就是全过程的最优结果。

一 例题展示

小编接下来将用例2来说明顺序解法。

例2:给定一个线路网格图(图1),要从A地向F地铺设一条输油管道,各点间连线上的数字表示距离,问应该选择什么路线,可使总距离最短?

图1

由于此问题的始点A与终点F都是固定的,计算由A点到F点的最短路线与由F点到A点的最短路线没有什么不同。若设f_{k}(s_{k+1})表示从起点A到第k阶段状态的最短距离,我们就可以由前向后逐步求出起点A到各阶段起点的最短距离,最后求出A点到F点的最短距离及路径。计算步骤如下:

k=0时,f_{0}(s_{1})=f_{0}(A)=0,这是边界条件。

k=1时,按f_{1}(s_{2})的定义有

k=2时,

 

类似地,可算得

按定义知 f_{5}(F)=17 为所求最短路长,而路径则为A\rightarrow B_{1}\rightarrow C_{2}\rightarrow D_{2}\rightarrow E_{3}\rightarrow F ,全部计算情况如图2所示。图中每节点上方括号内的数表示该点到A点的最短距离,粗黑线表示该点到A点的路径。

图2

上述解法可以写成如下的递推方程:

状态转移方程为: s_{k}=T_{k}(s_{k+1},u_{k})

顺序解法与逆序解法本质上并无区别,一般来说,当初始状态给定时可用逆序解法,当终止状态给定时可用顺序解法。若问题给定了一个初始状态与一个终止状态,则两种方法均可使用,如例2。但若初始状态虽已给定,终点状态有多个,需比较到达不同终点状态的各个路径及最优指标函数值,以选取总效益最佳的终点状态时,使用顺序解法比较简便。

总之,针对问题的不同特点,灵活地选用这两种方法之一,可以使求解过程简化。

二 建模注意事项

  1. 状态转移方式不同

如图3所示,逆序解法中第k段的输入状态为 s_{k} ,决策为 u_{k} ,由此确定输出为s_{k+1},即第k+1段的状态,所以状态转移方程为 s_{k+1}=T_{k}(s_{k+1},u_{k}) ,该式称为状态s_{k}s_{k+1}的顺序转移方程。

图3

顺序解法中第k段的输入状态为s_{k+1},决策为u_{k} ,输出为 s_{k},如图4所示,此时的状态转移方程为 s_{k}=T_{k}(s_{k+1},u_{k}),该式称为由状态 s_{k+1}s_{k} 的逆序状态转移方程。

图4

同样的道理,逆序解法中的阶段指标v_{k}(s_{k},u_{k})在顺序解法中应为v_{k}(s_{k+1},u_{k})

2.指标函数的定义不同

逆序解法中,我们定义最优指标函数f_{k}(s_{k})表示第k段从状态s_{k}出发,到终点后部分子过程最优效益值, f_{1}(s_{1}) 是整体最优函数值。

顺序解法中,应定义最优指标函数f_{k}(s_{k+1})表示第k段从起点到状态s_{k+1} 的前部子过程最优效益值,f_{n}(s_{n+1})是整体最优函数值。

3.基本方程形式不同

(1)当指标函数为阶段指标和形式,在逆序解法中

则基本方程为

顺序解法中

基本方程为

(2)当指标函数为阶段指标积形式,在逆序解法中

则基本方程为

在顺序解法中,

基本方程为

特别指出的是,这里有关顺序解法的表达式,是在原状态变量符号不变条件下得出的,若将状态变量记法改为 S_{0}S_{1},... S_{n} ,则最优指标函数也可表示为f_{k}(s_{k}),即符号等同于逆序解法,但含义不同。

基本方程分段求解时的几种常用算法

动态规划模型建立后,对基本方程分段求解,不像线性规划或非线性规划那样有固定的解法,必须根据具体问题的特点,结合数学技巧灵活求解,大体有以下几种方法。

一 离散变量的分段穷举算法

动态规划模型中的状态变量与决策变量若被限定只能取离散值,则可采用分段穷举法。如例2的求解方法就是分段穷举算法,由于每段的状态变量和决策变量离散取值个数较少,所以动态规划的穷举法要比一般的穷举法有效。用分段穷举法求最优指标函数值时,最重要的是正确确定每段状态变量取值范围和允许决策集合的范围。

二 连续变量的解法

当动态规划模型中状态变量与决策变量为连续变量,就要根据方程的具体情况灵活选取求解方法,如经典解析方法、线性规划方法、非线性规划法或其他数值计算方法等。如在例1中,状态变量与决策变量均可取连续值而不是离散值,所以每阶段求优时不能用穷举方法处理。下面分别用逆序解法和顺序解法来求解例1。

(1)用逆序解法

由前面分析可知,例1为三段决策问题,状态变量s_{k} 为第k段初拥有的可以分配给第k到第3个项目的资金;决策变量 x_{k} 为决定投给第k个项目的资金;状态转移方程为 s_{k+1}=s_{k}-x_{k} ;最优指标函数f_{k}(s_{k}) 表示第k阶段,初始状态为 s_{k} 时,从第k到第3个项目所获最大收益,f_{1}(s_{1})) 即为所求的总收益。递推方程为

这是一个简单的函数求极值问题,易知当 x_{3}^{*}=s_{3} 时,取得极大值,即

所以x_{2}=s_{2}-9/4是极小点。

极大值只可能在 [0,s_{2}] 端点取得,

f_{2}(0)=f_{2}(s_{2})时,解得s_{2}=9/2

s_{2}>9/2 时, f_{2}(0)>f_{2}(s_{2}) ,此时x_{2}^{*}=0

s_{2}<9/2 时,f_{2}(0)<f_{2}(s_{2}),此时x_{2}^{*}=s_{2}

但此时 s_{2}=s_{1}-x_{1}=10-0=10>9/2

s_{2}<9/2 矛盾,所以舍去。

所以 x_{1}=s_{1}-1是极小点。

比较[0,10]两个端点, x_{1}=0时,f_{1}(10)=200

x_{1}=10时,f_{1}(10)=40

所以 x_{1}^{*}=0

再由状态转移方程顺推 s_{2}=s_{1}-x_{1}^{*}=10

因为 s_{2}>9/2

所以s_{3}=s_{2}-x_{2}^{*}=10

由此 x_{3}^{*}=s_{3}=0

最优投资方案为全部投资于第3个项目,可得最大收益200万元。

(2)用顺序解法

阶段划分和决策变量的设置同逆序解法,令状态变量s_{k+1}表示可用于第1到第k个项目投资的金额,则有状态转移方程为s_{k}=s_{k+1}-x_{k}

令最优指标函数 f_{k}(s_{k+1}) 表示第k段投资额为s_{k+1}时第1到第k项目所获的最大收益,此时顺序解法的基本方程为

当k=1时,有

当k=2时,有

当k=3时,有

所以,此点为极小点。

极大值应在端点 [0,s_{4}]=[0,10] 取得

x_{3}=0时,f_{3}(10)=90

x_{3}=10时,f_{3}(10)=200

所以 x_{3}^{*}=10

再由状态转移方程逆推: s_{3}=10-x_{3}^{*}=0 ,x_{2}^{*}=0,s_{2}=10-x_{2}^{*}=0,x_{1}^{*}=0

所以最优投资方案与逆序解法结果相同,只投资于项目3,最大收益为200万元。比较两种解法的过程,可以发现,对本题而言,顺序解法比逆序解法简单。

三 连续变量的离散化解法

接下来,小编还是利用投资分配问题先介绍连续变量离散化的概念,如投资分配问题的一般静态模型为:

建立它的动态规划模型,其基本方程为

其状态转移方程为s_{k+1}=s_{k}-x_{k}

由于 s_{k}x_{k} 都是连续变量,当各阶段指标 g_{k}(x_{k})没有特殊性质而较为复杂时,要求出 f_{k}(s_{k})会比较困难,因而求全过程的最优策略也就相当不容易,这时常常采用把连续变量离散化的办法求解其数值解,具体做法如下:

(1)令s_{k}=0,\Delta ,2,\Delta ,...,m\Delta, \Delta =a ,把区间 [0,a] 进行分割, Δ 的大小可依据问题所要求的精度以及计算机的容量来定。

(2)规定状态变量s_{k}以及决策变量 x_{k} 只在离散点0,\Delta ,2,\Delta ,...,m\Delta上取值,相应的指标函数 f_{k}(s_{k}) 就被定义在这些离散值上,于是递推方程就变为

(3)按逆序方法,逐步递推求出 f_{n}(s_{n}),…,f_{1}(s_{1}),最后求出最优资金分配方案。

小编仍使用例1作为离散化例子

解:规定状态变量和决策变量只在给出的离散点上取值,令 Δ=2 ,将区间[0,10]分割0,2,4,6,8,10成六个点,即状态变量s_{k}集合为{0,2,4,6,8,10}。

允许决策集合为0\leq x_{k}\leq s_{k}x_{k}s_{k} 均在分割点上取值。

动态规划基本方程为

当k=3时,

式中 s_{3}x_{3}的集合均为{0,2,4,6,8,10}。计算结果见表1。

表1

当k=2时,

计算结果见表2

表2

当k=1时,

计算结果见表3

表3

​​​​​​​

计算结果表明,最优决策为:x_{1}^{*}=0,x_{2}^{*}=0,x_{3}^{*}=0 ,最大收益为f_{1}(10)=200 ,与上述用逆序和顺序算法得到的结论完全相同。

应指出的是,这种方法有可能丢失最优解,一般得到原问题的近似解。

作者 | 张宇 刘智厅

责编 | 刘文志

审核 | 徐小峰

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1387191.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[渗透测试学习] Hospital - HackTheBox

文章目录 信息搜集getshell提权信息搜集 nmap扫描一下端口 发现8080端口和443端口有http服务 然后发现3389端口是启用了ms-wbt-server服务 在对443端口的扫描没有收获,并且只有邮箱登录界面无法注册 接着看向8080端口,我们随便注册用户登录后发现有文件上传功能 getshell …

Linux入门级常用命令学习笔记

以下命令是我跟着编程界的大佬鱼皮学习Linux时用的命令&#xff0c;我把它都记下来&#xff0c;权当作笔记&#xff0c;可供自己后期反复练习使用&#xff0c;让我们学习一下最基本的Linux命令吧。 一、Linux实战命令 在dos下 【ssh 服务器ip】可以连接服务器&#xff0c;输入…

HCIA基础知识

IP地址、静态路由、动态路由、交换机 OSPF RIP DHCP VLAN ACL NAT OSI TCP/IP UDP TCP 三次握手&#xff0c;四次挥手&#xff0c;报头 什么是网络&#xff1f; 由网络连接设备通过传输介质将网络终端设备连接起来&#xff0c;进行资源共享、信息传递的平台。 OSI七…

运筹说 第98期|无约束极值问题

上一期我们一起学习了关于非线性规划问题的一维搜索方法的相关内容&#xff0c;本期小编将带大家学习非线性规划的无约束极值问题。 下面&#xff0c;让我们从实际问题出发&#xff0c;学习无约束极值问题吧&#xff01; 一、问题描述及求解原理 1 无约束极值问题的定义 无约…

【C++干货铺】会旋转的二叉树——AVLTree

个人主页点击直达&#xff1a;小白不是程序媛 C系列专栏&#xff1a;C干货铺 代码仓库&#xff1a;Gitee 目录 前言 AVL树 AVL树的概念 AVL树结点的定义 AVL树的插入 寻找插入结点的位置 修改平衡因子 AVL树的旋转 右单旋 左单旋 先右旋再左旋 先左旋再右旋 AVL树…

【JAVA-打包jar】jar不能双击运行,Jar包找不到主类

我的问题比较简单&#xff0c;搞了一下午&#xff0c;查阅了很多教程&#xff0c;无意发现&#xff0c;居然是 jdk过期需要更新&#xff01; 气的吐血&#xff01; 所以不要废话&#xff0c;首先检查自己的环境变量和JDK&#xff01;&#xff01;&#xff01; 环境变量&…

ML:2-1-4理解python如何实现forward prop

文章目录 1. 单层上的向前传播forward prop2. 前向传播的一般实现3. 通用人工智能 1. 单层上的向前传播forward prop 【了解在python中如何实现forward prop】 继续使用咖啡烘焙模型&#xff1a; 了解经过每一个神经元的预测过程。设置每一个神经元的w&#xff0c;b值。从而得…

(2024,分数蒸馏抽样,Delta 降噪分数,LoRA)PALP:文本到图像模型的提示对齐个性化

PALP: Prompt Aligned Personalization of Text-to-Image Models 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 4. 提示对齐方法 4.1 概述 4.2 个性化 4.3 提示对齐分数抽…

深度学习记录--Train/dev/test sets

为什么需要训练集、验证集(简单交叉验证集)和测试集&#xff1f; 为了创建高效的神经网络&#xff0c;需要不断进行训练(迭代) 一个神经网络的产生 从最开始的想法idea开始&#xff0c;然后付诸于代码code&#xff0c;根据结果验证反过来对一开始的想法idea进行修正&#xf…

架构简介,到底什么是架构?

1. 前言 对技术人员来说&#xff0c;“架构”是一个再常见不过的词儿了。我们经常对新员工培训整个系统的架构&#xff0c;参加架构设计评审&#xff0c;学习业界开源系统&#xff08;例如&#xff0c;MySQL、Hadoop&#xff09;的架构&#xff0c;研究大公司的架构实现&#…

2024年腾讯云服务器多少钱1个月?

2024年腾讯云服务器多少钱1个月&#xff1f;5元一个月&#xff0c;62元一年&#xff0c;更多腾讯云服务器精准报价。腾讯云服务器租用优惠价格表&#xff1a;轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;…

2024年全网最全春招时间线

2024年全网最全春招时间线 春招&#xff0c;许多同学可能会误以为这是春天才会进行。 你可能会想&#xff0c;期末刚考完试&#xff0c;先享受下寒假&#xff0c;再欢度春节&#xff0c;收些红包&#xff0c;甚至还能抽空去理个发型。等到春日明媚时&#xff0c;再参加春招活…

如何用ArcGIS制作城市用地适应性评价

01概述 “城市用地适宜性评价是城市总体规划的一项重要前期工作&#xff0c;它首先对工程地质、社会经济和生态环境等要素进行单项用地适宜性评价&#xff0c;然后用地图叠加技术根据每个因子所占权重生成综合的用地适宜性评价结果&#xff0c;俗称“千层饼模式”。 做用地适…

STM32F103标准外设库——寄存器 (二)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;V…

C语言中对变量的理解

变量(variable)是程序中不可或缺的组成单位&#xff0c;是最基本的存储单元。 1.什么是变量&#xff1f; Ⅰ.概念&#xff1a; 内存中的一个存储区域&#xff0c;该区域的数据可以在同一类型范围内不断变化。 通过变量名&#xff0c;可以访问这块内存区域&#xff0c;获取里…

翻译: Streamlit从入门到精通 部署一个机器学习应用程序 四

Streamlit从入门到精通 系列&#xff1a; 翻译: Streamlit从入门到精通 基础控件 一翻译: Streamlit从入门到精通 显示图表Graphs 地图Map 主题Themes 二翻译: Streamlit从入门到精通 构建一个机器学习应用程序 三 1. 5. 如何部署一个Streamlit应用 部署是将应用程序从开发…

Linux中文件名修改的多种方法

找一个不算漂亮的普通女孩&#xff0c;一起柴米油盐&#xff0c;一起日出日落&#xff0c;一起田间地头&#xff0c;一起春花冬雪&#xff01;要一个不算大的小房子&#xff0c;生两个健康可爱的宝宝&#xff0c;这样就很好。。。。。。 简介&#xff1a; 在Linux系统中&#x…

nvcc -V显示command not found

出现这个问题&#xff0c;不仅是 nvcc -V会显示command not found,nvidia-smi同样也会显示 解决方法如下&#xff1a; 1&#xff09;这里首先转换到CUDA所在位置&#xff0c;一般是在这个位置 cd /usr/local 2&#xff09;打开、编辑环境变量的配置文件 vim ~/.bashrc …

使用NI VeriStand构建分布式系统

使用NI VeriStand构建分布式系统 - NI 概览 本文探讨了如何使用NI VeriStand来构建分布式处理和I/O系统&#xff0c;并提供诸多功能来帮助工程师更高效地开发强大的分布式系统。 飞机、汽车或其他工业项目中的控制系统由于需要执行监测、测试或仿真任务&#xff0c;其所需的计…

【MATLAB】EEMD+FFT+HHT组合算法

代码原理 EEMD&#xff08;经验模态分解&#xff09;FFT&#xff08;快速傅里叶变换&#xff09;HHT&#xff08;希尔伯特-黄变换&#xff09;组合算法是一种常用的信号处理和分析方法。这个组合算法包含了EEMD、FFT和HHT三个步骤&#xff0c;可以用于处理非线性和非平稳信号。…