数学建模(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,售后保障稳定

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • java分布式(分布式架构)「建议收藏」

    java分布式(分布式架构)「建议收藏」【声明:版权所有,欢迎转载,请勿用于商业用途。联系信箱:feixiaoxing@163.com】开头的话,架构多半和业务关联在一起,如果只是简单的图书管理系统、选课系统或者什么简单的财务系统,用不着分布式。只有大型公司、高并发的业务才需要分布式的帮助。当然,架构本身要和业务模型紧密配合才能发挥作用。很长一段时间,java都是最流行的编程语言。我想,一方面…

  • 黑客[入门]

    黑客[入门]第1章黑客基础知识随着互联网技术的飞速发展,网络世界的安全性不断受到挑战。如果你要上网,就免不了遇到黑客的侵扰。本章就为大家介留一些最基本的黑客入门知识,揭密黑客常用的一些命令,当然这些微不足道的伎俩难以入侵戒备森严的网络,不过至少让初学者对黑客的“工作情形”有初步的认识。本章导读1.1黑客简单介绍最早的计算机于1946年在宾夕法尼亚大学出现,而最早的黑客出现于麻省理工学院(贝尔实验室也有)。最初的黑客一般都是一些高级的技术人员,他们热衷于挑战、崇尚自由并主张信息的共享。1…

  • IP地址的ABCDE类划分[通俗易懂]

    IP地址的ABCDE类划分[通俗易懂]1、0-—127。A类网络号码范围是0.0.0.0—127.0.0.0,用于128个网络。但网络不能近由0组成且127.0.0.0保留用于回路。剩下的126个网络,1到126,共有16777214个可能的主机地址(16777216减2)A类网络—主机——主机—主机0-1271270002、128—191。B

  • Spring容器和springmvc容器的区别联系

    Spring容器和springmvc容器的区别联系

  • PS套索工具抠图及快捷键[通俗易懂]

    PS套索工具抠图及快捷键[通俗易懂]一、首先打开Photoshop,并打开一张所需的要抠图的文件,并按Ctrl+J复制一层二、套索工具在工具栏的上方,快捷键为L。鼠标点击工具栏选择套索工具,或按快捷键L选择,套索工具有三个子工具菜单,套索,多边形套索和磁性套索1.普通套索工具。这个工具时根据操作者控制鼠标的路径来选取选取的,且精度不易控制,完全靠制作者的手法来控制精度我们只要选择这个工具,然后按着鼠标左键开始跟着鼠标轨迹把选取描绘出来,最后松开鼠标,即可完成2.多边形套索工具。适合选取比较规则的几何图形首先点区图片要扣取的一

  • Java守护线程「建议收藏」

    Java守护线程「建议收藏」1、什么是守护线程Java线程分两种:用户线程和守护线程。守护线程,是指在程序运行的时,后台提供一种通用服务的线程。比如垃圾回收线程就是一个很称职的守护者,并且这种线程并不属于程序中不可或缺的部分。因此,当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程。反过来说,只要任何非守护线程还在运行,程序就不会终止。守护线程和用户线程的没有本质的区别,不同之处在于虚拟机的离开;若用户线程已全部退出运行,只剩守护线程存在,虚拟机也即退出。因没有了被守护者,守护线程也就无工作可做,也

    2022年10月15日

发表回复

您的电子邮箱地址不会被公开。

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