这个例子展示了如何使用多目标遗传算法函数来执行多目标优化gamultiobj
在全局优化工具箱中。
gamultiobj
可用于求解多变量多目标优化问题。这里我们要最小化两个目标,每个目标有一个决策变量。
min F(x) = [objective - e1(x);objective2 x (x)]
其中,objective - e1(x) = (x+2)²- 10,objective - e2(x) = (x-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)²+ 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
能够处理线性不等式、等式和简单约束的优化问题。在这里,我们想对之前解决的简单多目标问题添加约束。
min F(x) = [objective - e1(x);objective2 x (x)]
受-1.5 <= x <= 0约束条件
其中,objective - e1(x) = (x+2)²- 10,objective - e2(x) = (x-2)²+ 20
gamultiobj
接受线性不等式约束的形式A * x < =
和线性等式约束的形式Aeq * x =说真的
以及形式中的约束条件lb <= x <= ub
。我们通过一个
和Aeq
矩阵和b
,说真的
,磅
,乌兰巴托
向量。因为在这个例子中我们没有线性约束,所以我们通过[]
对于那些输入。
一个= [];b = [];Aeq = [];说真的= [];磅= -1.5;乌兰巴托= 0;x = gamultiobj (Aeq FitnessFunction numberOfVariables, A, b,说真的,磅,乌兰巴托);
优化终止:超过的最大代数。
所有的解万博 尤文图斯决方案X
(每一行)将满足中规定的公差范围内的所有线性约束和约束options.ConstraintTolerance
。然而,如果你使用你自己的交叉或变异函数,确保新的个体是可行的相对于线性和简单的约束。
gamultiobj
可以通过options参数接受一个或多个绘图函数。这个特性对于可视化求解器在运行时的性能非常有用。Plot函数可以选择使用optimoptions
。
在这里,我们使用optimoptions
选择两个plot函数。第一个标绘函数是gaplotpareto
,它绘制每一代的帕累托前线(限定为任意三个目标)。第二个标绘函数是gaplotscorediversity
,它绘制每个目标的得分多样性。这些选项作为最后一个参数传递给求解器。
选择= optimoptions (@gamultiobj,“PlotFcn”, {@gaplotpareto, @gaplotscorediversity});gamultiobj (FitnessFunction numberOfVariables,[][],[],[],磅,乌兰巴托,选项);
优化终止:超过的最大代数。
再次考虑之前的适应度函数:
objective - e1(x) = (x+2)^2 - 10, objective - e2(x) = (x-2)^2 + 20
默认情况下,gamultiobj
求解器每次只向适应度函数传递一个点。但是,如果适应度函数被向量化以接受一组点并返回一组函数值,则可以加速解决方案。
例如,如果求解器需要在对这个适应度函数的一次调用中计算5个点,那么它将使用一个5乘1的矩阵来调用这个函数,即。, 5行1列(1是变量的数量)。
创建一个MATLAB文件,调用vectorized_multiobjective.m
:
函数scores = vectorized_multiobjective(pop) popSize = size(pop,1);%种群大小numObj = 2;%目标数量%初始化分数分数= 0 (popSize, numObj);%计算第一目标得分(:,1)= (pop + 2)。^ 2 - 10;%计算第二目标得分(:,2)= (pop - 2)。^ 2 + 20;
这个适应度函数的向量化版本采用一个矩阵流行
有任意数量的点,的行流行
,并返回一个大小矩阵populationSize
——- - - - - -numberOfObjectives
。
我们需要指定适应度函数使用所创建的选项向量化optimoptions
。选项作为第9个参数传入。
vectorized_multiobjective(x);选择= optimoptions (@gamultiobj,“UseVectorized”,真正的);gamultiobj (FitnessFunction numberOfVariables,[][],[],[],磅,乌兰巴托,选项);
终止优化:帕累托解决方案的平均变化小于选择。功能容忍度。万博 尤文图斯