求教FindMinimum函数修改步长的问题
mathematica吧
全部回复
仅看楼主
level 6
hdjcgug 楼主
由于目标函数计算非常慢,搜索步长太小的话,花费的时间太长,所以想问问有没有人工修改步长的方法
2020年08月15日 05点08分 1
吧务
level 10
FindMinimum根据AccuracyGoal和PrecisionGoal来调整步长,你觉得步长短了的话可以降低准确度要求
2020年08月15日 07点08分 2
然而并不行
2020年08月15日 11点08分
这两个只能一定程度上提早结束计算,但不能影响内部计算时取的步长
2020年08月15日 11点08分
@hdjcgug 反正我看帮助文档说是按这些要求调整步长。你是用StepMonitor看过了计算过程么
2020年08月15日 14点08分
对的,不过我用的是另一个监控选项,比stepmonitor个计时一点
2020年08月15日 14点08分
吧务
level 15
……我就问一句,你会产生顶楼的想法,是不是因为看到了下面这个警告?
lstol: 线搜索把步长降低到由 AccuracyGoal 和 PrecisionGoal 指定的容差范围内,但是无法找到 merit 函数的充足的降低. 您可能需要多于 MachinePrecision 位工作精度以满足这些容差.
是的话先把下面这帖看了:
https://tieba.baidu.com/p/6655887021
最后,我从来没见过哪个求极值问题是靠强制加大内置函数的步长解决的,介入内置函数的自适应步长选择的例子都极少。当然这和各 Mathematica 论坛里求极值方面的专家相对不多大概有点关系吧。
2020年09月05日 07点09分 3
并不是,只是目标函数算一次要5到6秒,内置算法只是考虑了一般情况下的时间,精度的平衡,没有考虑如此极端情况下的时间和精度的平衡?所以我才想修改步长,自己来放弃精度,减少时间
2020年09月05日 15点09分
吧务
level 12
关于FindMinimum的详细介绍和参数设置,推荐帮助中的“数值非线性局部最优化”部分,在地址栏输入tutorial/ConstrainedOptimizationLocalNumerical,或直接访问在线版本
https://reference.wolfram.com/language/tutorial/ConstrainedOptimizationLocalNumerical
不过个人感觉mma的数值优化可以自己调整的地方不多,即使看完了帮助也有很大可能性达不到楼主的目的。
相比之下,反倒是那个“算一次要5到6秒”的目标函数,我认为优化空间会比较大,如果方便的话建议把notebook发上来让大家优化下试试
2020年09月06日 12点09分 4
难道我已经习得了隔山打牛大法,用错的ID也能召出本人了?![滑稽]
2020年10月03日 05点10分
研究了一下优化方法,感觉还是模拟退火比较简单,易调节(比如步长),我比较喜欢,notebook就不发了,辣鸡代码就不发了(因为搞了个大型的数值微分方程,所以很慢)
2020年10月04日 06点10分
1