主要内容

本页采用了机器翻译。点击此处可查看英文原文。

gamultiobj

使用遗传算法寻找多个适应度函数的帕累托前沿

说明

x = gamultiobj(fun,nvars)fun 中定义的目标函数的帕累托前沿上求 xnvars 是优化问题的维数(决策变量的个数)。解 x 是局部解,这意味着它可能不在全局帕累托前沿上。

注意

传递额外参数说明如何将额外的参数传递给目标函数和非线性约束函数(如有必要)。

示例

x = gamultiobj(fun,nvars,A,b) 根据线性不等式 Axb 求局部帕累托集 x。请参阅线性不等式约束gamultiobj 仅支持默认 PopulationType 选项 ('doubleVector') 的线性约束。

示例

x = gamultiobj(fun,nvars,A,b,Aeq,beq) 根据线性等式 Aeqx=beq 和线性不等式 Axb 求局部帕累托集 x,请参阅线性等式约束。(如果不存在不等式,则设置 A = []b = []。)gamultiobj 仅支持默认 PopulationType 选项 ('doubleVector') 的线性约束。

x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub) 定义设计变量 x 的一组下界和上界,以便在 lb x ub 范围内求局部帕累托集,请参阅边界约束。如果不存在线性等式约束,则对 Aeqbeq 使用空矩阵。gamultiobj 仅支持默认 PopulationType 选项 ('doubleVector') 的边界约束。

示例

x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon) 根据在 nonlcon 中定义的约束求帕累托集。函数 nonlcon 接受 x 并返回向量 cceq,后两者分别表示非线性不等式和等式。gamultiobj 将最小化 fun,使得 c(x) 0 ceq(x) = 0。(如果不存在边界,则设置 lb = []ub = []。)gamultiobj 仅支持默认 PopulationType 选项 ('doubleVector') 的非线性约束。

x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,options)x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon,options) 求帕累托集 x,其中默认优化参数由 options 中的值替换。使用 optimoptions(推荐)或结构体创建 options

示例

x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon,intcon,options)x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon,intcon) 要求在 intcon 中列出的变量接受整数值。

注意

当存在整数约束时,gamultiobj 不接受非线性等式约束,只接受非线性不等式约束。

示例

x = gamultiobj(problem)problem 的帕累托集,其中 problem 是一个结构体,如 problem 中所述。

[x,fval] = gamultiobj(___),对于任何输入变量,都返回一个矩阵 fval,其中包含在 fun 中为 x 中的所有解定义的所有适应度函数的值。fval 具有 nf 列,其中 nf 是目标的数量,并且与 x 的行数相同。

[x,fval,exitflag,output] = gamultiobj(___) 返回 exitflag(标识算法停止原因的整数),以及包含有关优化过程的信息的结构体 output

[x,fval,exitflag,output,population,scores] = gamultiobj(___) 返回 population(其行是最终种群)和 scores(最终种群的分数)。

示例

示例

全部折叠

求一个简单的多目标问题的帕累托前沿。有两个目标和两个决策变量 x

fitnessfcn = @(x)[norm(x)^2,0.5*norm(x(:)-[2;-1])^2+2];

求此目标函数的帕累托前沿。

rng default % For reproducibility
x = gamultiobj(fitnessfcn,2);
gamultiobj stopped because the average change in the spread of Pareto solutions is less than options.FunctionTolerance.

绘制解点。

plot(x(:,1),x(:,2),'ko')
xlabel('x(1)')
ylabel('x(2)')
title('Pareto Points in Parameter Space')

Figure contains an axes object. The axes object with title Pareto Points in Parameter Space, xlabel x(1), ylabel x(2) contains a line object which displays its values using only markers.

要查看线性约束对此问题的影响,请参阅具有线性约束的多目标问题

此示例说明如何在线性约束下求多目标问题的帕累托前沿。

有两个目标函数和两个决策变量 x

fitnessfcn = @(x)[norm(x)^2,0.5*norm(x(:)-[2;-1])^2+2];

