当前位置:网站首页>数学建模学习(76):多目标线性规划模型(理想法、线性加权法、最大最小法),模型敏感性分析
数学建模学习(76):多目标线性规划模型(理想法、线性加权法、最大最小法),模型敏感性分析
2022-08-02 03:37:00 【川川菜鸟】
一、多目标线性规划模型
1.1 定义
多目标线性规划模型是有两个或两个以上的目标函数,且所有的目标函数和约束条件都是线性的。其数学模型表示为:
摘自百度百科:
https://baike.baidu.com/item/%E5%A4%9A%E7%9B%AE%E6%A0%87%E7%BA%BF%E6%80%A7%E8%A7%84%E5%88%92/19134131
1.2 相关函数使用方法
常用的求解最优化问题的函数,有线性规划问题的linprog,非线性规划问题的fmincon,最大最小问题的fminimax,求解多目标的fgoalattain等
线性规划问题函数:
寻找约束非线性多变量函数的最小值:
求解涉及多目标的目标达到问题fgoalattain:
1.3 求解方法
多目标线性规划是多目标最优化理论的重要组成部分,由于多个目标之间的矛盾性和不可公度性,要求使所有目标均达到最优解是不可能的,因此多目标规划问题往往只是求其有效解(非劣解)。目前求解多目标线性规划问题有效解的方法,有理想点法、线性加权和法、最大最小法、目标规划法,模糊数学解法等。为了求得多目标规划问题的非劣解,常常需要将多目标规划问题转化为单目标规划问题去处理。实现这种转化,有如下几种建模方法:
效用最优化模型(线性加权法):线性加权和法(linear weighted sum method)是一种评价函数方法,是按各目标的重要性赋予它相应的权系数,然后对其线性组合进行寻优的求解多目标规划问题的方法。
罚款模型(理想点法):规划决策者对每一个目标函数都能提出所期望的值(或称满意值);通过比较实际值与期望值之间的偏差来选择问题的解。
约束模型(极大极小法):若规划问题的某一目标可以给出一个可供选择的范围,则该目标就可以作为约束条件而被排除出目标组,进入约束条件组中。假如,除第一个目标外,其余目标都可以提出一个可供选择的范围,则该多目标规划问题就可以转化为单目标规划问题。
目标达到法:先将多目标规划模型化为标准形式,在求解之前,先设计与目标函数相应的一组目标值理想化的期望目标与每一个目标对应的权重系数,再设松弛因子,对多目标规划问题进行转化。
目标规划模型(目标规划法):需要预先确定各个目标的期望值,同时给每一个目标赋予一个优先因子和权系数,假定有K个目标,L个优先级( L≤K),再通过建立目标规划模型进行求解。
摘自百度百科:
https://baike.baidu.com/item/%E5%A4%9A%E7%9B%AE%E6%A0%87%E7%BA%BF%E6%80%A7%E8%A7%84%E5%88%92/19134131
二、理想点法
2.1 问题
多目标规划问题如下:
2.2 求解
2.2.1 第一步
第一步:分别求解目标函数的最值
1)第一个目标函数
clc
clear all
f=[3;-2]; %linprog函数求的是最小值,取反
a=[2 3;2 1];%约束左侧系数
b=[18;10]; %约束右侧系数
lb=[0;0]; %瞎想
ub=[]; %上限
[x,favl]=linprog(f,a,b,[],[],lb,ub);
x
-favl %f取反后就是球的最小值,相反就是最大值
结果如下:
2)同理,第二个目标函数
clc
clear all
f=[-4;-3];
a=[2 3;2 1];
b=[18;10];
lb=[0;0];
ub=[];
[x,favl]=linprog(f,a,b,[],[],lb,ub);
x
-favl
如下:
我们可以看到两个目标函数最大值分别为12和24。因此理想点:(12,24)
2.2.2 第二步
根据以上求解的结果,就变成求解:
代码如下:
clc
clear all
x0=[1;1];%初始点,指定为实数向量或实数数组
a=[2 3;2 1];
b=[18;10];
lb=[0;0];
ub=[];
%多目标函数就是带入两个目标函数开平方
x=fmincon('((-3*x(1)+2*x(2)-12)^2+(4*x(1)+3*x(2)-24)^2)^(1/2)',x0,a,b,[],[],lb,ub);
f1=-3*x(1)+2*x(2)
f2=4*x(1)+3*x(2)
如下:
以上就是f1和f2的最佳值了。
三、线性加权法
我们假设每个目标函数的权重为0.5,带入后得到x1系数为0.5,x2系数为2.5,由于需要取最大值,所以取反为-0.5,-2.5
代码如下:
clc
clear all
%这个系数要不断尝试,因为没有实际场景。实际场景能直接看出权重。
f=[-0.5;-2.5]; %目标函数的系数
a=[2 3;2 1];
b=[18;10];
lb=[0;0];
ub=[];
x=linprog(f,a,b,[],[],lb,ub)
%x为0,6,带入目标函数:f1=12,f2=18
如下:
四、最大最小法
4.1 第一步
第一步,编写目标函数mubiao.m:
function f=mubiaot(x)
f(1)=3*x(1)-2*x(2);
f(2)=-4*x(1)-3*x(2);
4.2 第二步
第二步:计算
clc
clear all
x0=[0;0]; %起点设置特殊点0 0
a=[2 3;2 1];
b=[18;10];
lb=[0;0];
[x,favl]=fminimax(@mubiaot,x0,a,b,[],[],lb,[]);
x
-favl %最小值取反就是最大值
如下:
输出结果为:x1=0,x2=6,对应的目标值为f1=12,f2=18
五、线性加权与敏感性分析
5.1 参考
先以这位博主的案例作为分析,原文
https://blog.csdn.net/weixin_54338498/article/details/125996359
题目如下:
利用我们前面学到的线性加权法,很容易写出代码如下:
clc
clear all
%线性加权法
w1 = 0.4; w2 = 0.6; % 两个目标函数的权重 x1 = 5 x2 = 2
c = [w1/30*2+w2/2*0.4 ;w1/30*5+w2/2*0.3] % 线性规划目标函数的系数,就是合并题目中的x1和x2
A = [-1 -1]; b = -7; % 不等式约束
lb = [0 0]'; ub = [5 6]'; % 上下界
[x,fval] = linprog(c,A,b,[],[],lb,ub)
f1 = 2*x(1)+5*x(2)
f2 = 0.4*x(1) + 0.3*x(2)
如下:
敏感性分析就是一点点修改参数查看变化:
clear;clc
W1 = 0.1:0.001:0.5; W2 = 1- W1;
n =length(W1);
F1 = zeros(n,1); F2 = zeros(n,1); X1 = zeros(n,1); X2 = zeros(n,1); FVAL = zeros(n,1);
A = [-1 -1]; b = -7; % 不等式约束
lb = [0 0]; ub = [5 6]; % 上下界
for i = 1:n
w1 = W1(i); w2 = W2(i);
c = [w1/30*2+w2/2*0.4 ;w1/30*5+w2/2*0.3]; % 线性规划目标函数的系数
[x,fval] = linprog(c,A,b,[],[],lb,ub);
F1(i) = 2*x(1)+5*x(2);
F2(i) = 0.4*x(1) + 0.3*x(2);
X1(i) = x(1);
X2(i) = x(2);
FVAL(i) = fval;
end
% 「Matlab」“LaTex字符汇总”讲解:https://blog.csdn.net/Robot_Starscream/article/details/89386748
% 在图上可以加上数据游标,按住Alt加鼠标左键可以设置多个数据游标出来。
figure(1)
plot(W1,F1,W1,F2)
xlabel('f_{1}的权重')
ylabel('f_{1}和f_{2}的取值')
legend('f_{1}','f_{2}')
figure(2)
plot(W1,X1,W1,X2)
xlabel('f_{1}的权重')
ylabel('x_{1}和x_{2}的取值')
legend('x_{1}','x_{2}')
figure(3)
plot(W1,FVAL) % 看起来是两个直线组合起来的下半部分
xlabel('f_{1}的权重')
ylabel('综合指标的值')
如下:
5.2 解题
应用到本篇文章中题目,我们只需要修改一些参数即可,不必大量修改,因此当作模板用了。
可修改的参数:W1、A、b、lb、ub、c (这个参数需要根据题意修改,请对比上面参考的题目),具体地方我已在代码中做了注释:
clear;clc
%权重和为1
W1 = 0.1:0.001:0.5; W2 = 1- W1;
n =length(W1);
F1 = zeros(n,1); F2 = zeros(n,1); X1 = zeros(n,1); X2 = zeros(n,1); FVAL = zeros(n,1);
%修改为符合本题目的约束
A = [2 3;2 1]; b = [18;10]; % 不等式约束
lb=[0;0];
ub=[]; % 上下界
for i = 1:n
w1 = W1(i); w2 = W2(i);
%根据具体情况修改
% 这里应该是:w1*f1+w2*f2=(-3w1+4w2)x1+(2w1+3w2)x2,最大值系数取反
c = [-(-3*w1+4*w2) ;-(2*w1+3*w2)]; % 线性规划目标函数的系数
[x,fval] = linprog(c,A,b,[],[],lb,ub);
%修改目标函数
F1(i) = -3*x(1)+2*x(2);
F2(i) = 4*x(1) + 3*x(2);
X1(i) = x(1);
X2(i) = x(2);
FVAL(i) = fval;
end
figure(1)
plot(W1,F1,W1,F2)
xlabel('f_{1}的权重')
ylabel('f_{1}和f_{2}的取值')
legend('f_{1}','f_{2}')
figure(2)
plot(W1,X1,W1,X2)
xlabel('f_{1}的权重')
ylabel('x_{1}和x_{2}的取值')
legend('x_{1}','x_{2}')
figure(3)
plot(W1,FVAL) % 看起来是两个直线组合起来的下半部分
xlabel('f_{1}的权重')
ylabel('综合指标的值')
如下:
六、总结
以上介绍了三种方法的使用,综合这三种方法:理想点法和最大最小法效果应该一样;线性加权法需要设定权重,这个应该要根据应用场景来对目标函数进行权重设置,注意权重和为1。
如有不理解,可以v咨询:
sprintf('我的v:hxgsrubxjogxeeag')
如下:
这篇教程我用了很久时间来编写,同时也参考了一些文献,引用网址在具体地方已注明。希望这篇教程能够帮助你轻松学会多目标规划的求解。
边栏推荐
- 深蓝学院-视觉SLAM十四讲-第四章作业
- jetracer_pro_2GB AI Kit系统安装使用说明
- Nexus 5手机使用Nexmon工具获取CSI信息
- el-dropdown(下拉菜单)的入门学习
- 吴恩达机器学习系列课程笔记——第十四章:降维(Dimensionality Reduction)
- 吴恩达机器学习系列课程笔记——第七章:正则化(Regularization)
- 科研笔记(五) SLAC WiFi Fingerprint+ Step counter融合定位
- 详解CAN总线:什么是CAN总线?
- Class ‘PHPWord_Writer_Word2003‘ not found
- The slave I/O thread stops because master and slave have equal MySQL server ids
猜你喜欢
flasgger手写phpwind接口文档
Kubernetes中Pod对象学习笔记
吴恩达机器学习系列课程笔记——第七章:正则化(Regularization)
Liunx服务环境部署
Andrew Ng's Machine Learning Series Course Notes - Chapter 18: Application Example: Image Text Recognition (Application Example: Photo OCR)
吴恩达机器学习系列课程笔记——第十三章:聚类(Clustering)
未来智安入围《2022年中国数字安全百强报告》,威胁检测与响应领域唯一XDR厂商
jetracer_pro_2GB AI Kit system installation instructions
The most authoritative information query steps for SCI journals!
深蓝学院-手写VIO作业-第一章
随机推荐
树莓派4B设置双网卡静态IP、网卡优先级、查看系统多少位
Zabbix删除一些大表历史数据脚本
shell脚本的基础知识
吴恩达机器学习系列课程笔记——第六章:逻辑回归(Logistic Regression)
Scientific research notes (5) SLAC WiFi Fingerprint+ Step counter fusion positioning
科研笔记(八) 深度学习及其在 WiFi 人体感知中的应用(下)
使用docker-compose 安装Redis最新版,并且设置密码
ffmpeg推流USB到rtsp
未来智安创始人兼CEO唐伽佳荣膺36氪X·36Under36 “S级创业者”
节流阀和本地存储
Class ‘PHPWord_Writer_Word2003‘ not found
QT+OPENCV+FFTW内存问题
arr的扩展方法、数组的遍历及其他方法
多数据中心操作和检测并发写入
Research Notes (8) Deep Learning and Its Application in WiFi Human Perception (Part 1)
【学习笔记】如何打造运维组织架构
Scalar value for argument ‘color‘ is not numeric错误处理
Reinforcement Learning (Chapter 16 of the Watermelon Book) Mind Map
Nexus 5手机使用Nexmon工具获取CSI信息
Nexus 5 phone uses Nexmon tool to get CSI information