python:scipy.optimize.fmin
简介
优化问题是工程实践中经常遇到的一种问题。简单讲,就是搜索优化出一组自变量参数,使得目标函数达到极小值(极大值)。
如何搜索出这组参数呢:这就是优化算法做的事情。不同的优化算法适用于不同的优化问题。
本文简要介绍在python种NM算法来解决局部优化问题。
注意:scipy.optimize中的fmin和minimize都能调用NM算法来优化。两者区别:
- minimize是更通用的优化算法接口,它不仅包含NM算法,也可以调用其他算法;而fmin就只能用NM算法
- minimize中的NM算法多一个adaptive参数,可以提高高维的优化问题的收敛速度
- fmin的一个好处:支持直接返回优化过程中的迭代参数,有助于可视化。
本文用fmin来重新实现一遍minimize的例子。
接口
实例1:Himmelblau函数
优化流程
代码
def cost_function(x):return (x[0]**2+x[1]-11)**2+(x[0]+x[1]**2-7)**2x_center = np.array([0,0])
step = 0.5
x0 = np.vstack((x_center, x_center+np.diag((step,step))))
xtol,ftol = 1e-3,1e-3
xopt,fopt,iter,funcalls,warnflags,allvecs = fmin(cost_function,x_center,initial_simplex=x0,xtol=xtol,ftol=ftol,disp=1,retall=1,full_output=1)
print(xopt,fopt)n = 50
x = np.linspace(-6,6,n)
y = np.linspace(-6,6,n)
z = np.zeros((n,n))
for i,a in enumerate(x):for j,b in enumerate(y):z[i,j] = cost_function([a,b])xx, yy = np.meshgrid(x,y)
fig, ax = plt.subplots()
c = ax.pcolormesh(xx,yy,z.T,cmap='jet')
fig.colorbar(c, ax=ax)t = np.asarray(allvecs)
x_, y_ = t[:,0], t[:,1]
ax.plot(x_,y_,'r',x_[0],y_[0],'go',x_[-1],y_[-1],'y+',markersize=6)fig2 = plt.figure()
ax1 = plt.subplot(221)
ax2 = plt.subplot(222)
ax3 = plt.subplot(212)
ax1.plot(x_)
ax1.set_title('x')
ax2.plot(y_)
ax2.set_title('y')
ax3.plot(ys)
结果
Optimization terminated successfully.Current function value: 0.000002Iterations: 35Function evaluations: 68
[3.00021471 1.99974856] 1.7007332966814985e-06
对初值敏感
代码
def cost_function(x):return (x[0]**2+x[1]-11)**2+(x[0]+x[1]**2-7)**2n = 50
x = np.linspace(-6,6,n)
y = np.linspace(-6,6,n)
z = np.zeros((n,n))
for i,a in enumerate(x):for j,b in enumerate(y):z[i,j] = cost_function([a,b])
xx, yy = np.meshgrid(x,y)
fig, axes = plt.subplots(2, 2, figsize=(12,8))centers = [[0,0],[-1,0],[0,-1],[-1,-1]]
for i,center in enumerate(centers):x_center = np.array(center)step = 0.5x0 = np.vstack((x_center, x_center+np.diag((step,step))))xtol,ftol = 1e-3,1e-3xopt,fopt,iter,funcalls,warnflags,allvecs = fmin(cost_function,x_center,initial_simplex=x0,xtol=xtol,ftol=ftol,disp=1,retall=1,full_output=1)print(xopt,fopt)ii,jj = i//2,i%2ax = axes[ii][jj]c = ax.pcolormesh(xx,yy,z.T,cmap='jet')fig.colorbar(c, ax=ax)t = np.asarray(allvecs)x_, y_ = t[:,0], t[:,1]ax.plot(x_,y_,'r',x_[0],y_[0],'go',x_[-1],y_[-1],'y+',markersize=6)
结果
Optimization terminated successfully.Current function value: 0.000002Iterations: 35Function evaluations: 68
[3.00021471 1.99974856] 1.7007332966814985e-06
Optimization terminated successfully.Current function value: 0.000003Iterations: 31Function evaluations: 60
[-2.80534914 3.13148297] 2.851032148018009e-06
Optimization terminated successfully.Current function value: 0.000001Iterations: 40Function evaluations: 74
[ 3.58440786 -1.8484002 ] 1.1592413943034185e-06
Optimization terminated successfully.Current function value: 0.000002Iterations: 37Function evaluations: 69
[-3.77937271 -3.28299281] 2.2138273459910166e-06
python:scipy.optimize.fmin相关推荐
- python:scipy.optimize.minimize(method=’Nelder-Mead’)
简介 优化问题是工程实践中经常遇到的一种问题.简单讲,就是搜索优化出一组自变量参数,使得目标函数达到极小值(极大值). 如何搜索出这组参数呢:这就是优化算法做的事情.不同的优化算法适用于不同的优化问题 ...
- python模块:Scipy.optimize.linprog线性规划求解
目录 一.模块介绍 二.模块源分析与参数解释 三.实例求解 四.参考 一.模块介绍 1.1模块功能 Scipy.optimize是Scipy中一个用于解决数学模型中优化类模型的子包,该子包中又包含了多 ...
- python网页优化公司_使用python优化scipy.optimize.minimize公司
我将逐行检查您的代码,并强调一些问题:from scipy.optimize import minimize import numpy as np prices=np.array([[1.5,50,3 ...
- python非线性规划scipy.optimize.minimize介绍
目录 0. 官方说明 1. Parameters 2. Returns 3. 案例 1)无约束求极值 2)有约束求极值 参考资料 0. 官方说明 在 python 里用非线性规划求极值,最常用的就是 ...
- python中scipy.optimize_使用Python优化(scipy.optimize)
有时,数值优化器无论出于何种原因都不起作用.我们可以将问题的参数化略有不同,它只会起作用. (并且可能更快) 例如,对于(0,1)的边界,我们可以有一个变换函数,使得(-inf,inf)中的值在被转换 ...
- python科学计算——scipy.optimize
查看全文 http://www.taodudu.cc/news/show-5979774.html 相关文章: python中scipy.optimize_浅谈SciPy中的optimize.mini ...
- python实例 优化目标函数_Scipy优化算法--scipy.optimize.fmin_tnc()/minimize()
scipy中的optimize子包中提供了常用的最优化算法函数实现,我们可以直接调用这些函数完成我们的优化问题. scipy.optimize包提供了几种常用的优化算法. 该模块包含以下几个方面 使用 ...
- python数学建模之用scipy.optimize.linprog实现线性规划
在做数学建模时,我们经常会遇到在约束条件下求解目标的最优解的情况,如:在如下约束条件下求解-x0+4x1的最小值. 在求解这个问题的过程中,我们可以使用不同的工具去解决,如MATLAB.Java等语言 ...
- 高级优化算法scipy.optimize
scipy中的optimize子包中提供了常用的最优化算法函数实现,我们可以直接调用这些函数完成我们的优化问题. scipy.optimize包提供了几种常用的优化算法. 该模块包含以下几个方面 使用 ...
最新文章
- elasticsearch分析系列
- Write operations are not allowed in read-only mode
- ffmpeg个人翻译文档1-8转
- ASP.NET MVC 自定义Razor视图WorkContext
- Maven学习总结(20)——Maven pom.xml配置再体会
- SAP License:赠品处理原理浅析
- Euler Tour Tree与dynamic connectivity
- html网页设计作业代码——家乡介绍-南京(7页) HTML+CSS+JavaScript html网页设计期末大作业_网页设计平时作业
- cad2008安装教程_品茗BIM、平面图软件安装教程
- cmd命令快速重启IIS服务
- 冰点还原精灵是怎么用的
- 人望山 鱼窥荷下一句_一窥R反文化
- whx带我刷JOI training
- nuc972 linux 升级,NUC972移植工作记录
- 一款值得使用的,免费会议室管理软件【微信小程序和网页版都有】
- 基于海思平台与QT框架的高效视频显示
- ISCC2022wp
- 大数据学习:大数据就业前景和就业方向
- React中文文档之Components and Props
- 学习ARM开发(6)
热门文章
- CMD命令下进入某个文件夹 运行.py文件
- ArcGIS安装报错 Error: Error 1935: An error occurred during the installation of assembly
- 阿里云安装配置kafka
- Webpack--externals(外部扩展)详解
- Oracle个人笔记
- 安装 SS5 SOCKS5 代理服务器
- 儿童与青少年临床心理学_7个为儿童和青少年制作的礼物
- 满二叉树先序序列转后序序列
- python怎么读取特定路径文件夹下的图片
- php基础(25)_构造函数(方法)