6

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

在浏览 Google 时,我遇到了这个等式,在哪里;

  • f代表旧健身
  • f'代表新的健身
  • T 是一个参数

在此处输入图像描述

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

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

4

2 回答 2

5

等式的左侧p将是介于 0 和 1 之间的双精度数,包括 0 和 1。oldFitness,newFitnessT可以是双打。

您的代码中将包含与此类似的内容:

double p = 1 / (1 + Math.exp((oldFitness - newFitness) / T));
if (Math.random() < p) {
    // accept the new solution
于 2015-03-03T20:41:31.567 回答
0

您可以在《人工智能现代方法》这本书中找到对爬山算法的很好理解。这本书也有一个代码库,在这里你可以找到它。

这是一个在java中的HillClimbing(HillclimbingSearch.java)的实现。但是这个 java 文件需要导入一些其他的源文件。如果您查看代码存储库,那就更好了。在这个类中,你有一个公共方法 search() -

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

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

您可能会在此处找到有关随机爬山的更多解释

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

于 2015-03-03T20:19:29.253 回答