数学建模:线性规划与多目标规划

单目标线性规划

MATLAB中有一个专门求解线性规划问题的函数:linprog(),其使用方法如下:
[x,fval]=linprog(c,A,b,Aeq,beq,lb,ub,x0,options)
用于求解以下模型
在这里插入图片描述
其中fval表示最优解处的目标函数值,lb和ub分别表示决策变量的下界和上界,若不存在可以用空矩阵代替,x0表示迭代初始点,options是控制参数,用于指定模型求解算法、计算精度和最大迭代次数等

例:
在这里插入图片描述
求解:

f = [3 -1 -1];
A = [1 -2 1;4 -1 -2];
b = [11,-3]';
Aeq = [-2 0 1];
beq = [1];
[x,y] = linprog(-f,A,b,Aeq,beq,zeros(3,1));
z = y

在这里插入图片描述
求解:

%这里是一个到线性规划的转换,要做一个变量的变换,把每一个绝对值x都替换成一个u和v的表示变量
%如: u = (x + |x|) / 2 v = (|x| - x) / 2

clc,clear
c = 1:4;
c = [c,c];
aeq = [1 -1 -1 1;1 -1 1 -3;1 -1 -2 3];
Aeq = [aeq,-aeq];
beq = [0 1 -1/2];
[x,y] = linprog(c,[],[],Aeq,beq,zeros(8,1))
x = x(1:4)-x(5:8)

如果只是线性规划,lingo更好用




多目标线性规划

多目标线性规划是多目标最优化理论的重要组成部分,由于多个目标之间的矛盾性和不可公度性,要求使所有目标均达到最优解是不可能的,因此多目标规划问题往往只是求其有效解(非劣解)。目前求解多目标线性规划问题有效解的方法,有理想点法、线性加权和法、最大最小法、目标规划法,模糊数学解法等。为了求得多目标规划问题的非劣解,常常需要将多目标规划问题转化为单目标规划问题去处理。实现这种转化,有如下几种建模方法。

  1. 效用最优化模型
  2. 罚款模型
  3. 约束模型
  4. 目标达到法
  5. 目标规划模型
  • 效用最优化模型(线性加权法)
    思想:规划问题的各个目标函数可以通过一定的方式进行求和运算。这种方法将一系列的目标函数与效用函数建立相关关系,各目标之间通过效用函数协调,使多目标规划问题转化为传统的单目标规划问题。
  • 罚款模型(理想点法)
    思想: 规划决策者对每一个目标函数都能提出所期望的值(或称满意值);通过比较实际值与期望值之间的偏差来选择问题的解。
  • 约束模型(极大极小法)
    理论依据:若规划问题的某一目标可以给出一个可供选择的范围,则该目标就可以作为约束条件而被排除出目标组,进入约束条件组中。假如,除第一个目标外,其余目标都可以提出一个可供选择的范围,则该多目标规划问题就可以转化为单目标规划问题。
  • 目标达到法
    首先将多目标规划模型化为标准形式,在求解之前,先设计与目标函数相应的一组目标值理想化的期望目标与每一个目标对应的权重系数,再设松弛因子,对多目标规划问题进行转化。
  • 目标规划模型(目标规划法)
    需要预先确定各个目标的期望值,同时给每一个目标赋予一个优先因子和权系数,假定有K个目标,L个优先级( L≤K),再通过建立目标规划模型进行求解。

多目标线性规划模型是有两个或两个以上的目标函数,且所有的目标函数和约束条件都是线性的,数学模型表示为:
在这里插入图片描述
常用的求解最优化问题的函数,有线性规划问题的linprog,非线性规划问题的fmincon,最大最小问题的fminimax,求解多目标的fgoalattain等。调用形式分别为:
在这里插入图片描述







理想解法

在这里插入图片描述
在这里插入图片描述
解:先对单目标进行求解

对第一个目标求解的matlab程序为:

f=[3;-2];
a=[2  3;2 1];
b=[18;10];
lb=[0;0];
ub=[];
[x,favl]=linprog(f,a,b,[],[],lb,ub);

输出结果为:x=0.0000 6.0000,favl=-12.0000,所以最大值为12.0000

对第二个目标求解的matlab程序为:

f=[-4;-3];
a=[2  3;2 1];
b=[18;10];
lb=[0;0];
ub=[];
[x,favl]=linprog(f,a,b,[],[],lb,ub);

输出结果为:x=3.0000 4.0000,favl=-24.0000,所以最大值为24.0000

于是得到理想点:(12,24)
在这里插入图片描述

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




线性加权法

在这里插入图片描述
求解的matlab程序为:

f=[-0.5;-2.5];
a=[2 3;2 1];
b=[18;10];
lb=[0;0];
ub=[];
x=linprog(f,a,b,[],[],lb,ub);

输出结果为:x1=0.0000,x2=6.0000,对应的目标值为f1=12.0000,f2=18.0000




最大最小法

在这里插入图片描述
首先编写M函数文件:

function f=mutiplesubjiect(x)
f(1)=3*x(1)-2*x(2);
f(2)=-4*x(1)-3*x(2);

然后输入

x0=[0;0];
a=[2 3;2 1];
b=[18;10];
lb=[0;0];
[x,favl]=fminimax('mutiplesubjiect',x0,a,b,[],[],lb,[])



目标规划法


在这里插入图片描述
首先编写M函数文件,和上述M函数相同。然后输入:

goal=[12,24];
weight=[12,24];
x0=[0;0];
a=[2 3;2 1];
b=[18;10];
lb=[0;0];
[x,fval]=fgoalattain('mutiplesubjiect',goal,weight,x0,a,b,[],[],lb,[])

输出结果为:x1=0.0000,x2=6.0000,对应的目标值为f1=12.0000,f2=18.0000




模糊数学解法


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

求解的matlab程序为:

f=[0;0;-1];
a=[3 -2 27
   -4 -3 24
   2 3 0
   2 1 0];
b=[15;0;18;10];
lb=[0;0;0];
ub=[];
[x,favl]=linprog(f,a,b,[],[],lb,ub);
f1=-3*x(1)+2*x(2);
f2=4*x(1)+3*x(2);

输出结果为:x1=1.0253,x2=5.3165,x3=0.8354,对应的目标值为f1=7.5570,f2=20.0506

参考链接:
https://blog.csdn.net/wzl1997/article/details/79120323
https://blog.csdn.net/weixin_44035915/article/details/108421283

  • 16
    点赞
  • 141
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值