主要内容

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

这个例子展示了如何使用多目标遗传算法函数来执行多目标优化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 = 2x = + 2分别。然而,在多目标问题中,x = 2x = 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函数时,我们需要提供至少两个输入参数、一个适应度函数和问题中的变量数量。返回的前两个输出参数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) = [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 ,[],[],[],[], 磅,乌兰巴托,选项);
优化终止:帕累托解决方案的平均变化小于可选方案。金宝搏官方网站

相关的话题