使用遗传算法进行多目标优化
这个例子展示了如何使用多目标遗传算法进行多目标优化函数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 = 2
和x = + 2
分别。然而,在一个多目标问题,x = 2
,x = 2
,任何解决方案的范围2 < = x < = 2
同样是最优的。没有单一的解决方案多目标问题。多目标遗传算法的目标是找到一组解决方案的范围(理想情况下有一个很好的传播)。的解决方案也被称为帕累托。所有的帕累托最优解决方案。
编码的适应度函数
我们创建一个MATLAB®文件命名simple_multiobjective.m
:
函数y = simple_multiobjective (x) y (1) = (x + 2) ^ 2 - 10;y (2) = (x - 2) ^ 2 + 20;
遗传算法解算器假设适应度函数将一个输入x
,在那里x
是一个行向量和尽可能多的元素数量的变量的问题。每个目标函数的适应度函数计算值并返回输出这些值在一个向量y
。
尽量减少使用gamultiobj
使用gamultiobj
功能,我们需要提供至少两个输入参数,适应度函数,变量的数量问题。前两个输出参数返回gamultiobj
是X
点帕累托面前,FVAL
值,目标函数值X
。第三个输出参数,exitFlag
,告诉你的原因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 < =
和线性等式约束的形式Aeq * x =说真的
和绑定约束形式磅< = x < =乌兰巴托
。我们通过一个
和Aeq
矩阵和b
,说真的
,磅
,乌兰巴托
向量。既然我们没有线性约束在这个例子中,我们通过[]
对于那些输入。
一个= [];b = [];Aeq = [];说真的= [];磅= -1.5;乌兰巴托= 0;x = gamultiobj (Aeq FitnessFunction numberOfVariables, A, b,说真的,磅,乌兰巴托);
优化终止:超过了一代又一代的最大数目。
所有的解决方案X
(每一行)将满足所有线性和绑定约束中指定的公差范围内options.ConstraintTolerance
。然而,如果你使用自己的交叉或变异函数,确保新个体是可行的线性和简单数据绑定约束。
添加可视化
gamultiobj
可以接受一个或多个情节功能通过选择参数。这个功能是用于可视化解算器在运行时的性能。情节功能可以选择使用optimoptions
。
在这里,我们使用optimoptions
选择两个情节功能。第一个函数gaplotpareto
情节帕累托面前(限于任何三个目标)在每一代。第二个函数gaplotscorediversity
,情节得分为每个目标多样性。选项是作为最后一个参数传递给解决。
选择= optimoptions (@gamultiobj,“PlotFcn”,{@gaplotpareto, @gaplotscorediversity});gamultiobj (FitnessFunction numberOfVariables,[][],[],[],磅,乌兰巴托,选项);
优化终止:超过了一代又一代的最大数目。
Vectorizing健身功能
考虑前面的健身功能:
objective1 (x) = (x + 2) ^ 2 - 10,和objective2 (x) = (x - 2) ^ 2 + 20
默认情况下,gamultiobj
解算器只在一个点通过适应度函数。然而,如果适应度函数是矢量化接受一组点和返回的一组函数值可以加快您的解决方案。
例如,如果解决需要评价5分在一个适应度函数调用,那么它将调用该函数的矩阵大小5-by-1,即。1、5行和列(回想一下,1是变量)的数量。
创建一个MATLAB文件vectorized_multiobjective.m
:
函数的分数= vectorized_multiobjective(流行)popSize =大小(流行,1);%人口规模numObj = 2;% %的目标初始化分数分数= 0 (popSize numObj);%计算首要目标分数(:1)= (pop + 2) ^ 2 - 10;%计算第二个目标分数(:,2)= (pop - 2) ^ 2 + 20;
向量化的适应度函数矩阵流行
与任意数量的点,行流行
,并返回一个矩阵的大小populationSize
——- - - - - -numberOfObjectives
。
我们需要指定,适应度函数是矢量化使用使用创建的选项optimoptions
。选项是作为第九传递参数。
FitnessFunction = @ (x) vectorized_multiobjective (x);选择= optimoptions (@gamultiobj,“UseVectorized”,真正的);gamultiobj (FitnessFunction numberOfVariables,[][],[],[],磅,乌兰巴托,选项);
优化终止:平均变化量小于options.FunctionTolerance帕累托的传播解决方案。