Python中scipy.optimize求解有无约束的最优化算法举例(附代码)

这篇具有很好参考价值的文章主要介绍了Python中scipy.optimize求解有无约束的最优化算法举例(附代码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

算法需要输入的参数

算法输出的优化结果

优化算法应用举例

优化算法举例代码 

优化算法输出结果 

其他优化问题举例


最优化求解问题标准格式如下: 

标准形式如下:
目标函数:minimize f(x) ……

约束条件subject to:
g_i(x) >= 0,  i = 1,...,m

h_j(x)  = 0,  j = 1,...,p

Python中scipy库有很多包,其中一个就是scipy.optimize.minimize求解有无约束的最小化问题。

原文请参考:scipy.optimize.minimizehttps://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.optimize.minimize.html#scipy.optimize.minimize

Python中scipy.optimize.minimize具体参数如下:

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

算法需要输入的参数:

  • fun:可调用的目标函数;
  • x0:函数的初始解,是N 维数组对象ndarray;
  • args:可选,传递给目标函数和其偏导的额外参数,如(雅可比矩阵、海塞矩阵),是元组;
  • method : 可选,求解问题的方法,应该是如下表格中的其中一个。如果不指定,根据约束条件和取值范围默认选择BFGS, L-BFGS-B, SLSQP方法;
最优化求解方法
求解方法 解释
Nelder-Mead 求解非线性、导函数未知的最值问题
Powell 鲍威尔共轭方向法
CG 共轭梯度法
BFGS 变尺度法、拟牛顿方向法
Newton-CG 牛顿-共轭方向法
L-BFGS-B 改进的BFGS法
TNC 截断牛顿法

COBYLA
线性逼近法
SLSQP 序列最小二乘法
dogleg 信赖域算法(狗腿法)
trust-ncg 信赖域的牛顿共轭梯度法
  • jac:可选目标函数的雅可比矩阵(目标函数的一阶偏导)。这些方法会用到: CG, BFGS, Newton-CG, L-BFGS-B, TNC, SLSQP, dogleg, trust-ncg;
  • hess, hessp : 可选,海塞矩阵(目标函数的二阶偏导),这些方法会用到Newton-CG, dogleg, trust-ncg;
  • bounds:可选,变量约束,这些方法会用到:L-BFGS-B, TNC and SLSQP
  • constraints:可选,约束条件,字典或序列类型,每个约束有以下三个关键字:
type : str
Constraint type: '='号约束:'eq' ,'>='号约束:'ineq'.
COBYLA算法仅支持ineq

fun : callable
定义条件的函数

jac : callable, optional
约束条件的梯度函数(only for SLSQP).

args : sequence, optional
传递给目标函数或雅可比矩阵的额外的参数
  • tol : 可选,float型,终止条件的忍耐度,可以理解为精度。
  • options :可选,字典类型,算法的其他选项。具体如下:
maxiter : int
算法的最大迭代次数

disp : bool
disp=True时打印收敛信息

算法输出的优化结果:

  • res : OptimizeResult
具体信息如下:(看下后面的代码例子会懂)
x the solution array, success a Boolean flag indicating if the optimizer 
exited successfully and message which describes the cause of the termination. 

优化算法应用举例:

最小化问题,含有等式目标约束:

scipy.optimize,python

优化算法举例代码: 

import numpy as np
from scipy.optimize import minimize

# 定义目标函数
def func(x, sign=1.0):
    # scipy.minimize默认求最小,求max时只需要sign*(-1),跟下面的args对应
    return sign * (x[0] ** 2 + x[1] ** 2 + x[2] ** 2)
    # return sign * (np.power(x[0], 2) + np.power(x[1], 2) + np.power(x[2], 2))

# 定义目标函数的梯度
def func_deriv(x, sign=1):
    jac_x0 = sign * (2 * x[0])
    jac_x1 = sign * (2 * x[1])
    jac_x2 = sign * (2 * x[2])
    return np.array([jac_x0, jac_x1, jac_x2])

# 定义约束条件
# constraints are defined as a sequence of dictionaries, with keys type, fun and jac.
cons = (
    {'type': 'eq',
     'fun': lambda x: np.array([x[0] + 2 * x[1] - x[2] - 4]),
     'jac': lambda x: np.array([1, 2, -1])},

    {'type': 'eq',
     'fun': lambda x: np.array([x[0] - x[1] - x[2] + 2]),
     'jac': lambda x: np.array([1, -1, -1])}
    )

# 定义初始解x0
x0 = np.array([-1.0, 1.0, 1.0])

# 使用SLSQP算法求解
res = minimize(func, x0 , args=(1,), jac=func_deriv, method='SLSQP', options={'disp': True},constraints=cons)
# args是传递给目标函数和偏导的参数,此例中为1,求min问题。args=-1时是求解max问题
print(res.x) 

优化算法输出结果: 

Optimization terminated successfully.    (Exit mode 0)
            Current function value: 4.000000000000002
            Iterations: 2
            Function evaluations: 2
            Gradient evaluations: 2
[-2.22044605e-16  2.00000000e+00 -6.66133815e-16]

即函数输出最优值为:4.00,最优解为[0,2,0]。

其他优化问题举例

Optimization (scipy.optimize)https://docs.scipy.org/doc/scipy-0.18.1/reference/tutorial/optimize.html#constrained-minimization-of-multivariate-scalar-functions-minimize文章来源地址https://www.toymoban.com/news/detail-706572.html

到了这里,关于Python中scipy.optimize求解有无约束的最优化算法举例(附代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【scipy 基础】--最优化

    SciPy 库的 optimize 模块主要用于执行各种优化任务。 优化 是寻找特定函数的最小值或最大值的过程,通常用于机器学习、数据分析、工程和其他领域。 scipy.optimize 提供了多种优化算法,包括梯度下降法、牛顿法、最小二乘法等,可以解决各种复杂的优化问题。 该模块还包含

    2024年02月05日
    浏览(45)
  • 无约束最优化方法

    求解无约束最优化的基本思路 给定初始点 x 0 ∈ R n , k = 0 x_0in mathbb{R}^n,k=0 x 0 ​ ∈ R n , k = 0 判断当前解是否满足终止准则,若满足则停止迭代,若不满足则转3. 确定 f ( x ) f(x) f ( x ) 在 x k x_k x k ​ 点的下降方向 确定步长 λ k lambda_k λ k ​ ,使 f ( x k + λ k d k ) f(x_k+lambda_

    2023年04月08日
    浏览(102)
  • 【人工智能的数学基础】多目标优化的帕累托最优(Pareto Optimality)

    寻找多目标优化问题的帕累托最优解. paper:

    2024年02月07日
    浏览(40)
  • 非线性最优化问题求解器Ipopt介绍

    Ipopt(Interior Point OPTimizer) 是求解大规模非线性最优化问题的求解软件。可以求解如下形式的最优化问题的(局部)最优解。 m i n ⏟ x ∈ R n     f ( x ) s . t . g L ≤ g ( x ) ≤ g U x L ≤ x ≤ x U (0) underbrace{min}_ {x in Rⁿ} , , , f(x) \\\\ s.t. g_L ≤ g(x) ≤ g_U \\\\ x_L ≤ x ≤ x_U tag{0} x ∈ R

    2024年01月20日
    浏览(56)
  • MATLAB 之 非线性方程数值求解、最优化问题求解和常微分方程初值问题的数值求解

    非线性方程的求根方法很多,常用的有牛顿迭代法,但该方法需要求原方程的导数,而在实际运算中这一条件有时 是不能满足的,所以又出现了弦截法、二分法等其他方法。 在 MATLAB 中,非线性方程的求解和最优化问题往往需要调用最优化工具箱来解决。优化工具箱提供了一

    2024年02月08日
    浏览(56)
  • 机器学习笔记之最优化理论与方法(十)无约束优化问题——共轭梯度法背景介绍

    本节将介绍 共轭梯度法 ,并重点介绍共轭方向法的逻辑与几何意义。 关于 最小化 二次目标函数: min ⁡ f ( x ) = min ⁡ 1 2 x T Q x + C T x begin{aligned}min f(x) = min frac{1}{2} x^T mathcal Q x + mathcal C^T xend{aligned} min f ( x ) = min 2 1 ​ x T Q x + C T x ​ ,其中 Q ∈ R n × n ; Q ≻ 0 mathcal Q

    2024年02月09日
    浏览(47)
  • 25.9 matlab里面的10中优化方法介绍—— 惩罚函数法求约束最优化问题(matlab程序)

    1. 简述          一、算法原理 1、问题引入 之前我们了解过的算法大部分都是无约束优化问题,其算法有:黄金分割法,牛顿法,拟牛顿法,共轭梯度法,单纯性法等。但在实际工程问题中,大多数优化问题都属于有约束优化问题。惩罚函数法就可以将约束优化问题转化为

    2024年02月15日
    浏览(36)
  • scipy求解约束无导数优化问题:SHGO算法

    SHGO,即simplicial homology global optimize,来自2018年的文章,是一种基于组合拓扑学的优化方法,是一个非常新的算法。 这种算法适用于CDFO(constrained deriviate free optimisation)问题,所谓无导数优化,就是把目标函数当作黑箱子处理,而无法获取其一阶导数,自然也不能通过导数来判

    2024年02月14日
    浏览(49)
  • 最优化方法Python计算:一元函数导数计算

    定义1 给定连续函数 f ( x ) f(x) f ( x ) , x ∈ Ω ⊆ R xinOmegasubseteqtext{ℝ} x ∈ Ω ⊆ R 。设 x , x 1 ∈ Ω x,x_1inOmega x , x 1 ​ ∈ Ω , Δ x = x − x 1 Delta x=x-x_1 Δ x = x − x 1 ​ 称为变量 x x x 的 差分 。此时, x = x 1 + Δ x x=x_1+Delta x x = x 1 ​ + Δ x 。称 f ( x 1 + Δ x ) − f ( x 1 ) Δ x

    2023年04月23日
    浏览(57)
  • 最优化方法Python计算:解一元方程

    我们知道,若 f ( x ) f(x) f ( x ) 在 R text{ℝ} R 上连续,则 f ( x ) f(x) f ( x ) 有原函数 F ( x ) , x ∈ R F(x),xintext{ℝ} F ( x ) , x ∈ R 。因此,解方程 f ( x ) = 0 f(x)=0 f ( x ) = 0 ,等价于计算 F ( x ) F(x) F ( x ) 的局部最小(大)值。譬如,设 f ( x ) f(x) f ( x ) 在 [ a 0 , b 0 ] [a_0,b_0] [ a 0 ​

    2024年02月13日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包