主要内容

使用遗传算法执行多目标优化

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

简单的多目标优化问题

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

min f(x)= [abomeive1(x);Objective2(x)] x
其中,Objective1(x)=(x + 2)^ 2-10和apoire2(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(1) = (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)= [abomeive1(x);Objective2(x)] x
受-1.5 <= x <= 0(约束约束)
其中,Objective1(x)=(x + 2)^ 2-10和apoire2(x)=(x-2)^ 2 + 20

gamultiobj在表单中接受线性不等式约束A * x < =线性等式约束的形式aeq * x = beq和束缚约束lb <= x <= UB。我们通过了一种AEQ.作为矩阵和B.贝卡,UB.作为载体。由于在此示例中我们没有线性约束,我们通过了[]对于那些输入。

一个= [];b = [];Aeq = [];说真的= [];磅= -1.5;乌兰巴托= 0;x = gamultiobj (Aeq FitnessFunction numberOfVariables, A, b,说真的,磅,乌兰巴托);
优化终止:超出了最大几代数。

所有的解万博 尤文图斯决方案X(每一行)将满足所有线性和边界的约束,在公差规定选项.ConstraintTolerance.。但是,如果使用自己的交叉或突变函数,请确保新的个人对线性和简单的约束是可行的。

添加可视化

gamultiobj可以通过options参数接受一个或多个plot函数。这个特性对于在运行时可视化求解器的性能非常有用。Plot函数可以使用优化选择

我们在这里使用优化选择选择两个绘图函数。第一个绘图功能是GaplotPareto,这在每一代都绘制了帕累托前部(限于任何三个目标)。第二个绘图功能是gaplotscorediversity,这为每个目标绘制得分多样性。选项作为求解器的最后一个参数传递。

选项= Optimoptions(@gamultiobj,“PlotFcn”,{@ gaplotpareto,@ gaplotscoversity};Gamultiobj(FitnessFunction,Numberofvariables,[],[],[],[],LB,UB,选项);
优化终止:超出了最大几代数。

矢量化您的健身功能

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

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

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

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

创建一个名为matlab文件vectorized_multiobjective.m

函数分数=矢量化_multiobjective(pop)popsize = size(pop,1);%人口大小numobj = 2;%目标数量%初始化得分=零(popsize,numobj);%计算第一个目标分数(:,1)=(POP + 2)。^ 2  -  10;%计算第二目标分数(:,2)=(Pop-2)。^ 2 + 20;

适应度函数的这个向量化版本取一个矩阵流行音乐用任意数量的点,行数流行音乐,并返回大小的矩阵populationSize——- - - - - -numberofobjects

我们需要指定适应度函数使用using创建的选项进行向量化优化选择。选项将作为第九个参数传递。

fitnessfunction = @(x)矢量化_multiobjective(x);选项= Optimoptions(@gamultiobj,'undervectorized',真的);Gamultiobj(FitnessFunction,Numberofvariables,[],[],[],[],LB,UB,选项);
优化终止:Pareto解决方案的扩散的平均变化小于选项。功能化。万博 尤文图斯

相关的话题