如何在模拟退火中 select 一个状态的邻居?

How to select the neighbours of a state in Simulated Annealing?

我正在尝试将 SA(模拟退火)应用于线性回归问题。
例如:我现在有 200 点,我想拟合一条线并得到它的 kb
我的问题是:我试图用 MATLAB 解决这个问题。但我对如何选择 下一个状态 感到困惑。我在我的程序中试过这个:

next_k = k + (2*rand-1);
next_b = b + (2*rand-1);

我觉得不是很好,结果kb也不准确。我想要一种更有效的方法来扰乱 SA 中的当前状态。我想通过这样做,我可以在这个问题上得到更准确的结果。在这个问题中,成本函数实际上与最小二乘法相同。我只是想申请 SA 到估计问题。

对于 SA,有时快速直接的提议非常有效,因为它们可以快速实施。

(?)效果好吗?

如果它在最后一英里没有收敛,您可能想尝试选择类似建议但随机性较小的变体,以优化最后几个微小的步骤。大噪声在开始时会很快起作用,但可能不会让您接近(局部)最佳值。

喜欢https://pypi.org/project/frigidum/

中的基本示例

它正在使用 2 个提案,一个具有较大的随机噪声,一个具有微小的噪声。

其他变化:随机调整kb,这样退火会更平滑。