如何在 Global Optimization Toolbox 中使用并行处理
多核处理器
如果您有多核处理器,可以通过使用并行处理来提高处理速度。您可以使用一个 Parallel Computing Toolbox™ 许可证建立由多个工作进程组成的并行池。有关 Parallel Computing Toolbox 软件的描述,请参阅 Parallel Computing Toolbox 快速入门 (Parallel Computing Toolbox)。
假设您有双核处理器,并且要使用并行计算。请在命令行中输入以下代码。
parpool
MATLAB® 会启动使用多核处理器的工作进程池。如果您之前设置了非默认集群配置文件,则可以通过输入以下代码来实现多核(本地)计算。
parpool('local')
注意
根据您的预设项,MATLAB 可以自动启动并行池。要启用此功能,请在主页选项卡的环境组中选择并行 > 并行设置...,然后选择自动创建并行池。
将求解器设置为使用并行处理。
求解器 | 命令行设置 |
---|---|
ga |
|
gamultiobj |
|
MultiStart |
或者
|
paretosearch |
|
particleswarm |
|
patternsearch |
|
surrogateopt |
|
从 R2019a 开始,当您将 UseParallel
选项设置为 true
时,patternsearch
会在内部将 UseCompletePoll
设置覆盖为 true
,以便该函数轮询。
使用 options
运行适用的求解器时,适用的求解器会自动使用并行计算。
要停止并行计算优化,请将 UseParallel
设置为 false
。要停止所有并行计算,请输入以下代码。
delete(gcp)
注意
文档建议在调用 Simulink® 时不要使用 parfor
或 parfeval
;请参阅Using sim Function Within parfor (Simulink)。因此,在使用求解器的内置并行功能并行优化 Simulink 仿真时,可能会遇到问题。有关如何使用多个 Global Optimization Toolbox 求解器优化 Simulink 模型的示例,请参阅并行优化 Simulink 模型。
处理器网络
如果网络上有多个处理器,请使用 Parallel Computing Toolbox 函数和 MATLAB Parallel Server™ 软件来建立并行计算。
请确保您的系统针对并行计算进行了正确配置。请咨询系统管理员,或参考 Parallel Computing Toolbox 文档。
通过输入以下代码执行基本检查,其中
prof
是您的集群配置文件。parpool(prof)
工作进程必须能够访问您的目标函数文件,以及(如果适用)您的非线性约束函数文件。完成以下步骤之一以确保可以访问:
使用
parpool
(Parallel Computing Toolbox)AttachedFiles
参量将文件分发给工作进程。在此示例中,objfun.m
是您的目标函数文件,constrfun.m
是您的非线性约束函数文件。parpool('AttachedFiles',{'objfun.m','constrfun.m'});
工作进程可以访问它们自己的文件副本。
给出目标或约束函数文件的网络文件路径。
pctRunOnAll('addpath network_file_path')
工作进程通过网络访问函数文件。
检查文件是否在每个工作进程的路径中。
如果任一工作进程没有该文件的路径,则它会报告pctRunOnAll('which filename')
filename not found.
将求解器设置为使用并行处理。
求解器 | 命令行设置 |
---|---|
ga |
|
gamultiobj |
|
MultiStart |
或者
|
paretosearch |
|
particleswarm |
|
patternsearch |
|
surrogateopt |
|
从 R2019a 开始,当您将 UseParallel
选项设置为 true
时,patternsearch
会在内部将 UseCompletePoll
设置覆盖为 true
,以便该函数轮询。
建立并行计算环境后,只要您使用 options
调用适用的求解器,它们就会自动使用并行计算。
要停止并行计算优化,请将 UseParallel
设置为 false
。要停止所有并行计算,请输入以下代码。
delete(gcp)
注意
文档建议在调用 Simulink 时不要使用 parfor
或 parfeval
;请参阅Using sim Function Within parfor (Simulink)。因此,在使用求解器的内置并行功能并行优化 Simulink 仿真时,可能会遇到问题。有关如何使用多个 Global Optimization Toolbox 求解器优化 Simulink 模型的示例,请参阅并行优化 Simulink 模型。
并行搜索函数或混合函数
要使 patternsearch
搜索函数并行运行,或使 ga
或 simulannealbnd
的混合函数并行运行,请执行以下操作。
patternsearch 搜索函数
patternsearch
在以下条件下使用并行搜索函数:
UseCompleteSearch
为true
。搜索方法不是
@searchneldermead
或custom
。如果搜索方法是
patternsearch
轮询方法或拉丁超立方体搜索,则UseParallel
为true
。使用optimoptions
在命令行中设置:options = optimoptions('patternsearch','UseParallel',true,... 'UseCompleteSearch',true,'SearchFcn',@GPSPositiveBasis2N);
如果搜索方法是
ga
,则搜索方法选项将UseParallel
设置为true
。使用optimoptions
在命令行中设置:iterlim = 1; % iteration limit, specifies # ga runs gaopt = optimoptions('ga','UseParallel',true); options = optimoptions('patternsearch','SearchFcn',... {@searchga,iterlim,gaopt});
并行混合函数
ga
、particleswarm
和 simulannealbnd
可以让其他求解器在其迭代之后或中间运行。这些其他的求解器被称为混合函数。有关使用带有 gamultiobj
的混合函数的信息,请参阅 使用 gamultiobj 进行并行计算。patternsearch
和 fmincon
都可以是混合函数。您可以设置选项,以便 patternsearch
并行运行,或者 fmincon
并行估计梯度。
按照 混合函数选项 对于 ga
、混合函数 对于 particleswarm
或 混合函数选项 对于 simulannealbnd
的描述设置混合函数的选项。总结一下:
如果您的混合函数是
patternsearch
创建
patternsearch
选项:hybridopts = optimoptions('patternsearch','UseParallel',true,... 'UseCompletePoll',true);
设置
ga
或simulannealbnd
选项以使用patternsearch
作为混合函数:options = optimoptions('ga','UseParallel',true); % for ga options = optimoptions('ga',options,... 'HybridFcn',{@patternsearch,hybridopts}); % or, for simulannealbnd: options = optimoptions(@simulannealbnd,'HybridFcn',{@patternsearch,hybridopts});
有关并行
patternsearch
的更多信息,请参阅 模式搜索。如果您的混合函数是
fmincon
:创建
fmincon
选项:hybridopts = optimoptions(@fmincon,'UseParallel',true,... 'Algorithm','interior-point'); % You can use any Algorithm except trust-region-reflective
设置
ga
或simulannealbnd
选项以使用fmincon
作为混合函数:options = optimoptions('ga','UseParallel',true); options = optimoptions('ga',options,'HybridFcn',{@fmincon,hybridopts}); % or, for simulannealbnd: options = optimoptions(@simulannealbnd,'HybridFcn',{@fmincon,hybridopts});
有关并行
fmincon
的更多信息,请参阅 并行计算。
测试并行优化
按照以下步骤进行操作,以测试您的问题是否能以并行方式正确运行。
在不使用并行计算的情况下尝试运行您的问题,以确保它以串行方式运行。在进行下一个测试之前,需确保此测试成功(给出正确的结果)。
将
UseParallel
设置为true
,并通过输入delete(gcp)
确保不存在并行池。要确保 MATLAB 不会创建并行池,请在主页选项卡的环境组中选择并行 > 并行设置...,然后清除自动创建并行池。您的问题将以串行方式运行parfor
,循环迭代顺序与for
循环相反。在进行下一个测试之前,需确保此测试成功(给出正确的结果)。将
UseParallel
设置为true
,并使用parpool
创建一个并行池。除非您有多核处理器或网络设置,否则此测试不会提高处理速度。此测试只简单用于验证计算的正确性。
请记住使用 options
参量调用您的求解器来测试或使用并行功能。