数学建模|多目标规划+序贯算法|简要原理+实例matalb代码实现

这篇具有很好参考价值的文章主要介绍了数学建模|多目标规划+序贯算法|简要原理+实例matalb代码实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 核心原理简介

1.1 三个重要概念

(1) 正负偏差变量

【衡量每个目标的完成情况】

设  为第i个目标函数的实际值;

设  表示  的目标值

  • 正偏差变量optimvar,Matlab学习,算法,matlab  【表示实际值超过目标值的部分】

 optimvar,Matlab学习,算法,matlab

  •  负偏差变量 【表示实际值未达到目标值的部分】

 

 实例说明:

目标函数实际值 目标值

正偏差变量

optimvar,Matlab学习,算法,matlab

负偏差变量

意义
收入50万 不少于60万 0 10 未到达还有10万
收入70万 10 0 超出10万

 (2) 绝对约束与目标约束

  • 绝对约束

【必须要满足的条件】

  • 目标约束

【允许有偏差→利用正负偏差变量】

实例说明:【含有“尽可能”、“尽量”等关键词】

尽可能使利润不低于56万


(3)优先因子

【类似“权重”】

给每一个目标一个优先因子P,仅仅是确定各目标的求解次序


 1.2 序贯算法

【将之前的单目标最优解变成下一个目标的约束条件,然后迭代这个过程】

1.根据模型中各个目标的优先级(优先因子),确定各目标的求解次序

