数学工具(三)scipy中的优化方法

给定一个多维函数,如何求解全局最优?

文章包括:

1.全局最优的求解:暴力方法

2.全局最优的求解:fmin函数

3.凸优化

函数的曲面图

import numpy as np

import matplotlib.pyplot as plt

import matplotlib as mpl

def fm(x,y):

return np.sin(x)+0.05*x**2+np.sin(y)+0.05*y**2

x = np.linspace(0, 10, 20)

y = np.linspace(0, 10, 20)

X, Y = np. meshgrid( x, y)

Z = fm(X,Y)

x = x.flatten()

y = x.flatten()

fig = plt.figure(figsize=(9,6))

ax =fig.gca(projection=‘3d‘)

surf = ax.plot_surface(X, Y, Z, rstride=2,cmap=mpl.cm.coolwarm,linewidth=0.5, antialiased=True)

ax.set_xlabel(‘x‘)

ax.set_ylabel(‘y‘)

ax.set_zlabel(‘f(x,y)‘)

fig.colorbar(surf , shrink=0.5, aspect=5)

1.全局最优的求解:暴力方法

import scipy.optimize as spo

def fo(p):

x,y=p

z= np.sin(x)+0.05*x**2+np.sin(y)+0.05*y**2

return z

rranges=(slice(-10,10.1,0.1),slice(-10,10.1,0.1))

res=spo.brute(fo,rranges,finish=None)

res

array([-1.4, -1.4])

全局最小值

fo(res)

-1.7748994599769203

对于更大的网格方位,scipy.optimize.brute() 变得非常慢。scipy.optimize.anneal() 提供了一个替代的算法,使用模拟退火,效率更高。

2.全局最优的求解:fmin函数

re=spo.fmin(fo,res,xtol=0.001, ftol=0.001, maxiter=15, maxfun=20)

re

array([-1.42702972, -1.42876755])

fo(re)

-1.7757246992239009

更一般的,我们一般传递两个参数:

re1=spo.fmin(fo,(2,2),maxiter=150)

re1

Optimization terminated successfully.

Current function value: 0.015826

Iterations: 46

Function evaluations: 86

Out[92]:

array([ 4.2710728 , 4.27106945])

3.凸优化

有约束的优化

\[
\begin{alignat}{5}
\max \quad &z= -(0.5*\sqrt(w_1)+0.5*\sqrt(w_2)) &&\ \mbox{s.t.} \quad & w_1=a*15+b*5 \tag{constraint 1}\ & w_{2}=a*5+b*12\tag{constraint 2}\ & 100 \geq a*10+b*10 \tag{constraint 3}\ & a,b \geq0
\end{alignat}
\]

代码实现:

def fu(p):

a,b=p[0],p[1]

return -(0.5np.sqrt(15a+5b)+0.5np.sqrt(5a+12b))

cons = ({‘type‘: ‘ineq‘, ‘fun‘: lambda p: 100- 10 * p[0] - 10 * p[1]},

{‘type‘: ‘ineq‘, ‘fun‘: lambda p: 100- 10 * p[0] - 10 * p[1]})

bnds=((0,1000),(0,1000))

x0=(3,5)

result=spo.minimize(fu,x0,method=‘SLSQP‘,bounds=bnds,constraints=cons)

result

fun: -9.700883561077609

jac: array([-0.48503506, -0.48508084])

message: ‘Optimization terminated successfully.‘

nfev: 32

nit: 8

njev: 8

status: 0

success: True

x: array([ 8.02744728, 1.97255272])

result[‘x‘]

array([ 8.02744728, 1.97255272])

result[‘fun‘]

-9.700883561077609

原文地址:https://www.cnblogs.com/jin-liang/p/9397556.html

时间: 2024-08-14 12:00:45

数学工具(三)scipy中的优化方法的相关文章

深度学习之(十一)Deep learning中的优化方法:随机梯度下降、受限的BFGS、共轭梯度法

Deep learning中的优化方法 三种常见优化算法:SGD(随机梯度下降),LBFGS(受限的BFGS),CG(共轭梯度法). 1.SGD(随机梯度下降) 随机梯度下降(Stochastic Gradient Descent, SGD)是随机和优化相结合的产物,是一种很神奇的优化方法,属于梯度下降的一种,适用于大规模问题. 要想扯清楚它,还得先谈谈梯度下降.众所周知,每个优化问题都会有一个目标函数F(w)F(w),梯度下降采用迭代的策略,从初始点w0w0开始,每次沿着目标函数在当前点的负梯

槽填充中模式优化方法的研究

