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: [1×1 struct]
iterations: 43
funccount: 2203
message: 'Optimization ended: relative change in the objective value ↵over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance.↵FMINCON: Initial point is a local minimum that satisfies the constraints.↵↵Optimization completed because at the initial point, the objective function is non-decreasing ↵in feasible directions to within the value of the optimality tolerance, and ↵constraints are satisfied to within the value of the constraint tolerance.↵↵<stopping criteria details>↵↵Optimization completed: The final point is the initial point.↵The first-order optimality measure, 2.118144e-07, is less than options.OptimalityTolerance =↵1.000000e-06, and the maximum constraint violation, 0.000000e+00, is less than↵options.ConstraintTolerance = 1.000000e-06.↵'
hybridflag: 1
points = struct with fields:
X: [50×2 double]
Fval: [50×1 double]
输入参数
目标函数,指定为函数句柄或函数名称。编写目标函数以接受长度为 nvars
的行向量,并返回一个标量值。
当 'UseVectorized'
选项为 true
时,编写 fun
以接受一个 pop
×nvars
矩阵,其中 pop
是当前种群大小。在本例中,fun
返回一个与包含适应度函数值的 pop
长度相同的向量。请确保 fun
没有为 pop
假定任何特定大小,因为 particleswarm
即使在向量化计算中也可以传递种群的单个成员。
示例: fun = @(x)(x-[4,2]).^2
数据类型: char
| function_handle
| string
变量的数目,指定为正整数。求解器传递长度从 nvars
到 fun
的行向量。
示例: 4
数据类型: double
下界,指定为实数向量或双精度数组。lb
表示 lb
≤ x
≤ ub
中元素的下界。
particleswarm
在内部将数组 lb
转换为向量 lb(:)
。
示例: lb = [0;-Inf;4]
表示 x(1) ≥ 0
,x(3) ≥ 4
。
数据类型: double
上界,指定为实数向量或双精度数组。ub
表示 lb
≤ x
≤ ub
中元素的上界。
particleswarm
在内部将数组 ub
转换为向量 ub(:)
。
示例: ub = [Inf;4;10]
表示 x(2) ≤ 4
,x(3) ≤ 10
。
数据类型: double
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 。请参阅 并行或向量化函数求值。 |
优化问题,指定为具有以下字段的结构体。
solver | 'particleswarm' |
objective | 目标函数的函数句柄,或目标函数的名称。 |
nvars | 问题中的变量数目。 |
lb | 下界向量或数组。 |
ub | 上界的向量或数组。 |
options | 由 optimoptions 创建的选项。 |
rngstate | 求解过程开始时随机数生成器的可选状态。 |
数据类型: struct
输出参量
解,以使目标函数在任何边界约束下最小化的实数向量形式返回。
目标值,以实数标量 fun(x)
形式返回。
算法停止条件,以整数形式返回,标识算法停止的原因。下面列出 exitflag
的值以及相应的 particleswarm
停止原因。
| 在前 |
| 迭代次数超出 |
| 迭代被输出函数或绘图函数停止。 |
| 边界不一致:对于某些 |
| 最佳目标函数值低于 |
| 最佳目标函数值在 |
| 运行时间超过 |
求解过程摘要,以包含优化过程信息的结构体形式返回。
| 求解器迭代次数 |
| 目标函数计算的次数。 |
| 算法停止的原因。 |
| 混合函数的退出标志。与 |
| 算法即将开始之前默认随机数生成器的状态。 |
最终群位置和目标函数值,以具有以下字段的结构体形式返回:
X
- 最终群的位置,以矩阵形式返回。矩阵的每行表示一个点。Fval
- 最终群的目标函数值。对于每个i
,即最终群的成员的索引,points.Fval(i) = fun(points.X(i))
。
要继续优化,您可以将 points
作为 InitialPoints
选项传递。不过,这种方法与从一开始就运行较长时间的优化不同,因为当优化从最终种群重新开始时,算法的许多方面都是不相同的。请参阅 粒子群优化算法。
数据类型: struct
限制
基于问题的优化实时编辑器任务当前不支持指定多个初始点或初始目标函数值。要指定初始点,请使用基于求解器的任务,或使用命令行。
算法
有关粒子群优化算法的描述,请参阅粒子群优化算法。
替代功能
App
优化实时编辑器任务为 particleswarm
提供了一个可视化界面。
扩展功能
要并行运行,请将 'UseParallel'
选项设置为 true
。
options = optimoptions('
solvername
','UseParallel',true)
有关详细信息,请参阅如何在 Global Optimization Toolbox 中使用并行处理。
版本历史记录
在 R2014b 中推出particleswarm
现在可以返回输出 points
,它是一个包含群的最终位置和相关联目标函数值的结构体。您现在可以使用 InitialPoints
选项提供初始群的位置和目标函数值。您仍可以使用 InitialSwarmMatrix
选项或 InitialSwarm
选项提供初始群位置。在这些情况下,particleswarm
将初始群矩阵作为 InitialPoints
选项传递。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- 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)