主要内容

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

GlobalSearch 和 MultiStart 属性(选项)

如何设置属性

要创建具有非默认属性的 GlobalSearchMultiStart 对象,请使用名称-值对。例如,要创建具有迭代显示且仅从边界和不等式相关的可行点运行的 GlobalSearch 对象,请输入

gs = GlobalSearch("Display","iter", ...
    "StartPointsToRun","bounds-ineqs");

要设置现有 GlobalSearchMultiStart 对象的属性,请使用圆点表示法。例如,如果 msMultiStart 对象,并且您想要将 Display 属性设置为 "iter",请输入

ms.Display = "iter";

要同时设置现有对象的多个属性,请使用带有名称值参量的构造函数(GlobalSearchMultiStart)。例如,要将 Display 属性设置为 "iter" 并将 MaxTime 属性为 100,请输入

ms = MultiStart(ms,Display="iter",MaxTime=100);

有关设置属性的更多信息,请参阅 更改全局选项

两个对象的属性

您可以从 MultiStart 对象创建 GlobalSearch 对象,反之亦然。

从现有对象创建新对象的语法是:

ms = MultiStart(gs);
or
gs = GlobalSearch(ms);

新对象包含旧对象所适用的属性。本节描述这些共享属性:

显示

Display 属性的值为:

  • "final"(默认)- 最后一次求解器运行后,将结果汇总到命令行。

  • "off" - 命令行没有输出。

  • "iter" - 每次局部求解器运行后将结果汇总到命令行。

FunctionTolerance

FunctionTolerance 属性描述了两个目标函数值必须接近到何种程度,求解器才会将它们视为相同,从而创建局部解的向量。将 FunctionTolerance 设置为 0 以获取每次局部求解器运行的结果。将 FunctionTolerance 设置为更大的值以获得更少的结果。

如果两个解彼此相距在 XTolerance 距离以内,并且目标函数值彼此相距在 FunctionTolerance 以内,则求解器认为这两个解相同。如果两个条件都不满足,求解器会将解报告为不同的。容差是相对的,不是绝对的。有关详细信息,请参阅 当 fmincon 运行时 了解 GlobalSearch,以及 创建 GlobalOptimSolution 对象 了解 MultiStart

MaxTime

MaxTime 属性描述了求解器自开始运行以来的秒数容差。当解算器看到自运行开始以来已经过去了 MaxTime 秒时,它就会停止。时间指的是挂钟,而不是处理器周期。默认值为 Inf

OutputFcn

OutputFcn 属性指示全局求解器在每个局部求解器运行完成后运行一个或多个输出函数。当全局求解器启动和结束时,输出函数也会运行。包含以适当语法编写的输出函数的句柄,或包含此类句柄的元胞数组。默认值为空条目 ([])。有一个内置输出函数可以收集找到的所有局部解。要使用它,请设置求解器参数 OutputFcn=@savelocalsolutions。请参阅 GlobalSearch 和 MultiStart 的输出函数

输出函数的语法是:

stop = outFcn(optimValues,state)
  • stop 是布尔值。当 true 时,算法停止。当 false 时,算法继续。

    注意

    局部求解器可以具有输出函数。当局部求解器输出函数导致局部求解器运行停止时,全局求解器不一定会停止。如果您希望在这种情况下停止全局求解器,请让全局求解器输出函数在 optimValues.localsolution.exitflag=-1 时停止。

  • optimValues 是一个结构体,如 optimValues 结构体 中所述。

  • state 是全局算法的当前状态:

    • "init" -全局求解器尚未调用局部求解器。optimValues 结构体中的字段为空,除了 localrunindex(即 0)和 funccount(包含目标和约束函数计算的次数)。

    • "iter" - 每次局部求解器运行后,全局求解器都会调用输出函数。

    • "done" -全局求解器已完成调用局部求解器。optimValues 中的字段通常具有与最终输出函数调用 (state="iter") 中的字段相同的值。但是,GlobalSearchoptimValues.funccount 值可能大于最后一次使用 "iter" 的函数调用中的值,因为 GlobalSearch 算法可能执行了一些不属于局部求解器的函数计算。有关详细信息,请参阅GlobalSearch 算法

有关使用输出函数的示例,请参阅 自定义 GlobalSearch 输出函数

注意

MultiStartUseParallel 选项设置为 trueparpool 处于打开状态时,输出和绘图函数不会运行。

