MATLAB:凸优化算法的缓慢收敛

MATLAB:凸优化算法的缓慢收敛,matlab,mathematical-optimization,convex-optimization,Matlab,Mathematical Optimization,Convex Optimization,我想在MATLAB中加速一个凸优化问题的收敛速度 我的目标函数是凸的,有三个参数,我用梯度上升法求最大值 现在我正在手动编写迭代,终止条件是新参数值和旧参数值之间的差异非常小,大约为0.0000001。我不能根据迭代次数来终止,因为它不能保证它已经收敛到最优解 因此,需要花费大量的时间来收敛-几乎2天!有没有办法加快速度 实际上我的目标函数只有三个参数。我知道第一个参数的值应该大于第二个参数的值 因此,从初始条件开始,第二个参数的值开始快速增加。到达某一点后,第一个参数的值开始快速增加。当第一个

我想在MATLAB中加速一个凸优化问题的收敛速度

我的目标函数是凸的,有三个参数,我用梯度上升法求最大值

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

因此,需要花费大量的时间来收敛-几乎2天!有没有办法加快速度

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

因此,从初始条件开始,第二个参数的值开始快速增加。到达某一点后,第一个参数的值开始快速增加。当第一个参数的值开始增大时,第二个参数的值开始缓慢减小。最终,第一个参数的值大于第二个参数的值

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


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

如果渐变的计算速度非常慢,并且您仍然希望手动执行,您可以尝试此操作,它将需要更多步骤,但可能会更快,因为步骤非常简单:

定义步长

尝试变量沿步长3^3=27的方向移动-1、0或1次的所有点

挑最好的

如果最好的是上一个,则将步长乘以系数0.5


当然,这个过程的成功取决于函数的属性。此外,需要注意的是,一个更简单的解决方案是将期望的差值设置为0.0001之类的值。老实说,一点数学知识有助于理解您的问题。目标函数是什么?你在用什么算法?你是如何实施的?我只看到三个可能的问题:你的算法不是目标函数的好选择,你的初始值不好,或者你的实现不是最优的。是的,你不应该告诉我们变量和它们的值,你应该提供更多关于梯度上升实现的细节,特别是你的更新规则。梯度搜索是牛顿类型的优化,但它是这个家族中最慢的。你为什么不试试高斯牛顿,不管有没有LM,或者它是非线性的。大多数情况下,这些都要快得多。完成其他解决方案:也许你可以使用我认为如果你给我们你的代码,至少是执行梯度搜索的部分,最重要的是目标函数,你仍然会得到一个更复杂的答案。如果你的梯度不是解析的,那么你不应该使用基于梯度的方法。您至少应该尝试单纯形法,但我认为Matlab的优化工具箱还有其他非梯度选项。如果你的梯度是分析性的,我绝对同意@GuntherStruyf。尝试使用基于梯度的算法与更好的收敛BFGS是相当不错的。如果这两种方法都不够快,那么您需要分析代码,请参阅帮助分析,并尝试优化正在调用的函数。