利用遗传算法进行多目标优化

这个例子展示了如何使用多目标遗传算法函数来执行多目标优化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 = 2x = + 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函数,我们需要提供至少两个输入参数,一个适应度函数,以及问题中变量的数量。返回的前两个输出参数gamultiobjX,帕累托前面的点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,[][],[],[],磅,乌兰巴托,选项);
终止优化:帕累托解决方案的平均变化小于选择。功能容忍度。万博 尤文图斯