今天我们要来解决一个运筹学中较为头疼的问题,多目标规划问题。
多目标问题可以描述成如下问题:
其中, f i ( x ) f_i(x) fi(x)为待优化的目标函数;x为待优化的变量;lb和ub分别为变量x的下限和上限约束;Aeq ∗ * ∗x=beq为变量x的线性等式约束;A ∗ * ∗x ≤ \leq ≤b为变量x的线性不等式约束。
在该问题中,目标函数 f 1 f_1 f1和 f 2 f_2 f2是相互矛盾的。如上图,因为 A 1 < B 1 A_1
目前求解多目标优化问题方法算法主要有基于数学的规划方法和基于遗传算法的两类方法;其中带精英策略的快速非支配排序算法(NSGA-II)是影响最大和应用范围最广的一种多目标遗传算法。在其出现以后,由于它简单有效以及比较明显的优越性,使得该算法已经成为多目标优化问题中的基本算法之一,该算法主要优点:
Matlab中提供函数gamultiobj采用的算法就是基于NSGA-II改进的一种多目标优化算法(a variant of NSGA-II),接下来对目标规划中的一些概念进行介绍。
在多目标规划问题中,如果个体p至少有一个目标比个体q的好,而且个体p的所有目标都不比个体q的差,那么称个体p支配个体q(p dominate q),或者称个体q受个体p支配(q is dominated by p),也可以说,个体p非劣个体q(p is non- inferior to q)。
如果p支配q,那么p的序值比q低,如果p和q互不支配,或者说,p和q互相非劣,那么p和q有相同的序值,序值为1的个体属于第一前端,序值为2的个体属于第二前端,依此推类。显然,在当前种群中,第一前端是完全不受支配的,第二前端受第一前端中个体是支配,这样,通过排序,可以将种群中的个体分配到不同的前端。
拥挤距离用来计算某前端中的某个体与与该前端中其他个体之间的距离,用以表征个体间的拥挤程度。显然,拥挤距离的值越大,个体间就越不用拥挤,种群的多样性就越好。需要指出的是,只有处于同一前端的个体间才需要计算拥挤距离,不同前端之间计算距离是没有意义的。
最优前端个体系数定义为最优前端中的个体在种群中所占有的比例,即最优前端个体数=min{paretofraction ∗ * ∗种群大小,前端中现存的个体数目},其取值范围为[0到1]。
求解如下问题的解:
使用gamultiobj求解,主要分为两部分
%%定义求解函数文件
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);
%%求解文件
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);
解释一下gamultiobj里面的参数:
[ x , f v a l ] = g a m u l t i o b j ( f i t n e s s f c n , n v a r s , A , b , A e q , b e d , l b , u b , o p t i o n s ) [x,fval]=gamultiobj(fitnessfcn,nvars,A,b,Aeq,bed,lb,ub,options) [x,fval]=gamultiobj(fitnessfcn,nvars,A,b,Aeq,bed,lb,ub,options)
其中x为函数gamultiobj得到的帕累托最优解集,fval为对应x目标函数;fitnessfcn为目标函数句柄,同函数ga一样,需要编写一个描述目标函数M的文件,navrs为变量数目;A、b、Aeq、bep为线性约束,可以表示为 A ∗ X < = B , A e q ∗ X = b e p A*X<=B,Aeq*X=bep A∗X<=B,Aeq∗X=bep;ib、ub为上、下限约束,可以表述为 i b < = X < = u b ib<=X<=ub ib<=X<=ub,当每没有约束时,用[ ]表示即可;
options中需要对多目标优化算法进行一些设置:
o p t i o n s = g a o p t i m s e t ( ′ p a r a m ′ , v a l u e , ′ p a r a m 2 ′ , v a l u e 2 , . . . . . . ) options=gaoptimset('param',value,'param2',value2,......) options=gaoptimset(′param′,value,′param2′,value2,......)
其中,param,param2等是需要设定的参数,如最优前端个体系数,拥挤距离计算函数,约束条件,终止条件等;value、value2等是param的具体值。param有专门的表达方式,如最优前端个体系数对应paretofraction、拥挤度计算函数对应DistanceMeasureFcn。
结果如下:
《智能算法30个案例》
链接: 多目标优化问题的算法及其求解.