线性约束为 x(1)+x(2)1/2

A = [1,1];
b = 1/2;

找到帕累托前沿。

rng default % For reproducibility
x = gamultiobj(fitnessfcn,2,A,b);
gamultiobj stopped because the average change in the spread of Pareto solutions is less than options.FunctionTolerance.

绘制有约束解和线性约束。

plot(x(:,1),x(:,2),'ko')
t = linspace(-1/2,2);
y = 1/2 - t;
hold on
plot(t,y,'b--')
xlabel('x(1)')
ylabel('x(2)')
title('Pareto Points in Parameter Space')
hold off

Figure contains an axes object. The axes object with title Pareto Points in Parameter Space, xlabel x(1), ylabel x(2) contains 2 objects of type line. One or more of the lines displays its values using only markers

要查看从此问题中删除线性约束的效果,请参阅简单的多目标问题

求两个适应度函数 sin(x)cos(x) 在区间 0x2π 上的帕累托前沿。

fitnessfcn = @(x)[sin(x),cos(x)];
nvars = 1;
lb = 0;
ub = 2*pi;
rng default % for reproducibility
x = gamultiobj(fitnessfcn,nvars,[],[],[],[],lb,ub)
gamultiobj stopped because the average change in the spread of Pareto solutions is less than options.FunctionTolerance.
x = 18×1

    4.7124
    4.7124
    3.1415
    3.6733
    3.9845
    3.4582
    3.9098
    4.4409
    4.0846
    3.8686
    4.1976
    4.0093
    4.5791
    3.6800
    4.0656
      ⋮

绘制解。gamultiobj 沿整个帕累托前沿寻找点。

plot(sin(x),cos(x),'r*')
xlabel('sin(x)')
ylabel('cos(x)')
title('Pareto Front')
legend('Pareto front')

Figure contains an axes object. The axes object with title Pareto Front, xlabel sin(x), ylabel cos(x) contains a line object which displays its values using only markers. This object represents Pareto front.

求出并绘制双目标 Schaffer 的第二个函数的帕累托前沿。此函数有不相连的帕累托前沿。

将以下代码复制到 MATLAB® 路径下的一个函数文件中。

function y = schaffer2(x) % y has two columns

% Initialize y for two objectives and for all x
y = zeros(length(x),2);

% Evaluate first objective. 
% This objective is piecewise continuous.
for i = 1:length(x)
    if x(i) <= 1
        y(i,1) = -x(i);
    elseif x(i) <=3 
        y(i,1) = x(i) -2; 
    elseif x(i) <=4 
        y(i,1) = 4 - x(i);
    else 
        y(i,1) = x(i) - 4;
    end
end

% Evaluate second objective
y(:,2) = (x -5).^2;

绘制两个目标。

x = -1:0.1:8;
y = schaffer2(x);
plot(x,y(:,1),'r',x,y(:,2),'b');
xlabel x
ylabel 'schaffer2(x)'
legend('Objective 1','Objective 2')

这两个目标函数在范围 [1,3] 和 [4,5] 中竞争 x。但是,帕累托最优前沿仅由两个不相连的区域组成,对应于范围 [1,2][4,5] 中的 x。由于区域 [2,3] 低于 [4,5],因此存在不相连的区域。在该范围内,目标 1 具有相同的值,但目标 2 较小。

设置边界以使种群成员保持在 $-5\le x\le 10$ 范围内。

lb = -5;
ub = 10;

设置选项以查看在 gamultiobj 运行时的帕累托前沿。

options = optimoptions('gamultiobj','PlotFcn',@gaplotpareto);

调用 gamultiobj

rng default % For reproducibility
[x,fval,exitflag,output] = gamultiobj(@schaffer2,1,[],[],[],[],lb,ub,options);
gamultiobj stopped because it exceeded options.MaxGenerations.

创建一个使用两个问题变量的双目标函数。

