1. 非线性规划 求解局部最优

首先展示一个最简单的示例:

from scipy.optimize import minimizedef fun_convex(x):return (x - 1) ** 2 + 3minimize(fun=fun_convex, x0=0, bounds=[(-10,10)])

scipy.optimize.minimize(fun, x0, args=(), method=None, jac=None, hess=None, hessp=None, bounds=None, constraints=(), tol=None, callback=None, options=None)fun: 求最小值的目标函数
x0: 变量的初始猜测值,如果有多个变量,需要给每个变量一个初始猜测值
args: 常数值,fun中的可变常量
method: 求极值的方法,官方文档给了很多种。一般使用默认
constraints: 约束条件,针对fun中为参数的部分进行约束限制

scipy.optimize.minimizel 官方说明文档
通过scipy.optimize.minimize,我们可以很轻松的求解凸函数的局部最优的数值解,这里有几个注意点:
①求解函数为非凸函数时,所求结果为局部最优
②求解函数为凸函数时,所求结果为最小值
③所求皆为数值解而不是理论解

下面展示一个非凸函数的示例:

from scipy.optimize import minimizedef fun_nonconvex(x): if x<0:return ( x + 2 ) ** 2 + 1else:return ( x - 2 ) ** 2 + 2minimize(fun=fun_nonconvex, x0=0, bounds=[(-10,10)])


我们可以发现,所求的x=2并非为全局最优解(应该是x=-2)而是局部最优解,所求结果与设置的初值x0有很大关系。

2. 求解全局最优

通过以上内容我们可以发现,scipy.optimize.minimize只能求解局部最优解,那么我们该如何求解全局最优呢?本文介绍scipy.optimize的3种方法:
brute():网格搜索优化,属于暴力全局优化。 brute官方说明文档
differential_evolution():差分进化本质上是随机的(不使用梯度方法)来寻找最小值,并且可以搜索大面积的候选空间,但通常需要比传统的基于梯度的技术更多的函数评估。 differential_evolution官方说明文档
basinhopping():Basin-hopping 是一种two-phase 方法,它将全局步进算法与每一步的局部最小相结合,会在每次随机跳跃后使用局部松弛,旨在模拟原子簇能量最小化的自然过程。 basinhopping官方说明文档

使用蛮力的brute()就不深入探讨,接下来给出differential_evolution()basinhopping()的简单例程:

from scipy.optimize import differential_evolution, basinhoppingdef fun_nonconvex(x): if x<0:return ( x + 2 ) ** 2 + 1else:return ( x - 2 ) ** 2 + 2res_differential_evolution = differential_evolution(func=fun_nonconvex, bounds=[(-10,10)])
print('differential_evolution()的结果为:\n', res_differential_evolution)res_basinhopping = basinhopping(func=fun_nonconvex, x0=0, niter=1000)
print('\n basinhopping()的结果为:\n', res_basinhopping)

这两种方法均可以求得全局最优解:

python scipy.optimize 非线性规划 求解局部最优和全局最优相关推荐

  1. 使用python scipy.optimize linprog和lingo线性规划求解最大值,最小值(运筹学学习笔记)

    1. 线性模型 2. 使用python scipy.optimize linprog求解模型最优解: 在这里我们用到scipy中的linprog进行求解,linprog的用法见https://docs ...

  2. python scipy.optimize.minimize多变量多参数优化

    python scipy.optimize.minimize多变量多参数优化 x是一维变量,无超参数 x是二维变量,无超参数,带bounds x是二维变量,有一个超参数,带bounds x是二维变量, ...

  3. 面试题:说下局部最优和全局最优的区别

    更多面试题关注"机器学习算法面试"有劳动下手指啦 问题背景 在优化的世界里,总避免不了的接触全局最优和局部最优的概念,那么这两者的区别是什么呢? 问题解答 全局最优:针对一定条件/ ...

  4. 利用scipy.optimize.minimize()求解有约束、非线性规划问题

    ''' scipy.optimize.minimize(目标函数obj,初始点,constraints=cons,bounds=bd)此函数有很多参数,这里介绍主要参数 obj:目标函数,最小值形式, ...

  5. python scipy.optimize least_squares实现最小二乘法

    Least-squares minimization (least_squares) The code below implements least-squares estimation of and ...

  6. python 曲线拟合(numpy.polyfit、scipy.optimize.curve_fit)

    小白的学习笔记,欢迎各位大神批评指正. python 曲线拟合 (一次二次比较简单,直接使用numpy中的函数即可,来自 <https://blog.csdn.net/yefengzhichen ...

  7. 全局最优和局部最优 世俗理解以及原理解释

    引言 今天逛知乎看到这样一个问题和回答,让我瞬间理解局部最优和全局最优 在诸如算法导论等书是这样解释的:全局最优是在全局选取一个最佳值,而局部最优是在某一部分选取一个最佳值.每一部分都选取最佳值(即局 ...

  8. [机缘参悟-99] :关于局部最优与全局最优解的人生感悟

    在没有获取全局信息之前,要获得全局最优解几乎是不可能的,最多是概率大一点而已,大多数时候,由于时空资源的限制,获得往往是局部最优解,局部最优解,放在全局,往往并非全局最优,甚至可能是错误解,错误率的大 ...

  9. python解非线性规划问题讲析_python中线性规划中的单纯形法、scipy库与非线性规划求解问题...

    单纯形法.scipy库与非线性规划求解问题 单纯形法的基本定义 大M法求解线性规划的原理 excel求解 Python调用optimize包和scipy求解线性规划 Python编程实现单纯形法 对比 ...

最新文章

  1. DOM中的onbeforeunload函数
  2. Java操作XML文件 dom4j 篇【转】
  3. MySQL命令行导出数据库
  4. android wear 同步应用,Android Wear发布 突出语音及同步功能
  5. 在虚拟机中安装Windows XP
  6. apollo学习之:如何测试canbus模块
  7. MAX30102 模拟IIC读取程序(C语言)
  8. LabVIEW的VISA函数串口数据采集例子——温度采集系统
  9. 计算机主机名与用户名区别
  10. 浅析游戏音乐的风格特点—欧美风
  11. Android studio突然报错Entry name ‘META-INF/androidx.vectordrawable_vectordrawable.version‘ collided的解决办法
  12. Unity 性能优化基础
  13. 兼容并“包”NLP评价指标:Robustness Gym框架
  14. Fibonacci数列通项公式推导
  15. 农行计算机类笔试好过吗,2020中国农业银行招聘笔试要多少分才能进入面试?...
  16. 自动化软件测试 - 利用短信转发器结合Selenium读取短信验证码
  17. 回归预测 | MATLAB实现GWO-BiLSTM灰狼算法优化双向长短期记忆神经网络多输入单输出回归预测
  18. 在linux中删除多级目录,如何使用一个Linux命令删除多个子目录 | MOS86
  19. android中打开查看pdf文件可用mupdf
  20. uniapp 拦截器-未登录跳转到登陆页面

热门文章

  1. 如何判断两条直线是否相交
  2. 什么是集成测试?集成测试方法有哪些?
  3. 2021年,我推荐你学习的编程语言,各类语言横向对比
  4. 分享一些正确的放松方式
  5. ES学习构建EKL海量日志分析平台
  6. 如何做抖音GIF表情包
  7. 绘画教程:动漫角色中男生女生脸部画法
  8. 网易互娱2017实习生招聘游戏研发工程师在线笔试第二场(神奇的数)
  9. OS学习笔记-15(清华大学慕课)处理机调度
  10. Springboot 服务端为App集成支付宝支付