Main Content

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

重现结果

用伪随机数得到相同的答案

GlobalSearchMultiStart 使用伪随机数来选择起点。再次使用相同的伪随机数流:

  • 比较各种算法设置。

  • 让示例可重复运行。

  • 延长一次运行,并了解上次运行的初始段。

GlobalSearchMultiStart 都使用默认的随机数流。

重现结果的步骤

  1. 在运行问题之前,存储默认随机数流的当前状态:

    stream = rng;
  2. 运行您的 GlobalSearchMultiStart 问题。

  3. 恢复随机数流的状态:

    rng(stream)
  4. 如果您再次运行您的问题,您将得到相同的结果。

示例:重现 GlobalSearch 或 MultiStart 结果

此示例显示如何获得 寻找全局或多个局部最小值 的可重现结果。该示例遵循 重现结果的步骤 中的步骤。

  1. 存储默认随机数流的当前状态:

    stream = rng;
  2. 创建 sawtoothxy 函数文件:

    function f = sawtoothxy(x,y)
    [t r] = cart2pol(x,y); % change to polar coordinates
    h = cos(2*t - 1/2)/2 + cos(t) + 2;
    g = (sin(r) - sin(2*r)/2 + sin(3*r)/3 - sin(4*r)/4 + 4) ...
        .*r.^2./(r+1);
    f = g.*h;
    end
  3. 创建 problem 结构体和 GlobalSearch 对象:

    problem = createOptimProblem('fmincon',...
        'objective',@(x)sawtoothxy(x(1),x(2)),...
        'x0',[100,-50],'options',...
        optimoptions(@fmincon,'Algorithm','sqp'));
    gs = GlobalSearch('Display','iter');
  4. 运行问题:

    [x,fval] = run(gs,problem)
     Num Pts                 Best       Current    Threshold        Local        Local                 
    Analyzed  F-count        f(x)       Penalty      Penalty         f(x)     exitflag        Procedure
           0      465       422.9                                   422.9            2    Initial Point
         200     1730  1.547e-015                              1.547e-015            1    Stage 1 Local
         300     1830  1.547e-015     6.01e+004        1.074                             Stage 2 Search
         400     1930  1.547e-015     1.47e+005         4.16                             Stage 2 Search
         500     2030  1.547e-015     2.63e+004        11.84                             Stage 2 Search
         600     2130  1.547e-015    1.341e+004        30.95                             Stage 2 Search
         700     2230  1.547e-015    2.562e+004        65.25                             Stage 2 Search
         800     2330  1.547e-015    5.217e+004        163.8                             Stage 2 Search
         900     2430  1.547e-015    7.704e+004        409.2                             Stage 2 Search
         981     2587  1.547e-015         42.24        516.6        7.573            1    Stage 2 Local
        1000     2606  1.547e-015    3.299e+004        42.24                             Stage 2 Search
    
    GlobalSearch stopped because it analyzed all the trial points.
    
    All 3 local solver runs converged with a positive local solver exit flag.
    
    x =
      1.0e-007 *
        0.0414    0.1298
    
    fval =
      1.5467e-015

    运行此问题时您可能会获得不同的结果,因为随机流在运行开始时处于未知状态。

  5. 恢复随机数流的状态:

    rng(stream)
  6. 再次运行该问题。您会得到相同的输出。

    [x,fval] = run(gs,problem)
     Num Pts                 Best       Current    Threshold        Local        Local                 
    Analyzed  F-count        f(x)       Penalty      Penalty         f(x)     exitflag        Procedure
           0      465       422.9                                   422.9            2    Initial Point
         200     1730  1.547e-015                              1.547e-015            1    Stage 1 Local
    
    ... Output deleted to save space ...
    
    x =
      1.0e-007 *
        0.0414    0.1298
    
    fval =
      1.5467e-015

并行处理和随机数流

当您以与串行计算相同的方式并行运行算法时,您可以从 MultiStart 获得可重复的结果。运行是可重现的,因为 MultiStart 在本地生成伪随机起点,然后将起点分发到并行处理器。因此,并行处理器不使用随机数。

要重现并行 MultiStart 运行,请使用 重现结果的步骤 中描述的步骤。有关如何并行运行 MultiStart 的说明,请参阅 如何在 Global Optimization Toolbox 中使用并行处理

相关主题