主要内容

ga

用遗传算法求函数的最小值

说明

x = ga(fun,nvars) 求目标函数 fun 的局部无约束最小值 xnvarsfun 的维数(设计变量的数目)。

注意

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

示例

x = ga(fun,nvars,A,b) 根据线性不等式 A*xbfun 的局部最小值 xga 计算矩阵乘积 A*x,就像 x 经过转置一样 (A*x')。

示例

x = ga(fun,nvars,A,b,Aeq,beq) 根据线性等式 Aeq*x = beqA*xbfun 的局部最小值 x。(如果不存在线性不等式,则设置 A=[]b=[]。)ga 计算矩阵乘积 Aeq*x,就像 x 经过转置一样 (Aeq*x')。

示例

x = ga(fun,nvars,A,b,Aeq,beq,lb,ub) 定义设计变量 x 的一组下界和上界,以便在 lb x ub 范围内求得解。(如果不存在线性等式,则设置 Aeq=[]beq=[]。)

示例

x = ga(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon) 使最小化受限于在 nonlcon 中定义的约束。函数 nonlcon 接受 x 并返回向量 CCeq,后两者分别表示非线性不等式和等式。ga 将最小化 fun,使得 C(x) 0Ceq(x) = 0。(如果不存在边界,则设置 lb=[]ub=[]。)

示例

x = ga(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon,options) 最小化时,其默认优化参数由 options 中的值替换。(如果不存在非线性约束,则设置 nonlcon=[]。)使用 optimoptions 创建 options

示例

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

注意

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

示例

x = ga(problem)problem 的最小值,它是 problem 中所述的一个结构体。

对于任何先前的输入参量,[x,fval] = ga(___) 还返回 fval,即 x 处的适应度函数的值。

示例

[x,fval,exitflag,output] = ga(___) 还返回 exitflag(用于标识算法终止原因的整数)和 output(包含每代的输出以及有关算法性能的其他信息的结构体)。

示例

[x,fval,exitflag,output,population,scores] = ga(___) 还返回矩阵 population(其行是最终种群)和向量 scores(最终种群的分数)。

示例

示例

全部折叠

在运行此示例时包含 ps_example.m 文件。绘制函数。

xi = linspace(-6,2,300);
yi = linspace(-4,4,300);
[X,Y] = meshgrid(xi,yi);
Z = ps_example([X(:),Y(:)]);
Z = reshape(Z,size(X));
surf(X,Y,Z,'MeshStyle','none')
colormap 'jet'
view(-26,43)
xlabel('x(1)')
ylabel('x(2)')
title('ps\_example(x)')

Figure contains an axes object. The axes object with title ps_example(x), xlabel x(1), ylabel x(2) contains an object of type surface.

使用 ga 求此函数的最小值。

rng default % For reproducibility
x = ga(@ps_example,2)
ga stopped because the average change in the fitness value is less than options.FunctionTolerance.
x = 1×2

   -4.6793   -0.0860

使用遗传算法在区域 x(1) + x(2) >= 1x(2) <= 5 + x(1) 上最小化 ps_example 函数。在运行此示例时包含此函数。

首先,将两个不等式约束转换为矩阵形式 A*x <= b。换句话说,将 x 变量移到不等式的左侧,使两个不等式都转换为小于或等于形式:

-x(1) -x(2) <= -1

-x(1) + x(2) <= 5

A = [-1,-1;
    -1,1];
b = [-1;5];

使用 ga 求解有约束问题。

rng default % For reproducibility
fun = @ps_example;
x = ga(fun,2,A,b)
ga stopped because the average change in the fitness value is less than options.FunctionTolerance.
x = 1×2

    0.9992    0.0000

在约束容差默认值 1e-3 范围内满足这些约束。要验证这一点,请计算 A*x' - b,它应具有负分量。

disp(A*x' - b)
    0.0008
   -5.9992

使用遗传算法在区域 x(1) + x(2) >= 1x(2) == 5 + x(1) 上最小化 ps_example 函数。在运行此示例时包含此函数。

首先,将这两个约束转换为矩阵形式 A*x <= bAeq*x = beq。换句话说,将 x 变量移到不等式的左侧,使两个不等式都转换为小于或等于形式:

-x(1) -x(2) <= -1

-x(1) + x(2) == 5

A = [-1 -1];
b = -1;
Aeq = [-1 1];
beq = 5;

使用 ga 求解有约束问题。

rng default % For reproducibility
fun = @ps_example;
x = ga(fun,2,A,b,Aeq,beq)
ga stopped because the average change in the fitness value is less than options.FunctionTolerance.
x = 1×2

   -2.0005    2.9995

检查在 ConstraintTolerance 的默认值 1e-3 范围内是否满足这些约束。

disp(A*x' - b)
   1.0000e-03
disp(Aeq*x' - beq)
  -1.5494e-05

使用遗传算法在区域 x(1) + x(2) >= 1x(2) == 5 + x(1) 上最小化 ps_example 函数。运行此示例时包含 ps_example 函数。此外,设置边界 1 <= x(1) <= 6-3 <= x(2) <= 8

首先,将这两个线性约束转换为矩阵形式 A*x <= bAeq*x = beq。换句话说,将 x 变量移到不等式的左侧,使两个不等式都转换为小于或等于形式:

-x(1) -x(2) <= -1

-x(1) + x(2) == 5

A = [-1 -1];
b = -1;
Aeq = [-1 1];
beq = 5;

设置边界 lbub

lb = [1 -3];
ub = [6 8];

使用 ga 求解有约束问题。

rng default % For reproducibility
fun = @ps_example;
x = ga(fun,2,A,b,Aeq,beq,lb,ub)
ga stopped because the average change in the fitness value is less than options.FunctionTolerance.
x = 1×2

    1.0000    6.0000

检查在 ConstraintTolerance 的默认值 1e-3 范围内是否满足这些线性约束。

disp(A*x' - b)
   -6.0000
disp(Aeq*x' - beq)
  -6.6335e-07

使用遗传算法在区域 2x12+x223(x1+1)2=(x2/2)4 上最小化 ps_example 函数。运行此示例时包含 ps_example 函数。

为此,请使用函数 ellipsecons.m,该函数在第一个输出 c 中返回不等式约束,在第二个输出 ceq 中返回等式约束。运行此示例时包含 ellipsecons 函数。检查 ellipsecons 代码。

type ellipsecons
function [c,ceq] = ellipsecons(x)

c = 2*x(1)^2 + x(2)^2 - 3;
ceq = (x(1)+1)^2 - (x(2)/2)^4;

包含 ellipsecons 的函数句柄作为 nonlcon 参量。

nonlcon = @ellipsecons;
fun = @ps_example;
rng default % For reproducibility
x = ga(fun,2,[],[],[],[],[],[],nonlcon)
Optimization finished: average change in the fitness value less than options.FunctionTolerance and constraint violation is less than options.ConstraintTolerance.
x = 1×2

   -0.9766    0.0362

检查在 x 处是否满足非线性约束。当 c ≤ 0 且 ceq = 0 时,在 ConstraintTolerance 的默认值 1e-3 范围内满足约束。

[c,ceq] = nonlcon(x)
c = 
-1.0911
ceq = 
5.4645e-04

使用小于默认值的约束容差和遗传算法在区域 x(1) + x(2) >= 1x(2) == 5 + x(1) 上最小化 ps_example 函数。运行此示例时包含 ps_example 函数。

首先,将这两个约束转换为矩阵形式 A*x <= bAeq*x = beq。换句话说,将 x 变量移到不等式的左侧,使两个不等式都转换为小于或等于形式:

-x(1) -x(2) <= -1

-x(1) + x(2) == 5

A = [-1 -1];
b = -1;
Aeq = [-1 1];
beq = 5;

要获得更准确的解,请将约束容差设置为 1e-6。为了监控求解器进度,请设置一个绘图函数。

options = optimoptions('ga','ConstraintTolerance',1e-6,'PlotFcn', @gaplotbestf);

求解最小化问题。

rng default % For reproducibility
fun = @ps_example;
x = ga(fun,2,A,b,Aeq,beq,[],[],[],options)
ga stopped because the average change in the fitness value is less than options.FunctionTolerance.

Figure Genetic Algorithm contains an axes object. The axes object with title Best: 4 Mean: 4, xlabel Generation, ylabel Fitness value contains 2 objects of type scatter. These objects represent Best fitness, Mean fitness.

x = 1×2

   -2.0000    3.0000

检查在 1e-6 范围内是否满足线性约束。

disp(A*x' - b)
   9.9967e-07
disp(Aeq*x' - beq)
  -2.9701e-08

x(1) 为整数的约束下,使用遗传算法最小化 ps_example 函数。在运行此示例时包含此函数。

intcon = 1;
rng default % For reproducibility
fun = @ps_example;
A = [];
b = [];
Aeq = [];
beq = [];
lb = [];
ub = [];
nonlcon = [];
x = ga(fun,2,A,b,Aeq,beq,lb,ub,nonlcon,intcon)
ga stopped because the average change in the penalty function value is less than options.FunctionTolerance and 
the constraint violation is less than options.ConstraintTolerance.
x = 1×2

   -5.0000   -0.0834

使用遗传算法最小化有整数约束的非线性问题。获得最小值的位置和最小函数值。运行此示例时包含目标函数 ps_example

intcon = 1;
rng default % For reproducibility
fun = @ps_example;
A = [];
b = [];
Aeq = [];
beq = [];
lb = [];
ub = [];
nonlcon = [];
[x,fval] = ga(fun,2,A,b,Aeq,beq,lb,ub,nonlcon,intcon)
ga stopped because the average change in the penalty function value is less than options.FunctionTolerance and 
the constraint violation is less than options.ConstraintTolerance.
x = 1×2

   -5.0000   -0.0834

fval = 
-1.8344

将此结果与没有约束的问题的解进行比较。

[x,fval] = ga(fun,2)
ga stopped because the average change in the fitness value is less than options.FunctionTolerance.
x = 1×2

   -4.6906   -0.0078

fval = 
-1.9918

使用遗传算法在 x(1) 为整数值的约束下最小化 ps_example 函数。运行此示例时包含 ps_example 函数。要了解求解器停止的原因以及 ga 如何搜索最小值,请获得 exitflagoutput 的结果。此外,在求解器进度过程中绘制最小值观测目标函数值。

intcon = 1;
rng default % For reproducibility
fun = @ps_example;
A = [];
b = [];
Aeq = [];
beq = [];
lb = [];
ub = [];
nonlcon = [];
options = optimoptions('ga','PlotFcn', @gaplotbestf);
[x,fval,exitflag,output] = ga(fun,2,A,b,Aeq,beq,lb,ub,nonlcon,intcon,options)

Figure Genetic Algorithm contains an axes object. The axes object with title Best: -1.83445 Mean: 880470, xlabel Generation, ylabel Penalty value contains 2 objects of type scatter. These objects represent Best penalty value, Mean penalty value.

ga stopped because the average change in the penalty function value is less than options.FunctionTolerance and 
the constraint violation is less than options.ConstraintTolerance.
x = 1×2

   -5.0000   -0.0834

fval = 
-1.8344
exitflag = 
1
output = struct with fields:
      problemtype: 'integerconstraints'
         rngstate: [1×1 struct]
      generations: 86
        funccount: 3311
          message: 'ga stopped because the average change in the penalty function value is less than options.FunctionTolerance and ↵the constraint violation is less than options.ConstraintTolerance.'
    maxconstraint: 0
       hybridflag: []

使用遗传算法在 x(1) 为整数值的约束下最小化 ps_example 函数。运行此示例时包含 ps_example 函数。获得所有输出,包括最终种群和分数向量。

intcon = 1;
rng default % For reproducibility
fun = @ps_example;
A = [];
b = [];
Aeq = [];
beq = [];
lb = [];
ub = [];
nonlcon = [];
[x,fval,exitflag,output,population,scores] = ga(fun,2,A,b,Aeq,beq,lb,ub,nonlcon,intcon);
ga stopped because the average change in the penalty function value is less than options.FunctionTolerance and 
the constraint violation is less than options.ConstraintTolerance.

检查最终种群的前 10 个成员及其对应的分数。请注意,对于所有这些种群成员,x(1) 均为整数值。整数 ga 算法仅生成整数可行种群。

disp(population(1:10,:))
   1.0e+03 *

   -0.0050   -0.0001
   -0.0050   -0.0001
   -1.6420    0.0027
   -1.5070    0.0010
   -0.4540    0.0104
   -0.2530   -0.0011
   -0.1210   -0.0003
   -0.1040    0.1314
   -0.0140   -0.0010
    0.0160   -0.0002
disp(scores(1:10))
   1.0e+06 *

   -0.0000
   -0.0000
    2.6798
    2.2560
    0.2016
    0.0615
    0.0135
    0.0099
    0.0001
    0.0000

输入参数

全部折叠

目标函数,指定为函数句柄或函数名称。编写目标函数以接受长度为 nvars 的行向量,并返回一个标量值。

'UseVectorized' 选项为 true 时,编写 fun 以接受一个 pop×nvars 矩阵,其中 pop 是当前种群大小。在本例中,fun 返回一个与包含适应度函数值的 pop 长度相同的向量。请确保 fun 没有为 pop 假定任何特定大小,因为 ga 即使在向量化计算中也可以传递种群的单个成员。

示例: fun = @(x)(x-[4,2]).^2

数据类型: char | function_handle | string

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

示例: 4

数据类型: double

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

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

A*x <= b,

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

例如,要指定

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

提供以下约束:

A = [1,2;3,4;5,6];
b = [10;20;30];

示例: 要指定控制项变量总和等于或小于 1,请给出约束 A = ones(1,N)b = 1

数据类型: double

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

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

A*x <= b,

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

例如,要指定

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

提供以下约束:

A = [1,2;3,4;5,6];
b = [10;20;30];

示例: 要指定控制项变量总和等于或小于 1,请给出约束 A = ones(1,N)b = 1

数据类型: double

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

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

Aeq*x = beq,

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

例如,要指定

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

提供以下约束:

Aeq = [1,2,3;2,4,1];
beq = [10;20];

示例: 要指定控制项变量总和为 1,请给出约束 Aeq = ones(1,N)beq = 1

数据类型: double

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

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

Aeq*x = beq,

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

例如,要指定

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

提供以下约束:

Aeq = [1,2,3;2,4,1];
beq = [10;20];

示例: 要指定控制项变量总和为 1,请给出约束 Aeq = ones(1,N)beq = 1

数据类型: double

下界,指定为实数向量或双精度数组。lb 表示 lb x ub 中元素的下界。

ga 在内部将数组 lb 转换为向量 lb(:)

示例: lb = [0;-Inf;4] 表示 x(1) ≥ 0x(3) ≥ 4

数据类型: double

上界,指定为实数向量或双精度数组。ub 表示 lb x ub 中元素的上界。

ga 在内部将数组 ub 转换为向量 ub(:)

示例: ub = [Inf;4;10] 表示 x(2) ≤ 4x(3) ≤ 10

数据类型: double

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

  • c(x) 是由 x 处的非线性不等式约束组成的数组。ga 尝试满足

    c(x) <= 0

    (对于 c 的所有条目)。

  • ceq(x) 是由 x 处的非线性等式约束组成的数组。ga 尝试满足

    ceq(x) = 0

    (对于 ceq 的所有条目)。

例如,

x = ga(@myfun,4,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.
有关详细信息,请参阅非线性约束

要了解如何使用向量化约束,请参阅向量化约束

注意

PopulationType 选项设置为 'bitString''custom' 时,ga 不会强制必须满足非线性约束。

如果 intcon 不为空,则 nonlcon 的第二个输出 (ceq) 必须为空条目 ([])。

有关 ga 如何使用 nonlcon 的信息,请参阅遗传算法算法的非线性约束求解算法

数据类型: 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('ga','PlotFcn',@gaplotbestf)

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

注意

intcon 非空时,nonlcon 必须为 ceq 返回空值。有关整数规划的详细信息,请参阅混合整数 ga 优化

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

数据类型: double

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

fitnessfcn

适应度函数

nvars

设计变量的数目

Aineq

线性不等式约束的 A 矩阵

Bineq

线性不等式约束的 b 向量

Aeq

线性等式约束的 Aeq 矩阵

Beq

线性等式约束的 beq 向量

lb

x 的下界

ub

x 的上界

nonlcon

非线性约束函数

intcon整数变量的索引
rngstate

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

solver

'ga'

options

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

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

数据类型: struct

输出参量

全部折叠

解,以实数向量形式返回。xga 在其迭代过程中找到的最佳点。

解处的目标函数值,以实数形式返回。通常,fval = fun(x)

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

退出标志含义
1

无非线性约束 - 适应度函数值在 MaxStallGenerations 代内的平均累积变化小于 FunctionTolerance,约束违反值小于 ConstraintTolerance

有非线性约束 - 互补性测度(请参阅 互补性测度)的量级小于 sqrt(ConstraintTolerance),子问题是使用小于 FunctionTolerance 的容差求解的,约束违反值小于 ConstraintTolerance

3

适应度函数的值在 MaxStallGenerations 代中没有变化,约束违反值小于 ConstraintTolerance

4

步长小于机器精度,且约束违反值小于 ConstraintTolerance

5

达到最小适应度限值 FitnessLimit,约束违反值小于 ConstraintTolerance

0

超过最大代数 MaxGenerations

-1

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

-2

找不到可行点。

-4

超过停滞时间限制 MaxStallTime

-5

超过时间限制 MaxTime

当存在整数约束时,ga 使用罚适应度值(而不是适应度值)作为停止条件。

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

  • problemtype - 问题类型,包括:

    • 'unconstrained'

    • 'boundconstraints'

    • 'linearconstraints'

    • 'nonlinearconstr'

    • 'integerconstraints'

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

  • generations - 计算的代数。

  • funccount - 适应度函数的计算次数。

  • message - 算法终止的原因。

  • maxconstraint - 最大约束违反值(如果有)。

  • hybridflag - 混合函数的退出标志。与 HybridFcn options 相关。不适用于 gamultiobj

最终种群,以 PopulationSize×nvars 矩阵形式返回。population 的行是个体。

最终得分,以列向量形式返回。

  • 对于非整数问题,最终得分是 population 行的适应度函数值。

  • 对于整数问题,最终得分是种群成员的罚适应度值。请参阅 整数 ga 算法

详细信息

全部折叠

提示

  • 要编写一个函数,其中使用可由 ga 调用的自变量的附加参数,请参阅传递额外参数

  • 对于使用种群类型 Double Vector(默认值)的问题,ga 不接受其输入类型为 complex 的函数。若要求解涉及复数数据的问题,请通过分离实部和虚部来编写函数,使它们接受实数向量。

算法

有关遗传算法的描述,请参阅遗传算法的工作原理

有关混合整数规划算法的描述,请参阅整数 ga 算法

有关非线性约束算法的描述,请参阅遗传算法算法的非线性约束求解算法

替代功能

App

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

参考

[1] Goldberg, David E., Genetic Algorithms in Search, Optimization & Machine Learning, Addison-Wesley, 1989.

[2] A. R. Conn, N. I. M. Gould, and Ph. L. Toint. “A Globally Convergent Augmented Lagrangian Algorithm for Optimization with General Constraints and Simple Bounds”, SIAM Journal on Numerical Analysis, Volume 28, Number 2, pages 545–572, 1991.

[3] A. R. Conn, N. I. M. Gould, and Ph. L. Toint. “A Globally Convergent Augmented Lagrangian Barrier Algorithm for Optimization with General Inequality Constraints and Simple Bounds”, Mathematics of Computation, Volume 66, Number 217, pages 261–288, 1997.

扩展功能

全部展开

版本历史记录

在 R2006a 之前推出

全部展开