晚期接受爬坡算法

时间:2014-07-29 16:14:45

标签: java algorithm hill-climbing

我正在编写代码来解决护士恢复问题

我已经实施了模拟退火,我有兴趣将结果与延迟接受爬坡进行比较

我找到了一些用于延迟接受的伪代码,但需要一些帮助才能用Java编写它:

Produce an initial solution s
Calculate initial cost function C(s)
Set the initial number of steps I=0
For all k in ( 0.. L-1 ) C_hat[k]=C(s)
Do until a stopping condition
 Construct a candidate solution s*
 Calculate its cost function C(s*)
 v = I mod L
 If C(s*) <= C_hat[v]
 Then accept s*
 Insert cost value into the list C_hat[v] = C(s)
 Increment a number of steps I=I+1
End do

我真的不明白这一点:For all k in ( 0.. L-1 ) C_hat[k]=C(s)

伪代码来自http://www.yuribykov.com/LAHC/LAHC_wonders.pdf

1 个答案:

答案 0 :(得分:1)

我正在为&#34;&#34;元素编写in。关于C的关系和C_hat[k]与&#34; hat&#34;在顶部和下标k上,因为这些东西不能以这种格式显示出来。

For all k in ( 0.. L-1 ) C_hat[k]=C(s)

此行的目的是在算法的其余部分中,您假设您可以在v0的范围内取任何值L-1并测试{{1} }}。除非If C(s*) <= C_hat[v]已经定义,否则这没有意义。上面引用的行确保在您尝试使用该值之前,每个此类C_hat[v]都有一个明确定义的值。

这也意味着你永远不会接受任何比你尝试的第一个更差的解决方案。


顺便说一句,我怀疑在源文档中写入以下行的方式:

C_hat[v]

基于源文档中算法的格式,我得出结论,无论新解决方案是否被接受,都将在循环的每次迭代中执行此操作。下一次索引Insert cost value into the list C_hat[v] = C(s) 出现时,最新的解决方案只需要比先前为索引v尝试的解决方案更好,即使提出的解决方案非常糟糕。这似乎不对。我想知道该行是否实际上应该是v子句的一部分,只有在接受解决方案时才会执行。