【管理运筹学】背诵手册(五)| 动态规划

五、动态规划

基本概念

阶段(Stage):将所给问题的过程,按时间或空间特征分解成若干相互联系的阶段,以便按次序去求解每阶段的解,常用字母 k k k 表示。

状态(State):各阶段开始时的客观条件叫做状态。描述各阶段状态的变量称为状态变量,常用 s k s_k sk 表示第 k k k 阶段的状态变量,状态变量 s k s_k sk 的取值集合称为状态集合,用 S k S_k Sk 表示。状态变量应具有无后效性:某阶段状态给定后,这个阶段以后过程的发展不受这段以前各状态的影响。

决策和策略(Decision and Policy):各阶段状态确定后,就可以作不同的决定,从而确定下一阶段的状态,这种决定称为决策。表示决策的变量称为决策变量,常用 u k ( s k ) u_k(s_k) uk(sk) 表示,允许的决策集合常用 D k ( s k ) D_k(s_k) Dk(sk) 表示。各阶段决策确定后,整个问题的决策序列就构成一个策略。

状态转移方程:如果给定了第 k k k 阶段的状态 s k s_k sk ,本阶段决策为 u k ( s k ) u_k(s_k) uk(sk) ,则第 k + 1 k+1 k+1 阶段的状态 s k + 1 s_{k+1} sk+1 也就完全确定,它们的关系就称为状态转移方程。

指标函数:用于衡量所选定策略优劣的数量指标称为指标函数。直接指标函数表示某阶段的决策产生的效益,常用 d k ( u k ) d_k(u_k) dk(uk) 表示。最优指标函数表示从第 k k k 阶段状态为 s k s_k sk 采用最优策略时,后部过程的最优收益值,常用 f k ( s k ) f_k(s_k) fk(sk) 表示。

五要素