optimValues 结构体.  optimValues 结构体包含以下字段:

  • bestx - 当前最佳点

  • bestfval - bestx 处的目标函数值

  • constrviolation - 最大约束违反。零表示没有违反约束。

  • funccount -函数计算总数

  • localrunindex -局部求解器运行的索引

  • localsolution - 包含局部求解器调用部分输出的结构体:XFvalExitflag

PlotFcn

PlotFcn 属性指示全局求解器在每个局部求解器运行完成后运行一个或多个绘图函数。包含用适当语法编写的绘图函数的句柄,或包含此类句柄的元胞数组。默认值为空条目 ([])。

绘图函数的语法与输出函数的语法相同。有关详细信息,请参阅OutputFcn

全局求解器有两个预定义的绘图函数:

  • @gsplotbestf 绘制最佳目标函数值。

  • @gsplotfunccount 绘制函数计算的次数。

有关使用绘图函数的示例,请参阅 MultiStart 绘图函数

如果指定多个绘图函数,则所有绘图都会作为子绘图出现在同一个窗口中。右键点击任意子图可在单独的图形窗口中获取更大版本。

注意

MultiStartUseParallel 选项设置为 trueparpool 处于打开状态时,输出和绘图函数不会运行。

注意

绘图函数不支持 subplot 语句,因为绘图函数框架管理轴。要指定多个子图,请编写单独的绘图函数,并将其作为元胞数组传递给求解器:

options = optimoptions("solvername",PlotFcn={@plot1,@plot2,@plot3});

输出函数支持 subplot,因此您可以使用输出函数代替绘图函数,在一个函数中包含多个绘图。

StartPointsToRun

StartPointsToRun 属性指示求解器排除某些运行的起点:

  • all - 接受所有起点。

  • bounds - 拒绝不满足边界的起点。

  • bounds-ineqs - 拒绝不满足边界或不等式约束的起点。

XTolerance

XTolerance 属性描述了两个点必须距离有多近,求解器才会将它们视为相同,从而创建局部解的向量。将 XTolerance 设置为 0 以获取每次局部求解器运行的结果。将 XTolerance 设置为更大的值以获得更少的结果。求解器使用 norm(欧几里得距离)计算一对点之间的距离。

如果两个解彼此相距在 XTolerance 距离以内,并且目标函数值彼此相距在 FunctionTolerance 以内,则求解器认为这两个解相同。如果两个条件都不满足,求解器会将解报告为不同的。容差是相对的,不是绝对的。有关详细信息,请参阅 当 fmincon 运行时 了解 GlobalSearch,以及 创建 GlobalOptimSolution 对象 了解 MultiStart

GlobalSearch 属性

NumTrialPoints

除了 x0 之外,还要从 problem 结构体中检查潜在起点的数量。GlobalSearch 仅运行通过多项测试的潜在起点。有关详细信息,请参阅GlobalSearch 算法

默认值:1000

NumStageOnePoints

第 1 阶段的起点数量。有关详细信息,请参阅获取第一阶段起点,运行

默认值:200

MaxWaitCycle

算法中几个点出现的正整数容差。

  • 如果 MaxWaitCycle 个连续试验点的观测罚函数至少为惩罚阈值,则提高惩罚阈值(请参阅 PenaltyThresholdFactor)。

  • 如果 MaxWaitCycle 个连续试验点位于盆地中,则更新该盆地的半径(请参阅 BasinRadiusFactor)。

默认值:20

BasinRadiusFactor

当连续 MaxWaitCycle 个起点进入盆地后,盆地半径减小。盆地半径减小了 1– BasinRadiusFactor

默认值:0.2

DistanceThresholdFactor

用于确定试验点是否位于现有吸引盆的乘数。有关详细信息,请参阅检查第 2 阶段试验点以查看 fmincon 是否运行。默认值:0.75

PenaltyThresholdFactor

确定惩罚阈值的增加。有关详细信息,请参阅对较大计数器值的反应

默认值:0.2

MultiStart 属性

s

UseParallel 属性决定求解器是否将起点分发给多个处理器:

  • false(默认)- 不并行运行。

  • true - 并行运行。

为了使求解器并行运行,您必须使用 parpool 设置并行环境。有关详细信息,请参阅如何在 Global Optimization Toolbox 中使用并行处理