Main Content

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

particleswarm

粒子群优化

说明

x = particleswarm(fun,nvars) 尝试找到实现 fun 局部最小值的向量 xnvarsfun 的维度(设计变量的数量)。

注意

传递额外参数 解释了如何在必要时将额外参数传递给目标函数。

示例

x = particleswarm(fun,nvars,lb,ub) 定义了设计变量 x 的一组下限和上界,以便在 lb x ub 范围内找到解。

示例

x = particleswarm(fun,nvars,lb,ub,options) 最小化,使用 options 中的值替换默认优化参数。如果不存在边界,请设置 lb = []ub = []

示例

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

[x,fval,exitflag,output,points] = particleswarm(___) 还使用前面语法中的任意输入参量组合返回以下内容:

  • fval,一个标量,是目标函数值 fun(x)

  • exitflag,描述退出条件的值

  • output,包含有关优化过程的信息的结构体

  • points,一个包含 points.X 中的最终群体位置和 points.Fval 中的相关目标函数值的结构体

示例

示例

全部折叠

最小化两个变量的简单函数。

定义目标函数。

fun = @(x)x(1)*exp(-norm(x)^2);

调用 particleswarm 来最小化该函数。

rng default  % For reproducibility
nvars = 2;
x = particleswarm(fun,nvars)
Optimization ended: relative change in the objective value 
over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance.

x =

  629.4474  311.4814

正如您在函数图中看到的,这个解与真实最小值相差甚远。

fsurf(@(x,y)x.*exp(-(x.^2+y.^2)))

通常,最好设置边界。请参阅 最小化有界限的简单函数

最小化具有约束边界的两个变量的简单函数。

定义目标函数。

fun = @(x)x(1)*exp(-norm(x)^2);

设置变量的边界。

lb = [-10,-15];
ub = [15,20];

调用 particleswarm 来最小化该函数。

rng default  % For reproducibility
nvars = 2;
x = particleswarm(fun,nvars,lb,ub)
Optimization ended: relative change in the objective value 
over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance.
x = 1×2

   -0.7071   -0.0000

使用更大的种群和混合函数来尝试获得更好的解。

指定目标函数和边界。

fun = @(x)x(1)*exp(-norm(x)^2);
lb = [-10,-15];
ub = [15,20];

指定选项。

options = optimoptions('particleswarm','SwarmSize',100,'HybridFcn',@fmincon);

调用 particleswarm 来最小化该函数。

rng default  % For reproducibility
nvars = 2;
x = particleswarm(fun,nvars,lb,ub,options)
Optimization ended: relative change in the objective value 
over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance.
x = 1×2

   -0.7071   -0.0000

返回可选的输出参量以更详细地检查解过程。

定义问题。

fun = @(x)x(1)*exp(-norm(x)^2);
lb = [-10,-15];
ub = [15,20];
options = optimoptions('particleswarm','SwarmSize',50,'HybridFcn',@fmincon);

调用 particleswarm 的所有输出来最小化函数并获取有关解过程的信息。

rng default  % For reproducibility
nvars = 2;
[x,fval,exitflag,output,points] = particleswarm(fun,nvars,lb,ub,options)
Optimization ended: relative change in the objective value 
over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance.
x = 1×2

   -0.7071   -0.0000

fval = -0.4289
exitflag = 1
output = struct with fields:
      rngstate: [1x1 struct]
    iterations: 43
     funccount: 2203
       message: 'Optimization ended: relative change in the objective value ...'
    hybridflag: 1

points = struct with fields:
       X: [50x2 double]
    Fval: [50x1 double]

输入参数

全部折叠

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

'UseVectorized' 选项为 true 时,写入 fun 以接受 pop×nvars 矩阵,其中 pop 是当前种群规模。在这种情况下,fun 返回一个与包含适应度函数值的 pop 长度相同的向量。确保 fun 不会为 pop 假设任何特定的大小,因为 particleswarm 即使在向量化计算中也可以传递种群中的单个成员。

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

数据类型: char | function_handle | string

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

示例: 4

数据类型: double

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

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

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

数据类型: double

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

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

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

数据类型: double

particleswarm 的选项,指定为 optimoptions 函数的输出。

optimoptions 显示中缺少某些选项。这些选项以斜体列出。有关详细信息,请参阅查看优化选项

CreationFcn

创建初始群体的函数。指定为 'pswcreationuniform' 或函数句柄。默认值是 'pswcreationuniform'。请参阅 群体创建

Display

返回到命令行的输出显示级别。

  • 'off''none' 不显示输出。

  • 'final' 仅显示最终输出(默认值)。

  • 'iter' 显示迭代输出。

DisplayInterval迭代显示的间隔。迭代显示每 DisplayInterval 次迭代打印一行。默认值是 1
FunctionTolerance默认为 1e-6 的非负标量。当最后 MaxStallIterations 次迭代中最佳目标函数值的相对变化小于 options.FunctionTolerance 时,迭代结束。
FunValCheck

检查目标函数和约束值是否有效。当目标函数或约束返回复数、InfNaN 的值时,'on' 会显示错误。默认值 'off' 不会显示错误。

HybridFcn

particleswarm 终止后继续优化的函数。指定为名称或函数句柄。可能的值:

  • 'fmincon'

  • 'fminsearch'

  • 'fminunc'

  • 'patternsearch'

也可以是指定混合函数及其选项的元胞数组,例如 {@fmincon,fminconopts}。默认值是 []。请参阅 混合函数

