首页 > 其他分享 >matlab求解多目标规划问题

matlab求解多目标规划问题

时间:2024-08-15 15:42:24浏览次数:12  
标签:W1 权重 求解 函数 目标 w2 w1 规划 matlab

多目标规划是多目标决策的重要内容之一,在进行多目标决策时,当希望每个目标都尽可能的大(或尽可能的小)时,就形成了一个多目标规划问题。

目录

一、模型介绍

1.标准模型

2.求解思路

若一个规划问题中有多个目标、倒如企业在保证利润最大时也也要保证生产时产生的污染最少这种情况下我们可以对多⽬标函数进行加权组合,使问题变为单目标规划,然后再利⽤之前学的知识进行求解。无论是使用线性规划或是非线性规划等

二、常见问题

1.统一最值目标

要先将多个目标函数统一为最大化或最小化问题后才可以进行加权组合。常见的方法就是添加负号

2.统一量纲

如果目标函数的量纲不相同,则需要对其进行标准化后再进行如权,标准化的后法一般是用目标函数除以某一个常量,该常量是这个目标函数的某个取值具体取何值可根据经验确定

3.确定权重

对多目标规划进行加权求和时,权重需要由该问题领域的专家给定,在实际建模比赛中,若无特殊说明,我们可令权重相同。

三、经典例题

1.模型建立

2.确定目标函数

目标函数需要进行统一最值目标,去量纲与加权的步骤,此处去量纲的方法为除以一个参考值

3.代码求解

本题在建立起模型后就是一个线性规划问题,使用线性规划的函数即可

w1 = 0.4;  w2 = 0.6;  % 两个目标函数的权重  x1 = 5  x2 = 2
w1 = 0.5;  w2 = 0.5;  % 两个目标函数的权重  x1 = 5  x2 = 2
w1 = 0.3;  w2 = 0.7;  % 两个目标函数的权重  x1 = 1  x2 = 6
c = [w1/30*2+w2/2*0.4 ;w1/30*5+w2/2*0.3];  % 线性规划目标函数的系数
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)

四、敏感性分析

敏感性分析是指从定量分析的角度研究有关因素发生某种变化对某一个或一组关键指标影响程度的一种不确定分析技术。其实质是通过逐一改变相关变量数值的方法来解释关键指标受这些因素变动影响大小的规律。在这里,由于权重是我们自己确定的,那么我们要探究的就是权重的改变对我们x1与x2的取值的影响,或是对f1与f2的影响。这一步骤只能通过程序进行实现,接下来我们介绍一下

1.变量初始化

这里我们改变权重,由于题目中已经给出了条件,w2的权重需要大于w1,因此我们w1设置为从0.1到0.5,w2为1-w1,得到一个向量。之后,我们把这个向量进行循环,每改变一次权重,就求解一次x1、x2的取值,f1与f2,fval。之后将其进行绘制图像,就可以将这个过程可视化

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);

2.进行循环求解

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

3.绘制f1与f2的图像

figure(1) 
plot(W1,F1,W1,F2)
xlabel('f_{1}的权重') 
ylabel('f_{1}和f_{2}的取值')
legend('f_{1}','f_{2}')

由图可知,在w1为0.333的时候,取值进行了跳跃

4.绘制x1与x2的图像

figure(2)
plot(W1,X1,W1,X2)
xlabel('f_{1}的权重') 
ylabel('x_{1}和x_{2}的取值')
legend('x_{1}','x_{2}')

由图可知,在w1为0.333的时候,取值进行了跳跃

5.绘制综合指标fval的图像

figure(3)
plot(W1,FVAL)  % 看起来是两个直线组合起来的下半部分
xlabel('f_{1}的权重') 
ylabel('综合指标的值')

由图可知,在w1为0.333的时候,fval的斜率进行了改变

标签:W1,权重,求解,函数,目标,w2,w1,规划,matlab
From: https://www.cnblogs.com/dlmuwxw/p/18359699

相关文章