2

私はナイトツアーの問題を調べていて、解決策を見つけるためにニューラルネットワークを使用してPythonでそれを実装することにしました。

メソッドの一般的な説明はウィキペディアで見つけることができます

私はそれを正しく実装したと思いますが(他に間違っているものは何も見えません)、機能しません。いくつかのリンクを更新し、接続する頂点の次数が2を超えるエッジを削除しますが、そうではありません。ソリューションに収束しません。

私が間違って実装したものについて誰かが何か考えを持っているかどうか疑問に思いました(恐ろしいコードについて申し訳ありません)。

編集
作業コードはGitHubhttps ://github.com/Yacoby/KnightsTourにあります

4

3 に答える 3

3

ニューロンをその場で更新することはできません。U[t+1] は U[t] と V[t] に依存するため、既に V を更新している場合、U の計算は間違っています。

更新を update_state と update_output の 2 つのフェーズに分割する必要があると思います。そのため、すべての U が更新され、次にすべての V が更新されます。

    for n in neurons:
        n.update_state()
    for n in neurons:
        n.update_output()
于 2009-10-11T19:34:35.520 に答える
2

第一印象は、ボード用のバッファーが 1 つしかないということです。これは、反復間でバッファー スワップが見られないという事実に基づいています。詳しく調べていないため、簡単に間違っている可能性があります。

単一のバッファーを所定の位置に変更すると、近隣のカウントを行うときに、最初に持っていたボードではなく、部分的に変更されたボードに基づいて計算されます。

于 2009-10-11T18:47:02.837 に答える
0

コードを調べたところ、使用した数式の説明が間違っている可能性があります。状態を更新するとき、2 つではなく 4 つを追加し、ニューロン自体の出力を差し引くとあなたは言います。ニューロン自体の出力を 2 回減算しているように見えます。隣人を見つけるコードは、ニューロンの隣人とニューロン自体を区別するようには見えず、このコードを頂点ごとに 2 回実行します。

私自身のコードでのテストは、これを確認しているようです。ニューロン自体の出力を 1 回ではなく 2 回減算すると、収束率が大幅に向上します。

于 2011-12-03T18:15:35.443 に答える