槽填充中模式优化方法的研究(硕士毕业论文) 沈晓卫 针对槽填充任务的实现方法 主要可以分为三种: 第一种是把槽填充任务转换为关系抽取任务,用传统的信息抽取方法来实现槽填充任务,按照具体实现方法的不同,信息抽取方法又可以分为模式匹配的方法和基于分类器的方法 第二种是以问答系统(Question  Answering,QA)为基础,通过把槽填充任务中定义的每一个槽解析为一个等价问题集合的方式来完成槽填充任务. 最后一种是基于规则的方法,即直接依靠人工的方法为每一个槽构建对应的模式库或规则库,然后以这

机器学习中常见优化方法汇总

http://www.scipy-lectures.org/advanced/mathematical_optimization/index.html#a-review-of-the-different-optimizers 机器学习中数学优化专门用于解决寻找一个函数的最小值的问题.这里的函数被称为cost function或者objective function,或者energy:损失函数或者目标函数. 更进一步,在机器学习优化中,我们并不依赖于被优化的函数的数学解析表达式,我们通过使用$sc

Caffe中的优化方法

在Deep Learning中,往往loss function是非凸的,没有解析解,我们需要通过优化方法来求解.Caffe通过协调的进行整个网络的前向传播推倒以及后向梯度对参数进行更新,试图减小损失. Caffe已经封装好了三种优化方法,分别是Stochastic Gradient Descent (SGD), AdaptiveGradient (ADAGRAD), and Nesterov's Accelerated Gradient (NAG). Solver的流程: 1.     设计好需

关于异步加载的 javascript 不出现在 chrome 开发者工具的 source 中的解决方法

首先,当你看到这篇文章时,我相信你已经是一个中级甚至是高级的前端开发了. 因为异步加载 javascript 这样的做法,在一些中小型项目几乎是看不到的. 而异步加载 javascript 归根到底,是为了性能优化,防止 JS 加载造成页面阻塞. 会注意到性能,说明你已经不再是一个停留在实现层面的前端开发了,而是一个有着更高追求的人. 在此,向所有有追求的人点赞~~~ 昨天为公司的项目做前端优化,其中一项就是做脚本异步加载. 但是奇怪的是,异步加载的 js 出现在 chrome 开发者工具的 n

一些编程中的优化方法

以下是一些基本的编程遵循的守则:   1.尽可能的使用32位数据.因为英特尔的处理器是以32为位基准的,其中对32位进行了优化.   2.对于频繁调用的一些小函数,应声明为内联函数.   3.尽可能的使用全局变量,但避免产生可读性差的代码.   4.避免使用浮点数进行加法和减法运算,因为整数单元通常比浮点数单元运算快.   5.尽可能使用整数.尽管浮点数处理器几乎和整数一样快,但是整数更加的精确.所以如果你不需要精确的小数位,就使用整数.   6.将所有的数据结构均调整为32个字节对齐.在大多数

Unity渲染优化中文翻译(三)——GPU的优化策略

如果游戏的渲染瓶颈来自于GPU 首要任务就是找出造成GPU瓶颈的因素所在,通常GPU的性能受到像素分辨率的影响,特别是在移动客户端的游戏,但是内存带宽和顶点计算的影响也需要注意.这些因素的影响都需要实时的测试和定位. 像素分辨率 像素分辨率是指GPU每秒可以渲染的像素个数,如果游戏受到像素分辨率的影响,则意味着游戏每帧描绘的像素点个数超过了GPU可以处理的极限. 检测游戏是否收到像素分辨率的影响可以通过以下方式: . 分析游戏,注意GPU的运行时间: . 在unity的Player Settin

软件性能优化方法汇编

本文主要是对平时工作和Ulrich Drepper的<What Every Programmer Should Know About Memory>中软件性能优化方法的总结归纳,主要为了方便日后快速查看和检查,不涉及方法具体细节.本文涉及的软件性能优化手段包括cache.TLB.预取.多线程.总线带宽.NUMA等.日后会不定期更新. cache优化 跳过cache 对于一次性的读写操作(比如网卡收发包等),因为数据不会被重复使用,所以没有必要把数据更新到cache line中,避免换出cach

android开发中图片优化步骤

android开发中图片优化方法 1.图片加载方法,方便用户加载图片 /*** * 加载本地图片 * @param context:主运行函数实例 * @param bitAdress:图片地址,一般指向R下的drawable目录 * @return */ public final Bitmap CreatImage(Context context, int bitAdress) { Bitmap bitmaptemp = null; bitmaptemp = BitmapFactory.dec