algorithm - 模拟退火中T代表什么?

标签 algorithm artificial-intelligence simulated-annealing

我想针对不同的情况使用模拟退火。网络中的每个模拟退火算法都提供了该算法的温度示例。就像维基百科中的那样

s ← s0; e ← E(s)                                  // Initial state, energy.
sbest ← s; ebest ← e                              // Initial "best" solution
k ← 0                                             // Energy evaluation count.
while k < kmax and e > emax                       // While time left & not good enough:
 T ← temperature(k/kmax)                         // Temperature calculation.
 snew ← neighbour(s)                             // Pick some neighbour.
 enew ← E(snew)                                  // Compute its energy.
 if P(e, enew, T) > random() then                // Should we move to it?
  s ← snew; e ← enew                            // Yes, change state.
 if enew < ebest then                            // Is this a new best?
   sbest ← snew; ebest ← enew                    // Save 'new neighbour' to 'best found'.
 k ← k + 1                                       // One more evaluation done
return sbest                                      // Return the best solution found.

现在这个“T”一般代表什么?假设我将使用模拟退火来进行国际象棋。我将使用该算法来找到计算机的下一步棋。我有当前状态(S)及其值(e)。我有下一个状态(snew)及其值(enew)。那么国际象棋中的“T”是什么?我需要吗!该算法有任何通用形式吗?我的意思是,如果没有这个温度示例,我就可以得到基本的想法!我找不到任何。请帮忙。提前致谢......

最佳答案

网上的所有示例都使用温度示例,因为这是模拟退火的标准术语 - SA 是一种受物理启发的技术,以称为退火的现实世界现象为模型。这与遗传算法的所有示例如何谈论基因和染色体非常相似。

如果你将数学追溯到足够远的地方,就会发现各种优化元启发法和一些物理过程之间存在一些有趣的联系,通常通过熵的概念来桥接。

但是,粗略地说,模拟退火中的温度 T 对应于算法在搜索全局(或至少是更好的局部)最小值时“跳出”局部最小值的意愿或能力。高温对应于更高的随机性,跳跃更多,甚至可能最终得到更差的配置;低温对应于较低的随机性(最终是纯粹的贪婪算法),并且无论多么浅都无法逃脱任何局部最小值。

至于如何在您的应用程序中使用这个想法,好吧。为了让大多数元启发法正常工作,需要一些洞察力和创造力。但你永远找不到不讨论温度的 SA 讨论。

关于algorithm - 模拟退火中T代表什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17247615/

相关文章:

python - SciPy 全局最小曲线拟合

java - 多层神经网络上的退火:XOR实验

java - 查找满足条件的字符串的子串数

machine-learning - 激活函数和传递函数之间有什么区别吗?

artificial-intelligence - 随机化神经网络输入顺序的影响

artificial-intelligence - 自上而下的游戏 AI

java - 模拟退火代码的 OutOfMemory 问题

java - 一种调度算法

algorithm - 其中的递归和内存使用

arrays - 我怎么能没有。交换操作以形成第二个数组