我正在研究骑士之旅的问题,并决定使用神经网络在python中实现它来寻找解决方案。
可以在Wikipedia
上找到该方法的一般说明虽然我认为我已经正确地实现了它(我看不出其他任何错误的东西),但它不起作用,它会更新一些链接,删除连接顶点的度数大于2的边,但它并没有集中在解决方案上。
我想知道是否有人对我的错误实施有任何想法(对可怕的代码感到抱歉)。
修改
工作代码可以在Yacoby.net
答案 0 :(得分:3)
您无法更新神经元。由于U [t + 1]取决于U [t]和V [t],如果你已经更新了V,则U的计算将是错误的
我认为您应该将更新分为两个阶段 update_state和update_output,所以所有的U都被更新,然后是所有的V
for n in neurons:
n.update_state()
for n in neurons:
n.update_output()
答案 1 :(得分:2)
第一印象是你只有一个缓冲板用于电路板。我的基础是我没有看到迭代之间有任何缓冲交换 - 我没有仔细观察,可能很容易出错。
如果您修改了一个缓冲区,当您进行邻居计数时,您可以将它们建立在部分修改的电路板上 - 而不是您在开始时使用的电路板。
答案 2 :(得分:0)
查看代码后,我认为您对所用公式的解释可能不正确。你说在更新状态时你添加四个而不是两个并减去神经元本身的输出。它看起来像你在两次减去神经元本身的输出。你找到邻居的代码似乎没有区分神经元的邻居和神经元本身,你运行这个代码两次 - 每个顶点一次。
我自己的代码测试似乎证实了这一点。当我减去神经元自身的输出两次而不是一次时,收敛速度会大大提高。