11.1.3  多目标优化

前面介绍的最优化方法只有一个目标函数,是单目标最优化方法。但是,在许多实际工程问题中,往往希望多个指标都达到最优值,所以就有多个目标函数,这种问题称为多目标最优化问题。

多目标规划有许多解法,下面列出常用的几种。

(1)化多为少法:将多目标问题化成只有1个或2个目标的问题,然后用简单的决策方法求解。最常用的是线性加权和法。

(2)分层序列法:将所有的目标按其重要程度依次排序,先求出第1个(最重要的)目标的最优解,然后在保证前一个目标最优解的前提下依次求下一个目标的最优解,一直求到最后一个目标为止。

(3)直接求非劣解法:先求出一组非劣解,然后按事先确定好的评价标准从中找出一个满意的解。

(4)目标规划法:当所有的目标函数和约束条件都是线性时,可以采用目标规划法,它是20世纪60年代初由查纳斯和库珀提出来的。此方法对每一个目标函数都事前给定一个期望值,然后在满足约束条件集合的情况下,找出使目标函数离期望值最近的解。

(5)多属性效用法(MAUM):各个目标分别用各自的效用函数表示,然后构成多目标综合效用函数,以此来评价各个可行方案的优劣。

(6)层次分析法:由T.沙基于1980年提出来。这种方法是通过对目标、约束条件、方案等的主观判断,对各种方案加以综合权衡比较,然后评定优劣。

(7)重排次序法:把原来不好比较的非劣解,通过其他办法排出优劣次序。此外,还有多目标群决策和多目标模糊决策等方法。

针对多目标优化问题,MATLAB提供了fgoalattain和fminimax 函数用来进行求解。篇幅有限,这里仅举例说明fgoalattain函数的用法,fminimax函数的用法读者可自行查阅帮助文档。

【例11-7】  某工厂因生产需要欲采购一种原材料,市场上这种原材料有两个等级,甲级单价2元/千克,乙级单价1元/千克。要求所花总费用不超过200元,购得原材料总量不少于100千克,其中甲级原材料不少于50千克,问如何确定最好的采购方案。

设x1、x2分别为采购甲级和乙级原材料的数量(千克),要求总采购费用尽量少,总采购重量尽量多,采购甲级原材料尽量多。

首先需要编写目标函数的M文件myfun4.m,返回目标计算值。具体代码如下:

function f=myfun4(x)

f(1)=2*x(1)+ x(2);

f(2)=-x(1)- x(2);

f(3)=-x(1);

给定目标,权重按目标比例确定,给出初始值。具体代码如下:

>> goal=[200 -100 -50];       %  要达到的目标

>> weight=[2040 -100 -50];   %  各个目标的权重

>> x0=[55 55];                  %  搜索的初始值

%  约束条件

>> A=[2 1;-1 -1;-1 0];

>> b=[200 -100 -50];

>> lb=zeros(2,1);

%  调用fgoalattain函数进行多目标优化

>> [x,fval,attainfactor,exitflag] =...

fgoalattain(@myfun4,x0,goal,weight,A,b,[],[],lb,[])

经过计算,MATLAB输出计算结果为:

50    50

150  -100   -50

attainfactor =

3.4101e-010

所以,对于给定的权重比例,最好的采购方案是采购甲级原材料和乙级原材料各50千克。此时采购总费用为150元,总重量为100千克,甲级原材料总重量为50千克。

编辑:蓬荜生辉、倾国倾城、青樱、我本年轻复核:数韵校园工作室

如你对话题感兴趣,