主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

如何在 Global Optimization Toolbox 中使用并行处理

多核处理器

如果您有多核处理器,可以通过使用并行处理来提高处理速度。您可以使用一个 Parallel Computing Toolbox™ 许可证建立由多个工作进程组成的并行池。有关 Parallel Computing Toolbox 软件的描述,请参阅 Parallel Computing Toolbox 快速入门 (Parallel Computing Toolbox)

假设您有双核处理器,并且要使用并行计算。请在命令行中输入以下代码。

parpool

MATLAB® 会启动使用多核处理器的工作进程池。如果您之前设置了非默认集群配置文件,则可以通过输入以下代码来实现多核(本地)计算。

parpool('local')

注意

根据您的预设项,MATLAB 可以自动启动并行池。要启用此功能,请在主页选项卡的环境组中选择并行 > 并行设置...,然后选择自动创建并行池

将求解器设置为使用并行处理。

求解器命令行设置
ga

options = optimoptions('ga','UseParallel', true, 'UseVectorized', false);

gamultiobj

options = optimoptions('gamultiobj','UseParallel', true, 'UseVectorized', false);

MultiStart

ms = MultiStart('UseParallel', true);

或者

ms.UseParallel = true

paretosearch

options = optimoptions('paretosearch','UseParallel',true);

particleswarm

options = optimoptions('particleswarm', 'UseParallel', true, 'UseVectorized', false);

patternsearch

options = optimoptions('patternsearch','UseParallel', true, 'UseCompletePoll', true, 'UseVectorized', false);

surrogateopt

options = optimoptions('surrogateopt','UseParallel',true);

从 R2019a 开始,当您将 UseParallel 选项设置为 true 时,patternsearch 会在内部将 UseCompletePoll 设置覆盖为 true,以便该函数轮询。

使用 options 运行适用的求解器时,适用的求解器会自动使用并行计算。

要停止并行计算优化,请将 UseParallel 设置为 false。要停止所有并行计算,请输入以下代码。

delete(gcp)

注意

文档建议在调用 Simulink® 时不要使用 parforparfeval;请参阅Using sim Function Within parfor (Simulink)。因此,在使用求解器的内置并行功能并行优化 Simulink 仿真时,可能会遇到问题。有关如何使用多个 Global Optimization Toolbox 求解器优化 Simulink 模型的示例,请参阅并行优化 Simulink 模型

处理器网络

如果网络上有多个处理器,请使用 Parallel Computing Toolbox 函数和 MATLAB Parallel Server™ 软件来建立并行计算。

请确保您的系统针对并行计算进行了正确配置。请咨询系统管理员,或参考 Parallel Computing Toolbox 文档。

  1. 通过输入以下代码执行基本检查,其中 prof 是您的集群配置文件。

    parpool(prof)
  2. 工作进程必须能够访问您的目标函数文件,以及(如果适用)您的非线性约束函数文件。完成以下步骤之一以确保可以访问:

    • 使用 parpool (Parallel Computing Toolbox) AttachedFiles 参量将文件分发给工作进程。在此示例中,objfun.m 是您的目标函数文件,constrfun.m 是您的非线性约束函数文件。

      parpool('AttachedFiles',{'objfun.m','constrfun.m'});

      工作进程可以访问它们自己的文件副本。

    • 给出目标或约束函数文件的网络文件路径。

      pctRunOnAll('addpath network_file_path')

      工作进程通过网络访问函数文件。

  3. 检查文件是否在每个工作进程的路径中。

    pctRunOnAll('which filename')
    如果任一工作进程没有该文件的路径,则它会报告
    filename not found.

将求解器设置为使用并行处理。

求解器命令行设置
ga

options = optimoptions('ga','UseParallel', true, 'UseVectorized', false);

gamultiobj

options = optimoptions('gamultiobj','UseParallel', true, 'UseVectorized', false);

MultiStart

ms = MultiStart('UseParallel', true);

或者

ms.UseParallel = true

paretosearch

options = optimoptions('paretosearch','UseParallel',true);

particleswarm

options = optimoptions('particleswarm', 'UseParallel', true, 'UseVectorized', false);

patternsearch