rng default % For reproducibility
M = diag([-1 -1]) + randn(2)/4; % Two problem variables
fun = @(x)[(x').^2 / 30 + M*x']; % Two objectives

指定第二个变量必须为整数。

intcon = 2;

指定问题边界、gaplotpareto 绘图函数和种群大小为 100。

lb = [0 0];
ub = [100 50];
options = optimoptions("gamultiobj","PlotFcn","gaplotpareto",...
    "PopulationSize",100);

求问题的帕累托集。

nvars = 2;
A = [];
b = [];
Aeq = [];
beq = [];
nonlcon = [];
[x,fval] = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon,intcon,options);
gamultiobj stopped because the average change in the spread of Pareto solutions is less than options.FunctionTolerance.

Figure Genetic Algorithm contains an axes object. The axes object with title Pareto Front, xlabel Objective 1, ylabel Objective 2 contains an object of type scatter.

列出十个解,注意第二个变量是整数值。

x(1:10,:)
ans = 10×2

    8.3393   28.0000
   12.9927   49.0000
    7.1611   27.0000
    7.0210   18.0000
    0.0004   12.0000
    9.0989   44.0000
    9.3974   29.0000
    0.5537   17.0000
    6.4010   17.0000
    7.0531   31.0000

运行一个简单的多目标问题,并获得所有可用的输出。

设置随机数生成器以实现可再现性。

rng default

将适应度函数设置为 kur_multiobjective,该函数具有三个控制项变量并返回两个适应度函数值。

fitnessfcn = @kur_multiobjective;
nvars = 3;

kur_multiobjective 函数具有以下代码。

function y = kur_multiobjective(x)
%KUR_MULTIOBJECTIVE Objective function for a multiobjective problem. 
%   The Pareto-optimal set for this two-objective problem is nonconvex as
%   well as disconnected. The function KUR_MULTIOBJECTIVE computes two
%   objectives and returns a vector y of size 2-by-1.
%
%   Reference: Kalyanmoy Deb, "Multi-Objective Optimization using
%   Evolutionary Algorithms", John Wiley & Sons ISBN 047187339 

%   Copyright 2007 The MathWorks, Inc.


% Initialize for two objectives 
y = zeros(2,1);

% Compute first objective
for i = 1:2
  y(1) = y(1)  - 10*exp(-0.2*sqrt(x(i)^2 + x(i+1)^2));
end

% Compute second objective
for i = 1:3
   y(2) = y(2) +  abs(x(i))^0.8 + 5*sin(x(i)^3);
end

为所有变量设置下界和上界。

ub = [5 5 5];
lb = -ub;

求此问题的帕累托前沿和其他所有输出。

[x,fval,exitflag,output,population,scores] = gamultiobj(fitnessfcn,nvars, ...
    [],[],[],[],lb,ub);
gamultiobj stopped because the average change in the spread of Pareto solutions is less than options.FunctionTolerance.

检查一些返回变量的大小。

sizex = size(x)
sizepopulation = size(population)
sizescores = size(scores)
sizex =

    18     3


sizepopulation =

    50     3


sizescores =

    50     2

返回的帕累托前沿包含 18 个点。最终种群有 50 个成员。每个 population 行都具有三个维度,对应于三个决策变量。每个 scores 行有两个维度,对应于两个适应度函数。

输入参数

全部折叠

要优化的适应度函数,指定为函数句柄或函数名称。

fun 是函数,它接受长度为 nvars 的由双精度值组成的实数行向量 x,并返回由目标函数值组成的实数向量 F(x)。有关编写 fun 的详细信息,请参阅计算目标函数

如果将 UseVectorized 选项设置为 true,则 fun 接受大小为 n×nvars 的矩阵,其中矩阵表示 n 个个体。fun 返回大小为 n×m 的矩阵,其中 m 是目标函数的数目。请参阅 向量化适应度函数

示例: @(x)[sin(x),cos(x)]

数据类型: char | function_handle | string

变量的数目,指定为正整数。求解器传递长度从 nvarsfun 的行向量。

