メルマガ:あゆしゃのC言語プログラミング
タイトル:あゆしゃのC言語プログラミング(Vol.402) AYGON1 ニューロンの基礎  2003/12/01


/*========================================================*/
    <<<あゆしゃのC言語プログラミング>>>
/*========================================================*/
 第402回 AYGON1 ニューロンの基礎
 発行    2003年12月1日(月曜日)
 発行数   約3200

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

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

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

 少し、時間が空いてしまいました。

 別に、ガンダムに忙しかったわけではありません。

 実は。。。


 まぁそれはともかく、前回の回答について1点訂正があります。

 秋の夜長にギレンの野望を楽しんでいたのですが(やっぱり
ガンダムをやっていました^^)、そのときに解答が間違っていた
ことに気がつきました。

 第1問とその回答を再掲します。

/*========================================================*/
第1問 行動可能範囲計算についての問題です。

 以下の関数をご覧ください。

void m( int x, int y, int p )
{
    b[ x ][ y ] = p;
    p -= l[ x ][ y ];
    if( p < 0 ) return;
    if( y > MIN && b[ x ][ y - 1 ] < p ) m( x, y - 1, p );
    if( y < MAX && b[ x ][ y + 1 ] < p ) m( x, y + 1, p );
    if( x > MIN && b[ x - 1 ][ y ] < p ) m( x - 1, y, p );
    if( x < MAX && b[ x + 1 ][ y ] < p ) m( x + 1, y, p );
}

 ご存知、シミュレーションゲームにて、ユニットの行動可能範囲
を計算する関数です。

 b は行動可能範囲と最短経路を記録する2次元配列です。
 l は行動に際しての進入ロスを示す2次元配列です。
 MIN とMAX は座標が取りうる最小と最大をあらわすマクロです。

 さて、ここで問題です。

 この関数は、方眼状のマップについての行動可能範囲を計算する
ものです。

 しかし、「機動戦士ガンダムギレンの野望」でのマップは六角形
であり、この関数を直接使うことはできません。

 そこで、この関数を六角形状のマップでも使えるように改造して
ください。

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

void m( int x, int y, int p )
{
    b[ x ][ y ] = p;
    p -= l[ x ][ y ];
    if( p < 0 ) return;
    if( y > MIN && b[ x ][ y - 1 ] < p ) m( x, y - 1, p );
    if( y < MAX && b[ x ][ y + 1 ] < p ) m( x, y + 1, p );
    if( x > MIN && b[ x - 1 ][ y ] < p ) m( x - 1, y, p );
    if( x < MAX && b[ x + 1 ][ y ] < p ) m( x + 1, y, p );
    if( x > MIN && y < MAX && b[x-1][y+1]<p ) m( x-1,y+1,p);
    if( x < MAX && y < MAX && b[x+1][y+1]<p ) m( x+1,y+1,p);
}

 これでいい、はずです。2行追加されただけですね。

 六角形のマップは、実は方眼状のマップの奇数列を半マス下に
ずらしただけなのです。

方眼のマップ
0 1 2
3 4 5
6 7 8

6角形のマップ
0   2
  1  
3   5
  4
6   8
  7

 という感じです。
 4番のマスに注目してください。

 上下左右に動いた場合、1,7,3,5に移動します。

 これは6角形の場合でも同じです。

 さらに6角形の場合は、6と8にも移動できます。

 だから、上下左右に対する分岐のところで、左下と右下のものを
追加するだけで、6角形に対応したことになります。

 偶数列を半マス下げる場合、左上と右上になります。

 もちろん同様に、奇数行を半マスずらすのであれば、上下左右に
左上と左下、偶数行ならば右上と右下への分岐を追加することに
なりますね。

 なお、2次元配列の形を変える必要はありません。

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

 というものだったのですが、

> 六角形のマップは、実は方眼状のマップの奇数列を半マス下に
>ずらしただけなのです。

 この部分が違います。奇数行を半マス右にずらした、という
のが正しいです。

 そして追加する分岐のルーチンは、右上と右下の2つというのが
正しい正解となります。

 以上、お騒がせしました。

{magclick}
/*========================================================*/
 今回のお題  << AYGON1 ニューロンの基礎 >>
