【问题标题】:Simulated annealing, normalized temperature模拟退火,归一化温度
【发布时间】:2020-04-26 14:44:46
【问题描述】:

我有一个问题需要最大化给定函数的 X 值:

这是公式的python代码:2 ** (-2 *((((x-0.1) / 0.9)) ** 2)) * ((math.sin(5*math.pi*x)) ** 6)

我正在对这项工作使用模拟退火算法,但我遇到了问题。

probability = pow(math.e, (actual_cost - best_cost) / temperature)

我的“成本”(我正在尝试优化的)是一个非常短的数字,通常在 0 到 0.1 之间,但另一方面,我的温度大约是 100。

所以,当我应用概率函数时,我的结果总是大约 99%,这使得我的算法在所有迭代中都接受负值,而不是在整个迭代中降低这个概率。

如何调整温度值以通过迭代改变概率?

【问题讨论】:

  • 为什么你的温度是固定的?通常你会根据你的问题来选择它。如果您不必使用自己的算法,可以使用一个实现:scipy.optimize.basinhopping。该函数中 T 的默认值为 1.0 。
  • 这是一个不错的选择,我会尝试研究这个实现,以更多地了解如何为我的问题设置一个合适的温度!坦克

标签: python algorithm mathematical-optimization simulated-annealing


【解决方案1】:

可以在scipy.optimize.basinhopping 的文档中找到解决方案:

选择T:参数T是 大都会标准。如果满足以下条件,则始终接受 Basinhopping 步骤 func(xnew) < func(xold)。否则,他们被接受 概率:

exp( -(func(xnew) - func(xold)) / T )

因此,为了获得最佳效果,T 应该与典型的 局部最小值之间的差异(函数值)。 (高度为 局部最小值之间的“墙”无关紧要。)

如果T 为 0,则算法变为 Monotonic Basin-Hopping,其中所有 增加能量的步骤被拒绝。

【讨论】:

    猜你喜欢
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多