示例: 4

数据类型: double

线性不等式约束,指定为实矩阵。AM×nvars 矩阵,其中 M 是不等式的数目。

A 以如下形式编写 M 个线性不等式

A*x <= b,

其中,x 是由 nvars 个变量组成的列向量 x(:)b 是具有 M 个元素的列向量。

例如,给定约束 A = [1,2;3,4;5,6]b = [10;20;30] 来指定以下和:

x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30。

示例: 要将 x 分量之和设为等于或小于 1,请指定 A = ones(1,N)b = 1

数据类型: double

线性不等式约束,指定为实数向量。b 是与 A 矩阵相关的包含 M 个元素的向量。如果将 b 作为行向量传递,求解器会在内部将 b 转换为列向量 b(:)

b 以如下形式编写 M 个线性不等式

A*x <= b,

其中,x 是由 nvars 个变量组成的列向量 x(:)A 是大小为 M×nvars 的矩阵。

例如,给定约束 A = [1,2;3,4;5,6]b = [10;20;30] 来指定以下和:

x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30。

示例: 要将 x 分量之和设为等于或小于 1,请指定 A = ones(1,N)b = 1

数据类型: double

线性等式约束,指定为实矩阵。AeqMe×nvars 矩阵,其中 Me 是等式的数目。

Aeq 以如下形式编写 Me 个线性等式

Aeq*x = beq,

其中,x 是由 nvars 个变量组成的列向量 x(:)beq 是具有 Me 个元素的列向量。

例如,给定约束 Aeq = [1,2,3;2,4,1]beq = [10;20] 来指定以下和:

x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 20。

示例: 要将 x 分量之和设为 1,请指定 Aeq = ones(1,N)beq = 1

数据类型: double

线性等式约束,指定为实数向量。beq 是与 Aeq 矩阵相关的包含 Me 个元素的向量。如果将 beq 作为行向量传递,求解器会在内部将 beq 转换为列向量 beq(:)

beq 以如下形式编写 Me 个线性等式

Aeq*x = beq,

其中,x 是由 nvars 个变量组成的列向量 x(:)Aeq 是大小为 Meq×N 的矩阵。

例如,给定约束 Aeq = [1,2,3;2,4,1]beq = [10;20] 来指定以下和:

x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 20。

示例: 要将 x 分量之和设为 1,请指定 Aeq = ones(1,N)beq = 1

数据类型: double

下界,指定为实数向量或实数数组。如果 numel(lb) = nvars,则 lb 为所有 i 指定 x(i) >= lb(i)

如果 numel(lb) < nvars,则 lb1 <= i <= numel(lb) 指定 x(i) >= lb(i)

在这种情况下,求解器会发出警告。

示例: 要将所有 x 分量指定为正值,请设置 lb = zeros(nvars,1)

数据类型: double

上界,指定为实数向量或实数数组。如果 numel(ub) = nvars,则 ub 为所有 i 指定 x(i) <= ub(i)

如果 numel(ub) < nvars,则 ub1 <= i <= numel(ub) 指定 x(i) <= ub(i)

在这种情况下,求解器会发出警告。

示例: 要将所有 x 分量指定为小于 1,请设置 ub = ones(nvars,1)

数据类型: double

非线性约束,指定为函数句柄或函数名称。nonlcon 函数接受行向量 x 并返回两个行向量 c(x)ceq(x)

  • c(x)x 处的非线性不等式约束的行向量。对于 c 的所有条目,gamultiobj 函数尝试满足 c(x) <= 0

  • ceq(x)x 处的非线性等式约束的行向量。对于 ceq 的所有条目,gamultiobj 函数尝试满足 ceq(x) = 0

如果将 UseVectorized 选项设置为 true,则 nonlcon 接受大小为 n×nvars 的矩阵,该矩阵表示 n 个个体。nonlcon 在第一个参量中返回大小为 n×mc 的矩阵,其中 mc 是非线性不等式约束的数量。nonlcon 在第二个参量中返回大小为 n×mceq 的矩阵,其中 mceq 是非线性等式约束的数量。请参阅 向量化适应度函数

