我正在尝试在Java中实现随机爬山算法。我知道这个算法会产生一个新的解决方案,然后根据它有多坏/好来接受解决方案。例如,如果非常糟糕,那么它的选择机会就很小,如果稍微糟糕一点,那么被选中的机会就更大,但我不确定如何在Java中实现这种概率。
在Google上浏览时,我看到了这个方程,其中;
- f代表旧适应度
- f'代表新适应度
- T是一个参数
我不太确定如何解释这个方程。
请问有人能帮我学习如何在Java中实现这个吗?
我正在尝试在Java中实现随机爬山算法。我知道这个算法会产生一个新的解决方案,然后根据它有多坏/好来接受解决方案。例如,如果非常糟糕,那么它的选择机会就很小,如果稍微糟糕一点,那么被选中的机会就更大,但我不确定如何在Java中实现这种概率。
在Google上浏览时,我看到了这个方程,其中;
我不太确定如何解释这个方程。
请问有人能帮我学习如何在Java中实现这个吗?
p
是一个介于0和1之间的双精度浮点数。oldFitness
、newFitness
和 T
也可以是双精度浮点数。double p = 1 / (1 + Math.exp((oldFitness - newFitness) / T));
if (Math.random() < p) {
// accept the new solution
在这本书《人工智能:一种现代方法》中,您可以找到关于爬山算法的良好理解。此书还有一个代码库,在这里您可以找到它。
这里是Java语言实现的爬山算法(HillclimbingSearch.java)。但是,这个Java文件需要导入一些其他源文件。 如果您查看代码库会更好。在这个类中,您有一个公共方法search() -
public List<Action> search(Problem p){}
Problem
p并返回List
of Action
。要获取这些Problem
和Action
,您必须使用aima框架。
Pr()
是概率。因此,对于给定的f
、f'
和T
,Pr(accept)
表示接受解决方案的概率。 - Alex A.