文档url:https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.optimize.minimize.html

本文还是对scipy官方文档的翻译及解释(毕竟文档写的那么好),使用的函数为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)

下面我就简单地介绍几个重要参数

fun:不用想了,就是优化的目标函数;

x0:非线性优化问题的求解并不是用解析的方法进行的,而是从初始值开始进行迭代,x0就是猜测的初始值,在很大程度上决定了算法的效果。另外要注意,如果是多元函数,那么就要将x0视为一个向量,每一个分量都要单独赋值;

args:可选项,如果目标函数有可设定的参数,可以用这种方式传递进去;

method:选用的优化算法,有12种可选项,比较常用的为SLSQP(Sequential Least Squares Programming),算法种类很多,这里也不详细说了(其实是我自己也不怎么清楚,乱讲怕坑人);有博客已经详细讲了一部分,第一部分的链接:https://blog.csdn.net/zhoudi2010/article/details/54584495

但是看发表时间,2017年就没再更新过,应该是早就鸽了......不过写的部分内容还是挺不错的。

bounds:用法和linprog里面的完全一样,可以参考我的上一篇博客;

constraints:优化的约束条件,输入为字典组成的元组,字典主要由'type'和'fun'组成,type可选'eq'和'ineq',分别是等式约束和不等式约束,fun理所当然就是对应的约束条件,可以为lambda函数。例如,约束x0大于min的字典可以这样写:{'type': 'ineq', 'fun': lambda x: x[0] - min}(x为输入的数组,x[0]为第一个元素)可选的还有jac和args,在此就不展开说了。

tol:设定默认的误差阈值,低于阈值就会停止迭代,一般而言设定的越小越精确,很多优化算法都会有这一设定项。

官方文档里给出了一些示例,比如无约束优化:

>>> from scipy.optimize import minimize, rosen, rosen_der

>>> x0 = [1.3, 0.7, 0.8, 1.9, 1.2]

>>> res = minimize(rosen, x0, method='Nelder-Mead', tol=1e-6)

>>> res.x

array([ 1., 1., 1., 1., 1.])

这个例子里用到了resen函数,也就是Rosenbrock函数,经常被用来测试最优化算法的性能,当自变量为二维时,在三维空间里绘出函数图像为:

(图片来自wikipedia)

不过这不是本文要讨论的重点,总而言之此处的参数rosen就是一个函数,和自己def的没有本质区别,使用方法也是一样的。

然后输出结果就是优化得出的解。

有约束的规划文档中也给出了例子:

>>> from scipy.optimize import minimize

>>> fun = lambda x: (x[0] - 1)**2 + (x[1] - 2.5)**2

>>> cons = ({'type': 'ineq', 'fun': lambda x: x[0] - 2 * x[1] + 2},

... {'type': 'ineq', 'fun': lambda x: -x[0] - 2 * x[1] + 6},

... {'type': 'ineq', 'fun': lambda x: -x[0] + 2 * x[1] + 2})

>>> bnds = ((0, None), (0, None))

>>> res = minimize(fun, (2, 0), method='SLSQP', bounds=bnds,

... constraints=cons)

该优化问题的理论解为(1.4, 1.7)。

以上就是minimize函数的基本用法。

