浅介绍python中minimize非线性规划用法

  在数学建模中,对于编程软件的使用通常有python和matlab两种常使用的软件,对于非线性规划问题需要求极值的时候在matlab中有简单函数fmincon可以快速求解,但是python中似乎寻找不到一个方便的函数,同时笔者发现,网上对于minimize的中文介绍不多,因此笔者尝试浅介绍minimize用法。
minimize是scipy中optimize模块的一个函数,调用方式为
from scipy.optimize import minimize
minimize的声明如下
def minimize(fun, x0, args=(), method=None, jac=None, hess=None,
             hessp=None, bounds=None, constraints=(), tol=None,
             callback=None, options=None):

fun:是需要求的最小值的函数,调用时只需要传名字

x0:是猜测的最小值,优先从x0附近开始寻找

上面两个是必选,下面介绍可选参数

args=( ) , 括号内传的是fun里的参数。

比如求函数x方+y方+1的最小值

from scipy.optimize import minimize
import numpy as np
def min(x, a):
    return x[0] ** 2 + x[1] ** 2 +a
x0 = np.array([1,1])
result = minimize(min, x0, args= (1))#arg = (1) 便是传入min(x, a)参数a的值
print(result)
bound = ((0,1),(0,1))#两个自变量的范围为0-1
method 默认是None

constraints = {‘type’: ‘ineq’, ‘fun’: constraint_function}#约束条件写法,下文详细解释

可选:Nelder-Mead,Powell,CG,BFGS,Newton-CG,L-BFGS-B,TNC,COBYLA,SLSQP,trust-constr,dogleg,trust-ncg,trust-exact,trust-krylov 等选项,一般不要求的情况下可以之间不管

(1)Nelder-Mead:是一个直接搜索方法,适用于一般性的无导数优化问题。它在计算简单、目标函数没有明显的局部极小值或鞍点时效果不错。

(2)Powell:是一种迭代法,用于无约束多维优化问题。它结合了线性搜索和拟牛顿法的特点,适用于目标函数没有梯度信息的情况。

(3)BFGS : 是一种拟牛顿法,用于解决一般性的多维优化问题。它适用于目标函数具有梯度信息的情况。

(4)L-BFGS-B:限制性 BFGS (L-BFGS) 方法的变种,适用于具有约束的优化问题。它使用有限内存存储逆 Hessian近似,适合高维问题。

(5)TNC: 适用于带有约束和无约束的优化问题。它在具有大量约束时效果良好。

(6)COBYLA :适用于带有约束的优化问题,尤其适用于没有梯度信息的问题。

(7)SLSQP :适用于带有约束的优化问题,支持线性和非线性约束。

(8)trust-constr :信任域约束优化方法,适用于带有约束的优化问题,支持线性和非线性约束,支持多

  1.      jac(x, *args) -> array_like,形状为 (n,)  其中 x 是形状为 (n,) 的数组,args 是包含固定参数的元组。如果 jac 是布尔型且为 True,则假定 fun 返回一个元组 (f, g),其中 f 是目标函数,g 是梯度。’Newton-CG’、’trust-ncg’、’dogleg’、’trust-exact’ 和 ‘trust-krylov’ 方法要求提供可调用对象,或者 fun 返回目标和梯度。如果为 None 或 False,则梯度将使用绝对步长进行 2 点有限差分估计。或者,关键字 {‘2-point’、‘3-point’、‘cs’} 可用于选择数值梯度估计的有限差分方案,使用相对步长。这些有限差分方案遵守任何指定的界限。
  2. hess:计算 Hessian 矩阵的方法。仅适用于 Newton-CG、dogleg、trust-ncg、trust-krylov、trust-exact 和 trust-constr。如果是可调用的,它应该返回 Hessian 矩阵: hess(x, *args) -> {LinearOperator, spmatrix, array},形状为 (n, n) 其中 x 是形状为 (n,) 的 ndarray,args 是包含固定参数的元组。也可以使用关键字 {‘2-point’、‘3-point’、‘cs’} 来选择数值 Hessian 估计的有限差分方案。或者,实现 HessianUpdateStrategy 接口的对象可以用于近似 Hessian。实现此接口的可用拟牛顿方法有: BFGS; SR1。
  3.  hessp:目标函数 Hessian 矩阵乘以任意向量 p。仅适用于 Newton-CG、trust-ncg、trust-krylov、trust-constr。hessp 和 hess 二者中只需要给出一个。如果提供了 hess,则将忽略 hessp。hessp 必须计算 Hessian 乘以任意向量:
  4.   hessp(x, p, *args) -> ndarray 形状为 (n,) ,其中 x 是形状为 (n,) 的 ndarray,p 是具有维度 (n,) 的任意向量,args 是包含固定参数的元组。
  5.  bounds:Nelder-Mead、L-BFGS-B、TNC、SLSQP、Powell、trust-constr 和 COBYLA 方法的变量界限。有两种指定界限的方法:
  6. Bounds 类的实例。对于 x 中的每个元素,使用 (min, max) 对的序列。使用 None 表示无界限。
  7. constraints:约束定义。仅适用于 COBYLA、SLSQP 和 trust-constr。
  8. 对于 ‘trust-constr’,约束被定义为单个对象或指定约束的对象列表。可用约束有:LinearConstraint  NonlinearConstraint
  9. 对于 COBYLA、SLSQP,约束被定义为一个字典列表。每个字典包含字段: type:str,约束类型:’eq’ 表示等式约束,’ineq’ 表示不等式约束。 fun:callable,定义约束的函数。  jac:callable,fun 的雅可比矩阵(仅适用于 SLSQP)。 args:序列,传递给函数和雅可比矩阵的额外参数。  相等约束意味着约束函数结果应为零,而不等式约束意味着它应为非负。注意,COBYLA 仅支持不等式约束。
  10.  tol:float,终止容差。当指定了 tol 时,所选的最小化算法会将某些相关的特定于求解器的容差设置为 tol。对于详细的控制,请使用特定于求解器的选项。
  11. options:求解器选项的字典。除 TNC 外,所有方法都接受以下通用选项:
  12. maxiter:int,执行的最大迭代次数。每次迭代可能使用多次函数评估,具体取决于方法。
  13. disp:bool,设置为 True 以打印收敛消息。
  14. callback:在每次迭代后调用的可调用对象。
  15. 所有方法除 TNC、SLSQP 和 COBYLA 外都支持具有以下签名的可调用对象:callback(OptimizeResult: intermediate_result)
  16.  其中 intermediate_result 是一个关键字参数,包含 OptimizeResult,其中包含参数向量和目标函数的当前值。注意,参数的名称必须为 intermediate_result,以便将 OptimizeResult 传递给回调函数。如果回调函数引发 StopIteration,则这些方法也将终止。
  17. 所有方法除 trust-constr 之外还支持如下签名:
  18. callback(xk)

版权声明:本文为博主作者:m0_74270467原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/m0_74270467/article/details/132178621

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2024年4月16日
下一篇 2024年4月16日

相关推荐