主要内容

使用遗传算法执行多目标优化

这个例子说明了如何使用多目标遗传算法函数进行多目标优化gamultiobj在全局优化工具箱中。

简单多目标优化问题

gamultiobj可用于求解多变量多目标优化问题。这里我们想最小化两个目标,每个目标有一个决策变量。

最小F(x)=[objective1(x);objective2(x)]x
其中,objective1(x)=(x+2)^2-10,objective2(x)=(x-2)^2+20
%在同一轴上绘制两个目标函数X = -10:0.5:10;F1 =(X + 2)^ 2  -  10。F2 =(X-2)^ 2 + 20。积(X,F1);抓住; 图(x,f2,“r”);网格;标题(“目标图”(x+2)^2-10”和“(x-2)^2+20”);

这两个目标的最小值为X = -2x=+2但是,在多目标问题中,X = -2,x = 2时和范围内的任意溶液-2<=x<=2同样是最优的。没有单一的解决这个问题,多目标。多目标遗传算法的目标是找到该范围内的一套解决方案(具有良好的传播理想情况下)。金宝搏官方网站解集也被称为帕累托前。金宝搏官方网站帕累托前金宝搏官方网站面所有的解决方案是最优的。

对适应度函数进行编码

我们创建了一个名为简单多目标:

函数y = simple_multiobjective(X)Y(1)=(X + 2)^ 2  -  10;Y(2)=(X-2)^ 2 + 20;

遗传算法解算器假设适应度函数将接受一个输入x哪里x是一样多的元素的在问题变量的数目的行向量。适应度函数计算每个目标函数的值,并在一个单一的矢量输出返回这些值Y.

最小化使用gamultiobj

使用gamultiobj函数,我们需要提供至少两个输入参数、一个适应度函数和问题中的变量数。返回的前两个输出参数gamultiobjX,帕累托前沿上的点,以及FVAL中,目标函数在值的值X. 第三个输出参数,出口滞后,告诉你原因gamultiobj停止。第四个说法,输出,包含有关解算器性能的信息。gamultiobj也可以返回第五个参数,人口,它包含在gamultiobj终止和第六个参数,分数,其中包含所有目标的函数值人口什么时候gamultiobj终止。

FitnessFunction = @simple_multiobjective;numberOfVariables = 1;[X,FVAL] = gamultiobj(FitnessFunction,numberOfVariables);
优化已终止:超过最大生成数。

这个X由解算器返回的是一个矩阵,其中每一行是在帕累托前沿为目标函数的点。这个FVAL是一个矩阵,其中每行包含在矩阵中对应点处计算的目标函数值X.

大小(x)的大小(FVAL)
ans=18 1 ans=18 2

约束多目标优化问题

gamultiobj可以处理具有线性不等式、等式和简单边界约束的优化问题。在这里,我们希望在以前解决的简单多目标问题上添加边界约束。

最小F(x)=[objective1(x);objective2(x)]x
受制于-1.5<=x<=0(约束条件)
其中,objective1(x)=(x+2)^2-10,objective2(x)=(x-2)^2+20

gamultiobj接受形式为的线性不等式约束A * X <= b的在形式和线性等式约束Aeq*x=beq和形式中的约束lb<=x<=ub1.我们通过A.Aeq作为矩阵和B,贝基,, 和乌兰巴托因为在这个例子中我们没有线性约束,所以我们通过[]对于那些投入。

a = [];B = [];AEQ = [];BEQ = [];LB = -1.5;UB = 0;X = gamultiobj(FitnessFunction,numberOfVariables,A,B,AEQ,BEQ,LB,UB);
优化已终止:超过最大生成数。

在所有解金宝搏官方网站决方案X(各行)将满足规定的公差范围内的所有线性和结合的约束选项.约束容忍度. 但是,如果您使用自己的交叉或变异函数,请确保新个体在线性和简单边界约束下是可行的。

添加可视化

gamultiobj可以接受通过选项参数的一个或多个情节的功能。此功能在运行时可视化求解器的性能非常有用。情节功能都可以使用被选择最佳选择.

这里我们使用最佳选择选择两个绘图函数。第一个绘图函数为帕累托,它在每一代人中绘制帕累托前沿(限于任何三个目标)。第二个绘图函数是盖普洛特多样性,绘制每个目标的分数差异。这些选项将作为最后一个参数传递给解算器。

options=options(@gamultiobj,'PlotFcn',{@gaplotpareto,@gaplotscorediversity});gamultiobj(FitnessFunction,numberOfVariables,[]、[]、[]、[]、[]、lb、ub、options);
优化已终止:超过最大生成数。

向量化你的适应度函数

再考虑前面的健身功能:

目的1(X)=(X + 2)^ 2  -  10,以及objective2(X)=(X-2)^ 2 + 20

默认情况下gamultiobj求解器一次只能适应度函数传入一个点。但是,如果适应度函数矢量接受一个点集并返回一组函数值可以加快您的解决方案。

For example, if the solver needs to evaluate five points in one call to this fitness function, then it will call the function with a matrix of size 5-by-1, i.e., 5 rows and 1 column (recall that 1 is the number of variables).

创建一个名为vectorized_multiobjective.m:

函数分数=向量化的_多目标(pop)popSize=大小(pop,1);%总体大小numObj=2;%目标数%初始化分数分数=零(popSize,numObj);%计算第一个目标分数(:,1)=(pop+2)。^2-10;%计算第二个目标分数(:,2)=(pop-2)。^2+20;

适应度函数的这个版本矢量需要一个矩阵流行音乐用点的任意数量,的行流行音乐,并返回大小的矩阵族群大小-经过-目标数.

我们需要指定其适应度函数使用使用创建的选项矢量最佳选择。选项作为第九个参数传入。

FitnessFunction=@(x)矢量化的_多目标(x);options=optimoptions(@gamultiobj,“使用矢量化”,对);gamultiobj(FitnessFunction,numberOfVariables,[]、[]、[]、[]、[]、lb、ub、options);
优化终止:帕累托解扩散的平均变化小于options.FunctionTolerance。金宝搏官方网站

相关话题