一、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算法相关推荐

  1. l bfgs算法java代码_理解L-BFGS算法

    理解L-BFGS算法 Mar 30, 2015   #数值优化  #无约束最优化 L-BFGS(Limited-Memory BFGS)是BFGS算法在受限内存时的一种近似算法,而BFGS是数学优化中 ...

  2. bm25算法Java代码_搜索引擎相关度算法 -BM25 JAVA实现

    bm25 是一种用来评价搜索词和文档之间相关性的算法,它是一种基于概率检索模型提出的算法. 它的出现主要是解决TF-IDF算法中 TF的影响可无限增大的不足,本质上 BM25是基于TF-IDF并做了改 ...

  3. l bfgs算法java代码_数值优化:理解L-BFGS算法

    译自<Numerical Optimization: Understanding L-BFGS>,本来只想作为学习CRF的补充材料,读完后发现收获很多,把许多以前零散的知识点都串起来了.对 ...

  4. 蝗虫算法java代码_蝗虫搜索算法 蝗虫算法:蝗虫优化算法是模拟自然界蝗虫种群捕食行为而提出的一 联合开发网 - pudn.com...

    蝗虫搜索算法 所属分类:其他 开发工具:matlab 文件大小:347KB 下载次数:5 上传日期:2020-07-26 16:31:25 上 传 者:西柚不加冰 说明:  蝗虫算法:蝗虫优化算法是模 ...

  5. java代码统计收藏量_干货收藏 | 35个Java 代码性能优化总结(上)

    原标题:干货收藏 | 35个Java 代码性能优化总结(上) 前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这 ...

  6. 44个Java代码性能优化总结

    转载自 44个Java代码性能优化总结 代码优化的最重要的作用应该是:避免未知的错误.在代码上线运行的过程中,往往会出现很多我们意想不到的错误,因为线上环境和开发环境是非常不同的,错误定位到最后往往是 ...

  7. 【Java】44个Java代码性能优化总结

    1.概述 转载:44个Java代码性能优化总结 代码优化的最重要的作用应该是:避免未知的错误.在代码上线运行的过程中,往往会出现很多我们意想不到的错误,因为线上环境和开发环境是非常不同的,错误定位到最 ...

  8. java代码优化_java代码之美(11)---java代码的优化

    java代码的优化 随着自己做开发时间的增长,越来越理解雷布斯说的: 敲代码要像写诗一样美.也能理解有一次面试官问我你对代码有洁癖吗? 一段好的代码会让人看就像诗一样,也像一个干净房间会让人看去很舒服 ...

  9. java 代码性能优化_Java代码性能优化的几个小技巧

    Java代码性能优化的几个小技巧 时间:2017-08-07     来源:华清远见JAVA学院 代码优化是程序员必须懂得一门学问,所以不管是程序员还是准程序员,养成良好的代码优化习惯都是必须要养成的 ...

最新文章

  1. 设置status bar的颜色
  2. [Head First设计模式]餐馆中的设计模式——命令模式
  3. vue 背景透明度_一款媒体小白喜爱的视频编辑软件,vue视频编辑APP,想学就来...
  4. Grounded Theory and Coding Lecture Notes
  5. Spring Data ElasticSearch示例--查询索引库
  6. react组件设计原则_React组件设计规则
  7. eclipse和Tomcat绑定
  8. python arp_用Python构造ARP请求、扫描、欺骗
  9. LAMP+LNMP视频教程
  10. ppt转html5 带动画_这组PPT设计,真的太漂亮了!
  11. 全局变量在多个进程中不共享
  12. graphpad做单因素方差分析_手把手教你用Graphpad做单因素方差分析
  13. django-redis 中文文档
  14. 如何在腾讯云服务器部署web项目
  15. 计算机专业关于Java读书笔记_《Java8学习笔记》读书笔记(四)
  16. 应用计算机测定电阻伏安特性实验,电路元件伏安特性测量实验报告答案.doc
  17. SVN报错:can‘t open file db/txn-current-lock:permission denied 解决方法
  18. 开发必备技术--docker(使用篇)
  19. XR迈向10亿级必须解决的3个问题
  20. 硬件设计中与门、或门、非门电路详解

热门文章

  1. python django开发问题
  2. blast | diamond 输出结果选择和解析 | 比对
  3. RobotFrameWork(五)控制流之if语句——Run Keyword If
  4. 我的WCF之旅 (11): 再谈WCF的双向通讯-基于Http的双向通讯 V.S. 基于TCP的双向通讯...
  5. 机器学习基础专题:高斯分布
  6. Activity的生命周期是谁调用的?
  7. Burp Suite入门笔记
  8. stick footers布局
  9. H5跟ios、android交互跟数据对接
  10. 《JS权威指南学习总结--1.1语言核心》