简介

优化问题是工程实践中经常遇到的一种问题。简单讲,就是搜索优化出一组自变量参数,使得目标函数达到极小值(极大值)。

如何搜索出这组参数呢:这就是优化算法做的事情。不同的优化算法适用于不同的优化问题。

本文简要介绍在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相关推荐

  1. python:scipy.optimize.minimize(method=’Nelder-Mead’)

    简介 优化问题是工程实践中经常遇到的一种问题.简单讲,就是搜索优化出一组自变量参数,使得目标函数达到极小值(极大值). 如何搜索出这组参数呢:这就是优化算法做的事情.不同的优化算法适用于不同的优化问题 ...

  2. python模块:Scipy.optimize.linprog线性规划求解

    目录 一.模块介绍 二.模块源分析与参数解释 三.实例求解 四.参考 一.模块介绍 1.1模块功能 Scipy.optimize是Scipy中一个用于解决数学模型中优化类模型的子包,该子包中又包含了多 ...

  3. python网页优化公司_使用python优化scipy.optimize.minimize公司

    我将逐行检查您的代码,并强调一些问题:from scipy.optimize import minimize import numpy as np prices=np.array([[1.5,50,3 ...

  4. python非线性规划scipy.optimize.minimize介绍

    目录 0. 官方说明 1. Parameters 2. Returns 3. 案例 1)无约束求极值 2)有约束求极值 参考资料 0. 官方说明 在 python 里用非线性规划求极值,最常用的就是 ...

  5. python中scipy.optimize_使用Python优化(scipy.optimize)

    有时,数值优化器无论出于何种原因都不起作用.我们可以将问题的参数化略有不同,它只会起作用. (并且可能更快) 例如,对于(0,1)的边界,我们可以有一个变换函数,使得(-inf,inf)中的值在被转换 ...

  6. python科学计算——scipy.optimize

    查看全文 http://www.taodudu.cc/news/show-5979774.html 相关文章: python中scipy.optimize_浅谈SciPy中的optimize.mini ...

  7. python实例 优化目标函数_Scipy优化算法--scipy.optimize.fmin_tnc()/minimize()

    scipy中的optimize子包中提供了常用的最优化算法函数实现,我们可以直接调用这些函数完成我们的优化问题. scipy.optimize包提供了几种常用的优化算法. 该模块包含以下几个方面 使用 ...

  8. python数学建模之用scipy.optimize.linprog实现线性规划

    在做数学建模时,我们经常会遇到在约束条件下求解目标的最优解的情况,如:在如下约束条件下求解-x0+4x1的最小值. 在求解这个问题的过程中,我们可以使用不同的工具去解决,如MATLAB.Java等语言 ...

  9. 高级优化算法scipy.optimize

    scipy中的optimize子包中提供了常用的最优化算法函数实现,我们可以直接调用这些函数完成我们的优化问题. scipy.optimize包提供了几种常用的优化算法. 该模块包含以下几个方面 使用 ...

最新文章

  1. elasticsearch分析系列
  2. Write operations are not allowed in read-only mode
  3. ffmpeg个人翻译文档1-8转
  4. ASP.NET MVC 自定义Razor视图WorkContext
  5. Maven学习总结(20)——Maven pom.xml配置再体会
  6. SAP License:赠品处理原理浅析
  7. Euler Tour Tree与dynamic connectivity
  8. html网页设计作业代码——家乡介绍-南京(7页) HTML+CSS+JavaScript html网页设计期末大作业_网页设计平时作业
  9. cad2008安装教程_品茗BIM、平面图软件安装教程
  10. cmd命令快速重启IIS服务
  11. 冰点还原精灵是怎么用的
  12. 人望山 鱼窥荷下一句_一窥R反文化
  13. whx带我刷JOI training
  14. nuc972 linux 升级,NUC972移植工作记录
  15. 一款值得使用的,免费会议室管理软件【微信小程序和网页版都有】
  16. 基于海思平台与QT框架的高效视频显示
  17. ISCC2022wp
  18. 大数据学习:大数据就业前景和就业方向
  19. React中文文档之Components and Props
  20. 学习ARM开发(6)

热门文章

  1. CMD命令下进入某个文件夹 运行.py文件
  2. ArcGIS安装报错 Error: Error 1935: An error occurred during the installation of assembly
  3. 阿里云安装配置kafka
  4. Webpack--externals(外部扩展)详解
  5. Oracle个人笔记
  6. 安装 SS5 SOCKS5 代理服务器
  7. 儿童与青少年临床心理学_7个为儿童和青少年制作的礼物
  8. 满二叉树先序序列转后序序列
  9. python怎么读取特定路径文件夹下的图片
  10. php基础(25)_构造函数(方法)