这个例子展示了如何使用多目标遗传算法函数来执行多目标优化gamultiobj
在全局优化工具箱中。
gamultiobj
可用于求解多变量的多目标优化问题。这里我们希望最小化两个目标,每个目标都有一个决策变量。
min F(x) = [objecve1 (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 = (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
能处理线性不等式、等式和简单约束条件下的优化问题。在这里,我们想对之前解决的简单多目标问题添加约束条件。
min F(x) = [objecve1 (x);objective2 x (x)]
受制于-1.5 <= x <= 0 (bound constraints)
其中,objective1(x) = (x+2)^2 - 10,和objective2(x) = (x-2)^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
(每行)将满足在中指定的公差内的所有线性和约束性约束选项。ConstraintTolerance
.然而,如果您使用自己的交叉或变异函数,请确保新个体在线性和简单的约束条件下是可行的。
gamultiobj
可以通过options参数接受一个或多个plot函数。此特性对于可视化运行时求解器的性能非常有用。绘图功能可以选择使用optimoptions
.
在这里,我们使用optimoptions
选择两个plot函数。第一个绘图函数是gaplotpareto
,它描绘了每一代的帕累托前线(限于任何三个目标)。第二个绘图函数是gaplotscorediversity
,它绘制出每个目标的得分差异。选项作为最后一个参数传递给求解器。
选择= optimoptions (@gamultiobj,“PlotFcn”, {@gaplotpareto, @gaplotscorediversity});gamultiobj (FitnessFunction numberOfVariables ,[],[],[],[], 磅,乌兰巴托,选项);
优化终止:超过了最大代数。
再考虑前面的适应度函数:
objecve1 (x) = (x+2)^2 - 10,而objecve2 (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个参数传入。
FitnessFunction = @(x) vectorized_multiobjective(x);选择= optimoptions (@gamultiobj,“UseVectorized”,真正的);gamultiobj (FitnessFunction numberOfVariables ,[],[],[],[], 磅,乌兰巴托,选项);
优化终止:帕累托解决方案的平均变化小于可选方案。金宝搏官方网站