人工ニューラル ネットワーク (三目並べ) をコーディングするにはどうすればよいですか?[閉まっている]

StackOverflow https://stackoverflow.com/questions/761216

質問

人工ニューラルネットワークを使って三目並べをしたいです。私のネットワーク構成は次のとおりです。9 つのフィールドのそれぞれに 2 つの入力ニューロンを使用します。もちろん、入力ニューロンは 18 個あります。すべてのフィールドについて、プレーヤー 1 の部分に 1 つの入力ニューロン、プレーヤー 2 の部分に 1 つのニューロンがあります。それに加えて、現在のボードの位置を評価する出力ニューロンが 1 つあります。出力値が高いほど、プレーヤー 1 のポジションが高くなります。値が低いほど、プレイヤー 2 にとって有利になります。

しかし、私の問題は次のとおりです。そのニューラル ネットワークをどのようにコーディングすればよいでしょうか?私のアイデアは、入力ニューロンに Array[1-18] を使用することでした。この配列の値は入力重みです。ループを使用して配列を調べます。アクティブ化されるニューロンがあるたびに、出力値に重みを追加します。したがって、出力値は、アクティブ化された入力ニューロンの重みの合計になります。

Output = SUM(ActivatedInputNeurons)

これはネットワークをプログラミングする良い方法だと思いますか?もっと良いアイデアはありますか?

助けていただければ幸いです。前もって感謝します!

役に立ちましたか?

解決

さて、あなたは18個のニューロンの入力層、および1個のニューロンの出力層を持っています。それで大丈夫です。しかし、あなたは、ニューラルネットに関係への入力を入れる機会を与える必要があります。そのためには、少なくとも一つの中間層を必要としています。私は中間層で9個のニューロンを使用することを提案します。これらの各々は、各入力ニューロンに接続する必要があり、出力ニューロンは、各中間に接続しなければなりません。各そのような接続は、重量を有し、各ニューロンが活性化レベルを有している。

次に、あなたはすべてのニューロン、当時の層を通って行きます。入力層は、ちょうどボード状態で活性化されます。すべての更なるニューロンのために、あなたは、接続されたニューロンの活性化レベルの製品との接続の重量を超えるすべて、それぞれの接続との和を通過します。最後に、あなたはこの合計にシグモイド関数を適用することによって、活性化レベルを計算します。

これは動作原理です。さて、あなたはより良い結果を得るために、このネットを訓練する必要があります。これにはいくつかのアルゴリズムがありますが、あなたには、いくつかのグーグルと読み取りを行う必要があります。最後に、あなたは結果が十分に速く説得得ることはありませんニューロンおよび層数を調整することがあります。たとえば、9個のニューロンに入力層を減らすことができるとO.はおそらく別の中間層は、より良い結果をもたらし追加、または層のニューロンの数を増やすためのXのための+1と-1でそれらを有効にします。

他のヒント

かわいされるものと考えられ有意義概要のすべての設定が有効になっている一つの出力ニューロン.かりを見る:

    I I I             O O O
    I I I      x      O O O
    I I I             O O O
9 input neurons  9 output neurons

完全に接続したネットワーク、81ります。その後、出力神経細胞の相対的に沿った位置にします。

私のチックプロジェクトを見てください。私は、ニューラルネットワークと遺伝的アルゴリズムの両方でこの問題を解決してきました。ソースコードは自由に利用可能である。

http://www.roncemer.com /三目並べ-実験・イン・機械学習する

私は、あなたが「伝統的」フィードフォワードANNは、伝達関数を用いを実装するべきだと思いますそれはあなたが逆伝播を使用して、それを訓練することができますよう。これらのコードは、通常、数行のコードをされて終わる、このような何かます:

SetupInputs();
for (l = 1 .. layers.count)
    for (i = 0 .. layers[l].count)
        sum = 0
        for (j = 0 .. layers[l-1].count)
            sum += layers[l-1][j] * weights[l-1][j]
        layers[l][i] = TransferFunction(sum)

これはAI符号化のための優れたスタータープロジェクトですが、完全な解決策を考え出すことはSOのための答えの大への道になります。

ほとんどのソフトウェアと同じように、私はオブジェクト指向の設計を使用することをお勧めします。たとえば、次の入力、重み、および出力機能を有するNeuronクラスを定義します。次に、あなたのネットワークを構築するために、これらのNeuronのオブジェクトのいくつかを作成します。

人工ニューラルネットワーク上のの良い出発点のためのWikipediaの記事を参照してください。

コードと幸運!多くの楽しみのような音ます。

これはあなたの質問に対する直接の答えではありませんが、次のフレームワーク/ツールを参照してください。 SNNS またはその Java 版 JavaNNS. 。そこであなたの質問に対する答えが見つかると確信しています。

ウェイトを追加した後、あなたは負の数をできるようにしたい場合は、人々は通常、TANHを使用し、機能を使用して合計を正規化する必要があります。

編集

ここにあります私は数年前に働いていたJavaの多層パーセプトロンを実装。これは、チェッカーを使用したが、あまりの入力であなたもチェッカーのためにそれを使用することができます。

また、あなたはおそらく勝つためにそれを教える方法を把握する必要がありますが、別の問題のthats。

あなたがFANNまたはNeurophなどのニューラルネットワークライブラリを使用する場合は、

あなたは時間の節約になります。

あなたの入力をエンコードするための一つの方法は、9個の入力ニューロンです。出力は9個のニューロンことも良いです。私は他のリプレイに表示されていないことは、隠れ層のサイズです。私はあなたが伝統的な3層でMLPを使用しようとしていると仮定します。隠れ層のサイズは常に謎です。私は10個の隠されたニューロンをしようとするだろう。

の伝達関数は次のように入力をエンコードすることができるシグモイドの場合:

0.0 - Oプレーヤー

1.0 - Xプレーヤー

0.5 - 空の

ANNの出力は9つの実数になります。この場合、細胞のいくつかは既に占有されます。あなたは空のセルに対応し、最高出力値を検索することができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top