免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1902 | 回复: 2

perl下面使用LBFGS优化算法问题 [复制链接]

论坛徽章:
0
发表于 2016-12-28 11:12 |显示全部楼层
我要用perl写一个优化程序,提取一个复杂函数中的参数(大于100个),函数计算出来的曲线用于拟合实测曲线,现在我找到一个孙磊写的优化算法LBFGS的模块,其中有一个关键问题是,传递给优化算法的数据里面其他都好办,但是它还需要函数的梯度,这就让我很头疼,因为我的函数不是像y=a*x^2+b*x+c这么简单,可以直接在代码里把梯度y'=2*a*x+b,算出来写在代码里。我用的这个函数,人工根本就不可能写出梯度的公式。这个复杂函数的计算也不是人工或者perl代码完成的,是要靠一个专业仿真软件来计算函数值。所以我现在很头疼怎么传递函数的梯度给LBFGS这个优化模块,有用过的朋友能指点一下吗?谢谢。

论坛徽章:
0
发表于 2016-12-28 14:53 |显示全部楼层
如果目标是为了确定一组参数,使函数曲线最大限度地接近实测曲线,同时,经验公式难以逐项示导的话,不妨换换思路,用基因算法来实现。

论坛徽章:
0
发表于 2016-12-28 17:03 |显示全部楼层
大米白面 发表于 2016-12-28 14:53
如果目标是为了确定一组参数,使函数曲线最大限度地接近实测曲线,同时,经验公式难以逐项示导的话,不妨换 ...

基因算法不需要提供梯度信息吗?就不知道基因算法收敛速度,精度如何,perl里面有模块吗?我想用lbfgs的原因是看了介绍,对这种非线性的曲线拟合,现在bfgs是主流,我自己在一些商业软件里也用过,感觉还可以,就不是不知道他们怎么在内部实现复杂函数的梯度计算传递的。
我现在唯一想到的一个梯度计算办法就是:比如我有100个参数,我每次对一个参数当前值加一个小的扰动量(其他参数值不变),然后通过仿真软件计算这个函数的变化量,从而得到这个参数的函数梯度,这样来的话,需要100次,然后传递给优化器。这还只是一次传递,优化器在优化的过程中要迭代很多很多次,每次都要这样的话,那不知道要什么时候才能出结果了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP