运筹学_5.动态规划

文章目录

  • 引言
  • 5.1 动态规划的基本概念
    • 首先明确什么是多阶段决策问题
  • 5.2 动态规划的最短路径问题
    • 贝尔曼最优化原理
    • 建立动态规划模型的步骤
  • 5.3 动态规划的投资分配问题
    • 投资分配问题定义
    • 投资分配问题的数学模型
  • 5.4 动态规划的背包问题
    • 背包问题定义
    • 背包问题数学模型

引言

动态规划(dynamic programming)是运筹学的一个分支,是解决多阶段决策过程最优化的一种方法。该方法是由美国数学家贝尔曼(R.E.Bellman)等人在20世纪50年代初提出的。Bellman在1957年出版了《Dynamic Programing》一书,是动态规划领域中的第一本著作。动态规划问也以来,在经济管理、工程技术等方面得到了广泛应用。例如最短路线、库存管理、资源分配、装载问题等。

5.1 动态规划的基本概念

首先明确什么是多阶段决策问题

  • 多阶段决策问题定义
    多阶段决策问题中,系统的动态过程可以按照时间进程分为状态相互联系而又相互区别的多个阶段,每个阶段都要进行决策,目的是使整个动态过程的决策达到最优

  • 阶段
    指的是决策问题需要做出决策的步数。阶段总数常记为n,对应n个阶段的决策问题。阶段的序号常记为k,称为阶段变量,k=1,2,…,n。k即可以是顺序编号也可以是逆序编号,常用顺序编号

  • 状态
    各阶段开始时的客观条件,第k阶段的状态常用状态变量 s k s_k sk表示,各个阶段状态变量取值的集合称为状态集合,用 S k = { s 1 , s 2 , . . . s k } S_k=\{s_1,s_2,...s_k\} Sk={s1,s2,...sk}表示

  • 决策
    是指从某阶段的某状态出发,在若干个不同方案中做出决策的变量,称为决策变量,用 u k ( s k ) u_k(s_k) uk(sk)表示

  • 状态转移方程
    从上一阶段的某一状态值转变为下一阶段某一状态值的转移规律,用 s k + 1 = T k ( s k , u k ) s_{k+1}=T_k(s_k,u_k) sk+1=Tk(sk,uk)
    在这里插入图片描述

  • 无后效性(马尔科夫性)

    • 层面一:在推导后面阶段的状态的时候,我们只关心前一个阶段的状态值,不关心这个状态是怎么一步一步推导出来的。
    • 层面二: 某阶段状态一旦确定,就不受之后阶段的决策影响。
  • 指标函数:分为阶段指标函数和过程指标函数。在不同的问题中,指标函数的含义是不同的,它可能是距离、利润、成本、产量或资源消耗等

    • 阶段指标函数:指的是第k阶段从状态 s k s_k sk出发,采取决策 u k u_k uk时的效益,用 v k ( s k , u k ) v_k(s_k,u_k) vk(sk,uk)表示。
    • 过程指标函数:从第k阶段的某状态出发,采取子策略 p k n = { u k , u k + 1 , . . . , u n } p_{kn}=\{u_k,u_{k+1},...,u_n\} pkn={uk,uk+1,...,un}时所得到的阶段效益之和: V k n ( s k , p k n ) = ∑ j = k n v j ( s j , u j ) V_{kn}(s_k,p_{kn})=\sum_{j=k}^{n}v_j(s_j,u_j) Vkn(sk,pkn)=j=knvj(sj,uj)
  • 最优指标函数:
    表示从第k阶段状态为 s k s_k sk 时采用最佳策略 p k n ∗ p_{k n}^* pkn 到过程终止时的最佳效益。记为
    f k ( s k ) = V k n ( s k , p k n ∗ ) = opt ⁡ p k n ∈ D k n ( s k ) V k n ( s k , p k n ) f_k\left(s_k\right)=V_{k n}\left(s_k, p_{k n}^*\right)=\underset{p_{k n}∈D_{k n}\left(s_k\right)}{\operatorname{opt}} V_{k n}\left(s_k, p_{k n}\right) fk(sk)=Vkn(sk,pkn)=pknDkn(sk)optVkn(sk,pkn)
    其中opt可根据具体情况取max 或min

  • 动态规划基本方程
    为逐段递推求和的依据,一般为:
    在这里插入图片描述
    逆序递推方程?是的

  • 最优性原理
    最优策略的子策略必为最优

5.2 动态规划的最短路径问题

贝尔曼最优化原理

一个过程的最优策略具有这样的性质,即无论其初始状态和初始决策如何,今后的诸决策,对以第一个决策所形成的状态作为初始状态的过程而言,必须构成最优策略

