主要内容

求解器如何并行计算

并行处理类型全局优化工具箱

并行处理是一种很有吸引力的加速优化算法的方法。要使用并行处理,您必须拥有并行计算工具箱™许可证,并拥有并行工作池(parpool).有关更多信息,请参见如何在全局优化工具箱中使用并行处理

全局优化工具箱求解器以各种方式使用并行计算。

解算器 平行? 并行的特点

GlobalSearch

×

没有并行功能。然而,fmincon磨合时可以使用平行梯度估计吗GlobalSearch.看到在优化工具箱中使用并行计算

MultiStart

起始点分布到多个处理器。从这些点开始,局部求解器运行到完成。详情请参见MultiStart而且如何在全局优化工具箱中使用并行处理
fmincon,无平行梯度估计与平行MultiStart

遗传算法gamultiobj

并行计算总体,每次迭代一次。详情请参见遗传算法而且如何在全局优化工具箱中使用并行处理
没有向量化的适应度或约束函数。

particleswarm

并行计算总体,每次迭代一次。详情请参见粒子群而且如何在全局优化工具箱中使用并行处理
没有目标函数或约束函数的向量化。

patternsearchparetosearch

轮询点并行计算,每次迭代发生一次。详情请参见模式搜索而且如何在全局优化工具箱中使用并行处理
没有目标函数或约束函数的向量化。

simulannealbnd

×

没有并行功能。然而,simulannealbnd可以使用并行运行的混合函数。看到模拟退火

surrogateopt

并行计算搜索点。
没有目标函数或约束函数的向量化。

此外,一些求解器具有混合函数,在它们完成后运行。一些混合函数可以并行运行。同时,大多数patternsearch搜索方法可以并行运行。有关更多信息,请参见并行搜索函数或混合函数

工具箱函数如何分配进程

parfor特征和注意事项

没有嵌套parfor循环。大多数求解器使用并行计算工具箱parfor(并行计算工具箱)函数执行并行计算。两个连接器,surrogateopt而且paretosearch,使用parfeval(并行计算工具箱)代替。

请注意

parfor当从另一个内部调用时,不并行工作parfor循环。

请注意

文档建议不要使用parforparfeval当调用Simulink时金宝app®;看到在parfor中使用sim函数(金宝app模型).因此,在使用求解器的内置并行功能并行优化Simulink仿真时,可能会遇到问题。金宝app

举个例子,假设你的目标函数userfcn调用parfor,你想打电话fmincon使用MultiStart还有并行处理。也假定了并行梯度求值的条件fmincon满意了吗并行优化功能.这个数字当parfor并行运行时展示了三种情况:

  1. 最外面的环是平行的MultiStart.只有那个循环是并行运行的。

  2. 最外层的parfor循环在fmincon.只有fmincon并行运行。

  3. 最外层的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选项MultiStartUseParallel属性是真正的

请注意

即使并行运行,解算器偶尔也会在主机上连续调用目标函数和非线性约束函数。因此,确保您的函数没有关于它们是串行求值还是并行求值的假设。

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自定义

  • 设置搜索方法为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并行计算

并行计算gamultiobj几乎和遗传算法.有关详细信息,请参见遗传算法

并行计算与并行计算的区别gamultiobj而且遗传算法和杂化函数有关。gamultiobj只允许一个混合函数,fgoalattain.之后可选地运行此函数gamultiobj完成运行。在计算出的帕累托边界内的每个个体,即由gamultiobj,成为优化使用的起点fgoalattain.这些优化并行运行。执行这些优化的处理器数量是个体数量和数据库大小中较小的parpool

fgoalattain要并行运行,请正确设置其选项:

Fgoalopts = optimoptions(@fgoalattain,“UseParallel”,true) gaoptions = optimoptions(“遗传算法”“HybridFcn”, {@fgoalattain, fgoalopts});
运行gamultiobjgaoptions,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偶尔在主机上连续调用目标函数。因此,确保您的目标函数没有关于它是串行计算还是并行计算的假设。

算法的详细信息,请参见并行代理算法

相关的话题