主要内容

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

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

简单多目标优化问题

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

min 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 = 2x = 2,以及值域内的任意解-2 <= x <= 2同样是最优的。这个多目标问题没有单一的解决方案。多目标遗传算法的目标是在该范围内找到一组解(理想情况下具有良好的扩散)。解集也被称为帕累托前沿。帕累托前沿的所有解决方案都是最优的。

适应度函数编码

我们创建一个名为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) = [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 =说真的和约束的形式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 ,[],[],[],[], 磅,乌兰巴托,选项);
优化终止:超过最大代数。

向量化你的适应度函数

再考虑一下前面的适应度函数:

Objective1 (x) = (x+2)^2 - 10, objective2(x) = (x-2)^2 + 20

默认情况下,gamultiobj求解器每次只将一个点传递给适应度函数。但是,如果适应度函数向量化以接受一组点并返回一组函数值,则可以加快求解速度。

例如,如果求解器需要在对适应度函数的一次调用中计算5个点,那么它将调用具有5 × 1大小的矩阵的函数,即5行1列(回想一下1是变量的数量)。

创建一个名为vectorized_multiobjective.m

函数得分= 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 ,[],[],[],[], 磅,乌兰巴托,选项);
优化终止:帕累托解扩散的平均变化小于期权。

相关的话题

Baidu
map