建立动态规划模型的步骤

  1. 划分阶段
    划分阶段是运用动态规划求解多阶段决策问题的第一步,在确定多阶段特性后,按时间或空间先后顺序,将过程划分为若干相互联系的阶段。对于静态问题要人为地赋予“时间”概念,以便划分阶段。

  2. 正确选择状态变量
    选择变量既要能确切描述过程演变又要满足无后效性,而且各阶段状态变量的取值能够确定。一般地,状态变量的选择是从过程演变的特点中寻找。

  3. 确定决策变量及允许决策集合
    通常选择所求解问题的关键变量作为决策变量,同时要给出决策变量的取值范围,即确定允许决策集合。

  4. 确定状态转移方程
    根据k 阶段状态变量和决策变量,写出k+1阶段状态变量,状态转移方程应当具有递推关系

  5. 确定阶段指标函数和最优指标函数,建立动态规划基本方程
    阶段指标函数是指第k 阶段的收益,最优指标函数是指从第k 阶段状态出发到第n 阶段末所获得收益的最优值,最后写出动态规划基本方程。

5.3 动态规划的投资分配问题

投资分配问题定义

现有数量为a(万元)的资金,计划分配给n个工厂,用于扩大再生产。问题是如何确定各工厂的资金数,使得总的利润为最大。
这不就是资源分配吗?

投资分配问题的数学模型

在这里插入图片描述
在这里插入图片描述
具体过程见PPT 5.3动态规划的投资分配问题

5.4 动态规划的背包问题

背包问题定义

有一个徒步旅行者,其可携带物品重量的限度为a公斤,设有n种物品可供他选择装入包中。已知每种物品的重量及使用价值(作用),问此人应如何选择携带的物品(各几件),使使用价值最大?

背包问题数学模型

在这里插入图片描述
在这里插入图片描述
这个模型是整数规划问题。可以利用分支定界法,割平面法,但这里可以用动态规划对其求解:
在这里插入图片描述
在这里插入图片描述

具体过程见PPT 5.4动态规划的背包问题

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

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

相关文章

Java——二进制原码、反码和补码

一、简要介绍 原码、反码和补码只是三种二进制不同的表示形式,每个二进制数都有这三个形式。 1、原码 原码是将一个数的符号位和数值位分别表示的方法。 最高位为符号位,0表示正,1表示负,其余位表示数值的绝对值。 例如&…

前端JS必用工具【js-tool-big-box】学习,检测密码强度

js-tool-big-box 前端工具库,实用的公共方法越来越多了,这一小节,我们带来的是检测密码强度。 我们在日常开发中,为了便于测试,自己总是想一个简单的密码,赶紧输入。但到了正式环境,我们都应该…

智能售货机的小投入大回报创业机遇

智能售货机的小投入大回报创业机遇 在当今这个快速进化的数字时代,智能售货机作为零售领域的新秀,正以其独特的便捷性和创新性逐步重塑传统零售格局。24小时不间断服务与自动化管理的结合,大幅度削减人力成本,使得智能售货机成为…

电脑突然提示:“failed to load steamui.dll”是什么情况?分享几种解决steamui.dll丢失的方法

相信有一些用户正在面临一个叫做“failed to load steamui.dll”的问题,这种情况多半发生在试图运行某个程序时,系统会提示一条错误消息:“failed to load steamui.dll”。那么,为何steamui.dll文件会丢失,又应该如何解…

Linux 使用 yum安装 ELK服务,yum 安装elasticsearch和Kibana(未写完)

文章目录 环境准备ELK组件介绍安装Elasticsearch安装Kibana 丢弃下载ELK 服务安装包Elasticsearch安装 Tips:关闭elasticsearch https修改 es 启动内存 环境准备 ELK组件介绍 ElasticSearch : 是一个近实时(NRT)的分布式搜索和分析引擎&…

Unity + 雷达 粒子互动(待更新)

效果预览: 花海(带移动方向) VFX 实例 脚本示例 使用TouchScript,计算玩家是否移动,且计算移动方向 using System.Collections; using System.Collections.Generic; using TouchScript; using TouchScript.Pointers; using UnityEngine; using UnityEngine.VFX;public …

python中的while循环

没有循环时,想打印0-100之间的数字,则需要循环多次,例: print(0) print(1) print(2) print(3) ... print(99) 但是使用循环的话,就不会有那么麻烦 while 循环 while 这个单词有“在……时”的含义,whil…

AI智能分析技术与安防视频融合当前面临的困难与挑战

