数学建模(7)动态规划以及matlab实现

数学建模(7)动态规划以及matlab实现数学建模(7)动态规划概念运筹学分支,求解多阶段决策过程最优化问题的数学方法思路将复杂的多阶段决策问题分解为一系列的简单,离散的单阶段决策问题,顺序求解法在考虑本阶段最优的情况下兼顾整体最优的解决方法主要处理离散连续型问题特点没有特定的算法,需要具体问题具体分析无后效性马尔科夫性,系统从某个阶段后的发展仅与本阶段所处的状态和以后的决策所做的决策所决定,与之前的状态无关。具体问题企业…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

数学建模(7)动态规划以及matlab实现

概念

运筹学分支,求解多阶段决策过程最优化问题的数学方法
思路将复杂的多阶段决策问题分解为一系列的简单,离散的单阶段决策问题,顺序求解法
在考虑本阶段最优的情况下兼顾整体最优的解决方法
主要处理离散连续型问题
特点没有特定的算法,需要具体问题具体分析
无后效性马尔科夫性,系统从某个阶段后的发展仅与本阶段所处的状态和以后的决策所做的决策所决定,与之前的状态无关。
具体问题企业管理,资源分配,路径优化,排序问题,最优控制

步骤思路

1.将问题转化为动态规划类型的问题
2.划分阶段
3.确定状态(若干状态)
4.决策,决策变量(描述决策变化的量),允许决策集合(决策变量的一定允许取值范围,由约束条件决定)
5.策略和允许策略集合(决策序列)全过程策略,k部子策略
6.状态转移方式,从一个状态转移到另一个状态的转移的方式
7.状态转移方程,描述状态转移过程由状态转移方程描述
8.指标函数,描述决策效果的函数
阶段指标函数(阶段效应):描述第k步处于某状态且做出某策略时的指标
过程指标函数(目标函数):描述第k步处于某状态且做出某策略时,目前状态距离目标状态的多少

动态规划的最优性原理
无论过去的状态跟决策如何,对前面的决策所形成的状态而言,后续决策必须构成最优策略。
对于动态规划而言,重要的并不是所谓的模板,比较重要的是在动态规划中,推导的思维方式。在个人看来动态规划实际就是编程解决大量数据的决策问题的一种重要编程理念和编程思路。
在动态规划的思路即是反向确立后三次状态改变的两次决策量的最优决策,确定了该最优决策之后每次反向推导一步,穷举倒数第三次的不同决策所带来的状态变化量,与之前所得到的的最优决策量进行加成处理(可能加和也可能相减或相乘相除,具体视情况而定),将所得后三次决策的总决策量对比选取最优值,作为后四步的最优状态变化值。先前重复推导,最终得到该问题的最优策略。

最好还是通过例题来理解:

例:
在这里插入图片描述

首先本文将如上问题转换为动态规划问题,首先确定本文所解决问题总共要对三个公司进行设备分配,共分为两个求最优决策的阶段。其次确定指标函数:给每个厂分配相应数量所得到的的收益。
状态变量:每个厂分配到的设备的数量,
决策变量:每一阶段进行决策改变时该厂所分配到设备
由此可以首先推导出每次做出决策后的状态转移方程,

求设备收益的最大化即是求在两个阶段的中做出的所有决策,进而得到各阶段最优的目标函数,最后得到最优策略和最优值。据此本文成功将原本的问题转换为动态规划问题。针对该问题本文决定采用倒推穷举法,利用matlab编程得到最优策略与最优解

在matlab求解中本文首先利用嵌套循环语句筛选出第一阶段和第二阶段的最优决策,并利用选择语句得到此时的对应状态变量。

(1)当可分配设备数为4时,最终得到最优决策为(0,1,3)即1分厂不分配设备,2分厂分配1个设备,3分厂分配3个设备,得到最优解为13万元

(2)当可分配设备数为5时,最终得到最优决策为(1,1,3)即1分厂分配1台设备,2分厂分配1台设备,3分厂分配3个设备,得到最优解为16万元

