并行处理是一种极具吸引力的算法优化方法。要使用并行处理,您必须具有并行计算工具箱™许可证,并具有并行工作人员池(parpool
).有关更多信息,请参见如何在全局优化工具箱中使用并行处理.
全局优化工具箱求解程序以各种方式使用并行计算。
解算器 | 平行? | 并行的特点 |
---|---|---|
|
× |
没有相似的功能。然而,fmincon 运行时可以使用并行梯度估计吗GlobalSearch .看到在优化工具箱中使用并行计算. |
|
|
启动点分布到多个处理器。从这些点开始,本地求解器运行到完成。有关详细信息,请参见MultiStart和如何在全局优化工具箱中使用并行处理. |
为fmincon ,没有平行梯度估计与平行MultiStart . |
||
|
|
并行计算种群,每次迭代计算一次。有关详细信息,请参见遗传算法和如何在全局优化工具箱中使用并行处理. |
没有适应度或约束函数的矢量化。 | ||
|
|
并行计算种群,每次迭代计算一次。有关详细信息,请参见粒子群和如何在全局优化工具箱中使用并行处理. |
没有目标函数或约束函数的矢量化。 | ||
|
|
并行计算轮询点,每次迭代执行一次。有关详细信息,请参见模式搜索和如何在全局优化工具箱中使用并行处理. |
没有目标函数或约束函数的矢量化。 | ||
|
× |
没有相似的功能。然而,simulannealbnd 可以使用并行运行的混合函数。看到模拟退火. |
|
|
并行评估搜索点。 |
没有目标函数或约束函数的矢量化。 |
此外,一些求解器有混合函数,在它们完成后运行。一些混合函数可以并行运行。同时,大多数patternsearch
搜索方法可以并行运行。有关更多信息,请参见并行搜索函数或混合函数.
没有嵌套parfor循环。大多数求解器使用并行计算工具箱parfor
(并行计算工具箱)函数执行并行计算。两个连接器,surrogateopt
和paretosearch
,使用parfeval
(并行计算工具箱)代替。
请注意
parfor
当从另一个内部调用时不能并行工作parfor
循环。
请注意
文档建议不要使用parfor
或parfeval
当调用仿真软件金宝app®;看到在parfor中使用sim功能(金宝app模型).因此,在使用求解器的内置并行功能并行优化Simulink模拟时,可能会遇到问题。金宝app
例如,假设你的目标函数userfcn
调用parfor
,你想打电话fmincon
使用MultiStart
和并行处理。还设平行梯度求值的条件fmincon
都满意了吗并行优化功能.这个数字当parfor并行运行时显示了三种情况:
最外面的循环是并行的MultiStart
.只有循环是并行运行的。
最外层的parfor
循环在fmincon
.只有fmincon
并行运行。
最外层的parfor
循环在userfcn
.在这种情况下,userfcn
可以使用parfor
并行执行。
当parfor并行运行时
平行随机数是不可复制的。MATLAB中的随机数序列®伪随机,由a种子,或初始设置。并行计算使用的种子不一定是可控的或可复制的。例如,MATLAB的每个实例都有一个默认的全局设置,用于确定随机序列的当前种子。
为patternsearch
,如果选择MADS作为轮询或搜索方法,并行模式搜索没有可重复运行。如果您选择遗传算法或拉丁超立方体作为搜索方法,并行模式搜索没有可重复运行。
为遗传算法
和gamultiobj
,平行种群生成的结果是不可重复的。
MultiStart
是不同的。你可以有可复制的并行运行吗MultiStart
.运行是可复制的,因为MultiStart
在局部生成伪随机起始点,然后将起始点分配给并行处理器。因此,并行处理器不使用随机数。有关详细信息,请参见并行处理和随机数流.
限制和性能考虑。更多相关的警告parfor
出现在并行for循环(parfor)(并行计算工具箱).
有关影响并行计算速度的因素和影响并行计算结果的因素的信息,请参见通过并行计算提高性能.同样的考虑也适用于并行计算全局优化工具箱功能。
MultiStart
可以自动地将问题和启动点分布到多个进程或处理器。这些问题是独立运行的,而且MultiStart
将不同的局部极小值组合成向量GlobalOptimSolution
对象。MultiStart
使用并行计算时,您:
拥有并行计算工具箱软件的许可证。
启用并行计算parpool
,一个并行计算工具箱功能。
设置UseParallel
财产真正的
在MultiStart
对象:
= MultiStart(女士“UseParallel”,真正的);
当这些条件成立时,MultiStart
将问题和启动点一次分配给一个进程或处理器。算法在达到停止条件或耗尽分配的起始点时停止。如果MultiStart
显示
属性是“通路”
,然后MultiStart
显示:
并行运行本地求解器。
举个平行的例子MultiStart
,请参阅平行MultiStart.
并行多启动的实现问题。fmincon
与parallel一起使用时,无法并行估计梯度MultiStart
.这种平行梯度估计的缺乏是由于parfor
中描述的没有嵌套parfor循环.
fmincon
并行估计梯度比串行估计梯度需要更长的时间。在本例中,使用MultiStart
并行梯度估计fmincon
放大了减速。例如,假设女士
MultiStart
对象有UseParallel
设置为假
.假设fmincon
解出来要多花1秒问题
与problem.options.UseParallel
设置为真正的
.然后运行(女士,200年问题)
比同样的速度要多花200秒problem.options.UseParallel
设置为假
请注意
当串行执行,parfor
循环运行速度比为
循环。因此,为了获得最佳性能,请设置本地求解器UseParallel
选项假
当MultiStart
UseParallel
属性是真正的
.
请注意
即使在并行运行时,求解器偶尔也会在主机上串行地调用目标和非线性约束函数。因此,请确保您的函数没有关于它们是否以串行和并行方式计算的假设。
GlobalSearch
不分配问题和启动点到多个进程或处理器。然而,当GlobalSearch
运行fmincon
当地的解决者,fmincon
可以通过平行有限差分估计梯度。fmincon
使用并行计算时,您:
拥有并行计算工具箱软件的许可证。
启用并行计算parpool
,一个并行计算工具箱功能。
设置UseParallel
选项真正的
与optimoptions
.中设置此选项问题
结构:
选择= optimoptions (@fmincon,“UseParallel”,真的,“算法”,“sqp”);问题= createOptimProblem (“fmincon”,“目标”@myobj,...“x0”startpt,“选项”、选择);
有关详细信息,请参见在优化工具箱中使用并行计算.
patternsearch
可以自动地将与模式中的点相关联的目标和约束函数的评估分配给多个流程或处理器。patternsearch
使用并行计算时,您:
拥有并行计算工具箱软件的许可证。
启用并行计算parpool
,一个并行计算工具箱功能。
使用命令设置以下选项optimoptions
:
UseCompletePoll
是真正的
.
UseVectorized
是假
(默认)。
UseParallel
是真正的
.
当这些条件满足时,求解器在轮询过程中并行计算模式搜索的目标函数和约束值。此外,patternsearch
的设置缓存
选项,并使用默认值“关闭”
设置。
从R2019a开始,当你设置UseParallel
选项真正的
,patternsearch
内部覆盖UseCompletePoll
设置为真正的
它是平行轮询的。
请注意
即使在并行运行时,patternsearch
偶尔在主机上串行调用目标和非线性约束函数。因此,请确保您的函数没有关于它们是以串行还是并行方式计算的假设。
并行搜索功能。patternsearch
可以在每次迭代时选择性地调用搜索函数。当你:
集UseCompleteSearch
来真正的
.
不设置搜索方法为@searchneldermead
或自定义
.
设置搜索方法为apatternsearch
轮询方法或拉丁超立方体搜索,并设置UseParallel
来真正的
.
或者,如果您将搜索方法设置为遗传算法
,创建一个搜索方法选项UseParallel
设置为真正的
.
并行模式搜索的实现问题。限制patternsearch
中列出的选项,模式搜索的局限性部分地产生parfor
,部分是由于并行处理的性质:
缓存
是被重写的吗“关闭”
- - - - - -patternsearch
实现了缓存
作为一个持久变量。parfor
不处理持久变量,因为变量在不同的处理器上可能有不同的设置。
UseCompletePoll
是真正的
- - - - - -UseCompletePoll
确定投票是否立即停止patternsearch
找到一个更好的点。并行搜索时,parfor
同时安排所有的评估,并且patternsearch
在所有评估完成后继续。patternsearch
评估开始后不能停止。
从R2019a开始,当你设置UseParallel
选项真正的
,patternsearch
内部覆盖UseCompletePoll
设置为真正的
它是平行轮询的。
UseVectorized
是假
- - - - - -UseVectorized
决定patternsearch
以向量化的方式使用一个函数调用计算模式中的所有点。如果UseVectorized
是真正的
,patternsearch
不分配函数的求值,那么不使用呢parfor
.
遗传算法
和gamultiobj
能自动地将与种群相关的目标和非线性约束函数的评估分配给多个处理器。遗传算法
使用并行计算时,您:
拥有并行计算工具箱软件的许可证。
启用并行计算parpool
,一个并行计算工具箱功能。
使用命令设置以下选项optimoptions
:
UseVectorized
是假
(默认)。
UseParallel
是真正的
.
当这些条件成立时,遗传算法
并行计算种群中个体的目标函数和非线性约束值。
请注意
即使在并行运行时,遗传算法
偶尔在主机上串行调用适应度和非线性约束函数。因此,请确保您的函数没有关于它们是以串行还是并行方式计算的假设。
并行遗传算法的实现问题。选项的限制,列在遗传算法的局限性部分地产生parfor
,部分是由于并行处理的性质:
UseVectorized
是假
- - - - - -UseVectorized
决定遗传算法
以向量化的方式使用一个函数调用计算整个填充。如果UseVectorized
是真正的
,遗传算法
不分配函数的求值,那么不使用呢parfor
.
遗传算法
可以有混合功能,完成后运行;看到遗传算法中的混合方案.如果您希望混合函数利用并行计算,请分别设置其选项,以便UseParallel
是真正的
.如果混合函数为patternsearch
,设置UseCompletePoll
来真正的
这patternsearch
并行运行。
如果混合函数为fmincon
,设置以下选项optimoptions
平行梯度估计:
GradObj
不得“上”
-可以“关闭”
或[]
.
或者,如果存在非线性约束函数,GradConstr
不得“上”
-可以“关闭”
或[]
.
要了解如何为混合函数编写选项,请参见并联混合动力功能.
并行计算与gamultiobj
工作原理与with几乎相同遗传算法
.详细信息请参见遗传算法.
并行计算与gamultiobj
和遗传算法
和混合函数有关。gamultiobj
只允许一种混合功能,fgoalattain
.此函数可选地在后面运行gamultiobj
完成它的运行。计算出的帕累托边界上的每一个个体,也就是最终的种群gamultiobj
,成为优化使用的起点fgoalattain
.这些优化并行运行。执行这些优化的处理器数量是个体数量和大小较小的parpool
.
为fgoalattain
要并行运行,请正确设置它的选项:
fgoalopts = optimoptions (@fgoalattain,“UseParallel”,true) gaoptions = optimoptions(“遗传算法”,“HybridFcn”, {@fgoalattain, fgoalopts});
gamultiobj
与gaoptions
,fgoalattain
并行运行。有关设置hybrid功能的详细信息,请参见混合功能选项.
gamultiobj
调用fgoalattain
使用一个parfor
循环,所以fgoalattain
当作为混合函数使用时,不平行估计梯度gamultiobj
.有关更多信息,请参见没有嵌套parfor循环.
particleswarm
可以自动地将目标函数的评估分配给多个处理器。particleswarm
使用并行计算时,您:
拥有并行计算工具箱软件的许可证。
启用并行计算parpool
,一个并行计算工具箱功能。
使用命令设置以下选项optimoptions
:
UseVectorized
是假
(默认)。
UseParallel
是真正的
.
当这些条件成立时,particleswarm
并行计算种群中粒子的目标函数。
请注意
即使在并行运行时,particleswarm
偶尔在主机上串行调用目标函数。因此,确保你的目标函数没有关于它是串行还是并行计算的假设。
并行粒子群算法的实现问题。选项的限制,列在粒子群的局限性部分地产生parfor
,部分是由于并行处理的性质:
UseVectorized
是假
- - - - - -UseVectorized
决定particleswarm
以向量化的方式使用一个函数调用计算整个填充。如果UseVectorized
是真正的
,particleswarm
不分配函数的求值,那么不使用呢parfor
.
particleswarm
可以有混合功能,完成后运行;看到遗传算法中的混合方案.如果您希望混合函数利用并行计算,请分别设置其选项,以便UseParallel
是真正的
.如果混合函数为patternsearch
,设置UseCompletePoll
来真正的
这patternsearch
并行运行。
如果混合函数为fmincon
,设置GradObj
选项“关闭”
或[]
与optimoptions
进行平行梯度估计。
要了解如何为混合函数编写选项,请参见并联混合动力功能.
simulannealbnd
不会自动并行运行。但是,它可以调用利用并行计算的混合函数。要了解如何为混合函数编写选项,请参见并联混合动力功能.
paretosearch
可以自动地将目标函数的评估分配给多个处理器。paretosearch
使用并行计算时,您:
拥有并行计算工具箱软件的许可证。
启用并行计算parpool
,一个并行计算工具箱功能。
使用下面的选项设置optimoptions
:
UseParallel
是真正的
.
当这些条件成立时,paretosearch
并行计算种群中粒子的目标函数。
请注意
即使在并行运行时,paretosearch
偶尔在主机上串行调用目标函数。因此,确保你的目标函数没有关于它是串行还是并行计算的假设。
有关算法的细节,请参见并行计算和向量化函数计算的改进.
surrogateopt
可以自动地将目标函数的评估分配给多个处理器。surrogateopt
使用并行计算时,您:
拥有并行计算工具箱软件的许可证。
启用并行计算parpool
,一个并行计算工具箱功能。
使用下面的选项设置optimoptions
:
UseParallel
是真正的
.
当这些条件成立时,surrogateopt
并行计算种群中粒子的目标函数。
请注意
即使在并行运行时,surrogateopt
偶尔在主机上串行调用目标函数。因此,确保你的目标函数没有关于它是串行还是并行计算的假设。
有关算法的细节,请参见并行surrogateopt算法.