众所周知 f(x)=ex 这个函数满足:
- 如果 x>0 那么 f(x)>1。
- 否则 0<f(x)≤1。
对于以下这些题解,他们处理更劣解的方法都是有问题的,不是把正的 x 的 f(x) 跟 rand()/RAND_MAX 比较,就是把负的 x 的 f(x) 跟 rand() 进行比较,就是货真价实的爬山算法而不是模拟退火。
虽然爬山算法的正确性有待论证,但是作为一个模拟退火的入门题目,这样真的及其具有误导性。
本来 Metropolis 接受准则就很难,我认为刚学的时候应该都是先记忆结论在尝试理解,但是结论都错了又谈何理解呢?
综上所述,故请求撤下。
(我用这个题目为模板写的爬山算法去做其他模拟退火的题目卡了好久还不知道,一直以为板子是对的,因为这个题目都过了。)
PS:这个题解的作者在评论里指出了是爬山算法,不知道应不应该撤下。
另外有一个金钩爷也指出了这个问题,但是因为年代久远好像没有人处理。Link