minimize(method=’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)

在约束条件下最小化标量函数。

参数:
gtolfloat, 可选

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

xtolfloat, 可选

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

barrier_tolfloat, 可选

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

sparse_jacobian{bool, None}, 可选

确定如何表示约束的雅可比矩阵。如果为布尔值,则所有约束的雅可比矩阵将被转换为相应的格式。如果为 None (默认),则雅可比矩阵不会被转换,但算法仅在它们都具有相同格式时才能继续。

initial_tr_radius: float, 可选

初始信赖域半径。信赖域半径表示连续迭代中解点之间的最大距离。它反映了算法对优化问题局部近似的信任程度。对于精确的局部近似,信赖域应较大;而对于仅在当前点附近有效的近似,则应较小。信赖域在整个优化过程中自动更新,其中initial_tr_radius是其初始值。默认为 1 (在[1],p. 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],p. 19 中推荐)。

initial_barrier_parameter, initial_barrier_tolerance: float, 可选

障碍子问题的初始障碍参数和初始容差。两者仅在存在不等式约束时使用。为了处理受不等式约束c(x) <= 0的优化问题min_x f(x),算法引入松弛变量,转而求解受等式约束c(x) + s = 0的问题min_(x,s) f(x) + barrier_parameter*sum(ln(s))。该子问题通过减小barrier_parameter的值和减小终止容差来求解,障碍参数从initial_barrier_parameter开始,障碍容差从initial_barrier_tolerance开始。两个值的默认值均为 0.1 (在[1],p. 19 中推荐)。另请注意,barrier_parameterbarrier_tolerance以相同的预因子更新。

factorization_methodstring or 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 or array_like, 可选

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

maxiterint, 可选

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

verbose{0, 1, 2, 3}, 可选

算法的详细程度级别

  • 0 (默认) : 静默工作。

  • 1 : 显示终止报告。

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

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

dispbool, 可选

如果为 True (默认),则如果verbose为 0,它将被设置为 1。

workersint, map-like callable, 可选

一个类 map 的可调用对象,例如multiprocessing.Pool.map,用于并行评估任何数值微分。此评估以workers(fun, iterable)的形式执行。

1.16.0 版新增。

返回:
OptimizeResult,包含以下文档中的字段。请注意以下几点:
  1. 所有与约束对应的值都按照传递给求解器的顺序排列。并且与bounds约束对应的值放在其他约束之后

  2. 所有函数、雅可比或 Hessian 评估的次数都对应于实际 Python 函数调用的次数。这意味着,例如,如果雅可比矩阵通过有限差分估计,则雅可比评估次数将为零,而函数评估次数将因有限差分估计期间的所有调用而增加。

xndarray, 形状 (n,)

找到的解。

optimalityfloat

解处拉格朗日梯度的无穷范数。

constr_violationfloat

解处最大约束违反。

funfloat

解处的目标函数值。

gradndarray, 形状 (n,)

解处目标函数的梯度。

lagrangian_gradndarray, 形状 (n,)

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

nitint

总迭代次数。

nfevinteger

目标函数评估次数。

njevinteger

目标函数梯度评估次数。

nhevinteger

目标函数 Hessian 评估次数。

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, 4}

终止状态

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

  • 1 : 满足gtol终止条件。

  • 2 : 满足xtol终止条件。

  • 3 : callback函数请求终止。

  • 4 : 约束违反超过 ‘gtol’。

1.15.0 版中更改: 如果约束违反超过gtol,则result.success现在将为 False。

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.