我想加快MATLAB中凸优化问题的收敛速度。
我的目标函数是凸的,有三个参数,我使用渐变上升来实现最大化。
现在我手动编写迭代,终止条件是新参数值和旧参数值之间的差异非常小(约0.0000001)。我不能根据迭代次数终止,因为它不能保证它已经收敛到最佳解决方案。
因此,需要花费大量时间才能收敛 - 差不多2天!有什么方法可以加快速度吗?
实际上我的目标函数只有三个参数。我知道我的第一个参数的值应该大于第二个参数的值。
因此,从初始条件开始,第二个参数的值开始快速增加。达到某一点后,第一个参数的值开始迅速增加。当第一个参数的值开始增加时,第二个参数的值开始缓慢下降。最终,我的第一个参数的值大于第二个参数的值。
有没有办法加快这个过程? 2天是很长的一段时间。此外,计算梯度也是耗时的。它需要大量的矩阵计算。
我不想从定义的参数值开始,比如parameter1的值大于second的值。此外,第一个参数不必总是大于第二个参数。我只知道哪个参数值应该更大。有什么建议吗?
答案 0 :(得分:0)
如果渐变的计算速度非常慢并且你仍然想要手动实现,你可以试试这个,它将需要更多的步骤,但由于步骤如此简单,可能会更快:
定义步骤
尝试变量在步长方向上移动-1,0或1次的所有点(3 ^ 3 = 27种可能性)
选择最好的一个
如果最好的是前一个,请将步长乘以因子0.5
当然,这个过程的成功取决于你的功能的属性。此外,应该注意的是,更简单的解决方案可以是将所需的差异设置为0.0001