求解器如何并行计算
并行处理类型全局优化工具箱
并行处理是一种很有吸引力的加速优化算法的方法。要使用并行处理,您必须拥有并行计算工具箱™许可证,并拥有并行工作池(parpool
).有关更多信息,请参见如何在全局优化工具箱中使用并行处理.
全局优化工具箱求解器以各种方式使用并行计算。
解算器 | 平行? | 并行的特点 |
---|---|---|
|
× |
没有并行功能。然而,fmincon 磨合时可以使用平行梯度估计吗GlobalSearch .看到在优化工具箱中使用并行计算. |
|
|
起始点分布到多个处理器。从这些点开始,局部求解器运行到完成。详情请参见MultiStart而且如何在全局优化工具箱中使用并行处理. |
为fmincon ,无平行梯度估计与平行MultiStart . |
||
|
|
并行计算总体,每次迭代一次。详情请参见遗传算法而且如何在全局优化工具箱中使用并行处理. |
没有向量化的适应度或约束函数。 | ||
|
|
并行计算总体,每次迭代一次。详情请参见粒子群而且如何在全局优化工具箱中使用并行处理. |
没有目标函数或约束函数的向量化。 | ||
|
|
轮询点并行计算,每次迭代发生一次。详情请参见模式搜索而且如何在全局优化工具箱中使用并行处理. |
没有目标函数或约束函数的向量化。 | ||
|
× |
没有并行功能。然而,simulannealbnd 可以使用并行运行的混合函数。看到模拟退火. |
|
|
并行计算搜索点。 |
没有目标函数或约束函数的向量化。 |
此外,一些求解器具有混合函数,在它们完成后运行。一些混合函数可以并行运行。同时,大多数patternsearch
搜索方法可以并行运行。有关更多信息,请参见并行搜索函数或混合函数.
工具箱函数如何分配进程
parfor特征和注意事项
没有嵌套parfor循环。大多数求解器使用并行计算工具箱parfor
(并行计算工具箱)函数执行并行计算。两个连接器,surrogateopt
而且paretosearch
,使用parfeval
(并行计算工具箱)代替。
请注意
parfor
当从另一个内部调用时,不并行工作parfor
循环。
请注意
文档建议不要使用parfor
或parfeval
当调用Simulink时金宝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
可以自动将问题和起始点分配给多个进程或处理器。这些问题独立运行,并且MultiStart
将不同的局部极小值合并为的向量GlobalOptimSolution
对象。MultiStart
使用并行计算时,你:
拥有并行计算工具箱软件的许可证。
启用并行计算
parpool
,一个并行计算工具箱功能。设置
UseParallel
财产真正的
在MultiStart
对象:ms = MultiStart(“UseParallel”,真正的);
当这些条件成立时,MultiStart
每次将问题和起始点分配给一个进程或处理器。当算法达到一个停止条件或耗尽了分配的起始点时,算法就会停止。如果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
不将问题和起始点分布到多个进程或处理器。然而,当GlobalSearch
运行fmincon
当地的解决者,fmincon
可以用并行有限差分估计梯度。fmincon
使用并行计算时,你:
拥有并行计算工具箱软件的许可证。
启用并行计算
parpool
,一个并行计算工具箱功能。设置
UseParallel
选项真正的
与optimoptions
.中设置此选项问题
结构:Opts = 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
或自定义
.设置搜索方法为a
patternsearch
轮询法或拉丁超立方搜索,并设置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并行计算
并行计算gamultiobj
几乎和遗传算法
.有关详细信息,请参见遗传算法.
并行计算与并行计算的区别gamultiobj
而且遗传算法
和杂化函数有关。gamultiobj
只允许一个混合函数,fgoalattain
.之后可选地运行此函数gamultiobj
完成运行。在计算出的帕累托边界内的每个个体,即由gamultiobj
,成为优化使用的起点fgoalattain
.这些优化并行运行。执行这些优化的处理器数量是个体数量和数据库大小中较小的parpool
.
为fgoalattain
要并行运行,请正确设置其选项:
Fgoalopts = optimoptions(@fgoalattain,“UseParallel”,true) gaoptions = optimoptions(“遗传算法”,“HybridFcn”, {@fgoalattain, fgoalopts});
gamultiobj
与gaoptions
,fgoalattain
并行运行。有关设置混合功能的详细信息,请参见混合功能选项.
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
偶尔在主机上连续调用目标函数。因此,确保您的目标函数没有关于它是串行计算还是并行计算的假设。
算法的详细信息,请参见并行代理算法.