动态规划模型五要素:

  1. 将问题按时空特征恰当地划分为若干个阶段。
  2. 正确地规定状态变量 s k s_k sk ,使得它既能描述过程的演变,又具有无后效性。
  3. 正确地规定决策变量 u k u_k uk 以及每阶段的允许决策集合 D k ( s k ) D_k(s_k) Dk(sk) .
  4. 正确写出状态转移方程 s k + 1 = g k ( s k , u k ) s_{k+1}=g_k(s_k,u_k) sk+1=gk(sk,uk)
  5. 正确地定义各阶段的直接指标函数 d k ( s k , u k ) d_k(s_k,u_k) dk(sk,uk) 和后部子过程的最优指标函数 f k ( s k ) f_k(s_k) fk(sk) ,并写出基本方程(以 max ⁡ \max max 和相加求收益为例): { f k ( s k ) = max ⁡ { d k ( s k , u k ) + f k + 1 ( s k + 1 ) } , k = n , n − 1 , ⋯ , 1 f n + 1 ( s n + 1 ) = 0 , 边界条件 \begin{cases} f_k(s_k)=\max\{d_k(s_k,u_k)+f_{k+1}(s_{k+1})\} &,k=n,n-1,\cdots,1 \\ f_{n+1}(s_{n+1})=0&,边界条件\end{cases} {fk(sk)=max{dk(sk,uk)+fk+1(sk+1)}fn+1(sn+1)=0,k=n,n1,,1,边界条件

生产存储问题

做题时,我们可也按照动态规划模型五要素进行建模,以生产与储存问题为例。

在这里插入图片描述

解: 将问题划分为 4 4 4 个阶段( k = 1 , 2 , 3 , 4 k=1,2,3,4 k=1,2,3,4),每个阶段表示一个时期;状态变量 s k s_k sk 表示第 k k k 阶段开始时的库存量;决策变量 x k x_k xk 表示第 k k k 阶段的产品生产量, d k d_k dk 表示第 k k k 阶段的产品需求量,则状态转移方程为: s k + 1 = s k + x k − d k s_{k+1}=s_k+x_k-d_k sk+1=sk+xkdk 直接指标函数 g k ( x k ) g_k(x_k) gk(xk) 表示第 k k k 阶段决策为 x k x_k xk 时的成本,包括生产成本 c k ( x k ) c_k(x_k) ck(xk) 和存储成本 m k ( x k ) m_k(x_k) mk(xk) 。其中, c k ( x k ) = { 0 , x k = 0 3 + x k , x k = 1 , 2 , ⋯ , 6 ∞ , x k > 6 c_k(x_k)=\begin{cases} 0&,x_k=0\\ 3+x_k&,x_k=1,2,\cdots,6\\ \infty&,x_k>6 \end{cases} ck(xk)= 03+xk,xk=0,xk=1,2,,6,xk>6 m k ( x k ) = 0.5 ( s k + x k − d k ) m_k(x_k)=0.5(s_k+x_k-d_k) mk(xk)=0.5(sk+xkdk) 。最优指标函数 f k ( s k ) f_k(s_k) fk(sk) 表示第 k k k 阶段状态为 s k s_k sk 采用最优策略时,后部过程的最小成本,则递推基本方程为: f k ( s k ) = { min ⁡ { c k ( x k ) + m k ( x k ) + f k + 1 ( s k + 1 ) } , k = 4 , 3 , 2 , 1 f 5 ( s 5 ) = 0 f_k(s_k)=\begin{cases} \min\{c_k(x_k)+m_k(x_k)+f_{k+1}(s_{k+1})\},k=4,3,2,1\\ f_5(s_5)=0\end{cases} fk(sk)={min{ck(xk)+mk(xk)+fk+1(sk+1)},k=4,3,2,1f5(s5)=0 随后便是每个阶段的求解了,最关键的就是确定 s k s_k sk x k x_k xk 的取值范围,需要瞻前顾后,考虑每阶段的生产能力以及最后阶段的库存要求。

设备更新问题

对于设备更新问题,教材上用了别的符号,让人难以和之前的联系起来,但其实它也可以用我们常见的符号表达的。用一个实际题目来说明。

在这里插入图片描述
在这里插入图片描述
解: 将问题分为 5 个阶段( k = 1 , 2 , 3 , 4 , 5 k=1,2,3,4,5 k=1,2,3,4,5),每个阶段代表一年。状态变量 s k s_k sk 表示第 k k k 阶段初机器的役龄,决策变量 x k x_k xk 表示第 k k k 阶段时保留(K)还是更新(R)。则状态转移方程为: s k + 1 = { s k + 1 , x k = K 1 , x k = R s_{k+1}=\begin{cases} s_k+1&,x_k=K\\ 1&,x_k=R \end{cases} sk+1={sk+11,xk=K,xk=R 直接指标函数 g k ( x k ) g_k(x_k) gk(xk) 表示第 k k k 阶段做出决策 x k x_k xk 的收入, I k ( s k ) I_k(s_k) Ik(sk) 表示第 k k k 阶段役龄为 s k s_k sk 的机器带来的收入, O k ( s k ) O_k(s_k) Ok(sk) 表示第 k k k 阶段役龄为 s k s_k sk 的机器的运行费用, C k ( s k ) C_k(s_k) Ck(sk) 表示第 k k k 阶段役龄为 s k s_k sk 的机器更新费用,则有 g k ( x k ) = { I k ( s k ) − O k ( s k ) , x k = K I k ( 0 ) − O k ( 0 ) − C k ( s k ) , x k = R g_k(x_k)=\begin{cases} I_k(s_k)-O_k(s_k)&,x_k=K\\ I_k(0)-O_k(0)-C_k(s_k)&,x_k=R \end{cases} gk(xk)={Ik(sk)Ok(sk)Ik(0)Ok(0)Ck(sk),xk=K,xk=R 最优指标函数 f k ( s k ) f_k(s_k) fk(sk) 表示第 k k k 阶段役龄为 s k s_k sk 的机器采用最优策略时,后部过程的最大收入,可写出递推基本方程为: f k ( s k ) = { max ⁡ { g k ( x k ) + f k + 1 ( s k + 1 ) } , k = 5 , 4 , 3 , 2 , 1 f 6 ( s 6 ) = 0 f_k(s_k)=\begin{cases} \max\{g_k(x_k)+f_{k+1}(s_{k+1})\},k=5,4,3,2,1\\ f_6(s_6)=0\end{cases} fk(sk)={max{gk(xk)+fk+1(sk+1)},k=5,4,3,2,1f6(s6)=0 剩下就是根据表中的数据代入递推方程了。

静态规划问题

动态规划方法还可以用来求解一些静态规划问题,如整数规划和非线性规划问题等。一般将约束条件的右端资源量作为状态变量,决策变量为原规划问题的决策变量,直接指标函数为目标函数对应的部分。

有时候最后一个阶段的直接指标函数较为复杂,可以换一换次序,简化计算。


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

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

相关文章

计算机网络之网络层

一、概述 主要任务是实现网络互连,进而实现数据包在各网络之间的传输 1.1网络引入的目的 从7层结构上看,网络层下是数据链路层 从4层结构上看,网络层下面是网络接口层 至少我们看到的网络层下面是以太网 以太网解决了什么问题? 答…

计算机网络之应用层

一、概述 引入目的: 为了方便用户去使用; 该如何方便用户使用网络呢,即怎样帮助用户使用网络? 1.用户需要知道网络资源所在的位置 2.网络上资源一定是在资源子网的主机上 3.资源子网上的主机,在通信子网中用IP地…

qt-C++笔记之终端Ctrl+C关闭界面和ROS节点

qt-C笔记之终端CtrlC关闭界面和ROS节点 code review! 文章目录 qt-C笔记之终端CtrlC关闭界面和ROS节点1.运行2.main.cpp3.main_window.hpp 1.运行 2.main.cpp 3.main_window.hpp

SpringCloud 微服务全栈体系(十六)

第十一章 分布式搜索引擎 elasticsearch 六、DSL 查询文档 elasticsearch 的查询依然是基于 JSON 风格的 DSL 来实现的。 1. DSL 查询分类 Elasticsearch 提供了基于 JSON 的 DSL(Domain Specific Language)来定义查询。常见的查询类型包括&#xff1…

【数据结构(C语言)】浅谈栈和队列

目录 文章目录 前言 一、栈 1.1 栈的概念及结构 1.2 栈的实现 1.2.1. 支持动态增长的栈的结构 1.2.2 初始化栈 1.2.3 入栈 1.2.4 出栈 1.2.5 获取栈顶元素 1.2.6 获取栈中有效元素个数 1.2.7 检查栈是否为空 1.2.8 销毁栈 二、队列 2.1 队列的概念及结构 2.2 队…

Javaweb之前后台分离开发介绍的详细解析

2.1 前后台分离开发介绍 在之前的课程中,我们介绍过,前端开发有2种方式:前后台混合开发和前后台分离开发。 前后台混合开发,顾名思义就是前台后台代码混在一起开发,如下图所示: 这种开发模式有如下缺点&a…

使用vcpkg安装库失败的解决方法

1、前言 vcpk是是一款开源的c/c库管理工具,尤其是在windows平台,可以帮助我们很好的管理各种依赖包。 在windows环境做c/c开发的人应该都深有体会,有时候编译需要下载一堆依赖库,导致搭建编译环境特别麻烦。但是,通过v…

前端 vue 面试题(二)

文章目录 如何让vue页面重新渲染组件间通信vue为什么要mutation、 action操作插槽、具名插槽、作用域插槽vue编译使用的是什么库?vue怎么实现treeshakingwebpack实现treeshaking为什么只有es module 能支持 tree shaking mixin 的作用mixin的底层原理nexTick原理vue…

预处理机制

跟着肯哥(不是我)学预处理机制 预处理类别 宏定义:#define 将文本替换为表达式或语句 条件编译:#ifdef、#ifndef和#if、#elif、#endif 根据标识符是否被定义选择编译代码 头文件包含:#include 将其他文件&#x…

Jmeter怎么实现接口关联?

用于接口测试时,后一个接口经常需要用到前一次接口返回的结果,应该如何获取前一次请求的结果值,应用于后一个接口呢,拿一个登录的例子来说明如何获取。 1、打开jmeter,新建一个测试计划,在测试计划里新建一…

将所有图片居中对齐

Ctrl h 调出替换框 ^g表示所有图片 格式里面选择段落 全部替换

winlogbeat采集windows日志

下载链接 https://www.elastic.co/cn/downloads/past-releases/winlogbeat-7-16-2 配置文件 # ---------------------------- Elasticsearch Output ---------------------------- output.elasticsearch:# Array of hosts to connect to.hosts: ["192.168.227.160:9200&…

Vue3中如何响应式解构 props

目录 1,前言2,解决2.1,利用插件,实现编译时转换2.2,toRef 和 toRefs 1,前言 Vue3 中为了保持响应性,始终需要以 props.x 的方式访问这些 prop。这意味着不能够解构 defineProps 的返回值&#…

Navicat 技术指引 | 适用于 GaussDB 的数据迁移工具

Navicat Premium(16.2.8 Windows版或以上) 已支持对 GaussDB 主备版的管理和开发功能。它不仅具备轻松、便捷的可视化数据查看和编辑功能,还提供强大的高阶功能(如模型、结构同步、协同合作、数据迁移等),这…

Cesium 展示——地球以及渲染数据导出(下载)为图片或 pdf

文章目录 需求分析新加需求分析第一种方式第二种方式需求 将 Cesium 球体以及渲染数据导出为 jpg/png/pdf 分析 获取场景 scene 信息,转为image 的 octet-stream 流 进行下载为图片 /*** @todo canvas 导出图片* @param {string} dataurl - 地址* @return {Blob}*/ functio…

设备健康管理平台助力锂电企业实现可持续发展

随着锂电池产业的快速发展,设备的稳定运行和精准维护对于锂电企业来说至关重要。传统的设备维护方式在效率和全面性方面存在局限,无法满足锂电行业对设备管理的需求。然而,通过设备健康管理平台的引入,锂电企业现在可以充分发挥其…

【LeetCode:1410. HTML 实体解析器 | 模拟+哈希表+字符串+库函数】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

【C语言】中,输入一个数组,实现将输入的n个数字按照从大到小的顺序输出。【通俗简单易懂】

本篇文章中,我们将讲述在C语言中,输入一个数组,如何用for循环实现将输入的n个数字按照从大到小输出。 一.定义数组并初始化 首先,我们定义一个整形的数组并将其初始化。输入n,来决定数组中整数的个数。 然后用for循…

通过HTML网页对mysql数据库进行增删改查(CRUD实例)

首先我们得了解一下大致的架构 ,如下: 我们采用自底向上的方式进行开发, 一、先写mysql数据库 二、再写java后端(Spring MVC架构)(这个是什么东西不懂不要紧,跟着步骤做就行了) 三、最后写前端页面(HTML) 一、 Mysql数据库部分 我们要通过网页对数据库进行开发,…

解决:Gitee + PicGo配置图床失败

解决:Gitee PicGo配置图床失败 PicGo安装插件的时候选择:gitee-uploader,不要选择gitee! 在Gitee新建的图床仓库中设置一个images文件夹,用来保存上传的图片,但是要注意在PicGo中的path中要写上路径/img…