数学工具(三)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
数学工具(三)scipy中的优化方法的更多相关文章
- 5、Tensorflow基础(三)神经元函数及优化方法
1.激活函数 激活函数(activation function)运行时激活神经网络中某一部分神经元,将激活信息向后传入下一层的神经网络.神经网络之所以能解决非线性问题(如语音.图像识别),本质上就是激 ...
- java数学函数Math类中常用的方法
Math类提供了常用的一些数学函数,如:三角函数.对数.指数等.一个数学公式如果想用代码表示,则可以将其拆分然后套用Math类下的方法即可. Math.abs(12.3); ...
- QuantLib 金融计算——数学工具之数值积分
目录 QuantLib 金融计算--数学工具之数值积分 概述 常见积分方法 高斯积分 如果未做特别说明,文中的程序都是 Python3 代码. QuantLib 金融计算--数学工具之数值积分 载入模 ...
- Unity渲染优化中文翻译(三)——GPU的优化策略
如果游戏的渲染瓶颈来自于GPU 首要任务就是找出造成GPU瓶颈的因素所在,通常GPU的性能受到像素分辨率的影响,特别是在移动客户端的游戏,但是内存带宽和顶点计算的影响也需要注意.这些因素的影响都需要实 ...
- android开发中图片优化步骤
android开发中图片优化方法 1.图片加载方法,方便用户加载图片 /*** * 加载本地图片 * @param context:主运行函数实例 * @param bitAdress:图片地址,一般 ...
- QuantLib 金融计算——数学工具之优化器
目录 QuantLib 金融计算--数学工具之优化器 概述 Optimizer Constraint OptimizationMethod EndCriteria 示例 Rosenbrock 问题 校 ...
- Android中ListView的几种常见的优化方法
Android中的ListView应该算是布局中几种最常用的组件之一了,使用也十分方便,下面将介绍ListView几种比较常见的优化方法: 首先我们给出一个没有任何优化的Listview的Adapte ...
- kalman滤波(三)---各种滤波的方法汇总+优化的方法
大神解答 一.前提 最一般的状态估计问题,我们会根据系统是否线性,把它们分为线性/非线性系统.同时,对于噪声,根据它们是否为高斯分布,分为高斯/非高斯噪声系统.现实中最常见的,也是最困难的问题,是非线 ...
- HBase性能优化方法总结(三):读表操作
本文主要是从HBase应用程序设计与开发的角度,总结几种常用的性能优化方法.有关HBase系统配置级别的优化,可参考:淘宝Ken Wu同学的博客. 下面是本文总结的第三部分内容:读表操作相关的优化方法 ...
随机推荐
- powerdesigner连接Mysql进行反向工程并生成word文档图文教程
1 软件版本 windows7 64位 powerdesigner 15.1 Mysql 5.1.56 mysql-connector-odbc-3.51.30-winx64 对于mysql-conn ...
- hdu 2255 奔小康赚大钱 (KM)
奔小康赚大钱Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- bat脚本知识总结
1常用基本命令 1.1 @ 它的作用是让执行窗口中不显示它后面这一行的命令本身 1.2 echo 它其实是一个开关命令,就是说它只有两种状态:打开和关闭.于是就有了echo on 和echo off两 ...
- objc反汇编分析,block函数块为何物?
上一篇向大家介绍了__block变量的反汇编和它的伪代码,本篇函数块block,通常定义成原型(^){},它在反汇编中是什么东西. 我们先定义将要反汇编的例子,为减少篇幅例子采用non-arc环境. ...
- 简单地迁移你的android jni代码逻辑到iOS - 编写iOS下jni.h的替代 - ocni.h
1. jni的代码逻辑中与上层平台语言交互了. 2. 使用非Xcode的ide开发工具,希望使用纯净的c/c++代码,不掺杂其它平台相关的语言语法. 3. 只想简单地替换jni代码对上层平台语言的功能 ...
- 手摸手带你认识https涉及的知识,并实现https加密解密,加签解签
目录 http访问流程 https访问流程 证书 加密/解密 加签/验签 Java实现https 拓展 @ 看完整的代码,直接去完整代码实现,看实现完后会遇到的坑,直接去测试过程中的问题,包括经过代理 ...
- 结合RBAC模型讲解权限管理系统需求及表结构创建
在本号之前的文章中,已经为大家介绍了很多关于Spring Security的使用方法,也介绍了RBAC的基于角色权限控制模型.但是很多朋友虽然已经理解了RBAC控制模型,但是仍有很多的问题阻碍他们进一 ...
- C#音频截取与原文匹配
1.需求 上传一个音频文件(例如英语听力的音频)与音频对应的原文word文档.大概估算音频中一段对话到另一端对话的时间间隔,将音频截取为不同对话的小音频文件,通过百度语音识别转换成英文,然后与原文对比 ...
- 甲小蛙战记:PHP2Java 排雷指南
(马蜂窝技术原创内容,申请转载请在公众后后台留言,ID:mfwtech ) 大家好,我是来自马蜂窝电商旅游平台的甲小蛙,从前是一名 PHP 工程师,现在可能是一名 PHJ 工程师,以后...... 前 ...
- Sql 修改表结构
添加字段 alter table 表名 add 字段名 nvarchar(100) not null 修改字段 alter table 表名 alter column 字段名 int not null ...