函数gamultiobj
gamultiobj为基于遗传算法的多目标优化函数,在GADST工具箱中.下面是关于此函数的一些基本概念(了解即可):
1.支配dominate与非劣势non-inferior
如果个体p至少有一个目标比个体q好,而且个体p的所有目标都不必个体q的差,则称p dominates q,或者称q is dominated byp,也可以说,p is non-inferior to q.
2.序值rank和前端front
如果p支配q,那么p的序值比q的低。如果p和q互不支配,那么p和q有相同的序值。序值为1的个体属于第一前端,序值为2的个体属于第二前端,以此类推。显然,第一前端是完全不受支配的.
3.拥挤距离crowding distance
用以表征个体间的拥挤程度,拥挤距离的值越大,个体间就越不拥挤。
需要注意的是,只有处于同一前端的个体间才需要计算拥挤距离。
4.最优前端个体系数ParetoFraction
定义为:最优前端中的个体在种群中所占的比例,其取值范围为0~1.
gamultiobj的调用
1.gamultiobj - Find minima of multiple functions using genetic algorithm
This MATLAB function finds a local Pareto set X of the objective functions
defined in FITNESSFCN.
[x,fval]=gamultiobj(fitnessfcn,nvars,A,b,Aeq,beq,lb,ub,options)%x为pareto解集,fval为对应函数值,fitnessfcn为目标函数,nvars为变量数目,options为对多目标优化算法进行一些设置,options=gaoptimset('Paraml',value1,'Param2',value2,...);其余为约束
其中参数是如最优前端个体系数、拥挤距离计算函数...
MATLAB实现
在gamultiobj中,stepgamultiobj是关键函数
.
E.g.
function f=my_first_multi(x)
f(1)=x(1)^4-10*x(1)^2+x(1)*x(2)+x(2)^4-(x(1)^2)*(x(2)^2);
f(2)=x(2)^4-(x(1)^2)*(x(2)^2)+x(1)^4+x(1)*x(2);
>> fitnessfcn=@my_first_multi;%适应度函数
>> nvars=2;lb=[-5,-5];
>> ub=[5,5];
>> A=[];b=[];
>> Aeq=[];beq=[];
>>options=gaoptimset('ParetoFraction',0.3,'PopulationSize',100,'Generations',200,'StallGenLimit',200,'TolFun',1e-100,'PlotFcns',@gaplotgareto);
【ps】需要说明的是,由于算法的初始种群是随机产生的,因此每次运行的结果都不一样