Main Content

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

gamultiobj

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

说明

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

注意

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

示例

x = gamultiobj(fun,nvars,A,b) 找到一个局部帕累托集 x,满足线性不等式 Axb。请参阅 线性不等式约束gamultiobj 仅对默认 PopulationType 选项 ('doubleVector') 支持线性约束。

示例

x = gamultiobj(fun,nvars,A,b,Aeq,beq) 找到一个局部帕累托集 x,服从线性等式 Aeqx=beq 和线性不等式 Axb,请参阅 线性等式约束。(如果不存在不等式,则设置 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) 0ceq(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)x = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon,intcon,options) 要求 intcon 中列出的变量取整数值。

注意

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

示例

x = gamultiobj(problem) 找到 problem 的帕累托集,其中 problemproblem 中描述的结构体。

对于任何输入变量,[x,fval] = gamultiobj(___) 返回一个矩阵 fval,即 x 中所有解的 fun 中定义的所有适应度函数的值。fvalnf 列,其中 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')

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

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

有两个目标函数和两个决策变量 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

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

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

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
      ⋮

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

plot(sin(x),cos(x),'r*')
xlabel('sin(x)')
ylabel('cos(x)')
title('Pareto Front')
legend('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.

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

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 x nvars 的矩阵,其中该矩阵代表 n 个体。fun 返回大小为 n x m 的矩阵,其中 m 是目标函数的数量。请参阅 向量化适应度函数

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

数据类型: char | function_handle | string

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

示例: 4

数据类型: double

线性不等式约束,指定为实矩阵。A 是一个 M×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,那么 lb 指定 x(i) >= lb(i)1 <= i <= numel(lb)

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

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

数据类型: double

上界,指定为实数向量或实数数组。如果是 numel(ub) = nvars,那么 ub 指定对于所有 i 都是 x(i) <= ub(i)

如果是 numel(ub) < nvars,那么 ub 指定 x(i) <= ub(i)1 <= i <= numel(ub)

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

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

数据类型: double

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

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

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

如果将 UseVectorized 选项设置为 true,则 nonlcon 将接受大小为 n x nvars 的矩阵,其中该矩阵代表 n 个体。nonlcon 在第一个参量中返回大小为 n x mc 的矩阵,其中 mc 是非线性不等式约束的数量。nonlcon 在第二个参量中返回大小为 n x 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) 确定与线性约束相关的可行性。

对于选项结构体,使用 TolCon

非负标量 | {1e-3}

CreationFcn

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

{'gacreationuniform'} | {'gacreationlinearfeasible'}* | 'gacreationnonlinearfeasible' | {'gacreationuniformint'}I* for ga | {'gacreationsobol'}I* for gamultiobj | 自定义创建函数

CrossoverFcn

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

{'crossoverscattered'} 对应 ga{'crossoverintermediate'}* 对应 gamultiobj | {'crossoverlaplace'}I* | 'crossoverheuristic' | 'crossoversinglepoint' | 'crossovertwopoint' | 'crossoverarithmetic' | 自定义交叉函数

CrossoverFraction

交叉函数产生的代种群比例(不包括精英子女)。

非负标量 | {0.8}

Display

显示级别。

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

DistanceMeasureFcn

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

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

{'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 算法

对于选项结构体,使用 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 来生成剩余的种群成员。请参阅 种群选项

对于选项结构体,使用 InitialPopulation

矩阵 | {[]}

InitialPopulationRange

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

对于选项结构体,使用 PopInitRange

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

InitialScoresMatrix

用于确定适应度的初始分数。最多有 PopulationSize 行和 Nf 列,其中 Nf 是适应度函数的数量(ga1gamultiobj 为大于 1)。您可以传递部分分数矩阵,即行数少于 PopulationSize 的矩阵。在这种情况下,求解器在评估适应度函数时填写分数。

对于选项结构体,使用 InitialScores

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

MaxGenerations

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

对于选项结构体,使用 Generations

非负整数 |{100*numberOfVariables} 表示 ga{200*numberOfVariables} 表示 gamultiobj

MaxStallGenerations

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

对于 gamultiobj,当 options.MaxStallGenerations 代内利差的相对变化值的几何平均小于 options.FunctionTolerance,并且最终利差小于过去 options.MaxStallGenerations 代内的平均利差时,算法停止。请参阅 gamultiobj 算法

对于选项结构体,使用 StallGenLimit

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

MaxStallTime

NM 如果目标函数在 MaxStallTime 秒内没有任何改善(以 tictoc 为衡量标准),则算法停止。

对于选项结构体,使用 StallTimeLimit

正标量 | {Inf}

MaxTime

该算法运行 MaxTime 秒后停止,以 tictoc 为测量值。每次迭代后都会强制执行此限制,因此当迭代花费大量时间时,ga 可能会超出该限制。

对于选项结构体,使用 TimeLimit

非负标量 | {Inf}

MigrationDirection

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

'both' | {'forward'}

MigrationFraction

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

标量 | {0.2}

MigrationInterval

正整数指定亚种群间个体迁移的代。请参阅 迁移选项

正整数 | {20}

MutationFcn

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

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

NonlinearConstraintAlgorithm

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

对于选项结构体,使用 NonlinConAlgorithm

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

OutputFcn

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

对于选项结构体,使用 OutputFcns

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

ParetoFraction

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

标量 | {0.35}

PenaltyFactor

NM I* 惩罚更新参数。

正标量 | {100}

PlotFcn

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

对于选项结构体,使用 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} | 对于混合整数问题,为 {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

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

对于选项结构体,使用 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 或选项结构体创建的选项

您必须指定字段 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] 的变体)。精英(GA) 总是青睐具有更好适应度值(排名)的个体。受控精英算法还会青睐个体能够帮助增加种群多样性的个体,即使它们的适应度值较低。保持种群的多样性对于收敛到最优帕累托前沿非常重要。随着算法的进展,通过控制种群中的精英成员来保持多样性。ParetoFractionDistanceMeasureFcn 两个选项控制精英主义。ParetoFraction 限制帕累托前沿的个体数量(精英成员)。由 DistanceMeasureFcn 选择的距离函数有助于通过偏向前端相对较远的个体来保持前端的多样性。如果扩展(帕累托前沿移动的量度)很小,则算法停止。有关详细信息,请参阅gamultiobj 算法

替代功能

App

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

参考

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

扩展功能

版本历史记录

在 R2007b 中推出