多目标优化问题可以描述如下:
通常,目标函数是相互矛盾的,也就是说,某一个目标函数的提高需要以另一个目标函数的降低作为代价,称这样的解A和B是非劣解,或者说是Pareto最优解。多目标优化算法的目的就是要寻找这些Pareto最优解。
我们可以利用matlab自带的gamultiobj函数,进行多目标优化求解。
这里,我们以一个具体的例子,来说明如何使用gamultiobj函数进行多目标优化。
待优化的多目标问题表述如下:
Matlab自带的基于遗传算法的多目标优化函数gamultiobj的组织结构如下:
在函数gamultiobj中,先调用函数gacommon确定优化问题的约束类型,然后调用函数gamultiobjsolve对多目标优化问题进行求解。在函数gamultiobjsolve中,先调用函数gamultiobbjMakeState产生初始种群,接着判断是否可以退出算法,若退出,则得到Pareto最优解,若不退出,则调用函数stepgamultiobj使种群进化一代,然后调用汗水gadsplot进行绘图,并调用函数gamultiobjConvergrd判断终止条件。
图1 函数gamultiobj的组织结构
求解结果如图:
图2 求解结果
参考文献:
[1]MathWorks Inc…Genetic Algorithm and Direct Search Toolbox–MATLAB® version 2.4.1,User’s guide,2009.
[2]MathWorks Inc…Genetic Algorithm and Direct Search Toolbox–MATLAB® version 2.3,User’s guide,2008.
[3]KALYANMOY D,AMRIT P,SAMEER A,et al. A Fast and Elitist Multiobjective Genetic Algorithm:NSGA-II[J].IEEE Transactions on Evolutionary Computation,2002,6(2):182-197.
matlab代码:
clear
clc
fitnessfcn = @my_first_multi; % Function handle to the fitness function
nvars = 2; % Number of decision variables
lb = [-5,-5]; % Lower bound
ub = [5,5]; % Upper bound
A = []; b = []; % No linear inequality constraints
Aeq = []; beq = []; % No linear equality constraints
options = gaoptimset('ParetoFraction',0.3,'PopulationSize',100,'Generations',200,'StallGenLimit',200,'TolFun',1e-100,'PlotFcns',@gaplotpareto);
[x,fval] = gamultiobj(fitnessfcn,nvars, A,b,Aeq,beq,lb,ub,options);