|
|
CONOPT 求解器手册
目录1. 引言CONOPT 是一个 NLP 求解器,源自 CONOPT 3,但有许多改进。本文档力求自成体系,因此会与 CONOPT 3 文档有一些重复之处。 使用 GAMS 创建的非线性模型必须用非线性规划(NLP)算法来求解。可用的求解器很多,而且数量还在增长。几乎不可能预测某个特定模型用某个特定算法求解的难易程度,尤其是对 NLP 模型而言,因此 GAMS 无法自动选择最佳算法。确定哪种求解器适用于哪类模型的唯一可靠方法是进行试验。不过,对不同的求解器进行分类,并描述 CONOPT 在这一图景中的位置,仍然是有益的。 NLP 求解器之间最重要的区别在于它们是试图寻找局部解还是全局解。试图寻找全局解的求解器(称为全局求解器)通常使用某种分支定界技术,一般无法求解非常大的模型。相比之下,大多数只搜索局部最优解的局部求解器可以处理大得多的模型。如果模型具有正确的数学性质(例如凸性),则局部求解器能够找到全局最优解。遗憾的是,检验一般 NLP 模型是否为凸的理论尚不成熟,预计这属于难题类别。CONOPT 属于局部求解器类别,可用于非常大的模型。 在局部求解器类别中,主要的区别在于基于活动集(Active Set)方法和内点(Interior Point)方法的求解器。活动集求解器通常适用于具有许多等式约束和少量边界的模型。内点求解器通常适用于具有许多不等式和大量边界的模型,在这种情况下哪些不等式和边界是活动的这一组合性质起着重要作用。CONOPT 是一个活动集求解器。 最后,在活动集求解器中,我们区分为可行路径(Feasible Path)方法和仅在最终点同时满足可行性与最优性的方法。可行路径方法通过一系列可行点迭代,逐步改进解。假设中间点的可行性将提供更相关的导数,从而提供朝向最优解的更好方向,因此将减少相对于不强制可行性的方法的迭代次数。另一方面,每次迭代将更昂贵,因为维持可行性需要付出代价。CONOPT 是一种可行路径方法,并且在寻找初始可行解和降低维持可行性的成本方面投入了大量精力。 除了 NLP 模型之外,CONOPT 对于 CNS(约束非线性系统或方系统方程)也有良好的算法,CONOPT 已用于求解具有数百万变量和约束的 CNS 模型。 本文档将描述基本算法以及迭代输出如何帮助用户理解求解进度。它还将描述一些可用于控制算法行为的选项。需要强调的是,大多数用户不需要任何选项。CONOPT 被设计为根据模型的统计信息和算法进度的信息自动调整其行为。 2. CONOPT 算法CONOPT 中使用的算法基于 Abadie 和 Carpentier(1969 年)首次提出的 GRG 算法。实际实现经过了许多修改以使其对大型模型高效。这里我们仅对应用于以下模型的通用 GRG 算法的主要步骤进行简要的文字描述: 最小化或最大化 f(x)
约束条件: g(x) = 0
lb <= x <= ub
其中 \(x\) 表示变量集合,\(f\) 表示目标函数,\(g\) 表示约束向量,\(lb\) 和 \(ub\) 表示下界和上界向量。不等式通过添加适当有界的松弛变量来处理。任何 GRG 算法的关键步骤是:
当然,在 CONOPT 的实际实现中,各个步骤要详细得多。步骤 1 包括几个预处理步骤,通常会创建一个更小、更容易优化的模型。步骤 1 还有一个特殊的阶段 0 和一个缩放过程,如后续章节所述。涉及基 B、B 的 LU 分解以及所有涉及 B 的操作(步骤 3、4 和 8)都已优化,即使对于非常大的模型也能高效工作。搜索方向的选择和优化步长的确定根据模型是近似线性还是非线性而专门化。对于近似线性的模型,一些涉及矩阵 J 和 B 的线性代数工作使用廉价的 LP 类型更新技术完成,二阶信息在步骤 7 中不相关,并且步骤 8 中的线搜索通过观察到最优步长几乎总是由第一个到达边界的变量决定而得到改进。类似地,当模型看起来是非线性时,其他方面得到优化:基本变量和超基本变量的集合通常在多次迭代中保持不变,并且通过使用 GAMS 提供的二阶信息来改进搜索方向。使用近似线性还是非线性组件的选择是基于对算法进度的观察动态进行的。最后,步骤 8 中的一维搜索和可行性恢复牛顿迭代已使用二次内插和外推进行了优化,并利用了相关约束中的线性特性。 3. 迭代输出运行 CONOPT 时,您将看到一个日志文件,如下所示: CONOPT 4 52.2.0 d8e408be Dec 8, 2025 WEI x86 64bit/MS Window
C O N O P T version 4.38.2
Copyright (C) GAMS Software GmbH
GAMS Development Corporation
The user model has 610 constraints and 666 variables
with 2432 Jacobian elements, 1518 of which are nonlinear.
The Hessian of the Lagrangian has 306 elements on the diagonal,
714 elements below the diagonal, and 562 nonlinear variables.
Iter Phase Ninf Infeasibility RGmax NSB Step InItr MX OK
0 0 1.1198119428E+02 (Input point)
The pre-triangular part of the model has 4 constraints and 11 variables.
The post-triangular part of the model has 2 constraints and variables.
There are 425 definitional constraints and defined variables.
Preprocessed model has 179 constraints and 228 variables
with 1953 Jacobian elements, 1828 of which are nonlinear.
Iter Phase Ninf Infeasibility RGmax NSB Step InItr MX OK
9.8752676396E+01 (Full preprocessed model)
2.1093011202E-01 (After scaling)
2.0060649250E-01 (After adjusting individual variables)
1 0 1.9323934856E-01 1.0E+00 1 T T
2 0 1.9273037524E-01 1.0E+00 1 T T
3 0 1.9272947599E-01 1.0E+00 1 T T
4 1 1 1.9121491986E-01 2.8E-02 24 6.0E-03 25 F F
...
前几行标识了 CONOPT 的版本。CONOPT 会定期更新,如果您想报告问题,确定您使用的版本非常重要。 接下来的几行显示了以约束、变量和雅可比元素衡量的模型大小;这些数字也会显示在 GAMS 日志中。通常,您还会看到关于拉格朗日函数(结合目标函数和约束的函数,\(L = f(x) + u^{T}g(x)\),其中 u 是对偶变量向量)的 Hessian 矩阵(二阶导数矩阵)的信息。对于某些非常大或稠密的模型以及自由度较少的模型,二阶信息不会自动提供,这些行将缺失。您可以使用选项 Flg_Hessian 强制使用二阶信息。 当 CONOPT 从 GAMS 接收到模型时,它会评估约束并确定输入点中的初始(总和)不可行性。然后它执行一个预处理器,尝试减小模型大小并找到一个更接近可行性的解。来自预处理器的信息取决于模型,并在预处理器部分中描述。 预处理器完成后,模型被缩放,之后所有不可行性的报告都指缩放后的模型。 日志文件的其余部分描述了优化迭代,第一列为迭代编号。对于非常小的模型,您可能看不到迭代日志中的所有迭代。可以使用选项 Frq_Log_SlpSqp 和 Frq_Log_Simple 来增加或减少日志频率。 每次迭代的类型由第 2 列的"Phase"值描述。在阶段 0、1 和 2 期间,模型是不可行的,第 4 列中标记为"Infeasibility"的不可行性总和正在被最小化。在阶段 1 和 2 期间,"Ninf"列中的数字告诉有多少约束仍然是不可行的。这些不可行性在保持可行约束仍然可行的条件下被最小化,因此 Ninf 通常不会增加。在阶段 3 和 4 期间,模型是可行的,第 4 列中显示的实际目标函数(现在标记为"Objective")根据 GAMS 中的 Solve 语句被最小化或最大化。 阶段 0 迭代是类牛顿迭代。背景在阶段 0 — 寻找初始可行解部分中描述。在阶段 1 和 3 期间,模型表现近似线性,CONOPT 应用利用线性特性的特殊线性迭代。这些迭代通常组合成多个内部"顺序线性规划"(SLP)迭代,这些内部迭代的数量显示在"InItr"列中。在阶段 2 和 4 期间,模型表现更非线性,无论是在目标函数(仅阶段 4)还是在约束中,因此迭代的大部分方面都发生了变化:线搜索更精细,CONOPT 需要二阶信息来改善收敛。CONOPT 使用基于 GAMS 计算的精确二阶导数的内部"顺序二次规划"(SQP)迭代。这些内部迭代的数量显示在"InItr"列中。 阶段 1 和 3 中的算法几乎相同;唯一的区别在于约束集合(阶段 3 中所有约束,阶段 1 中可行约束)和目标函数(阶段 3 中用户目标函数,阶段 1 中不可行约束残差之和)。阶段 2 与阶段 4 也是如此。 SLP 或 SQP 迭代将在非线性约束的切平面上定义搜索方向。CONOPT 将沿着这个方向前进,并使用一个或多个步骤来找到该方向上的最佳解。这个过程称为一维搜索。由于 CONOPT 是一种可行路径方法,并且约束通常是非线性的,切平面上的点通常不可行,因此 CONOPT 将在可行点评估目标函数之前调整一些变量以使约束可行。可行性恢复过程基于牛顿方法的适配,其中只调整一部分变量,即基本变量。 迭代日志中的其余数字描述了一维搜索。"NSB"(超基本数量)列定义了自由度或当前搜索空间的维度,"RGmax"衡量非最优变量中最大的简化梯度。RGmax 最终应收敛到零,但收敛通常不是单调的。最后两列标记为"MX"和"OK",提供关于一维搜索的信息。OK = T 表示一维搜索表现良好,"Step"列中描述的步长接近所选搜索方向上的局部最优。OK = F 表示一维搜索在达到最优步长之前停止,通常是因为用于寻找可行解的牛顿迭代只对小步长收敛。MX = T 表示一维搜索因变量到达边界或不等式变为紧约束而终止。这总是与 OK = T 组合出现。MX = F 表示步长由目标函数的非线性决定。 SLP 或 SQP 过程建议的步长总是 1.0。因此,当最优步长为 1.0 时,线性或二次逼近是好的。步长为 1.0 的迭代通常更快,因为只需要评估一个步骤。 在优化的初始部分,当我们远离最终解时,SLP 或 SQP 过程找到的方向通常会建议变量的较大变化,而可行性恢复牛顿迭代可能由于较大的非线性而不收敛。因此,我们将在开始时看到更多 OK = F 且 Step < 1 的迭代。 4. 终止消息当 CONOPT 完成时,它将显示一条终止消息,说明它完成的原因。本节将显示大部分这些消息,并附带简短说明。它还将显示返回给 GAMS 的模型状态(存放在 前 4 条消息用于最优解,CONOPT 将返回 ModelStat = 2(局部最优),除非另有说明: ** 最优解。没有超基本变量。 该解是局部最优的角点解。解仅由约束决定,变量值和目标函数值通常都非常精确。在某些情况下,CONOPT 可以确定该解是全局最优的,并将返回 ModelStat = 1(最优)。 ** 最优解。简化梯度小于容差。 该解是局部最优的内部解。简化梯度的最大分量小于最优性容差 ** 最优解。基于简化梯度和估计 Hessian 矩阵的
最优目标函数值估计误差小于目标函数的最小容差。
该解是局部最优的内部解。简化梯度的最大分量大于最优性容差 ** 最优解。收敛速度太慢。目标函数的变化已连续
xx 次迭代小于 xx.xx。
CONOPT 以一个看似最优的解停止。由于进度缓慢,求解过程停止。简化梯度的最大分量大于最优性容差 以上四条消息都存在"最优"被替换为"不可行"的版本,此时 ModelStat 将为 5(局部不可行)或 4(不可行)。不可行消息表明阶段 1 或 2 中的不可行性总和目标函数是局部最小的,但为正。如果模型是凸的,则它没有可行解;如果模型是非凸的,则可能在另一个区域有可行解。 ** 可行解。收敛速度太慢。目标函数的变化已连续
xx 次迭代小于 xx.xx。
** 可行解。容差已最小且目标函数没有变化,
尽管简化梯度大于容差。
以上两条消息表明 CONOPT 以一个可行解停止。第一种情况下求解过程非常慢,第二种情况下完全没有进展,并且最优性准则尚未满足。这些消息伴随着 ModelStat = 7(可行解)和 SolveStat = 4(由求解器终止)。如果模型是 DNLP 类型,问题可能是由不连续性引起的;在这种情况下,您应考虑替代的光滑公式。问题也可能是由缩放不良的模型引起,或由停滞引起。这两条消息也存在"可行"被替换为"不可行"的版本。在这种情况下 ModelStat 为 6(中间不可行),SolveStat 仍为 4(由求解器终止)。 ** 无界解。变量已达到"无穷大"。
最大合法值 (Lim_Variable) 为 xx.xx
如果变量超过 Lim_Variable 的指示值(默认 1.e15),CONOPT 认为解是无界的,并返回 ModelStat = 3(无界)。无界性检查在每次迭代时进行,这意味着即使最优解中没有变量具有大值,如果中间解的变量非常大,CONOPT 也会停止。达到"无穷大"的变量会在列表文件中显示。您应检查解是否看起来无界,或者问题是否由无界变量的缩放引起。 ** 不可行解。自由变量超出允许范围。
当前值为 xx.xx,当前上界 (Lim_Variable) 为 xx.xx
这些不可行消息表明在找到可行解之前某些变量变得非常大。您应再次检查问题是否由无界变量的缩放引起。 ** 已达到时间限制。 已达到 GAMS 中定义的时间或资源限制。CONOPT 将返回 SolveStat = 3(资源中断)和 ModelStat 为 6(局部不可行)或 7(可行解)。 ** 已达到迭代限制。 已达到 GAMS 中定义的迭代限制。CONOPT 将返回 SolveStat = 2(迭代中断)和 ModelStat 为 6(局部不可行)或 7(可行解)。 ** 非线性函数中的域错误。
** 非线性函数中的域错误。返回 NaN。
** 非线性函数中的域错误。残差太大。检查变量边界。
函数评估错误或错误函数值的数量已达到 GAMS 中通过 ** 初始导数太大(大于 xx.xx)。缩放变量和/或方程,或添加边界。
** 导数太大(大于 xx.xx)。缩放变量和/或方程,或添加边界。
如果导数或雅可比元素非常大(无论是在初始点还是在后来的中间点),会出现这些消息。相关的变量和方程对将显示在列表文件中。如果违规导数与 5. 预处理器CONOPT 中的预处理器识别前三角和后三角变量和约束,并以特殊方式处理它们,使某些内部例程运行更高效。前三角变量和约束被简单地从用户模型中移除,不出现在内部模型中。后三角变量和约束被折叠成一个单一的浓缩目标函数。定义性约束被消除。在内部模型求解后,CONOPT 将内部解转换回用户模型的解。 除了简单的前三角和后三角变量和约束外,预处理器还寻找更多简化模型的可能性,包括:固定变量被完全移除;简单不等式被转化为边界并移除约束;单调约束(如 预处理器还识别易于变得可行的构造,如惩罚项和极小化极大项。定义性约束(形如 可以使用选项 Flg_Prep = false 关闭预处理器,使用 Flg_NoDefc = true 关闭定义性约束的搜索。 6. 调整初始点如果预处理后的模型不可行,CONOPT 以一个新的"调整初始点"过程开始。该过程通过一次改变单个变量来降低不可行性总和。这个过程非常便宜,因为改变单个变量只涉及整体模型的一小部分。该过程的副产品是产生大部分良好的初始基。如果调整初始点过程降低了不可行性,日志文件将显示"After adjusting individual variables"行。 调整初始点过程所用的时间在极少数情况下(通常对于非常稠密的模型)可能很大。可以使用选项 Flg_AdjIniP = false 关闭该过程。 7. 阶段 0 — 寻找初始可行解CONOPT 是一种可行路径方法,但用户定义的初始点并不总是可行的。阶段 0 使用基于牛顿方法的程序(用于求解非线性等式)来搜索可行解。如果 GAMS 提供了基,则初始基将按从 GAMS 基中选择的方式进行,并进行调整以使其非奇异。否则,将选择一组基本变量,优先选择远离其边界的变量。 CONOPT 使用类似 LP 的定价步骤来选择约束的一个子集,对于该子集,牛顿方法将降低不可行性总和。应用于该子集的牛顿方法给出一个搜索方向。如果可以在不达到任何边界的情况下采取完整步骤,则子集中的约束通常会很快变得可行。如果边界变为活动,则基被更改,过程重复。 阶段 0 在牛顿子集变为可行时终止,CONOPT 切换到阶段 1 处理剩余的约束。 8. SLP 与 SQP 之间的转换从 SLP(阶段 1 或 3)到 SQP(阶段 2 或 4)以及返回的转换在 CONOPT 中基于曲率的连续测量(包括一般约束和目标函数中的曲率),并结合 SLP 和 SQP 的计算成本和进度的估计。迭代 6 到 9 是 SLP 迭代,迭代 10 到 14 是 SQP 迭代。您可能在模型中看到 SQP 在若干迭代后被 SLP 替换,因为测量到的非线性非常小。 9. 不良迭代不良迭代(在"OK"列中标记为"F")出现在 SLP 或 SQP 过程的输出是一个搜索方向,但 CONOPT 在此方向上无法移动很远(因为很难使非线性约束再次可行)时。该问题通常与条件数差的基或变化非常快的雅可比元素有关。CONOPT 监控基的质量,并触发寻找更好的基。 10. 鞍点与负曲率方向当解满足一阶最优性条件时,CONOPT 会在鞍点处尝试找负曲率方向。该过程仅在满足一阶最优性条件的点处被调用,通常只被调用一次。如果您知道没有负曲率方向,可以通过将选项 Flg_NegCurve 设置为 false 来关闭该过程。如果模型已知是凸的,可以将 Flg_Convex 设置为 true。 11. 备选子模型CONOPT 可以处理最多三个不同的内部子模型:
11.1 无惩罚模型如果存在许多惩罚和/或极小化极大约束,则无惩罚模型将比完整模型小得多。默认情况下,如果惩罚约束比例超过 Rat_NoPen(默认 0.1),且满足其他条件,则会在完整模型前求解无惩罚模型。 11.2 线性可行性模型线性可行性模型用于避免某些线性约束不可行的局部不可行解。如果线性可行性模型不可行,整体模型被证明是全局不可行的。求解后,可以以四种方式继续:A. 直接使用第一个可行解;B. 最小化到用户初始点的加权距离(仅非默认变量);C. 所有变量;D. 所有变量但使用不同的 xini。 策略由选项 Lin_Method 控制(1-3)。重新启动次数由 Num_Rounds 控制(默认 4)。 12. 缩放良好的缩放在任何 NLP 算法中都重要。默认缩放方法为每个变量和每个方程计算缩放因子,使雅可比矩阵中最重要的元素接近 1。缩放因子被投影到区间 [Tol_Scale_Min, Tol_Scale_Max] 上以避免极端缩放。缩放方法由选项 Mtd_Scale 控制。 13. CNS 模型CONOPT 对于求解 CNS(约束非线性系统或方系统)模型有特殊的逻辑。CNS 模型是具有相同数量变量和约束的方系统,没有目标函数。对于 CNS 模型,CONOPT 使用与 NLP 模型相同的算法,但有一些修改。CNS 逻辑支持 TraceCNS 模式,用于跟踪解随参数的变化。 14. 多线程CONOPT 可以利用多个线程来加速某些计算密集型操作,包括雅可比矩阵评估期间的导数并行计算、预处理期间的并行处理以及线性代数操作期间的并行化。默认使用单个线程,可以使用 GAMS 选项 Threads 或 CONOPT 特定选项控制。 15. 可行性损失在某些情况下 CONOPT 可能失去可行性,包括高度非线性的约束导致牛顿迭代发散、基变得病态、或缩放不良导致数值困难。当失去可行性时,CONOPT 尝试通过求解辅助可行性问题来恢复。 16. 停滞停滞描述了优化算法在接近最优解但尚未满足最优性条件时几乎停止进展的情况。CONOPT 检测停滞,并有启发式方法尝试克服它,包括挑战当前基和扩大搜索方向。如果所有尝试都失败,以关于收敛缓慢的消息终止。 17. 附录 A — 选项本节描述了 CONOPT 可用的选项。选项可以通过 GAMS 选项语句设置,或使用 CONOPT 特定的选项文件。 17.1 算法选项
17.2 调试选项
17.3 输出选项
17.4 接口选项
17.5 详细选项说明Flg_AdjIniP (逻辑): 使用调整初始点过程。启用或禁用调整初始点过程,该过程在预处理器后通过一次改变一个变量来降低不可行性。 Flg_Convex (逻辑): 模型是凸的。如果设置为 true,CONOPT 假设模型是凸的,并跳过负曲率方向的搜索。 Flg_Hessian (逻辑): 计算和使用 Hessian 矩阵。控制是否计算和使用拉格朗日函数的二阶导数。true 强制使用,false 禁用,auto 让 CONOPT 决定。 Flg_NegCurve (逻辑): 搜索负曲率方向。false 时跳过鞍点处的负曲率方向搜索。 Flg_NoDefc (逻辑): 不使用定义性约束。 Flg_NoPen (逻辑): 使用无惩罚模型。true 时 CONOPT 可以求解无惩罚子模型。 Flg_Prep (逻辑): 使用预处理器。false 时跳过预处理步骤。 Frq_Log_Simple (整数): 非 SLP/SQP 迭代的日志频率。自动值让 CONOPT 根据模型大小选择。 Frq_Log_SlpSqp (整数): SLP 或 SQP 迭代的日志频率。 Lim_SlowPrg (整数): 将迭代计为缓慢进展之前的缓慢迭代次数。 Lim_Variable (实数): 变量的最大允许绝对值。超过此值时 CONOPT 声明无界。 Lin_Method (整数): 线性可行性模型策略。1=仅在局部不可行时使用,2=直接以线性可行性模型开始,3=类似 2 但跳过目标 A。 Mtd_Scale (整数): 缩放方法。0=基于重要元素的缩放,1=简单迭代缩放,2=基于线性部分的缩放,3=自动选择。 Num_Rounds (整数): 线性可行性模型的轮次。 Rat_NoPen (实数): 无惩罚模型要求解的惩罚约束比率限制。 Tol_Bound (实数): 接近边界的解值边界过滤容差。如果变量或松弛变量在 Tol_Bound 内,则被视为在边界上。 Tol_BoxSize (实数): 整体模型的信任区域初始框大小。 Tol_BoxSize_Lin (实数): 线性可行性模型的信任区域初始框大小。 Tol_Feas_Max (实数): 最大可行性容差(缩放后)。约束残差小于此值被视为可行。 Tol_Feas_Min (实数): 最小可行性容差(缩放后)。收紧容差时的目标值。 Tol_Fixed (实数): 定义固定变量的容差。如果边界间距小于 Tol_Fixed * Max(1, Abs(Bound)),变量被视为固定。 Tol_Jac_Min (实数): 缩放时忽略的小雅可比元素过滤器。 Tol_Linesearch (实数): 一维搜索精度。如果二次逼近的预期目标下降小于 Tol_Linesearch 乘以此一维搜索中已实现的目标下降,则停止搜索。 Tol_Obj_Acc (实数): 目标函数相对精度。假设目标函数可以计算到 Tol_Obj_Acc * max(1, abs(Objective)) 的精度。 Tol_Obj_Change (实数): 良好行为迭代中目标相对变化的限制。如果变化小于 Tol_Obj_Change * Max(1, Abs(Objective)),迭代计为缓慢进展。 Tol_Optimality (实数): 可行时简化梯度最优性容差。简化梯度的最大超基本分量小于此值时解被认为最优。 Tol_Opt_Infeas (实数): 不可行时简化梯度最优性容差。 Tol_Opt_LinF (实数): 线性可行性模型中不可行时的最优性容差。 Tol_Piv_Abs (实数): 绝对主元容差。LU 分解中主元绝对值大于此值则足够大。 Tol_Piv_Abs_Ini (实数): 构建初始基的绝对主元容差。 Tol_Piv_Abs_NLTr (实数): 前三角方程中非线性元素的绝对主元容差。 Tol_Piv_Ratio (实数): 比率测试期间的相对主元容差。 Tol_Piv_Rel (实数): 基分解期间的相对主元容差。主元绝对值至少为 Tol_Piv_Rel * 列中最大绝对值时才足够大。 Tol_Piv_Rel_Ini (实数): 构建初始基的相对主元容差。 Tol_Piv_Rel_Updt (实数): 基更新期间的相对主元容差。较小的值允许更稀疏的基更新但可能导致数值误差累积。 Tol_Scale_Max (实数): 缩放因子上界。防止病态约束类型导致的过大或过小缩放因子。 Tol_Scale_Min (实数): 缩放因子下界。从值和一阶导数计算的缩放因子投影到此范围。默认值 1 意味着小值不会被放大。 Tol_Scale_Var (实数): 缩放时 x*Jac 中 x 的下界。 Tol_Zero (实数): 雅可比元素和求逆结果的零过滤器。小于此值的中间结果设为零。 Trace_MinStep (实数): 使用 TraceCNS 时重反演之间的最小步长。如果跟踪变量或目标的变化在连续两次重反演之间小于此容差,则停止优化并显示收敛缓慢消息。
在线留言尊敬的客户朋友,如您有任何意见建议,请通过下表反馈给我们,我们会尽快与您联系。
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||