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)

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

参数:
gtol浮点数,可选

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

xtol浮点数,可选

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

barrier_tol浮点数,可选

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

sparse_jacobian{布尔值,None},可选

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

initial_tr_radius: 浮点数,可选

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

initial_constr_penalty浮点数,可选

初始约束惩罚参数。惩罚参数用于平衡减少目标函数和满足约束的要求。它用于定义价值函数: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: 浮点数,可选

初始障碍参数和障碍子问题的初始容差。两者仅在存在不等式约束时使用。为了处理受不等式约束 c(x) <= 0 约束的优化问题 min_x f(x),算法引入松弛变量,求解问题 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_method字符串或 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 或类似数组,可选

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

maxiter整数,可选

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

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

算法的详细级别

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

  • 1:显示终止报告。

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

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

disp布尔值,可选

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

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

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

xndarray,形状 (n,)

找到的解。

optimality浮点数

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

constr_violation浮点数

解处最大约束违反。

fun浮点数

解处的目标函数。

gradndarray,形状 (n,)

解处的目标函数的梯度。

lagrangian_gradndarray,形状 (n,)

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

nit整数

总迭代次数。

nfev整数

目标函数求值的次数。

njev整数

目标函数梯度求值的次数。

nhev整数

目标函数 Hessian 矩阵求值的次数。

cg_niter整数

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

method{‘equality_constrained_sqp’, ‘tr_interior_point’}

使用的优化方法。

constrndarray 列表

解处的约束值列表。

jac{ndarray,稀疏矩阵} 列表

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

vndarray 列表

解处约束的拉格朗日乘数列表。对于不等式约束,正乘数表示上限是活动的,负乘数表示下限是活动的,如果乘数为零,则表示约束不活动。

constr_nfev整数列表

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

constr_njevint 列表

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

constr_nhevint 列表

每个约束的黑塞矩阵评估次数。

tr_radius浮点数

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

constr_penalty浮点数

最后一次迭代的惩罚参数,参见 initial_constr_penalty

barrier_tolerance浮点数

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

barrier_parameter浮点数

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

execution_time浮点数

总执行时间。

message字符串

终止消息。

status{0, 1, 2, 3, 4}

终止状态

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

  • 1:满足 gtol 终止条件。

  • 2:满足 xtol 终止条件。

  • 3:callback 函数请求终止。

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

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

cg_stop_cond整数

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

  • 0:未评估 CG 子问题。

  • 1:达到迭代限制。

  • 2:到达信赖域边界。

  • 3:检测到负曲率。

  • 4:满足容差。

参考文献

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

Conn, A. R., Gould, N. I., & Toint, P. L. 信赖域方法. 2000. Siam. pp. 19.