随机爬山算法

6

我正在尝试在Java中实现随机爬山算法。我知道这个算法会产生一个新的解决方案,然后根据它有多坏/好来接受解决方案。例如,如果非常糟糕,那么它的选择机会就很小,如果稍微糟糕一点,那么被选中的机会就更大,但我不确定如何在Java中实现这种概率。

在Google上浏览时,我看到了这个方程,其中;

  • f代表旧适应度
  • f'代表新适应度
  • T是一个参数

enter image description here

我不太确定如何解释这个方程。

请问有人能帮我学习如何在Java中实现这个吗?


Pr() 是概率。因此,对于给定的 ff'TPr(accept) 表示接受解决方案的概率。 - Alex A.
为了帮助您,我们需要更多关于您尝试过的代码以及为什么不适合您需求的信息。如果能提供一个示例会更好。 - Alex A.
嗨,Alex,我正在努力理解这个算法。我不太确定如何在Java中实现它。 - Mikey
2个回答

5
这个方程式中,等式左侧的 p 是一个介于0和1之间的双精度浮点数。oldFitnessnewFitnessT 也可以是双精度浮点数。
你的代码中会有类似以下的内容:
double p = 1 / (1 + Math.exp((oldFitness - newFitness) / T));
if (Math.random() < p) {
    // accept the new solution

0

在这本书《人工智能:一种现代方法》中,您可以找到关于爬山算法的良好理解。此书还有一个代码库,在这里您可以找到它。

这里是Java语言实现的爬山算法(HillclimbingSearch.java)。但是,这个Java文件需要导入一些其他源文件。 如果您查看代码库会更好。在这个类中,您有一个公共方法search() -

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

从方法签名中,您可以看到此方法需要一个Problem p并返回List of Action。要获取这些ProblemAction,您必须使用aima框架。
您可以在here找到有关随机爬山的更多解释。
希望能帮到您。 非常感谢。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接