Main Content

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

更改选项

如何确定要更改哪些选项

运行全局求解器后,您可能需要更改一些全局或局部选项。要确定要更改哪些选项,指导原则是:

  • 要影响局部求解器,请设置局部求解器选项。

  • 要影响起点或解集,请更改 problem 结构体,或设置全局求解器对象属性。

例如,要获得:

  • 更多局部极小值-设置全局求解器对象属性。

  • 更快的局部求解器迭代-设置局部求解器选项。

  • 对于将局部解视为相同的不同容差(以获得更多或更少的局部解)-设置全局求解器对象属性。

  • 在命令行上显示不同的信息 - 决定是否要从局部求解器(设置局部求解器选项)或全局信息(设置全局求解器对象属性)进行迭代显示。

  • 不同的边界,用于检查不同的区域 - 在 problem 结构体中设置边界。

选择问题选项的示例

  • 要在仅满足不等式约束的点处启动局部求解器,请将全局求解器对象中的 StartPointsToRun 属性设置为 'bounds-ineqs'。此设置可以加速您的解,因为局部求解器不必尝试寻找满足这些约束的点。然而,由于全局求解器可以拒绝许多起点,因此该设置可能导致局部求解器运行次数大大减少。有关示例,请参阅 仅使用可行的起点进行优化

  • 要使用 fmincon interior-point 算法,请将局部求解器 Algorithm 选项设置为 'interior-point'。有关如何执行此操作的示例,请参阅 更新问题选项的示例

  • 为了使您的局部求解器具有不同的边界,请在 problem 结构体中设置边界。通过设置边界来检查不同的区域。

  • 要查看每个具有正局部退出标志的解,请将全局求解器对象中的 XTolerance 属性设置为 0。有关如何执行此操作的示例,请参阅 更改全局选项

更改局部求解器选项

有多种方法可以更改局部选项的值:

  • 使用圆点表示法和 optimoptions 更新值。语法为

    problem.options = optimoptions(problem.options,'Parameter',value,...);

    您还可以完全替换局部选项:

    problem.options = optimoptions(@solvername,'Parameter',value,...);
  • 在一个局部选项上使用圆点表示法。语法为

    problem.options.Parameter = newvalue;
  • 重新创建整个问题结构体。有关详细信息,请参阅创建问题结构体

更新问题选项的示例

  1. 创建问题结构体:

    problem = createOptimProblem('fmincon','x0',[-1 2], ...
        'objective',@rosenboth);
  2. 将问题设置为在 fmincon 中使用 sqp 算法:

    problem.options.Algorithm = 'sqp';
  3. 更新问题以使用目标函数中的梯度,使 FunctionTolerance 值为 1e-8,使 XTolerance 值为 1e-7

    problem.options = optimoptions(problem.options,'GradObj','on', ...
        'FunctionTolerance',1e-8,'XTolerance',1e-7);

更改全局选项

有多种方法可以改变 GlobalSearchMultiStart 对象的特征:

  • 使用圆点表示法。例如,假设您有一个默认的 MultiStart 对象:

    ms = MultiStart
    ms = 
    
      MultiStart with properties:
    
              UseParallel: 0
                  Display: 'final'
        FunctionTolerance: 1.0000e-06
                  MaxTime: Inf
                OutputFcn: []
                  PlotFcn: []
         StartPointsToRun: 'all'
               XTolerance: 1.0000e-06

    要将 ms 更改为使其 XTolerance 值等于 1e-3,请更新 XTolerance 字段:

    ms.XTolerance = 1e-3
    ms = 
    
      MultiStart with properties:
    
              UseParallel: 0
                  Display: 'final'
        FunctionTolerance: 1.0000e-06
                  MaxTime: Inf
                OutputFcn: []
                  PlotFcn: []
         StartPointsToRun: 'all'
               XTolerance: 1.0000e-03
  • 从当前设置开始重建对象。例如,将 ms 中的 FunctionTolerance 字段设置为 1e-3,同时保留 XTolerance 的非默认值:

    ms = MultiStart(ms,'FunctionTolerance',1e-3)
    ms = 
    
      MultiStart with properties:
    
              UseParallel: 0
                  Display: 'final'
        FunctionTolerance: 1.0000e-03
                  MaxTime: Inf
                OutputFcn: []
                  PlotFcn: []
         StartPointsToRun: 'all'
               XTolerance: 1.0000e-03
  • GlobalSearch 对象转换为 MultiStart 对象,或反之亦然。例如,使用上例中的 ms 对象,创建一个具有相同值 XToleranceFunctionToleranceGlobalSearch 对象:

    gs = GlobalSearch(ms)
    gs =
    
      GlobalSearch with properties:
    
                 NumTrialPoints: 1000
              BasinRadiusFactor: 0.2000
        DistanceThresholdFactor: 0.7500
                   MaxWaitCycle: 20
              NumStageOnePoints: 200
         PenaltyThresholdFactor: 0.2000
                        Display: 'final'
              FunctionTolerance: 1.0000e-03
                        MaxTime: Inf
                      OutputFcn: []
                        PlotFcn: []
               StartPointsToRun: 'all'
                     XTolerance: 1.0000e-03

相关主题