使用神经网络的骑士之旅

时间:2009-10-11 16:57:09

标签: python graph neural-network

我正在研究骑士之旅的问题,并决定使用神经网络在python中实现它来寻找解决方案。

可以在Wikipedia

上找到该方法的一般说明

虽然我认为我已经正确地实现了它(我看不出其他任何错误的东西),但它不起作用,它会更新一些链接,删除连接顶点的度数大于2的边,但它并没有集中在解决方案上。

我想知道是否有人对我的错误实施有任何想法(对可怕的代码感到抱歉)。

修改
工作代码可以在Yacoby.net

找到

3 个答案:

答案 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)

查看代码后,我认为您对所用公式的解释可能不正确。你说在更新状态时你添加四个而不是两个并减去神经元本身的输出。它看起来像你在两次减去神经元本身的输出。你找到邻居的代码似乎没有区分神经元的邻居和神经元本身,你运行这个代码两次 - 每个顶点一次。

我自己的代码测试似乎证实了这一点。当我减去神经元自身的输出两次而不是一次时,收敛速度会大大提高。