メルマガ:あゆしゃのC言語プログラミング
タイトル:あゆしゃのC言語プログラミング(Vol.403) AYGON2 ニューロンの定義  2003/12/02


/*========================================================*/
    <<<あゆしゃのC言語プログラミング>>>
/*========================================================*/
 第403回 AYGON2 ニューロンの定義
 発行    2003年12月2日(火曜日)
 発行数   約3200

{magclick}
{magclick}
/*========================================================*/
 はじめに ( 決り文句 )
/*========================================================*/
・このメールマガジンはまぐまぐさんから発行しています。
・ジャンルは、マルチメディアのプログラム、C言語です。
・このメールマガジンは、横60文字で作成しています。
 また、インデントはすべて半角スペース4つで構成しています。
・ここで扱うプログラムは、C言語と半光年以内のものです。
・登録解除は、まぐまぐさんのホームページでお願いします。
・まぐまぐさんのバックナンバー(下欄参照)を活用して下さい。
・ここは私の復習の場です。内容は約1ヶ月内外に私が勉強した
 内容になっています。最新の技術があれば、へたれもあります。
・わかりやすさを優先させる為、たまに嘘があるかもしれません。

/*========================================================*/
 ご挨拶
/*========================================================*/

 こんにちは。あゆしゃです。

 先日、ガンダムエースの12月号がでましたよね。

 ホワイトベースは現在、リマ。

 リマ?

 ・・・ペルーの首都、だそうです。

 ・・・・・・原作と道がずれてる・・・?

{magclick}
/*========================================================*/
 今回のお題  << AYGON2 ニューロンの定義 >>
/*========================================================*/

 前回、ニューロンの基礎を紹介しました。

 それを踏まえて、囲碁のアルゴリズムとしてどのように
ニューロンを使おうか、ということについて考えて見ます。

/*========================================================*/

 まずは目的から。

 ニューロンを使うことによって、

「この形の時にはここに打つべきだ!」

 という判断を行えることを目的とします。

 簡単な図形判断ですね。

 よって、ニューロンの入力は「現状の石の形」、出力は
「ここここ!」となります。

 ニューロンの基礎に従い、入力はたくさん、出力は1つです。

/*========================================================*/

 1つのニューロンは盤面上の1目、としましょう。

 盤面上は19*19=361目あります。つまりニューロンの
数は361個ということになります。

struct neuron_t neuron[ 19 ][ 19 ];

 という感じですね。

 1つのニューロンの中には、触手があります。とりあえず、

struct neuron_t
{
    char blk[ 19 ][ 19 ];
    char wht[ 19 ][ 19 ];
    char sps[ 19 ][ 19 ];
};

 という感じにしましょうか。

 盤面上にある黒石と白石と空きの状態を読み取る、という感じ
です。
 入力用の触手が1つのニューロンに1083本ある、ということ
になります。

 1ニューロンあたり1083バイト、361ニューロン全体で
390963バイト、約400キロバイトですね。

 これらの触手は、盤面上の石の状態を保持するテーブルに
つながります。

 ニューロンの基礎にて、入力用の触手ごとに、信号に対して反応
する強さが違う、という項目がありました。

 このキャラの配列は、1083本の触手の、それぞれの反応の
強さを示します。

 これによって、「おお、あそこが二間開きならここ打てここ!」
という反応ができるのではないでしょうか?

/*========================================================*/

 先走って、プログラムを書いてみましょう。

int x = -1; // 打てポイント初期値
int y = -1; // 打てポイント初期値
int p = -1; // 最大パワー初期値
for( int i = 0; i < NUM; i++ ) { // 空きを探す盤面ループ
for( int j = 0; j < NUM; j++ ) { // 空きを探す盤面ループ
if( board[ i ][ j ] ) continue; // 盤面に石があれば無視
// この空き場所に打つ価値をニューロンに問いただす //
int s = 0; // 打てパワー合計
for( int k = 0; k < NUM; k++ ) { // 盤面ループ
for( int l = 0; l < NUM; l++ ) { // 盤面ループ
if( board[ k ][ l ] == 0 ) { // 空きなら
s += neuron[ i ][ j ].sps[ k ][ l ]; // 空きとして加算
}
else if( board[ k ][ l ] < 0 ) { // 黒なら
s += neuron[ i ][ j ].blk[ k ][ l ]; // 黒として加算
}
else s += neuron[ i ][ j ].wht[ k ][ l ]; // 白として加算
}
if( s > p ) { // このパワーが現在の最大パワーを越えるなら
p = s, x = i, y = j; // 打てポイントと最大パワーを更新
}
}
}
}

 こんな感じ? たのしみですねぇ。

 ちなみに、上下左右反転と白黒反転の、合計8パターンを考慮
できるものにも改造できるはずです。楽しみですねぇ!

/*========================================================*/
 さいごに
/*========================================================*/

 最近寒いですね。
 そういえばこのメルマガ、いつの間にか5周年目となりました。

 遅ればせながら、これからもよろしくお願い申し上げます。

 ついでといっては何ですが、喪中ですので、この場を借りて
年末と新年のご挨拶とさせていただきます。

{magclick}
/*========================================================*/
 次回予告
/*========================================================*/

 次回は12月3日(水曜日)に、第404回を送ります。
 お題は「AYGON3 ニューロン構築の方法」

 さて、ニューロンの仕組みを定義しました。が、どうやって
数値データを入れましょう?

 お楽しみに!

/*========================================================*/
 最後の決り文句
/*========================================================*/
 このメールマガジンは、まぐまぐさんから発行しています。
 このメールマガジンを解除したい場合は、まぐまぐさんをご利用
ください。このメルマガのまぐまぐアイディーは最後にあります。
 このメールマガジンには広告が挿入されます。
 このメールマガジンの内容に文面の引用はありません。
 めーらっくすの場合はめーらっくすの利用方に従ってください。
 このメールマガジンの内容は、転用、流用、宣伝、リンク、
手入力 なんて大歓迎です。

{magclick}
/*========================================================*/
 
/*========================================================*/

発行者 あゆしゃ

まぐまぐアイディー
0000020674

まぐまぐバックナンバー
http://jazz.tegami.com/backnumber/frame.cgi?id=0000020674

あゆしゃの世界
http://ayusya.hp.infoseek.co.jp/

登録と解除
http://www.mag2.com/m/0000020674.htm

ご意見・ご感想・ご質問メール
mailto:ayusya@flamenco.plala.or.jp

めーらっくす <<過去ログがタイトル別になっています>>
http://www.mailux.com/mm_dsp.php?mm_id=MM3E1AEE285AB4F

ブラウザの閉じるボタンで閉じてください。