(3)当可分配设备数为6时,最终得到最优决策为(1,2,3)或者(2,1,3)即1分厂分配1台设备,2分厂分配2台设备,3分厂分配3个设备或者1分厂分配2台设备,2分厂分配1台设备,3分厂分配3个设备,得到最优解为18万元

Matlab代码:
a = zeros(1,5); %建立一个1*5的空矩阵用于储存f1(x)+g2(4-x)的结果
f1=[0 3 5 6 7 6 5]
f2=[0 4 6 7 8 9 10]
f3=[0 2 5 9 8 8 7]      %输入
s1 = zeros(1,5);        
s2 = zeros(1,5);        %分别建立两个1*5空矩阵储存f2(x)+f3(x)以及min(g2)
i = 0;
s = 0;
z = 0;
s3=[0,0,0];             %建立一个1*3空矩阵用于记录每一状态的最佳决策
while (i<=4)            %利用两个循环语句分别计算出min(g2)再与f1(x)相加   
j=4-i;
while(j>=0)       
k=4-i-j;       
s1(j+1)=f2(j+1)+f3(k+1)       
if s1(j+1)>z         %利用if语句找到g2最小时对应的给2,3厂分配的设备数
            z=s1(j+1)
            s3(2)=j
            s3(3)=k       
end       
j=j-1;   
end   
s2(i+1)=max(s1)
if s2(i+1)>s        %同理利用if语句找到f1(x)的最佳决策       
s=s2(i+1);       
s3(1)=i;   
end   
s1=zeros(1,5);          %将s1置零记录下一次的g2的值   
a(i+1) = f1(i+1)+s2(i+1)   
i=i+1;
end
a
s3

Jetbrains全家桶1年46,售后保障稳定

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226807.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • matlab自带的插值函数interp1的几种插值方法

    matlab自带的插值函数interp1的几种插值方法插值法    插值法又称“内插法”,是利用函数f(x)在某区间中已知的若干点的函数值,作出适当的特定函数,在区间的其他点上用这特定函数的值作为函数f(x)的近似值,这种方法称为插值法。如果这特定函数是多项式,就称它为插值多项式。线性插值法    线性插值法是指使用连接两个已知量的直线来确定在这两个已知量之间的一个未知量的值的方法。    假设我们已知坐标(x0,y0)与…

    2022年6月13日
    36
  • FPN解读

    FPN解读前两篇博客中都说到了FPN这个神器,今天就花了点时间看了下这篇论文,喜欢这个很赞很干净的结构。

    2022年6月11日
    30
  • 外链检测工具,反链友链检测工具

    外链检测工具,反链友链检测工具SEO外链的建设中,我们不仅需要为自身网站发布反链和建设友链。但盲目建设是不可取的。外链检测工具只需输入我们的目标网站,就可以对网站自身的内链、外链进行抓取,一键导出本地,方便我们进行分析整理,通过对竞争对手或行业头部网站的链接分析,我们可以分门别类对链接进行细分。通过对外链的分析,使得我们发布外链更有针对性和安全性。外链检测工具一键批量权重站发布外链留痕也是我们的一个SEO技巧。…

    2022年7月22日
    10
  • spring4.1 请求rest接口406问题解决(转换JSON)[通俗易懂]

    前文说明,本来项目使用的是springmvc的模式,然后接口都是使用的是@Controller+@ResponseBody配置json转换的代码是

    2022年4月9日
    83
  • offsetwidth/clientwidth的区别「建议收藏」

    offsetwidth/clientwidth的区别「建议收藏」1.2.小小总结一小下”title=”clientWidth/scrollWidth/offsetWidth 小小总结一小下”style=”margin:0px;padding:0px;border:0px;list-style:none”>clientWidth是对象看到的宽度(不含边线,即border)scrollWidth是对象实际内容的宽度(若无p

    2022年7月22日
    14
  • JS中的prototype[通俗易懂]

    JS中的prototype[通俗易懂]JS中的phototype是JS中比较难理解的一个部分本文基于下面几个知识点:1原型法设计模式在.Net中可以使用clone()来实现原型法原型法的主要思想是,现在有1个类A,我想要创建一个类B,这

    2022年7月1日
    23

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号