学习-基于遗传算法的多目标优化算法

函数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】需要说明的是,由于算法的初始种群是随机产生的,因此每次运行的结果都不一样


猜你喜欢

转载自blog.csdn.net/Weizhiyuan37927/article/details/77622136