例如,x = gamultiobj(@myfun,nvars,A,b,Aeq,beq,lb,ub,@mycon),其中 mycon 是一个 MATLAB® 函数,如下所示:

function [c,ceq] = mycon(x)
c = ...     % Compute nonlinear inequalities at x.
ceq = ...   % Compute nonlinear equalities at x.

有关详细信息,请参阅非线性约束

数据类型: char | function_handle | string

优化选项,指定为 optimoptions 的输出或结构体。请参阅 遗传算法选项 中的选项详细信息。

optimoptions 隐藏以斜体列出的选项。请参阅 optimoptions 隐藏的选项

  • {} 中的值表示默认值。

  • {}* 表示存在线性约束时的默认值,对于 MutationFcn,还表示存在边界时的默认值。

  • I* 表示求解器以不同方式处理整数约束的选项。

  • NM 指示该选项不适用于 gamultiobj

适用于 gagamultiobj 的选项

选项描述
ConstraintTolerance

确定在非线性约束下的可行性。另外,max(sqrt(eps),ConstraintTolerance) 确定在线性约束下的可行性。

对于 options 结构体,使用 TolCon

非负标量 | {1e-3}

CreationFcn

创建初始种群的函数。指定为内置创建函数的名称或函数句柄。请参阅 种群选项

{'gacreationuniform'} | {'gacreationlinearfeasible'}* | 'gacreationnonlinearfeasible' | {'gacreationuniformint'}I*(适用于 ga)| {'gacreationsobol'}I*(适用于 gamultiobj)| 自定义创建函数

CrossoverFcn

算法用于创建交叉子代的函数。指定为内置交叉函数的名称或函数句柄。请参阅 交叉选项

{'crossoverscattered'}(适用于 ga)、{'crossoverintermediate'}*(适用于 gamultiobj)| {'crossoverlaplace'}I* | 'crossoverheuristic' | 'crossoversinglepoint' | 'crossovertwopoint' | 'crossoverarithmetic' | 自定义交叉函数

CrossoverFraction

交叉函数创建的下一代种群的比例,不包括精英子代。

非负标量 | {0.8}

Display

显示级别。

'off' | 'iter' | 'diagnose' | {'final'}

DistanceMeasureFcn

用于计算个体距离测度的函数。指定为内置距离测度函数的名称或函数句柄。该值适用于决策变量或设计空间(基因型)或函数空间(表型)。默认 'distancecrowding' 在函数空间中(表型)。仅适用于 gamultiobj。请参阅 多目标选项

对于 options 结构体,使用函数句柄,而不是名称。

{'distancecrowding'} 等效于 {@distancecrowding,'phenotype'} | {@distancecrowding,'genotype'} | 自定义距离函数

EliteCount

NM 正整数,指定当前一代中保证存活到下一代的个体数量。gamultiobj 中未使用。

非负整数 | {ceil(0.05*PopulationSize)} | {0.05*(default PopulationSize)}(适用于混合整数问题)

FitnessLimit

NM 如果适应度函数达到 FitnessLimit 的值,则算法停止。

标量 | {-Inf}

FitnessScalingFcn

用于缩放适应度函数值的函数。指定为内置缩放函数的名称或函数句柄。gamultiobj 的选项不可用。

{'fitscalingrank'} | 'fitscalingshiftlinear' | 'fitscalingprop' | 'fitscalingtop' | 自定义适应适应度缩放函数

FunctionTolerance

如果 MaxStallGenerations 代的最佳适应度函数值的平均相对变化小于或等于 FunctionTolerance,则算法停止。如果 StallTest'geometricWeighted',则在加权平均值相对变化小于或等于 FunctionTolerance 时,算法停止。

