2011-03-26 70 views
1

我一直试图了解随机爬山者一段时间,但没有任何运气。我浏览了一本关于启发式的书,并得到了一个伪代码。我不明白概率函数应该是什么样子。我知道新解决方案是随机抽取的,并且基于某种概率被接受,但我没有得到的是如何编程这个概率。 感谢了解随机爬山登山者

伪代码 - 从如何解决这个问题:现代启发式扫描 - Zbugniew Michalewicz,大卫·福格尔

procedure stochastic hill-climber 
begin 
    t <- 0 
    select a current string vc at random 
    evaluate vc 
    repeat 
      select the string vn from the neighbourhood of vc 
      select vn with probability 1/(1+(e^(evaluation(vc) - evaluation(vn))/T)) 
      t <- t + 1 
    until t=MAX 
end 
+1

你可以添加伪代码到你的问题? – 2011-03-26 13:14:20

+0

嗨,我编辑我的问题,包括伪代码,谢谢 – smMavrik 2011-03-26 13:22:54

回答

1

这是有一个名为评价适应度函数遗传算法的一种形式。它选择一个当前和邻居之间有很大正面区别的邻居。它有一个S形激活函数1 /(1 + e ^(something)),这意味着它将映射到区间(0,1)。我相信T是随着时间的推移缩小差异的大小,使答案最终收敛到极限。 t只是代表算法中的一代的计数器。只要t达到最大值,算法就会结束。希望这可以帮助。

+0

谢谢,虽然我不明白我将如何选择一个特定的邻居。我需要检查所有邻居的概率,并接受最高概率的概率吗? – smMavrik 2011-03-26 13:41:20

+0

你只需要检查“一个”邻居不是全部的概率。您需要生成一个介于0.0到1.00之间的随机数,并且如果它小于vc和vn的评估差异的概率,则会进行过渡。缺失的部分是他们假定您生成的随机数,以确定是否应该转换。如果你的随机数> =,则计算出的概率移动到下一个邻居。 – 2011-03-28 13:24:46