人工智能与安防视频的融合为现代安全领域带来了革命性的变化,提高了安全管理水平、降低了管理成本并为用户提供了更加便捷和高效的服务。随着技术的不断进步和应用场景的不断拓展,未来人工智能与安防的融合将展现出更加广阔的发展前景。然而,…

Linux 服务查询命令(包括 服务器、cpu、数据库、中间件)

Linux 服务查询命令(包括 服务器、cpu、数据库、中间件) Linux获取当前服务器ipLinux使用的是麒麟版本还是cenos版本Linux获取系统信息Linux查询nignx版本 Linux获取当前服务器ip hostname -ILinux使用的是麒麟版本还是cenos版本 这个文件通常包含有关L…

Vue进阶之Vue无代码可视化项目(三)

Vue无代码可视化项目 项目初始化store的使用DataSourceView.vuestores/counter.ts开发模式按钮store/editor.tsLayoutView.vue导航条安装图标iconpackage.jsonstore/debug.tssrc/components/AppNavigator.vueAppNavigator.ts:AppNavigator.vue:theme样式theme/reset.csstheme/v…

CRM系统主要是干什么?CRM系统主要功能和作用

什么是CRM 系统?CRM系统到底是干什么的?不同的企业人员该如何利用CRM去解决他们的问题等等,问题太多了,今天来为大家详细介绍。 干货满满,建议收藏!! 首先第一个问题,什么是CRM系统…

智能监控技术助力山林生态养鸡:打造智慧安全的养殖新模式

随着现代科技的不断发展,智能化、自动化的养殖方式逐渐受到广大养殖户的青睐。特别是在山林生态养鸡领域,智能化监控方案的引入不仅提高了养殖效率,更有助于保障鸡只的健康与安全。视频监控系统EasyCVR视频汇聚/安防监控视频管理平台在山林生…

国产操作系统上Vim的详解01--vim基础篇 _ 统信 _ 麒麟 _ 中科方德

原文链接:国产操作系统上Vim的详解01–vim基础篇 | 统信 | 麒麟 | 中科方德 Hello,大家好啊!今天给大家带来一篇在国产操作系统上使用Vim的详解文章。Vim是一款功能强大且高度可定制的文本编辑器,广泛应用于编程和日常文本编辑中。…

FreeRTOS基础(九):FreeRTOS的列表和列表项

今天我们将探讨FreeRTOS中的一个核心概念——列表(List)和列表项(List Item)。在实时操作系统(RTOS)中,任务的管理和调度是至关重要的,而FreeRTOS使用列表来实现这一功能。列表可以说…

oracle数据回显时候递归实战

太简单的两篇递归循环 orcale 在项目里递归循环实战 先看资产表T_ATOM_ASSET结构 看业务类别表T_ATOM_BUSI_CATEGORY结构 问题出现 页面显示 实际对应的归属业务分类 涉及到oracle递归实战(这里不会如何直接在atomAsset的seelct里面处理递归回显) 直接在实现层看atomAs…

NVIDIA - QPU

转载自 What Is a QPU? ( 2022 年 7 月 29 日 里克梅里特 https://blogs.nvidia.com/blog/what-is-a-qpu/ 文章目录 一、概述二、那么,什么是 QPU?三、量子处理器如何工作?四、制作量子比特的多种方法五、光的量子比特六、简单的芯片&#x…

李廉洋:6.2黄金原油持续走低,下周一行情走势分析及策略。

黄金消息面分析:尽管通胀数据显示出稳定迹象,但美联储对此仍持谨慎态度。美国商务部经济分析局发布的数据显示,4月PCE物价指数月率维持在0.3%,而消费者支出的增长放缓至0.2%,低于3月份的0.7%。这表明,尽管通…

CSAPP Lab07——Malloc Lab完成思路

等不到天黑 烟火不会太完美 回忆烧成灰 还是等不到结尾 ——她说 完整代码见:CSAPP/malloclab-handout at main SnowLegend-star/CSAPP (github.com) Malloc Lab 按照惯例,我先是上来就把mm.c编译了一番,结果产生如下报错。搜索过后看样子应…

SpringBoot:手动创建应用

Spring提供了在线的Spring Initialzr在线创建Spring Boot项目,为了更好的理解Spring Boot项目,这里我们选择手动创建。 1.新建Web应用 1.1 生成工程 首先要做是创建一个Java项目,这里我们选择使用Maven来支持,使用archetype:ge…

React + SpringBoot开发用户中心管理系统

用户中心项目搭建笔记 技术栈 前端技术栈 “react”: “^18.2.0”,ant-design-pro 后端技术栈 SpringBoot 2.6.x 项目源码地址 https://gitee.com/szxio/user-center 前端项目搭建 快速搭建一个后端管理系统项目框架 初始化 antDesignPro 官网: https://…