对于 gamultiobj,如果 options.MaxStallGenerations 代内间距值相对变化的几何平均值小于 options.FunctionTolerance,且最终间距小于过去 options.MaxStallGenerations 代内的均值间距,则算法停止。请参阅 gamultiobj 算法

对于 options 结构体,使用 TolFun

非负标量 | {1e-6} 对应 ga{1e-4} 对应 gamultiobj

HybridFcn

I*ga 终止后继续优化的函数。指定为名称或函数句柄。

或者,是指定混合函数及其选项的元胞数组。请参阅 ga 混合函数

对于 gamultiobj,唯一的混合函数是 @fgoalattain。请参阅 gamultiobj 混合函数

当问题有整数约束时,无法使用混合函数。

请参阅 何时使用混合函数

函数名称或句柄 | 'fminsearch' | 'patternsearch' | 'fminunc' | 'fmincon' | {[]}

或者

1×2 元胞数组 | {@solver, hybridoptions},其中 solver = fminsearchpatternsearchfminuncfmincon {[]}

InitialPenalty

NM I* 罚参数的初始值

正标量 | {10}

InitialPopulationMatrix

用于为遗传算法提供种子的初始种群。最多包含 PopulationSize 行和 N 列,其中 N 是变量的数目。您可以传递部分种群,即行数少于 PopulationSize 的种群。在这种情况下,遗传算法使用 CreationFcn 生成其余的种群成员。请参阅 种群选项

对于 options 结构体,使用 InitialPopulation

矩阵 | {[]}

InitialPopulationRange

用于指定初始种群中个体范围的矩阵或向量。适用于 gacreationuniform 创建函数。ga 对默认初始范围进行移位和缩放以匹配任何有限边界。

对于 options 结构体,使用 PopInitRange

矩阵或向量 | {[-10;10]} 适用于无界分量,{[-1e4+1;1e4+1]} 适用于整数约束问题的无界分量,{[lb;ub]} 适用于有界分量,默认范围已修改以匹配单边边界

InitialScoresMatrix

用于确定适应度的初始分数。最多包含 PopulationSize 行和 Nf 列,其中 Nf 是适应度函数的数目(对于 ga1,对于 gamultiobj 则大于 1)。您可以传递部分分数矩阵,即行数少于 PopulationSize 的分数矩阵。在这种情况下,求解器在计算适应度函数时会填充分数。

对于 options 结构体,使用 InitialScores

单目标的列向量 | 多目标的矩阵 | {[]}

MaxGenerations

算法停止前的最大迭代次数。

对于 options 结构体,使用 Generations

