particleswarm
粒子群优化
语法
说明
示例
最小化简单函数
最小化两个变量的简单函数。
定义目标函数。
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]
输入参数
fun
— 目标函数
函数句柄 | 函数名称
目标函数,指定为函数句柄或函数名称。编写目标函数以接受长度为 nvars
的行向量并返回标量值。
当 'UseVectorized'
选项为 true
时,写入 fun
以接受 pop
×nvars
矩阵,其中 pop
是当前种群规模。在这种情况下,fun
返回一个与包含适应度函数值的 pop
长度相同的向量。确保 fun
不会为 pop
假设任何特定的大小,因为 particleswarm
即使在向量化计算中也可以传递种群中的单个成员。
示例: fun = @(x)(x-[4,2]).^2
数据类型: char
| function_handle
| string
nvars
— 变量的数目
正整数
lb
— 下界
[]
(默认) | 实数向量或数组
下界,指定为实数向量或双精度数组。lb
表示 lb
≤ x
≤ ub
中元素的下界。
particleswarm
在内部将数组 lb
转换为向量 lb(:)
。
示例: lb = [0;-Inf;4]
表示 x(1) ≥ 0
,x(3) ≥ 4
。
数据类型: double
ub
— 上界
[]
(默认) | 实数向量或数组
上界,指定为实数向量或双精度数组。ub
表示 lb
≤ x
≤ ub
中元素的上界。
particleswarm
在内部将数组 ub
转换为向量 ub(:)
。
示例: ub = [Inf;4;10]
表示 x(2) ≤ 4
,x(3) ≤ 10
。
数据类型: double
options
— 适用于 particleswarm
的选项
使用 optimoptions
创建的选项
particleswarm
的选项,指定为 optimoptions
函数的输出。
optimoptions
显示中缺少某些选项。这些选项以斜体列出。有关详细信息,请参阅查看优化选项。
CreationFcn | 创建初始群体的函数。指定为 |
Display | 返回到命令行的输出显示级别。
|
DisplayInterval | 迭代显示的间隔。迭代显示每 DisplayInterval 次迭代打印一行。默认值是 1 。 |
FunctionTolerance | 默认为 1e-6 的非负标量。当最后 MaxStallIterations 次迭代中最佳目标函数值的相对变化小于 options.FunctionTolerance 时,迭代结束。 |
FunValCheck | 检查目标函数和约束值是否有效。当目标函数或约束返回复数、 |
HybridFcn |
也可以是指定混合函数及其选项的元胞数组,例如 请参阅 何时使用混合函数。 |
InertiaRange | 按升序排列且符号值相同的二元素实数向量。给出自适应惯性的下限和上界。为了获得恒定的(非自适应)惯性,将 InertiaRange 的两个元素设置为相同的值。默认值是 [0.1,1.1] 。请参阅 粒子群优化算法。 |
InitialPoints | 粒子的初始种群或部分种群,指定为矩阵或结构体。
|
InitialSwarmSpan |
|
MaxIterations | particleswarm 进行的最大迭代次数。默认值为 200*nvars ,其中 nvars 是变量的数量。 |
MaxStallIterations | 正整数,默认为 20 。当最后 MaxStallIterations 次迭代中最佳目标函数值的相对变化小于 options.FunctionTolerance 时,迭代结束。 |
MaxStallTime | 已知最佳目标函数值没有改善的最大秒数。正标量,默认为 Inf 。 |
MaxTime | particleswarm 运行的最长时间(秒数)。默认值是 Inf 。 |
MinNeighborsFraction | 最小自适应邻域大小,从 0 到 1 的标量。默认值是 0.25 。请参阅 粒子群优化算法。 |
ObjectiveLimit | 最小目标值,停止条件。标量,默认为 -Inf 。 |
OutputFcn | 函数句柄或函数句柄的元胞数组。输出函数可以读取迭代数据,并停止求解器。默认值是 [] 。请参阅 输出函数和绘图函数。 |
PlotFcn | 函数名称、函数句柄或函数句柄的元胞数组。对于自定义绘图函数,传递函数句柄。绘图函数可以读取迭代数据、绘制每次迭代并停止求解器。默认值是 [] 。可用的内置绘图函数:'pswplotbestf' 。请参阅 输出函数和绘图函数。 |
SelfAdjustmentWeight | 调整速度时每个粒子的最佳位置的权重。有限标量,默认为 1.49 。请参阅 粒子群优化算法。 |
SocialAdjustmentWeight | 调整速度时邻域最佳位置的权重。有限标量,默认为 1.49 。请参阅 粒子群优化算法。 |
SwarmSize | 群体中的粒子数,大于 1 的整数。默认值为 min(100,10*nvars) ,其中 nvars 是变量的数量。 |
UseParallel | 当 true 时并行计算目标函数。默认值是 false 。请参阅 并行或向量化函数求值。 |
UseVectorized | 当 true 时以向量化方式计算目标函数。默认值是 false 。请参阅 并行或向量化函数求值。 |
problem
— 优化问题
结构体
优化问题,指定为具有以下字段的结构体。
solver | 'particleswarm' |
objective | 目标函数的函数句柄,或者目标函数的名称。 |
nvars | 问题中的变量数量。 |
lb | 下界向量或数组。 |
ub | 上界的向量或数组。 |
options | 由 optimoptions 创建的选项。 |
rngstate | 解过程开始时随机数生成器的可选状态。 |
数据类型: struct
输出参量
x
— 解
实数向量
解决方案,以实数向量形式返回,该向量在任何边界约束下最小化目标函数。
fval
— 目标值
实数标量
目标值,以实数标量 fun(x)
形式返回。
exitflag
— 算法停止条件
整数
算法停止条件,以整数形式返回,标识算法停止的原因。下面列出 exitflag
的值以及相应的 particleswarm
停止原因。
| 在前 |
| 迭代次数超出 |
| 迭代被输出函数或绘图函数停止。 |
| 边界不一致:对于某些 |
| 最佳目标函数值低于 |
| 最佳目标函数值在 |
| 运行时间超过 |
output
— 求解过程摘要
结构体
求解过程摘要,以包含优化过程信息的结构体形式返回。
| 求解器迭代次数 |
| 目标函数评估的次数。 |
| 算法停止的原因。 |
| 混合函数的退出标志。与 |
| 算法启动之前的默认随机数生成器的状态。 |
points
— 最终群体位置和目标函数值
结构体
最终群体位置和目标函数值,以包含以下字段的结构体返回:
X
- 最终群体的位置,以矩阵形式返回。矩阵的每一行代表一个点。Fval
- 最终群体的目标函数值。对于每个i
,最终群体成员的索引是points.Fval(i) = fun(points.X(i))
。
为了继续优化,您可以将 points
作为 InitialPoints
选项传递。然而,这种方法与从一开始运行更长时间的优化并不相同,因为当优化从最终种群重新启动时,算法的许多方面并不相同。请参阅 粒子群优化算法。
数据类型: struct
局限性
基于问题的优化实时编辑器任务目前不支持指定多个初始点或初始目标函数值。要指定初始点,请使用基于求解器的任务,或使用命令行。
算法
有关粒子群优化算法的描述,请参阅粒子群优化算法。
替代功能
App
优化实时编辑器任务为 particleswarm
提供了一个可视化界面。
扩展功能
自动并行支持
通过使用 Parallel Computing Toolbox™ 自动运行并行计算来加快代码执行。
要并行运行,请将 'UseParallel'
选项设置为 true
。
options = optimoptions('
solvername
','UseParallel',true)
有关详细信息,请参阅如何在 Global Optimization Toolbox 中使用并行处理。
版本历史记录
在 R2014b 中推出R2023b: 指定并获取 particleswarm
初始点、最终位置和目标函数值
particleswarm
现在可以返回输出 points
,该结构体包含群体的最终位置和相关目标函数值。您现在可以使用 InitialPoints
选项为初始群体提供位置和目标函数值。您仍然可以使用 InitialSwarmMatrix
选项或 InitialSwarm
选项提供初始群体位置。在这些情况下,particleswarm
将初始群体矩阵作为 InitialPoints
选项传递。
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)