多目标规划以及Matlab实现

预备知识:

单目标规划

Matlab优化工具箱的的相关函数(linprog,fmincon)

线性规划:

linprog

常用调用格式:

x = linprog(f,A,b)

x = linprog(f,A,b,Aeq,beq)

x = linprog(f,A,b,Aeq,beq,lb,ub)

[x,fval] = linprog(___)

x = linprog(f,A,b,Aeq,beq,lb,ub) 定义设计变量 x 的一组下界和上界,使解始终在 lb ≤ x ≤ ub 范围内。如果不存在等式,请设置 Aeq = [] 和 beq = []。

[x,fval] = linprog(___) 返回目标函数 fun 在解 x 处的值:fval = f'*x。

上面的调用格式是基于线性规划的标准型来的,任何线性规划都可以转化为标准型

 

线性规划标准型 

例1 

 

% linprog
A=[-2 5 -1;1 3 1];
Aeq=[1 1 1];
lb=[0;0;0];
b=[-10;12];
beq=[7];
f=[-2;-3;5];
[x,fval]=linprog(f,A,b,Aeq,beq,lb,[]);
x,fval=-fval

x_1=6.4286,x_2=0.5714,x_3=0是最优解

最优解的值为f=14.5714

非线性规划:

fmincon

x = fmincon(fun,x0,A,b)

x = fmincon(fun,x0,A,b,Aeq,beq)

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)

[x,fval] = fmincon(___)

执行最小化时,满足 nonlcon 所定义的非线性不等式 c(x) 或等式 ceq(x)。fmincon 进行优化,以满足 c(x) ≤ 0 和 ceq(x) = 0。如果不存在边界,请设置 lb = [] 和/或 ub = []。

fun:目标函数

x0:自变量的初始值

A,b,Aeq,beq:线性规划标准型的参数,若没有线性约束条件,这里填写[].

lb,ub是列向量,是自变量x的下界和上界,若没有上下界,填写[].

nonlcon:非线性约束条件,是一个含有自变量x的分量的列向量:

 创建一个m文件,命名为fun,m

function f=fun(x)
f=x(1)^2+x(2)^2+x(3)^2+8

 fun2.m

function [c,ceq]=fun2(x)
c=[-x(1)^2+x(2)-x(3)^2;x(1)+x(2)^2+x(3)^3-20];
ceq=[-x(1)-x(2)^2+2;x(2)+2*x(3)^2-3];

 main.m

[X,fval]=fmincon('fun',rand(3,1),[],[],[],[],zeros(3,1),[],'fun2')

运行结果 

 \\x_1=0.5522,x_2=1.2033,x_3=0.9478\\ f=10.6511

多目标规划:

理论部分:

传统的多目标规划有多种方法,下面我列举3个常用的方法

1.序贯法

序贯法是确定目标函数的重要性次序,根据次序,先求解第一个目标函数最优解对应的解空间,缩小定义域,使得第一个目标函数在当前定义域下的最优解不变差,反复这个过程,在依次求解后续目标函数的解空间,在这里我们保证,前面的目标函数解的最优性不被后面的目标函数影响,这就体现了重要性次序。

目标函数:这里设第i次求解时,定义域为D_i,,第i次求解时,f_i的最优解为f_i^*

Min f(\boldsymbol{x})=\sum_{i=1}^{r}P_i f_i(\boldsymbol{x})

x\in D_0

第1次求解:

Min f_1(x)

s.t. x\in D_1

第2次求解:

Min f_2(x)

s.t. x\in D_2=D_1\cap \{x|f_1(x)\le f_1^*\}

第k次求解:

Min f_k(x)

s.t. x\in D_k=D_{k-1}\cap \{x|f_{k-1}(x)\le f_{k-1}^*\}

直到定义域变为空集

这是一个客观的算法

2.加权法

加权法是对每个目标函数加权处理

这里的约束条件是 min f(x)=\sum_{i=1}^{k}\omega_i f_i(\boldsymbol{x})

线性加权的权重通常需要专家来判定,主观性较强,但是这个模型比较直观,求解也相对简单,确定了权重后,就转化为单目标规划问题,利用前面单目标规划的代码即可解决问题

3.理想点法

多目标规划的每个目标函数都有最优解,我们记录每个目标函数的最优解,每个目标函数的最优解构成的向量称为理想解,重新构造一个目标函数,这个目标函数的目的是使自变量的取值在可行解的范围内,距离理想解最近。

Min Z=\sqrt{distance(\boldsymbol{f}(\boldsymbol{x}),\boldsymbol{f^*})}

常见的距离是欧氏距离

Min Z=\sqrt{\sum_{i=1}^{r} (f_i(\boldsymbol{x})-f_i^*)}

例题:

fx1=[3;-2];
a=[2 3;2 1];
b=[18;10];
lb=[0;0];
ub=[];
[x1,fav1]=linprog(fx1,a,b,[],[],lb,ub);
fx2=[-4;-3];
a=[2 3;2 1];
b=[18;10];
lb=[0;0];
ub=[];
[x2,fav2]=linprog(fx2,a,b,[],[],lb,ub);
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)

求解结果:

x =

    0.5268

    5.6488

f1 =

    9.7171

f2 =

   19.0537

  • 24
    点赞
  • 214
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
Matlab中,可以使用多种方法来求解多目标规划问题。常见的方法包括理想点法、线性加权法、最大最小法、目标规划法和模糊数学解法等。这些方法的基本思想是将多目标规划转化为单目标规划。 其中,理想点法的思想是记录每个目标函数的最优解,并将这些最优解构成的向量作为理想解。然后,重新构造一个目标函数,使得自变量的取值在可行解的范围内且距离理想解最近。 在Matlab中,有几个常用的函数用于求解最优化问题,包括线性规划问题的linprog、非线性规划问题的fmincon、最大最小问题的fminimax以及求解多目标规划问题的fgoalattain等。可以按照函数的调用形式来使用这些函数来求解多目标规划问题。 因此,通过使用这些方法和函数,可以在Matlab中进行多目标规划的求解。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [多目标线性规划求解方法及matlab实现](https://blog.csdn.net/sinat_23971513/article/details/110501496)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [多目标规划以及Matlab实现](https://blog.csdn.net/C1172440795/article/details/124186085)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Logistic..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值