最小化(方法='trust-constr')#

scipy.optimize.minimize(fun, x0, args=(), method=None, jac=None, hess=None, hessp=None, bounds=None, constraints=(), tol=None, callback=None, options=None)

在服从约束的情况下最小化标量函数。

参数:
gtol浮点数,可选

拉格朗日梯度的范数终止容差。当拉格朗日梯度的无穷范数(即最大绝对值)和约束违规都小于 gtol 时,算法将终止。默认值是 1e-8。

xtolfloat,可选

独立变量变化终止容差。当 tr_radius < xtol 时,算法将终止,其中 tr_radius 是算法中使用的信任区域的半径。默认值是 1e-8。

barrier_tolfloat,可选

算法终止的屏障参数阈值。当存在不等式约束时,仅在屏障参数小于 barrier_tol 时,算法才会终止。默认值是 1e-8。

sparse_jacobian{bool,None},可选

确定如何表示约束的雅可比矩阵。如果布尔值,则所有约束的雅可比矩阵将转换为相应格式。如果为无(默认值),那么雅可比矩阵将不会被转换,但前提是它们都具有相同的格式。

initial_tr_radius: float,可选

初始信任半径。信任半径给出了连续迭代中解点之间的最大距离。它反映了算法对优化问题的局部近似的信任。对于准确的局部近似,信任半径应较大,而对于仅在靠近当前点处的近似,信任半径应较小。信任半径会在优化过程中自动更新,而 initial_tr_radius 是其初始值。默认值为 1([1],第 19 页推荐)。

initial_constr_penaltyfloat,可选

初始约束惩罚参数。惩罚参数用于平衡降低目标函数和满足约束的要求。它用于定义优化函数: merit_function(x) = fun(x) + constr_penalty * constr_norm_l2(x),其中 constr_norm_l2(x) 是包含所有约束的向量的 l2 范数。优化函数用于接受或拒绝试探点,而 constr_penalty 加权减少目标函数和约束的两个冲突目标。惩罚将在优化过程中自动更新,而 initial_constr_penalty 是其初始值。默认值为 1([1],第 19 页推荐)。

initial_barrier_parameter,initial_barrier_tolerance: float,可选

初始障碍参数和障碍子问题的初始容差。两者只用于存在不等式约束时。为了处理优化问题 min_x f(x) 需满足不等式约束 c(x) <= 0,算法引入松弛变量,从而解决问题 min_(x,s) f(x) + barrier_parameter*sum(ln(s)),其中等式约束 c(x) + s = 0 用于解决原始问题。针对 barrier_parameter 减小值以及终止容差减小值求解该子问题,其起始点为障碍参数的 initial_barrier_parameter 和障碍容差的 initial_barrier_tolerance。默认值为 0.1(在 [1] 第 19 页中推荐)。还需要注意,barrier_parameterbarrier_tolerance 用相同的乘法因数更新。

factorization_methodstring 或 None,可选

对约束条件的雅各比行列式进行因式分解的方法。使用 None(默认值)来自动选择或以下之一:

  • ‘NormalEquation’(需要 scikit-sparse)

  • ‘AugmentedSystem’

  • ‘QRFactorization’

  • ‘SVDFactorization’

‘NormalEquation’ 和 ‘AugmentedSystem’ 方法只能与稀疏约束一起使用。算法要求的投影将分别使用 [1] 中介绍的常态方程和增广系统方法计算。‘NormalEquation’ 计算 A A.T 的 Cholesky 因式分解,‘AugmentedSystem’ 执行增广系统的 LU 因式分解。它们通常会提供类似的结果。对于稀疏矩阵,默认情况下使用 ‘AugmentedSystem’。

‘QRFactorization’ 和 ‘SVDFactorization’ 方法只能与稠密约束一起使用。它们使用 QR 和 SVD 因式分解分别计算所需的投影。‘SVDFactorization’ 方法可以处理具有不足行秩的雅可比矩阵,并在其他因子分解方法失败时使用(可能需要根据需要将稀疏矩阵转换为稠密格式)。默认情况下,对于稠密矩阵使用 ‘QRFactorization’。

finite_diff_rel_stepNone 或类数组,可选

有限差分近似的相对步长。

maxiterint,可选

算法迭代的最大次数。默认值为 1000。

verbose{0, 1, 2},可选

算法冗余的级别

  • 0(默认):静默执行。

  • 1:显示终止报告。

  • 2:在迭代过程中显示进度。

  • 3:在迭代过程中显示进度(更多完成报告)。

disp布尔值,可选

如果为 True(默认),则当 verbose 为 0 时将其设置为 1。

返回值:
OptimizeResult,具有下面记录的字段。注意以下内容
  1. 传递给求解器的所有约束对应值按其传递次序排列。并且 bounds 约束对应的值放置在其他约束之后

  2. 函数、雅可比或近芬变换的评估次数都对应实际 Python 函数调用的次数。例如,如果雅可比通过有限差分来估计,则雅可比评估次数将为零,并且在有限差分估计中函数评估次数将增加所有调用的次数。

xndarray,形状 (n,)

已获得解决方案。

optimalityfloat

解决方案处拉格朗日梯度的无限范数。

constr_violationfloat

解决方案处最大约束违规。

funfloat

解决方案处的目标函数。

gradndarray,形状 (n,)

解决方案处目标函数的梯度。

lagrangian_gradndarray,形状 (n,)

解决方案处拉格朗日函数的梯度。

nitint

迭代的总次数。

nfev整数

目标函数评估次数。

njev整数

目标函数梯度评估次数。

nhev整数

目标函数近芬变换评估次数。

cg_niterint

共轭梯度法迭代的总次数。

method{'equality_constrained_sqp', 'tr_interior_point'}

使用的优化方法。

constrndarray 列表

解决方案处的约束值列表。

jac{ndarray, 稀疏矩阵} 列表

解决方案处约束的雅可比矩阵列表。

vndarray 列表

解决方案处约束的拉格朗日乘数列表。对于不等式约束,正乘数表示上界有效,负乘数表示下界有效,如果乘数为零,則表示约束无效。

constr_nfevint 列表

每个约束的约束评估次数。

constr_njevint 列表

各个约束的雅可比矩阵评估数。

constr_nhevint 列表

各个约束的 Hessian 评估数。

tr_radiusfloat

最后一次迭代时的置信域半径。

constr_penaltyfloat

最后一次迭代时的惩罚参数,请参阅 initial_constr_penalty

barrier_tolerancefloat

最后一次迭代时障碍子问题的容差度。仅适用于带有不等式约束的问题。

barrier_parameterfloat

最后一次迭代时的障碍参数。仅适用于带有不等式约束的问题。

execution_timefloat

总执行时间。

messagestr

终止消息。

status{0, 1, 2, 3}

终止状态

  • 0:超过了函数评估的最大次数。

  • 1:满足了 gtol 终止条件。

  • 2:满足了 xtol 终止条件。

  • 3:callback 函数请求终止。

cg_stop_condint

最后一次迭代时 CG 子问题终止的原因

  • 0:未评估 CG 子问题。

  • 1:达到迭代限制。

  • 2:达到置信域边界。

  • 3:检测到负曲率。

  • 4:满足了容差度。

参考资料

[1] (1,2,3,4)

Conn, A. R., Gould, N. I., & Toint, P. L. Trust region methods. 2000. Siam. pp. 19.