options = optimoptions('patternsearch','UseParallel', true, 'UseCompletePoll', true, 'UseVectorized', false);

surrogateopt

options = optimoptions('surrogateopt','UseParallel',true);

从 R2019a 开始,当您将 UseParallel 选项设置为 true 时,patternsearch 会在内部将 UseCompletePoll 设置覆盖为 true,以便该函数轮询。

建立并行计算环境后,只要您使用 options 调用适用的求解器,它们就会自动使用并行计算。

要停止并行计算优化,请将 UseParallel 设置为 false。要停止所有并行计算,请输入以下代码。

delete(gcp)

注意

文档建议在调用 Simulink 时不要使用 parforparfeval;请参阅Using sim Function Within parfor (Simulink)。因此,在使用求解器的内置并行功能并行优化 Simulink 仿真时,可能会遇到问题。有关如何使用多个 Global Optimization Toolbox 求解器优化 Simulink 模型的示例,请参阅并行优化 Simulink 模型

并行搜索函数或混合函数

要使 patternsearch 搜索函数并行运行,或使 gasimulannealbnd 的混合函数并行运行,请执行以下操作。

  1. 按照 多核处理器处理器网络 中的描述设置并行处理。

  2. 确保您的搜索函数或混合函数具有以下部分中概述的条件:

patternsearch 搜索函数

patternsearch 在以下条件下使用并行搜索函数:

  • UseCompleteSearchtrue

  • 搜索方法不是 @searchneldermeadcustom

  • 如果搜索方法是 patternsearch 轮询方法或拉丁超立方体搜索,则 UseParalleltrue。使用 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});

有关搜索选项的更多信息,请参阅 搜索选项。有关示例,请参阅 搜索和轮询

并行混合函数

gaparticleswarmsimulannealbnd 可以让其他求解器在其迭代之后或中间运行。这些其他的求解器被称为混合函数。有关使用带有 gamultiobj 的混合函数的信息,请参阅 使用 gamultiobj 进行并行计算patternsearchfmincon 都可以是混合函数。您可以设置选项,以便 patternsearch 并行运行,或者 fmincon 并行估计梯度。

按照 混合函数选项 对于 ga混合函数 对于 particleswarm混合函数选项 对于 simulannealbnd 的描述设置混合函数的选项。总结一下:

  • 如果您的混合函数是 patternsearch

    1. 创建 patternsearch 选项:

      hybridopts = optimoptions('patternsearch','UseParallel',true,...
          'UseCompletePoll',true);
    2. 设置 gasimulannealbnd 选项以使用 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

    1. 创建 fmincon 选项:

      hybridopts = optimoptions(@fmincon,'UseParallel',true,...
          'Algorithm','interior-point');
      % You can use any Algorithm except trust-region-reflective
    2. 设置 gasimulannealbnd 选项以使用 fmincon 作为混合函数:

      options = optimoptions('ga','UseParallel',true);
      options = optimoptions('ga',options,'HybridFcn',{@fmincon,hybridopts});
      % or, for simulannealbnd:
      options = optimoptions(@simulannealbnd,'HybridFcn',{@fmincon,hybridopts});

    有关并行 fmincon 的更多信息,请参阅 并行计算

测试并行优化

按照以下步骤进行操作,以测试您的问题是否能以并行方式正确运行。

  1. 在不使用并行计算的情况下尝试运行您的问题,以确保它以串行方式运行。在进行下一个测试之前,需确保此测试成功(给出正确的结果)。

  2. UseParallel 设置为 true,并通过输入 delete(gcp) 确保不存在并行池。要确保 MATLAB 不会创建并行池,请在主页选项卡的环境组中选择并行 > 并行设置...,然后清除自动创建并行池。您的问题将以串行方式运行 parfor,循环迭代顺序与 for 循环相反。在进行下一个测试之前,需确保此测试成功(给出正确的结果)。

  3. UseParallel 设置为 true,并使用 parpool 创建一个并行池。除非您有多核处理器或网络设置,否则此测试不会提高处理速度。此测试只简单用于验证计算的正确性。

请记住使用 options 参量调用您的求解器来测试或使用并行功能。

另请参阅

主题