如何在模拟退火中 select 一个状态的邻居?
How to select the neighbours of a state in Simulated Annealing?
我正在尝试将 SA(模拟退火)应用于线性回归问题。
例如:我现在有 200
点,我想拟合一条线并得到它的 k
和 b
。
我的问题是:我试图用 MATLAB 解决这个问题。但我对如何选择 下一个状态 感到困惑。我在我的程序中试过这个:
next_k = k + (2*rand-1);
next_b = b + (2*rand-1);
我觉得不是很好,结果k
和b
也不准确。我想要一种更有效的方法来扰乱 SA 中的当前状态。我想通过这样做,我可以在这个问题上得到更准确的结果。在这个问题中,成本函数实际上与最小二乘法相同。我只是想申请
SA 到估计问题。
对于 SA,有时快速直接的提议非常有效,因为它们可以快速实施。
(?)效果好吗?
如果它在最后一英里没有收敛,您可能想尝试选择类似建议但随机性较小的变体,以优化最后几个微小的步骤。大噪声在开始时会很快起作用,但可能不会让您接近(局部)最佳值。
喜欢https://pypi.org/project/frigidum/
中的基本示例
它正在使用 2 个提案,一个具有较大的随机噪声,一个具有微小的噪声。
其他变化:随机仅调整k
或b
,这样退火会更平滑。
我正在尝试将 SA(模拟退火)应用于线性回归问题。
例如:我现在有 200
点,我想拟合一条线并得到它的 k
和 b
。
我的问题是:我试图用 MATLAB 解决这个问题。但我对如何选择 下一个状态 感到困惑。我在我的程序中试过这个:
next_k = k + (2*rand-1);
next_b = b + (2*rand-1);
我觉得不是很好,结果k
和b
也不准确。我想要一种更有效的方法来扰乱 SA 中的当前状态。我想通过这样做,我可以在这个问题上得到更准确的结果。在这个问题中,成本函数实际上与最小二乘法相同。我只是想申请
SA 到估计问题。
对于 SA,有时快速直接的提议非常有效,因为它们可以快速实施。
(?)效果好吗?
如果它在最后一英里没有收敛,您可能想尝试选择类似建议但随机性较小的变体,以优化最后几个微小的步骤。大噪声在开始时会很快起作用,但可能不会让您接近(局部)最佳值。
喜欢https://pypi.org/project/frigidum/
中的基本示例它正在使用 2 个提案,一个具有较大的随机噪声,一个具有微小的噪声。
其他变化:随机仅调整k
或b
,这样退火会更平滑。