1

我想加快 MATLAB 中凸优化问题的收敛速度。

我的目标函数是具有三个参数的凸函数,并且我正在使用梯度上升来最大化。

现在我正在手动编写迭代,终止条件是新参数值和旧参数值之间的差异非常小(大约 0.0000001)。我不能根据迭代次数终止,因为它不能保证它已经收敛到最佳解决方案。

所以,收敛需要很多时间——差不多 2 天!有什么办法可以加快这个速度吗?

实际上我的目标函数只有三个参数。我知道我的第一个参数的值应该大于第二个参数的值。

所以从初始条件开始,第二个参数的值开始迅速增加。达到某一点后,第一个参数的值开始快速增加。当第一个参数的值开始增加时,第二个参数的值开始缓慢下降。最终,我的第一个参数的值大于第二个参数的值。

有什么方法可以加快这个过程吗?2天是很长的时间。此外,计算梯度也很耗时。它需要大量的矩阵计算。

我不想从定义的参数值开始,比如 parameter1 的值大于秒的值。此外,第一个参数不必总是大于第二个参数。我只知道哪个参数值应该更大。有什么建议么?

4

1 回答 1

0

如果梯度的计算非常慢并且您仍然想手动实现,您可以尝试这个,它需要更多的步骤但可能会更快,因为步骤非常简单:

定义步长

尝试变量在步长方向上移动 -1、0 或 1 次的所有点(3^3 = 27 种可能性)

选择最好的

如果最好的一个是你以前的一个,将步长乘以因子 0.5

当然这个过程的成功取决于你的函数的属性。此外应该注意,一个更简单的解决方案可能是将所需的差异设置为 0.0001

于 2012-09-19T15:36:06.117 回答