2.求第一级单目标规划的最优值(注意要先给最优解附一个初值

3.以第一 级单目标等于最优值为新的约束条件,求第二级目标最优值记为

4.依次递推,直到所有目标都求完或不存在可行解为止


2. 实例建模过程

2.1 实例

某工厂生产产品1和产品2,有关数据如下,请给出方案,设计每天生产产品1、2各多少时,满足下面的要求:

optimvar,Matlab学习,算法,matlab

现在的要求是:optimvar,Matlab学习,算法,matlab


2.2 建模过程

 (1)分析问题(翻译成数学语言)

  • 根据原材料拥有量

optimvar,Matlab学习,算法,matlab

  • 根据生产能力

optimvar,Matlab学习,算法,matlab

  • 根据具体要求(因为带有“尽可能”关键词,为目标约束)

optimvar,Matlab学习,算法,matlab


(2)引入正负变差变量 

optimvar,Matlab学习,算法,matlab                                                               optimvar,Matlab学习,算法,matlab

以上不等式变形顺序对应

  • 第一个不等式:因为是≤,所以要求正偏差变量要最小
  • 第二个不等式:因为是=,所以要求正偏差和负偏差都要小,所以求和要最小
  • 第三个不等式:因为是≥,所以要求负偏差变量要最小

所以得到目标函数:

optimvar,Matlab学习,算法,matlab 

P仅仅是优先因子,仅仅决定后面多目标求解顺序,而不是真正意义上的权重值

根据1中原理介绍偏差变量,目标函数看似没有包含变量x,实则每一个偏差变量都要利用x计算 


(3)模型总结 

  • 目标函数:

optimvar,Matlab学习,算法,matlab

  •  约束条件:

optimvar,Matlab学习,算法,matlab

 “多退少补”原则【将目标约束中的不等式变成等式】

optimvar,Matlab学习,算法,matlab 表示:减去“超过”的,加上“未达到


3. Matlab实现

 3.1 代码

clc,clear
%初始化优化问题框架

%创建优化变量
%%2个产品【用x表示】【最小值=0】
x = optimvar('x',2,'LowerBound',0);
%%3个目标函数的正偏差变量 【最小值=0】
dp = optimvar('dp',3,'LowerBound',0);
%%3个目标函数的负偏差变量 【最小值=0】
dm = optimvar('dm',3,'LowerBound',0);

%创建优化问题对象
p = optimproblem('ObjectiveSense','min');

%设置约束条件

%%设置绝对约束
p.Constraints.cons1 = (2*x(1)+x(2)<=11);
%%设置3个目标约束
p.Constraints.cons2 = [x(1)-x(2)-dp(1)+dm(1)==0
                       x(1)+2*x(2)-dp(2)+dm(2)==10
                       8*x(1)+10*x(2)-dp(3)+dm(3)==56];

%设置目标函数
obj = [dp(1);dm(2)+dp(2);dm(3)];

% 单级目标函数的最优值goal,初始设为足够大的数
% 非常宽松的约束就等于没有约束,确保第一级的正常运算
goal=100000*ones(3,1);

%序贯算法(迭代最优)
for i=1:3
    % 重要:更新上一级的最优值,作为该级的约束条件;
    p.Constraints.cons3=[obj<=goal];
    p.Objective = obj(i);
    %求解【 针对优化问题使用solve,会自动选择求解方式】
    [sx,fval] = solve(p);
    %【下面两行可注释】只是展示每一次迭代结果
    fprintf('第%d级目标求解为:\n',i)
    fval, xx=sx.x, sdm=sx.dm, sdp=sx.dp
    %sx类似于python中创建的类【这里指优化类】
    %x(最后得到的优化方案)、dm(负偏差变量)、dp(正偏差变量)为3个sx下的对象
    goal(i) = fval;
end

3.2 结果展示

optimvar,Matlab学习,算法,matlab

 表示:每天应生产产品一2件,产品二4件


4. 总结

(1)问题函数optimproblem【用来创建优化问题】

prob=optimproblem('ObjectiveSense','max');
  • ObjectiveSense是目标类型,后面跟的‘max’为求最大优化

  • 默认为求min


(2) 求解函数`optimvar`【一种类似于赋值的函数】

x=optimvar('x',1,2,'TYPE','integer','LowerBound',0,'UpperBound',inf);
  • 第一个‘x’里面是变量名,后面 1 2 为变量的行 列

  • ‘TYPE’,后面定义的是该函数所属类型,比如说integer整数型,double双精度型号等

  • ‘LowerBound'下界;'UpperBound'上界

(3) 设置约束条件prob.Constraints.cons1

p.Constraints.cons1 = ( 2*x(1)+x(2)<=11 )

p.Constraints.cons2=[x(1)-x(2)+dm(1)-dp(1)==0       
                     x(1)+2*x(2)+dm(2)-dp(2)==10
                     8*x(1)+10*x(2)+dm(3)-dp(3)==56];
  • p为优化问题创建的对象


(4) 设置目标函数pro.Objective

obj=[dp(1); dm(2)+dp(2); dm(3)];
p.Objective=obj(i);
  • p为优化问题创建的对象


(5) sovle函数求解

[sx,fval]=solve(p);
  • p为优化问题创建的对象

  • sx为最优值变量(理想)

  • fval为在最优变量下的目标函数值文章来源地址https://www.toymoban.com/news/detail-657514.html

到了这里,关于数学建模|多目标规划+序贯算法|简要原理+实例matalb代码实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数学建模:多目标优化算法

    🔆 文章首发于我的个人博客:欢迎大佬们来逛逛 算法流程: 两个目标权重求和,化为单目标函数,然后求解最优值 min ⁡ x ∑ i = 1 m w i F i ( x )  s.t.  g ( x ) ⩽ 0 h ( x ) = 0 begin{array}{ll}min _{x} sum_{i=1}^{m} {w_{i} F_{i}(x)} \\\\\\\\text { s.t. } g(x) leqslant 0 \\\\\\\\ h(x)=0end{array} min x ​  s.t. 

    2024年02月08日
    浏览(36)
  • 数学建模-动态规划&遗传算法(美赛运用)

    动态规划模型的要素是对问题解决的抽象,其可分为: 阶段。指对问题进行解决的自然划分。例如:在最短线路问题中,每进行走一步的决策就是一个阶段。 状态。指一个阶段开始时的自然状况。例如:在最短线路问题中,每进行走一步后,对所走的点进行标注。 决策。当

    2024年03月13日
    浏览(38)
  • 数学建模(四)整数规划—匈牙利算法

    目录 一、0-1型整数规划问题 1.1 案例 1.2 指派问题的标准形式 2.2 非标准形式的指派问题 二、指派问题的匈牙利解法  2.1 匈牙利解法的一般步骤 2.2 匈牙利解法的实例 2.3 代码实现 投资问题: 有600万元投资5个项目,收益如表,求利润最大的方案? 设置决策变量: 模型: 指派

    2024年02月11日
    浏览(28)
  • 模拟退火算法与遗传算法求解多目标优化问题的算法实现(数学建模)

    模拟退火算法是一种全局优化算法,解决的问题通常是找到一个最小化(或最大化)某个函数的全局最优解。它通过模拟物理退火的过程来搜索解空间,在开始时以一定的温度随机生成初始解,然后一步步降低温度,同时在当前解的周围随机搜索新的解,并根据一定概率接受

    2024年02月02日
    浏览(36)
  • 司守奎《数学建模算法与应用》课后习题:线性规划

    1.1、常规求解线性规划 1.2、带有绝对值的线性规划求解 1.3、单下标求解生产利润问题 1.4 、双下标求解利润问题 最后给出一些基础帮助的链接: 需要注意三个问题: 1)分清哪些是列向量,哪些是行向量; 2)如“-2x1+x3”中的x2系数为0,但是不能忽略; 3)MATLAB 默认求最小

    2024年02月05日
    浏览(69)
  • 数学建模笔记——整数规划类问题之我见(匈牙利算法)

    目录 浅浅叙述匈牙利算法 基本思路 计算步骤 来一道简单例题 1.1 符号规定 1.2目标函数​编辑       1.3约束条件 ​编辑 1.4代码 题目复述 基本假设 问题分析 符号说明  模型的建立与求解 模型建立思路 模型建立的过程 建立0-1整数规划模型  运用匈牙利方法: 代码实现  

    2023年04月11日
    浏览(34)
  • OLS回归模型-斯皮尔曼相关系数-数值模拟-多目标规划-养老服务床位需求预测与运营模式研究-之数学建模

    数学建模 -OLS回归模型 斯皮尔曼相关系数 数值模拟 多目标规划-养老服务床位需求预测与运营模式研究 养老服务床位需求预测与运营模式研究 摘要         随着时间的推移,我国人口老龄化逐渐增多,老龄化的社会问题越来越突出,从2009年到2018年,无论是老年人口数量

    2024年02月09日
    浏览(33)
  • Matlab数学建模算法详解之混合整数线性规划 (MILP) 算法(附完整实现代码)

    🔗 运行环境:Matlab 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥  推荐专栏:《算法研究》 ####  防伪水印—— 左手の明天 #### 💗 大家好🤗🤗🤗,我是 左手の明天 !好久不见💗 💗今天分享matlab数学建模算法—— 混合整数线性规划 (MILP) 算法 💗

    2024年02月04日
    浏览(37)
  • 数学建模基础算法Chapter2.1 -- 整数规划(ILP): 分支定界+割平面

    By 进栈需检票 当题目要求的最优解是整数,例如物件的数量,参与人员的数量等时,就不能继续使用之前的线性规划了(当出现小数的情况),这个时候需考虑整数规划这样的一种建模形式 但是目前所流行的求整数规划的方法,只适用于整数线性规划,不能解决一切的整数

    2024年02月12日
    浏览(35)
  • 数学建模6——路径规划的各种算法(Dijkstra、Floyd、A*、D*、RRT*、LPA*)

    前言:本文只是简单的介绍一下各路径规划算法的概念和流程,可用于对算法的初步了解,如果要进一步学习,可以在 个人理解 中找到我推荐的其他博主更为完善的文章。 目录 一、Dijkstra 基本概念 基本流程 个人理解 MATLAB代码 二、Floyd 基本概念 基本流程 个人理解 MATLAB代

    2024年02月07日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包