我正在尝试用Java实现Stoachastic Hill Climbing。据我所知,这个algorthim提出了一个新的解决方案,随机挑选,然后根据它的好坏来接受解决方案。例如,如果它非常糟糕,那么它将有一个很小的机会,如果它很糟糕,那么它将有更多机会被选中,但我不确定如何在java中实现这个概率。
在谷歌上浏览时,我偶然发现了这个等式,
我不确定如何解释这个等式。
有人可以帮助我如何在Java中实现它吗?
答案 0 :(得分:4)
等式p
的左侧将是0和1之间的两倍,包括在内。 oldFitness
,newFitness
和T
也可以是双打。
您的代码中会有类似的内容:
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
。要获得这些Problem
和Action
,您必须使用aima框架。
您可能会发现有关随机爬山的更多解释here
希望它会有所帮助 非常感谢。