l bfgs算法java代码_优化算法——拟牛顿法之L-BFGS算法
一、BFGS算法
BFGS算法的校正公式:
利用Sherman-Morrison公式可对上式进行变换,得到
令
,则得到:
二、BGFS算法存在的问题
在BFGS算法中。每次都要存储近似Hesse矩阵
,在高维数据时,存储
浪费非常多的存储空间,而在实际的运算过程中。我们须要的是搜索方向。因此出现了L-BFGS算法。是对BFGS算法的一种改进算法。
在L-BFGS算法中。仅仅保存近期的
次迭代信息。以减少数据的存储空间。
三、L-BFGS算法思路
令
。
,则BFGS算法中的
能够表示为:
若在初始时,假定初始的矩阵
,则我们能够得到:
若此时。仅仅保留近期的
步:
这样在L-BFGS算法中。不再保存完整的
。而是存储向量序列
和
。须要矩阵
时,使用向量序列
和
计算就能够得到。而向量序列
和
也不是全部都要保存,仅仅要保存最新的
步向量就可以。
四、L-BFGS算法中的方向的计算方法
五、实验仿真
lbfgs.py
#coding:UTF-8
from numpy import *
from function import *
def lbfgs(fun, gfun, x0):
result = []#保留终于的结果
maxk = 500#最大的迭代次数
rho = 0.55
sigma = 0.4
H0 = eye(shape(x0)[0])
#s和y用于保存近期m个,这里m取6
s = []
y = []
m = 6
k = 1
gk = mat(gfun(x0))#计算梯度
dk = -H0 * gk
while (k < maxk):
n = 0
mk = 0
gk = mat(gfun(x0))#计算梯度
while (n < 20):
newf = fun(x0 + rho ** n * dk)
oldf = fun(x0)
if (newf < oldf + sigma * (rho ** n) * (gk.T * dk)[0, 0]):
mk = n
break
n = n + 1
#LBFGS校正
x = x0 + rho ** mk * dk
#print x
#保留m个
if k > m:
s.pop(0)
y.pop(0)
#计算最新的
sk = x - x0
yk = gfun(x) - gk
s.append(sk)
y.append(yk)
#two-loop的过程
t = len(s)
qk = gfun(x)
a = []
for i in xrange(t):
alpha = (s[t - i - 1].T * qk) / (y[t - i - 1].T * s[t - i - 1])
qk = qk - alpha[0, 0] * y[t - i - 1]
a.append(alpha[0, 0])
r = H0 * qk
for i in xrange(t):
beta = (y[i].T * r) / (y[i].T * s[i])
r = r + s[i] * (a[t - i - 1] - beta[0, 0])
if (yk.T * sk > 0):
dk = -r
k = k + 1
x0 = x
result.append(fun(x0))
return result
function.py
#coding:UTF-8
'''
Created on 2015年5月19日
@author: zhaozhiyong
'''
from numpy import *
#fun
def fun(x):
return 100 * (x[0,0] ** 2 - x[1,0]) ** 2 + (x[0,0] - 1) ** 2
#gfun
def gfun(x):
result = zeros((2, 1))
result[0, 0] = 400 * x[0,0] * (x[0,0] ** 2 - x[1,0]) + 2 * (x[0,0] - 1)
result[1, 0] = -200 * (x[0,0] ** 2 - x[1,0])
return result
testLBFGS.py
#coding:UTF-8
'''
Created on 2015年6月6日
@author: zhaozhiyong
'''
from lbfgs import *
import matplotlib.pyplot as plt
x0 = mat([[-1.2], [1]])
result = lbfgs(fun, gfun, x0)
print result
n = len(result)
ax = plt.figure().add_subplot(111)
x = arange(0, n, 1)
y = result
ax.plot(x,y)
plt.show()
实验结果
參考文献
l bfgs算法java代码_优化算法——拟牛顿法之L-BFGS算法相关推荐
- l bfgs算法java代码_理解L-BFGS算法
理解L-BFGS算法 Mar 30, 2015 #数值优化 #无约束最优化 L-BFGS(Limited-Memory BFGS)是BFGS算法在受限内存时的一种近似算法,而BFGS是数学优化中 ...
- bm25算法Java代码_搜索引擎相关度算法 -BM25 JAVA实现
bm25 是一种用来评价搜索词和文档之间相关性的算法,它是一种基于概率检索模型提出的算法. 它的出现主要是解决TF-IDF算法中 TF的影响可无限增大的不足,本质上 BM25是基于TF-IDF并做了改 ...
- l bfgs算法java代码_数值优化:理解L-BFGS算法
译自<Numerical Optimization: Understanding L-BFGS>,本来只想作为学习CRF的补充材料,读完后发现收获很多,把许多以前零散的知识点都串起来了.对 ...
- 蝗虫算法java代码_蝗虫搜索算法 蝗虫算法:蝗虫优化算法是模拟自然界蝗虫种群捕食行为而提出的一 联合开发网 - pudn.com...
蝗虫搜索算法 所属分类:其他 开发工具:matlab 文件大小:347KB 下载次数:5 上传日期:2020-07-26 16:31:25 上 传 者:西柚不加冰 说明: 蝗虫算法:蝗虫优化算法是模 ...
- java代码统计收藏量_干货收藏 | 35个Java 代码性能优化总结(上)
原标题:干货收藏 | 35个Java 代码性能优化总结(上) 前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这 ...
- 44个Java代码性能优化总结
转载自 44个Java代码性能优化总结 代码优化的最重要的作用应该是:避免未知的错误.在代码上线运行的过程中,往往会出现很多我们意想不到的错误,因为线上环境和开发环境是非常不同的,错误定位到最后往往是 ...
- 【Java】44个Java代码性能优化总结
1.概述 转载:44个Java代码性能优化总结 代码优化的最重要的作用应该是:避免未知的错误.在代码上线运行的过程中,往往会出现很多我们意想不到的错误,因为线上环境和开发环境是非常不同的,错误定位到最 ...
- java代码优化_java代码之美(11)---java代码的优化
java代码的优化 随着自己做开发时间的增长,越来越理解雷布斯说的: 敲代码要像写诗一样美.也能理解有一次面试官问我你对代码有洁癖吗? 一段好的代码会让人看就像诗一样,也像一个干净房间会让人看去很舒服 ...
- java 代码性能优化_Java代码性能优化的几个小技巧
Java代码性能优化的几个小技巧 时间:2017-08-07 来源:华清远见JAVA学院 代码优化是程序员必须懂得一门学问,所以不管是程序员还是准程序员,养成良好的代码优化习惯都是必须要养成的 ...
最新文章
- 设置status bar的颜色
- [Head First设计模式]餐馆中的设计模式——命令模式
- vue 背景透明度_一款媒体小白喜爱的视频编辑软件,vue视频编辑APP,想学就来...
- Grounded Theory and Coding Lecture Notes
- Spring Data ElasticSearch示例--查询索引库
- react组件设计原则_React组件设计规则
- eclipse和Tomcat绑定
- python arp_用Python构造ARP请求、扫描、欺骗
- LAMP+LNMP视频教程
- ppt转html5 带动画_这组PPT设计,真的太漂亮了!
- 全局变量在多个进程中不共享
- graphpad做单因素方差分析_手把手教你用Graphpad做单因素方差分析
- django-redis 中文文档
- 如何在腾讯云服务器部署web项目
- 计算机专业关于Java读书笔记_《Java8学习笔记》读书笔记(四)
- 应用计算机测定电阻伏安特性实验,电路元件伏安特性测量实验报告答案.doc
- SVN报错:can‘t open file db/txn-current-lock:permission denied 解决方法
- 开发必备技术--docker(使用篇)
- XR迈向10亿级必须解决的3个问题
- 硬件设计中与门、或门、非门电路详解
热门文章
- python django开发问题
- blast | diamond 输出结果选择和解析 | 比对
- RobotFrameWork(五)控制流之if语句——Run Keyword If
- 我的WCF之旅 (11): 再谈WCF的双向通讯-基于Http的双向通讯 V.S. 基于TCP的双向通讯...
- 机器学习基础专题:高斯分布
- Activity的生命周期是谁调用的?
- Burp Suite入门笔记
- stick footers布局
- H5跟ios、android交互跟数据对接
- 《JS权威指南学习总结--1.1语言核心》