随机爬山

时间:2015-03-03 19:37:02

标签: java algorithm simulated-annealing stochastic hill-climbing

我正在尝试用Java实现Stoachastic Hill Climbing。据我所知,这个algorthim提出了一个新的解决方案,随机挑选,然后根据它的好坏来接受解决方案。例如,如果它非常糟糕,那么它将有一个很小的机会,如果它很糟糕,那么它将有更多机会被选中,但我不确定如何在java中实现这个概率。

在谷歌上浏览时,我偶然发现了这个等式,

  • f表示旧的健身
  • F'尊重新的健身
  • T是参数

enter image description here

我不确定如何解释这个等式。

有人可以帮助我如何在Java中实现它吗?

2 个答案:

答案 0 :(得分:4)

等式p的左侧将是0和1之间的两倍,包括在内。 oldFitnessnewFitnessT也可以是双打。

您的代码中会有类似的内容:

double p = 1 / (1 + Math.exp((oldFitness - newFitness) / T));
if (Math.random() < p) {
    // accept the new solution

答案 1 :(得分:0)

你可以在本书Artificial Intelligence a Modern Approach中找到关于爬山算法的一个很好的理解。本书还有一个代码库,here你可以找到它。

这是java中HillClimbing(HillclimbingSearch.java)的实现。但是这个java文件需要导入一些其他源文件。 它更好如果你看一下代码库。在这个课程中,你有一个公共方法搜索() -

public List<Action> search(Problem p){}  

从方法签名中,您可以看到此方法需要Problem p并返回List Action。要获得这些ProblemAction,您必须使用aima框架。

您可能会发现有关随机爬山的更多解释here

希望它会有所帮助 非常感谢。