python非线性规划问题_python玄学建模(2):非线性规划相关推荐

  1. python非线性规划求解_Python之建模规划篇--非线性规划

    Python之建模规划篇--非线性规划 基本介绍 如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规划问 题.一般说来,解非线性规划要比解线性规划问题困难得多.而且,也不象线性规划有 ...

  2. python语音识别分析_python数据建模分析 - 语音识别

    Getting Started!首先,我们要知道语音的产生过程 voice.png 状态:由肺产生向外的气流,完全放松时声带张开,就是平时的呼吸.如果声带一张一合(振动)形成周期性的脉冲气流.这个脉冲 ...

  3. python apply函数_python玄学之 apply函数的axis参数

    不知道小伙伴们学习python的dataframe时,是否遇到一个疑惑,apply参数axis的具体含义是什么? 官方文档解释如下:https://pandas.pydata.org/pandas-d ...

  4. 数学建模:非线性规划的 Python 求解

    目录 一般形式 Python 求解 1. scipy.optimize.minimize 函数 调用方式: 参数: 返回: 例 1 例 2 2. cvxopt.solvers 模块求解二次规划 标准型 ...

  5. 数学建模学习---非线性规划

    目录 前言 一.非线性规划问题是什么? 二.非线性规划的数学模型 1.一般形式 三.线性规划的 Matlab 解法 Matlab 中非线性规划的数学模型: 2.Matlab 中的命令: 前言 本篇讲述 ...

  6. 非线性规划MATLAB求解原理,专题六--非线性规划介绍及其Matlab求解方法.ppt

    迭代法一般步骤 注意:数值求解最优化问题的计算效率取决于确定搜索方向P (k)和步长 的效率. Matlab求解方法简介 Step3: 利用(3)式或其它一维搜索的方法求 计算 然后令k:=k+1, ...

  7. Python学习教程(Python学习视频_Python学些路线):Day05 总结和练习

    Python学习教程(Python学习视频_Python学些路线):总结和练习 练习清单 寻找"水仙花数". 寻找"完美数". "百钱百鸡" ...

  8. python 白噪声检验-利用python实现平稳时间序列的建模方式

    假如某个观察值序列通过序列预处理可以判定为平稳非白噪声序列,就可以利用ARMA模型对该序列进行建模.建模的基本步骤如下: (1)求出该观察值序列的样本自相关系数(ACF)和样本偏自相关系数(PACF) ...

  9. 《Python金融大数据风控建模实战》 第6章 变量分箱方法

    <Python金融大数据风控建模实战> 第6章 变量分箱方法 本章引言 Python代码实现及注释 本章引言 变量分箱是一种特征工程方法,意在增强变量的可解释性与预测能力.变量分箱方法主要 ...

最新文章

  1. kong api gateway 初体验
  2. 计算机科学基础知识(六)理解栈帧
  3. staruml无法打开mdj文件_StarUML使用说明
  4. spring各jar包作用(转载)
  5. 认识代码编辑区域与解决方案区域 005
  6. Object C学习笔记13-Dictionary字典
  7. 对称二叉树(信息学奥赛一本通-T1368)
  8. 为什么JavaScript需要模块化开发?
  9. Java Server Faces (JSF)页面转换与验证(二)
  10. 从Linux基础到k8s进阶,马哥_K8s进阶实战(11)Kubernetes系统扩展
  11. 基于事件的异步模式概述
  12. My Seventeenth Page - 赎金信 - By Nicolas
  13. Newton tangent method
  14. android系统蓝牙音箱功能吗,Android蓝牙开发系列文章-其实你的手机可以变成一个蓝牙音箱...
  15. html段落间距怎么缩小,WPS怎样缩小段落间距
  16. nodejs微信公众号开发第一步(接入指南)--wechat模块
  17. 计算机视觉--CV技术指南文章汇总
  18. Web3.0究竟是什么?
  19. 洛谷刷题——P1255 数楼梯
  20. Java Tesseract-OCR 4.0 windows 测试图像识别

热门文章

  1. Pandas+Pyecharts:2021中国大学综合排名分析+可视化,来围观看看你的大学上榜没
  2. java 链表反转_面试必备 | 不可不会的反转链表
  3. Linux内核用户权限的实现,Linux内核设计与实现(6)---系统调用
  4. 洛奇英雄转无法读取游戏服务器状态,洛奇英雄传无法连接服务器认证失败处理方法讲解...
  5. 山西首次举办明清水陆画专题展 多数藏品首次面世
  6. Python 萌新 - 花10分钟学爬虫
  7. lodop同一页面一次性打印多次
  8. linux 安装Centos源
  9. GBT19668.3-2007 电子设备机房系统工程监理规范
  10. VB6.0报告命名空间找不到的原因