/*========================================================*/

 さて、囲碁アルゴリズムでニューロンを使おうと思います。

 ニューロンは、人工知能のアルゴリズムに出てくるプログラム
なので、知らない人が多いかと思います。

 そこで、簡単に基礎だけ紹介します。

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

 ニューロンというのは、もともとは神経細胞のことです。

 人工知能のプログラムにおいて、神経細胞の動きをプログラムで
再現しようというアイデアがあり、そこで神経細胞の仕組みと動き
をプログラムで表現したアルゴリズムそのものをニューロンと
いうようになりました。

 ニューロンは人工知能だけでなく、分散型の計算システムとして
利用されることもあるアルゴリズムです。

 ちなみにスペルは neuron です。

 ニューロ(neuro)ということもありますが、こちらは形容詞、
なのかな? ニューロコンピュータとかに使います。

 でも後ろにネットワークをつけるときには、ニューラル
ネットワークといいます。むずかしいですね。

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

 ということで、ニューロンをプログラムで扱うには、人間の
神経細胞がどのようになっているかを知っている必要があります。

 神経細胞は、信号を伝達して、腕を動かしたり、熱いという
反応を脳に伝えたりします。

 神経細胞が構成する信号伝達のネットワークを、ニューラル
ネットワークといいます。

 神経細胞にはたくさんの触手が生えています。
 それが隣の神経細胞の触手と合体して、道が1本形成されます。

 この触手が何本あるのかというと、もう、何本もあります。

 触手の数は決まっていません。というか、触手自体が分裂したり
消滅することによって、増えたり減ったりします。

 この触手の多さは、神経のネットワークの複雑さを示します。

 そしてまれに、この複雑さが「頭のよさ」に使われます。

 脳みその神経細胞が染色された写真がよくありますよね? あれ
です。

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

 自転車に乗る練習をすると、数時間である程度乗れるようになり
ますよね?

 あの時、触手が異常なスピードで分裂して、運動神経を複雑に
しているのです。

 数時間でネットワークが改善されるほど、分裂のスピードは早い
のです。

 年を取ると低下しますが、年寄りでもこの能力はあります。

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

 神経細胞には、信号入力用の触手と、信号出力用の触手が
あります。

 信号入力用の触手は、ほかの神経細胞の信号出力用の触手に
つながっています。入力用の触手は、大体数万本あります。

 入力用の触手は、つながっているほかの神経細胞の出力用の触手
の信号の強さによって、自身の信号の強さを決めます。

 信号出力用の触手は、ほかの神経細胞の信号入力用の触手に
つながっています。出力用の触手は、1本です。この1本の触手に
周辺の神経細胞の入力用の触手がわさわさと集中してきます。

 神経細胞は、入力用の触手に反応を感じると、それに応じて
出力用の触手の信号を変えます。

 入力に対する出力の信号の求め方は決まっていますが、神経細胞
自身がこれを修正することができます。

 触手の分裂・消滅によるネットワークの改善と、出力信号の
求め方の修正することを、学習機能、といいます。

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

 ノイマン型コンピュータ、という名称を聞いたことがあるかと
思います。普通のコンピュータのことです。

 1つのCPUがせっせと働くのがノイマン型コンピュータです。

 ノイマン型コンピュータ以外の種類のコンピュータを、総称して
非ノイマン型コンピュータといいます。

 ニューロコンピュータは神経細胞1つ1つをCPUまたはそれ相応
のものとして、コンピュータを1つ組み立てます。

 だからニューロコンピュータは、ノイマン型コンピュータとは
まったくの別物です。つまりニューロンを扱うには、普通の
パソコンでは駄目なのです。

 普通のパソコンでニューロンを扱う場合、ニューロコンピュータ
のシミュレーションをやっている、という感じになります。

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

 参考文献 図解人工知能入門 戸内順一著 日本理工出版会

 文法生成アルゴリズムが面白い本です。分からないけど。

 でも学生のころに読んだ本なので、内容は覚えていません^^

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

 次回は12月2日(火曜日)に、第403回を送ります。
 お題は「AYGON2 ニューロンの定義」

 さて、ニューロンの仕組みを定義しましょう。どのように使えば
いいのか、を考えます。

 お楽しみに!

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

{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

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