24小时热门版块排行榜    

查看: 2798  |  回复: 24
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

chaogumath

铜虫 (小有名气)


[交流] 大规模优化数值计算,梯度的计算方式讨论

各位,
    最近在做非线性规划的大规模数值计算。用的是向前差分近似计算梯度:
g=[f(xi+h)-f(xi)]/h,用for i=1:n 进行循环计算。但是大家看到,如果变量有500个的话,就要计算500次f(xi+h),这个计算量太大了。例如:f(xi+h)计算1次需要0.001秒,那么,计算梯度g就需要5秒。这已经占了整个计算时间的70%。咋办?请教各位同仁。
回复此楼

» 本帖已获得的红花(最新10朵)

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

» 抢金币啦!回帖就可以得到:

查看全部散金贴

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chaogumath

铜虫 (小有名气)


送鲜花一朵
只是举个例子,500只能算小规模的。
这句话看了没有?“这已经占了整个计算时间的70%。”一个循环需要8秒的话,计算g就需要5秒。你做实验的时候是这样的吗?
请大侠分析得透彻一点,否则云里雾里的,抓不到本质。呵呵。
3楼2011-08-30 08:24:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 25 个回答

chaogumath(金币+2):谢谢参与
500不叫大
计算500次不叫多
计算1次需要0.001秒,你的机子比蜗牛还慢,的改善硬件!
2楼2011-08-30 07:23:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chaogumath(金币+2):谢谢参与
你这里关键是函数值的计算耗费时间,与优化算法没什么关系啊?
如果你的函数计算,要解一个pde或者cfd,那就慢了,
所以,你的从函数计算着手解决问题
4楼2011-08-30 11:13:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chaogumath(金币+2):谢谢参与
如果是用matlab,把for循环去掉估计能省下不少时间。否则的话,很难。优化问题中梯度、Hessian之类的信息一向都是难点。在一些特殊问题上,人们会有特别的方法来对待,不过通行的技巧据我所知是不存在的。通过算法上的改进来控制总体的计算量,这样的可能性当然存在,可以选取合适的全局算法,比如某些单调问题的免梯度算法,即便是计算梯度,也许也可以引入其他技巧,但是这个对于问题本身的依赖很强。建议多看看同类问题的文献,或许能有收获。
5楼2011-08-30 20:40:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复(可上传附件)
信息提示
请填处理意见