最小化(method=‘Trust-constr’)¶
- scipy.optimize.minimize(fun, x0, args=(), method='trust-constr', hess=None, hessp=None, bounds=None, constraints=(), tol=None, callback=None, options={'grad': None, 'xtol': 1e-08, 'gtol': 1e-08, 'barrier_tol': 1e-08, 'sparse_jacobian': None, 'maxiter': 1000, 'verbose': 0, 'finite_diff_rel_step': None, 'initial_constr_penalty': 1.0, 'initial_tr_radius': 1.0, 'initial_barrier_parameter': 0.1, 'initial_barrier_tolerance': 0.1, 'factorization_method': None, 'disp': False})
最小化受约束的标量函数。
- 参数
- gtol浮动,可选
按拉格朗日梯度范数终止的容差。当拉格朗日梯度的无穷范数(即最大abs值)和约束违反均小于
gtol
。默认值为1e-8。- xtol浮动,可选
因自变量变化而终止的容差。算法将在以下情况下终止
tr_radius < xtol
,在哪里tr_radius
是算法中使用的信任域的半径。默认值为1e-8。- barrier_tol浮动,可选
算法终止的屏障参数阈值。当存在不等式约束时,仅当屏障参数小于时,算法才会终止 barrier_tol 。默认值为1e-8。
- sparse_jacobian{bool,None},可选
确定如何表示约束的雅可比。如果为bool,则所有约束的雅可比都将转换为相应的格式。如果为None(默认值),则不会转换雅可比,但仅当它们都具有相同的格式时,算法才能继续。
- initial_tr_radius: float, optional
初始信任半径。信任半径给出了连续迭代中解点之间的最大距离。它反映了算法对优化问题的局部近似的信任。对于精确的局部近似,信赖域应该很大,而对于仅在当前点附近有效的近似,信赖域应该很小。信任半径在整个优化过程中会自动更新,
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: float, optional
初始屏障参数和屏障子问题的初始容差。这两种方法仅在存在不平等约束时使用。用于处理优化问题
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_parameter
和barrier_tolerance
使用相同的前置因素进行更新。- factorization_method字符串或无,可选
方法来分解约束的雅可比矩阵。对自动选择使用无(默认值)或以下选项之一:
“NormalEquation”(需要SCRICKIT-稀疏)
“AugmentedSystem”
“QR因式分解”
“SVDfactorization”
方法“NormalEquation”和“AugmentedSystem”只能与稀疏约束一起使用。算法所需的投影将分别使用中解释的法方程和增广系统方法来计算。 [1]. “NormalEquation”计算的Cholesky因式分解
A A.T
并且‘AugmentedSystem’执行扩展系统的LU因式分解。它们通常提供类似的结果。“AugmentedSystem”默认用于稀疏矩阵。方法“QRFactorization”和“SVDFactorization”只能与密集约束一起使用。它们分别使用QR和SVD因式分解来计算所需的投影。“SVDfactorization”方法可以处理行秩不足的雅可比矩阵,并将在其他因式分解方法失败时使用(这可能意味着在需要时将稀疏矩阵转换为稠密格式)。默认情况下,“QRFactorization”用于稠密矩阵。
- finite_diff_rel_stepNONE或ARRAY_LIKE,可选
有限差分近似的相对步长。
- maxiter整型,可选
算法迭代的最大次数。默认值为1000。
- verbose{0,1,2},可选
算法的详细程度:
0(默认值):静默工作。
1:显示终止报告。
2:显示迭代过程中的进度。
3:显示迭代过程中的进度(更完整的报告)。
- disp布尔值,可选
如果为True(默认值),则 verbose 如果为0,则将设置为1。
- 退货
- OptimizeResult 字段记录如下。请注意以下事项:
与约束相对应的所有值在传递到求解器时都会进行排序。和对应于 bounds 约束被放置在 之后 其他约束条件。
函数、Jacobian或Hessian求值的所有数量都与实际Python函数调用的数量相对应。这意味着,例如,如果通过有限差分估计雅可比,则雅可比求值的次数将为零,并且函数求值的次数将在有限差分估计期间的所有调用中递增。
- xndarray,形状(n,)
找到解决方案。
- optimality浮动
解的拉格朗日梯度的无穷范数。
- constr_violation浮动
解的最大约束冲突。
- fun浮动
目标函数在解的位置。
- gradndarray,形状(n,)
目标函数在解处的梯度。
- lagrangian_gradndarray,形状(n,)
拉格朗日函数在解处的梯度。
- nit集成
迭代总数。
- nfev整数
目标函数求值的次数。
- njev整数
目标函数梯度求值的次数。
- nhev整数
目标函数Hessian求值的数量。
- cg_niter集成
共轭梯度法迭代的总次数。
- method{‘相等_约束_sqp’,‘TR_INTERNAL_POINT’}
采用最优化方法。
- constrndarray列表
解决方案的约束值列表。
- jac{ndarray,稀疏矩阵}列表
解的约束的雅可比矩阵的列表。
- vndarray列表
解的约束的拉格朗日乘数列表。对于不等式约束,正乘数表示上界是活动的,负乘数表示下界是活动的,如果乘数是零,则表示约束不是活动的。
- constr_nfev整型列表
每个约束的约束求值次数。
- constr_njev整型列表
每个约束的雅可比矩阵求值次数。
- constr_nhev整型列表
每个约束的黑森求值次数。
- tr_radius浮动
上次迭代时信任区域的半径。
- constr_penalty浮动
最后一次迭代的惩罚参数,请参见 initial_constr_penalty 。
- barrier_tolerance浮动
对上一次迭代的屏障子问题的容忍度。仅适用于具有不等式约束的问题。
- barrier_parameter浮动
上次迭代时的屏障参数。仅适用于具有不等式约束的问题。
- execution_time浮动
总执行时间。
- message应力
终止消息。
- status{0,1,2,3}
终止状态:
0:超过函数求值的最大次数。
1: gtol 满足终止条件。
2: xtol 满足终止条件。
3: callback 功能请求终止。
- cg_stop_cond集成
上次迭代终止CG子问题的原因:
0:未评估CG子问题。
1:已达到迭代限制。
2:到达信任区边界。
3:检测到负曲率。
4:耐受性满意。
参考文献