我正在尝试用 Java 实现 Stochastic Hill Climbing。我知道这个算法会产生一个随机挑选的新解决方案,然后根据它的坏/好接受解决方案。例如,如果它非常糟糕,那么它的机会很小,如果它有点糟糕,那么它将有更多的机会被选中,但我不确定如何在 java 中实现这个概率。
在浏览 Google 时,我遇到了这个等式,在哪里;
- f代表旧健身
- f'代表新的健身
- T 是一个参数
我不确定如何解释这个等式。
有人可以帮助我如何在 Java 中实现它吗?
我正在尝试用 Java 实现 Stochastic Hill Climbing。我知道这个算法会产生一个随机挑选的新解决方案,然后根据它的坏/好接受解决方案。例如,如果它非常糟糕,那么它的机会很小,如果它有点糟糕,那么它将有更多的机会被选中,但我不确定如何在 java 中实现这个概率。
在浏览 Google 时,我遇到了这个等式,在哪里;
我不确定如何解释这个等式。
有人可以帮助我如何在 Java 中实现它吗?
等式的左侧p
将是介于 0 和 1 之间的双精度数,包括 0 和 1。oldFitness
,newFitness
也T
可以是双打。
您的代码中将包含与此类似的内容:
double p = 1 / (1 + Math.exp((oldFitness - newFitness) / T));
if (Math.random() < p) {
// accept the new solution
您可以在《人工智能现代方法》这本书中找到对爬山算法的很好理解。这本书也有一个代码库,在这里你可以找到它。
这是一个在java中的HillClimbing(HillclimbingSearch.java)的实现。但是这个 java 文件需要导入一些其他的源文件。如果您查看代码存储库,那就更好了。在这个类中,你有一个公共方法 search() -
public List<Action> search(Problem p){}
从方法签名中您可以看到此方法需要一个pProblem
并返回List
. Action
要获得这些Problem
,Action
您必须使用aima框架。
您可能会在此处找到有关随机爬山的更多解释
希望它会有所帮助。
非常感谢。