请参阅 何时使用混合函数

InertiaRange按升序排列且符号值相同的二元素实数向量。给出自适应惯性的下限和上界。为了获得恒定的(非自适应)惯性,将 InertiaRange 的两个元素设置为相同的值。默认值是 [0.1,1.1]。请参阅 粒子群优化算法
InitialPoints

粒子的初始种群或部分种群,指定为矩阵或结构体。

  • 矩阵的大小为 M×nvars。每一行代表一个粒子。如果 M < SwarmSize,则 particleswarm 会产生更多粒子,使得总数为 SwarmSize。如果 M > SwarmSize,则 particleswarm 使用前 SwarmSize 行。

  • 结构体必须有字段 X,表示初始点的矩阵。

  • 如果结构体具有多个字段,则该结构体必须包含字段 Fval,其中包含点 InitialPoints.X 的目标函数值向量。

InitialSwarmSpan

@pswcreationuniform 创建的粒子位置的初始范围。可以是正标量或具有 nvars 个元素的向量,其中 nvars 是变量的数量。任何粒子分量的范围都是 -InitialSwarmSpan/2,InitialSwarmSpan/2,如果需要,可以进行移动和缩放以匹配任何边界。默认值是 2000

InitialSwarmSpan 还会影响初始粒子速度的范围。请参阅 初始化

MaxIterationsparticleswarm 进行的最大迭代次数。默认值为 200*nvars,其中 nvars 是变量的数量。
MaxStallIterations正整数,默认为 20。当最后 MaxStallIterations 次迭代中最佳目标函数值的相对变化小于 options.FunctionTolerance 时,迭代结束。
MaxStallTime已知最佳目标函数值没有改善的最大秒数。正标量,默认为 Inf
MaxTimeparticleswarm 运行的最长时间(秒数)。默认值是 Inf
MinNeighborsFraction最小自适应邻域大小,从 01 的标量。默认值是 0.25。请参阅 粒子群优化算法
ObjectiveLimit最小目标值,停止条件。标量,默认为 -Inf
OutputFcn函数句柄或函数句柄的元胞数组。输出函数可以读取迭代数据,并停止求解器。默认值是 []。请参阅 输出函数和绘图函数
PlotFcn函数名称、函数句柄或函数句柄的元胞数组。对于自定义绘图函数,传递函数句柄。绘图函数可以读取迭代数据、绘制每次迭代并停止求解器。默认值是 []。可用的内置绘图函数:'pswplotbestf'。请参阅 输出函数和绘图函数
SelfAdjustmentWeight调整速度时每个粒子的最佳位置的权重。有限标量,默认为 1.49。请参阅 粒子群优化算法
SocialAdjustmentWeight调整速度时邻域最佳位置的权重。有限标量,默认为 1.49。请参阅 粒子群优化算法
SwarmSize群体中的粒子数,大于 1 的整数。默认值为 min(100,10*nvars),其中 nvars 是变量的数量。
UseParalleltrue 时并行计算目标函数。默认值是 false。请参阅 并行或向量化函数求值
UseVectorizedtrue 时以向量化方式计算目标函数。默认值是 false。请参阅 并行或向量化函数求值

优化问题,指定为具有以下字段的结构体。

solver'particleswarm'
objective目标函数的函数句柄,或者目标函数的名称。
nvars问题中的变量数量。
lb下界向量或数组。
ub上界的向量或数组。
optionsoptimoptions 创建的选项。
rngstate解过程开始时随机数生成器的可选状态。

数据类型: struct

输出参量

全部折叠

解决方案,以实数向量形式返回,该向量在任何边界约束下最小化目标函数。

目标值,以实数标量 fun(x) 形式返回。

算法停止条件,以整数形式返回,标识算法停止的原因。下面列出 exitflag 的值以及相应的 particleswarm 停止原因。

1

在前 options.MaxStallIterations 次迭代中目标值的相对变化小于 options.FunctionTolerance

0

迭代次数超出 options.MaxIterations

-1

迭代被输出函数或绘图函数停止。

-2

边界不一致:对于某些 ilb(i) > ub(i)

-3

最佳目标函数值低于 options.ObjectiveLimit

-4

最佳目标函数值在 options.MaxStallTime 秒内没有变化。

-5

运行时间超过 options.MaxTime 秒。

求解过程摘要,以包含优化过程信息的结构体形式返回。

iterations

求解器迭代次数

funccount

目标函数评估的次数。

message

算法停止的原因。

hybridflag

混合函数的退出标志。与 HybridFcn options 相关。

rngstate

算法启动之前的默认随机数生成器的状态。

最终群体位置和目标函数值,以包含以下字段的结构体返回:

  • X - 最终群体的位置,以矩阵形式返回。矩阵的每一行代表一个点。

  • Fval - 最终群体的目标函数值。对于每个 i,最终群体成员的索引是 points.Fval(i) = fun(points.X(i))

为了继续优化,您可以将 points 作为 InitialPoints 选项传递。然而,这种方法与从一开始运行更长时间的优化并不相同,因为当优化从最终种群重新启动时,算法的许多方面并不相同。请参阅 粒子群优化算法

数据类型: struct

局限性

  • 基于问题的优化实时编辑器任务目前不支持指定多个初始点或初始目标函数值。要指定初始点,请使用基于求解器的任务,或使用命令行。

算法

有关粒子群优化算法的描述,请参阅粒子群优化算法

替代功能

App

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

扩展功能

版本历史记录

在 R2014b 中推出

全部展开