非负整数 | {100*numberOfVariables}(适用于 ga)、{200*numberOfVariables}(适用于 gamultiobj

MaxStallGenerations

如果 MaxStallGenerations 代的最佳适应度函数值的平均相对变化小于或等于 FunctionTolerance,则算法停止。如果 StallTest'geometricWeighted',则在加权平均值相对变化小于或等于 FunctionTolerance 时,算法停止。

对于 gamultiobj,如果 options.MaxStallGenerations 代内间距值相对变化的几何平均值小于 options.FunctionTolerance,且最终间距小于过去 options.MaxStallGenerations 代内的均值间距,则算法停止。请参阅 gamultiobj 算法

对于 options 结构体,使用 StallGenLimit

非负整数 | {50} 用于 ga{100} 用于 gamultiobj

MaxStallTime

NM 如果目标函数在 MaxStallTime 秒(根据 tictoc 的测量)内没有改进,则算法停止。

对于 options 结构体,使用 StallTimeLimit

正标量 | {Inf}

MaxTime

算法在运行 MaxTime 秒(根据 tictoc 的测量)后停止。此限制在每次迭代后强制执行,因此当迭代花费大量时间时,ga 可能会超出此限制。

对于 options 结构体,使用 TimeLimit

非负标量 | {Inf}

MigrationDirection

迁移方向。请参阅 迁移选项

'both' | {'forward'}

MigrationFraction

从 0 到 1 的标量,指定每个子种群中迁移到不同子种群的个体比例。请参阅 迁移选项

标量 | {0.2}

MigrationInterval

正整数,指定个体在子种群之间迁移时发生的代数。请参阅 迁移选项

正整数 | {20}

MutationFcn

产生变异子代的函数。指定为内置变异函数的名称或函数句柄。请参阅 变异选项

{'mutationgaussian'}(适用于无约束的 ga)| {'mutationadaptfeasible'}*(适用于 gamultiobj 和有约束的 ga)| {'mutationpower'} I * | 'mutationpositivebasis' | 'mutationuniform' | 自定义变异函数

NonlinearConstraintAlgorithm

非线性约束算法。请参阅 遗传算法算法的非线性约束求解算法gamultiobj 的选项不可改变。

对于 options 结构体,使用 NonlinConAlgorithm

{'auglag'}(对于 ga),{'penalty'}(对于 gamultiobj

OutputFcn

ga 在每次迭代中调用的函数。指定为函数句柄或函数句柄元胞数组。请参阅 输出函数选项

对于 options 结构体,使用 OutputFcns

函数句柄或函数句柄元胞数组| {[]}

ParetoFraction

从 0 到 1 的标量,指定当求解器从更高的前沿选择个体时,要保留在第一个帕累托前沿的个体的比例(仅适用于 gamultiobj)。请参阅 多目标选项

标量 | {0.35}

PenaltyFactor

NM I* 罚更新参数。

正标量 | {100}

PlotFcn

绘制由算法计算的数据的函数。指定为内置绘图函数的名称、函数句柄,或者为由内置名称或函数句柄组成的元胞数组。请参阅 绘图选项

对于 options 结构体,使用 PlotFcns

gagamultiobj{[]} | 'gaplotdistance' | 'gaplotgenealogy' | 'gaplotselection' | 'gaplotscorediversity' |'gaplotscores' | 'gaplotstopping' | 'gaplotmaxconstr' | 自定义绘图函数

仅限 ga'gaplotbestf' | 'gaplotbestindiv' | 'gaplotexpectation' | 'gaplotrange'

仅限 gamultiobj'gaplotpareto' | 'gaplotparetodistance' | 'gaplotrankhist' | 'gaplotspread'

PlotInterval

正整数,指定对绘图函数的连续调用之间的代数。

正整数 | {1}

PopulationSize

种群大小。

正整数 | 当 numberOfVariables <= 5 时为 {50},否则为 {200} | 仅当使用 ga 求解混合整数问题时为 {min(max(10*nvars,40),100)}

PopulationType

种群的数据类型。对于混合整数问题,必须为 'doubleVector'

'bitstring' | 'custom' | {'doubleVector'}

PopulationType 设置为 'bitString''custom' 时,ga 忽略所有约束。请参阅 种群选项

SelectionFcn

选择交叉和变异子代的父代的函数。指定为内置选择函数的名称或函数句柄。

gamultiobj 仅使用 'selectiontournament' 或自定义选择函数。

{'selectionstochunif'}(适用于 ga)、{'selectiontournament'}(适用于 gamultiobj)| 'selectionremainder' | 'selectionuniform' | 'selectionroulette' | 自定义选择函数

StallTest

NM 停止测试类型。

'geometricWeighted' | {'averageChange'}

UseParallel

并行计算适应度函数和非线性约束函数。请参阅向量化和并行选项(用户函数评估)如何在 Global Optimization Toolbox 中使用并行处理

true | {false}

UseVectorized

指定函数是否向量化。请参阅向量化和并行选项(用户函数评估)向量化适应度函数

对于 options 结构体,使用 Vectorized 和值 'on''off'

true | {false}

示例: optimoptions('gamultiobj','PlotFcn',@gaplotpareto)

整数变量,指定为正整数向量,取值范围为 1nvarsintcon 中的每个值表示一个整数值 x 分量。

注意

intcon 非空时,nonlcon 必须为 ceq 返回空值。

示例: 要将 x 中的偶数条目指定为整数值,请将 intcon 设置为 2:2:nvars

数据类型: double

问题描述,指定为包含这些字段的结构体。

fitnessfcn

适应度函数

nvars

设计变量的数目

Aineq

线性不等式约束的 A 矩阵

Bineq

线性不等式约束的 b 向量

Aeq

线性等式约束的 Aeq 矩阵

Beq

线性等式约束的 beq 向量

lb

x 的下界

ub

x 的上界

nonlcon

非线性约束函数

intcon整数变量的索引
rngstate

用于重置随机数生成器状态的字段

solver

'gamultiobj'

options

使用 optimoptions 或 options 结构体创建的选项

您必须指定字段 fitnessfcnnvarsoptions。对于 gamultiobj,其余字段是可选项。

数据类型: struct

输出参量

全部折叠

帕累托点,以 m×nvars 数组形式返回,其中 m 是帕累托前沿上的点数。x 的每行表示帕累托前沿上的一个点。

帕累托前沿上的函数值,以 m×nf 数组形式返回。m 是帕累托前沿上的点数,nf 是适应度函数的个数。fval 的每行表示 x 中一个帕累托点的函数值。

gamultiobj 停止的原因,以整数形式返回。

exitflag 值停止条件
1

options.MaxStallGenerations 代内间距值相对变化的几何平均值小于 options.FunctionTolerance,且最终间距小于过去 options.MaxStallGenerations 代内的均值间距

0

超过最大代数

-1

优化被输出函数或绘图函数终止

-2

未找到可行点

-5

超出时间限制

有关优化过程的信息,以包含下列字段的结构体形式返回。

输出字段含义
problemtype

问题类型:

  • 'unconstrained' - 没有约束

  • 'boundconstraints' - 仅限边界约束

  • 'linearconstraints' - 线性约束,具有边界约束或无边界约束

  • 'nonlinearconstr' - 非线性约束,具有或没有其他类型的约束

rngstate

在算法即将开始之前 MATLAB 随机数生成器的状态。您可以使用 rngstate 中的值来重新生成 gamultiobj 的输出。请参阅 重现结果

generations总代数,不包括 HybridFcn 迭代。
funccount函数计算总次数。
messagegamultiobj 退出消息。
averagedistance平均“距离”,默认情况下,它是帕累托前沿成员与其均值之差的范数的标准差。
spread“距离”的组合,以及最后两次迭代之间帕累托前沿上的点的移动的度量。
maxconstraint最终帕累托集处的最大约束违反值。

最终种群,以 n×nvars 数组形式返回,其中 n 是种群的成员数。

最终种群的得分,以 n×nf 数组形式返回。n 是种群成员的数目,nf 是适应度函数的数目。

当存在非线性约束时,gamultiobj 将不可行种群成员的 scores 设置为 Inf

详细信息

全部折叠

算法

gamultiobj 使用受控的精英遗传算法(NSGA-II 的变体 [1])。精英遗传算法始终偏爱具有更好适应度值(排名)的个体。受控精英遗传算法也偏爱那些有助于增加种群多样性的个体,即使它们的适应度值较低也是如此。保持种群的多样性对于收敛到最优帕累托前沿是很重要的。随着算法的进展,通过控制种群中的精英成员来保持多样性。ParetoFractionDistanceMeasureFcn 这两个选项控制着精英机制。ParetoFraction 限制帕累托前沿上的个体数量(精英成员)。由 DistanceMeasureFcn 选择的距离函数有助于通过偏爱距离前沿相对较远的个体来保持前沿的多样性。如果间距(帕累托前沿移动的度量)很小,算法就会停止。有关详细信息,请参阅gamultiobj 算法

替代功能

App

优化实时编辑器任务为 gamultiobj 提供了一个可视化界面。

参考

[1] Deb, Kalyanmoy. Multi-Objective Optimization Using Evolutionary Algorithms. Chichester, England: John Wiley & Sons, 2001.

扩展功能

全部展开

版本历史记录

在 R2007b 中推出