以下に本発明の一実施形態について図面を参照して説明する。図1には、本実施形態の情報処理システム10の全体構成が示されている。図2には、情報処理システム10による処理で用いられるデータの構造が示されている。また、図3には、ロボット30の動作制御の全体的な流れが示され、図4には、ネットワーク20の処理の流れが示され、図5には、中間ORノード(実ノード)の学習処理の流れが示され、図6には、非反転リンクの学習処理の流れが示されている。さらに、図7は、中間ORノードの学習処理の説明図であり、図8は、中間ORノードの学習時の強化信号の分配例を示す図であり、図9は、中間ANDノードの学習時の強化信号の分配例を示す図であり、図10は、非反転リンク(実リンク)の学習処理の説明図である。そして、図11には、初期化の構成が示され、図12には、学習時の削除処理の構成が示されている。また、図13は、出力ノード初期化処理G4の説明図であり、図14は、中間ORノード初期化処理G5の説明図であり、図15は、テスト中間ORノード初期化処理G7の説明図であり、図16〜図18は、中間ORノード削除処理E1の説明図である。
図1において、情報処理システム10は、ネットワーク20を用いて制御対象(本実施形態では、一例としてロボット30とする。)の制御を行う情報処理システムであり、1台または複数台のコンピュータにより構成されている。ネットワーク20は、コンピュータ内に構成された情報処理用のネットワークであり、入力層、中間層、および出力層に配置されてそれぞれ個別に情報処理を行う複数の入力ノード21、複数の中間ノード22、および複数の出力ノード23と、これらのノード21,22,23を連結してノード間の情報伝達を行うリンク24とを備えて構成されている。
各ノード21,22,23およびリンク24は、学習器の作成に用いる素子として機能する自己組織化ネットワーク素子(SONE:Self-Organizing Network Elements)である。自己組織化ネットワーク素子(SONE)とは、これらの素子に死滅条件、新たな素子の生成機能、強化信号生成・伝播機能等を持たせることにより、ネットワーク20を自律的に構築していくことができる回路素子である。
制御対象は、本実施形態では、一例としてケペラロボットと称されるロボット30として説明を行うものとする。但し、本発明の情報処理システムの制御対象は、ケペラロボットに限定されるものではなく、また、ロボットに限定されるものでもない。
ロボット30は、図1に示すように、右車輪31およびこれを駆動するモータ32と、左車輪33およびこれを駆動するモータ34と、進行方向の前方の部分に6本、後方の部分に2本設けられた赤外線センサ35とを備えて構成されている。このロボット30は、壁36への衝突を回避しながら前方へ進んでいくロボットである。8本の赤外線センサ35は、ロボット30と壁36との距離Dを検出するために設けられている。
ノードは、情報処理装置として機能するものであり、本実施形態では、それぞれ論理回路(AND回路またはOR回路)により構成され、入力ノード21、4種類の中間ノード22(中間ANDノード、中間ORノード、テスト中間ANDノード、テスト中間ORノード)、出力ノード23の合計6種類のノードがある。ノードは、基本的には、複数の入力から1つの出力が得られる論理回路により構成されるが、入力ノード21は、出力のみを行うダミーノードである。なお、本実施形態では、AND回路およびOR回路を用いているが、XOR回路等、他の種類の論理回路を用いてもよく、あるいは複数の論理回路を組み合わせて1つのノードとしてもよい。
入力ノード21は、8本の赤外線センサ35に対応して設けられている。すなわち、1本の赤外線センサ35のセンサ信号が16ビットであり、8本では、16×8=128ビットとなるので、1ビットに対し、1つの入力ノード21を割り当てるとすると、本実施形態では、入力ノード21の個数は128個となる。
出力ノード23は、2個のモータ32,34に対応して設けられている。すなわち、1個のモータ出力信号(回転数)が16ビットであり、左右2個では、16×2=32ビットとなるので、1ビットに対し、1つの出力ノード23を割り当てるとすると、本実施形態では、出力ノード23の個数は32個となる。出力ノード23は、本実施形態では、全てORノードとするが、ANDノードを混在させてもよい。
なお、入力ノード21および出力ノード23の個数は固定されているが、中間ノード22の個数は、ネットワーク20の構造が自律的に変化することから変動する。
リンクは、本実施形態では、反転リンク(出力が入力と反転するリンク)と、非反転リンクと、テスト反転リンクと、テスト非反転リンクとの合計4種類のリンクがある。
図1において、情報処理システム10は、センサ信号取得手段41と、状態評価用信号取得手段42と、強化信号生成手段43と、モータ出力信号送信手段44と、ネットワーク処理手段50と、ロボット情報記憶手段60と、ネットワーク情報記憶手段61と、ノード情報記憶手段62と、リンク情報記憶手段63とを備えて構成されている。
センサ信号取得手段41は、8本の赤外線センサ35から出力されたセンサ信号を取得し、ロボット情報記憶手段60に書き込む処理を行うものである。
状態評価用信号取得手段42は、制御対象であるロボット30の状態(行動結果)を評価するための状態評価用信号を取得する処理を行うものである。本実施形態では、状態評価用信号として、センサ信号取得手段41により取得されてロボット情報記憶手段60(図2参照)に記憶されている赤外線センサ35によるセンサ信号と、モータ出力信号送信手段44によりロボット情報記憶手段60から読み込まれてロボット30のモータ32,34へ送信されるモータ出力信号(回転数)とを用いる。従って、赤外線センサ35は、制御対象であるロボット30の状態を検出する状態検出手段として機能する。また、本実施形態では、モータ出力信号をロボット情報記憶手段60から読み込んで取得しているが、ロボット情報記憶手段60に記憶されたモータ出力信号は、そのままロボット30へ送信されるので、モータ出力信号をロボット30から取得していると捉えることもできる。そして、このようにモータ32,34へ送信される制御信号としてのモータ出力信号ではなく、状態検出手段により検出した実際のモータ出力信号(実際の回転数)を、状態評価用信号として用いてもよい。なお、ロボット30が実機ロボットではなく、ディスプレイ画面上に表示される仮想的なロボットである場合には、制御信号としてのモータ出力信号と実際のモータ出力信号(実際の回転数)とは同じである。また、状態評価用信号取得手段42は、ロボット情報記憶手段60に記憶された1ステップ前の状態指標値A6(図2参照)も、状態評価用信号として取得する。
強化信号生成手段43は、状態評価用信号取得手段42により取得した状態評価用信号に基づき、ネットワーク20の出力結果に基づき形成された制御対象であるロボット30の状態(行動結果)を評価し、その評価結果に応じ、ネットワーク20に対して報酬または罰として付与する強化信号を生成する処理を行うものである。この際、強化信号生成手段43は、赤外線センサ35によるセンサ信号に基づき、ロボット30と壁36との相対的な距離Dを把握し、ロボット30が壁36から遠ざかる動きをしたときには報酬(プラスの強化信号)を与え、壁36に近づく動きをしたときには罰(マイナスの強化信号)を与える。また、モータ出力信号に基づき、ロボット30が直進行動をしているか否かを把握し、直進しているときには報酬(プラスの強化信号)を与え、直進していないときには罰(マイナスの強化信号)を与える。
より具体的には、強化信号生成手段43は、例えば、赤外線センサ35によるセンサ信号のうちの少なくとも1つが、閾値(例えばゼロ)より大きな値となっていた場合には、ロボット30が壁36の近傍にいることになるので、8個のセンサ信号の値を合計し、その合計値に−1を乗じ、さらに必要に応じて定数を乗じ、この値を現在のロボット30の状態を示す状態指標値とし、ロボット情報記憶手段60の現在の状態指標値A5に書き込む。また、赤外線センサ35によるセンサ信号の合計値が、閾値(例えばゼロ)より大きな値となっていた場合に、この合計値に−1を乗じ、さらに必要に応じて定数を乗じてもよい。従って、壁36に接近している程、マイナスの絶対値が大きくなる。そして、この現在の状態指標値から、1ステップ前のロボット30の状態を示す状態指標値(同様にして算出されてロボット情報記憶手段60に記憶されていた値であり、状態評価用信号取得手段42により取得したものである。)を減じることにより、ステップ間のセンサ信号の差分をとり、得られた値をネットワーク20に付与する強化信号とする。これにより、ロボット30が壁36から遠ざかれば、強化信号はプラス(報酬)となり、壁36に近づけばマイナス(罰)となる。その後、次回のステップの処理のために、現在の状態指標値を1ステップ前の状態指標値としてロボット情報記憶手段60に保存する。また、赤外線センサ35によるセンサ信号のいずれもが閾値(例えばゼロ)以下の値となっていた場合には、ロボット30が壁36の近傍にはいないことになるので、ロボット30の左右のモータ32,34の回転数が同じか否かを判断し、回転数が同じ場合には、直進していると判断し、「+1」の強化信号(報酬)を与え、回転数が同じでない場合には、直進していないと判断し、「−0.01」の強化信号(小さな罰)を与える。
モータ出力信号送信手段44は、ネットワーク20の出力結果に基づきロボット情報記憶手段60に書き込まれたモータ出力信号を、ロボット30のモータ32,34へ送信する処理を行うものである。
ネットワーク処理手段50は、ネットワーク20を用いた処理を行うものであり、学習手段51と、入力変換手段52と、出力生成手段53と、出力変換手段54とを備えて構成されている。
学習手段51は、強化信号生成手段43により生成した強化信号を全ての出力ノード23に均等に付与し、出力層から中間層へ、さらに中間層から入力層へと、順次、強化信号を逆伝播させる処理、すなわち各リンク24、各中間ノード22、各入力ノード21へ、構成エレメント間(ノードとリンクとの間、およびノード同士の間)の連鎖的な結合関係に従って強化信号を伝播させる処理を行うものである。この際、学習手段51は、伝播元の構成エレメント(ノードまたはリンク)に付与された強化信号に基づき、伝播元および/または伝播先の構成エレメントの入出力状態に応じて、伝播先の構成エレメントに対して報酬または罰として付与する強化信号を生成する。また、学習手段51は、構成エレメント(ノードまたはリンク)に付与された強化信号の累積値を用いて、構成エレメント毎に構成エレメントの生成または削除を行ってネットワーク20の構造を変化させ、変化後のネットワーク20の構造を、ネットワーク構造記憶手段として機能するネットワーク情報記憶手段61、ノード情報記憶手段62、およびリンク情報記憶手段63(図2参照)に登録する。なお、学習処理の詳細は、後述する。
入力変換手段52は、ロボット情報記憶手段60に記憶されたセンサ信号を2進数に変換し、各入力ノード21の出力として設定する処理を行うものである。
出力生成手段53は、ネットワーク構造記憶手段として機能するネットワーク情報記憶手段61、ノード情報記憶手段62、およびリンク情報記憶手段63(図2参照)に記憶されたネットワーク20の構造を参照し、学習手段51により構造を変化させたネットワーク20を用いて、ネットワーク20の出力を生成する処理を行うものである。この出力生成手段53は、各中間ノード22および各出力ノード23を構成する個々の論理回路の機能(出力生成機能)を、プログラムを実行して実現するものである。
出力変換手段54は、各出力ノード23の出力(2進数)を実数に変換し、モータ出力信号(回転数)としてロボット情報記憶手段60に書き込む処理を行うものである。
図2において、ロボット情報記憶手段60は、センサ信号取得手段41により取得した8本の赤外線センサ35によるセンサ信号である入力配列A1(実数×8、すなわち各赤外線センサ35のセンサ信号に対応するA1(1)〜A1(8)からなる。)と、左右のモータ出力信号(回転数)である出力配列A2(実数×2、すなわち各モータ出力信号に対応するA2(1),A2(2)からなる。)と、ネットワーク情報記憶手段61のアドレスであるネットワークアドレスA3と、強化信号生成手段43により生成されてネットワーク20に対して付与される強化信号A4(実数)と、現在のロボット30の状態を指標する状態指標値A5(実数)と、1ステップ前のロボット30の状態を指標する状態指標値A6(実数)とを記憶するものである。ここで、1ステップ前というときの「1ステップ」とは、図3のステップS5〜S9のループ処理を単位とする1巡の処理という意味であり、ループを構成する個々のステップS5〜S9毎の処理を意味するものではない。
なお、ネットワーク20に対して付与される強化信号A4は、後述するネットワーク情報記憶手段61に記憶される強化信号B4と同じであるため、強化信号生成手段43が、生成した強化信号を、ロボット情報記憶手段60の強化信号A4ではなく、ネットワーク情報記憶手段61の強化信号B4に直接に書き込むようにすれば、強化信号A4のためのメモリ確保は省略してもよい。また、現在のロボット30の状態を指標する状態指標値は、一旦、ロボット情報記憶手段60の現在の状態指標値A5に書き込まれ、その後、ロボット情報記憶手段60に書き込まれた現在の状態指標値A5と、ロボット情報記憶手段60に記憶されている1ステップ前の状態指標値A6とを用いて強化信号の算定処理が行われるようになっているが、ロボット情報記憶手段60に1ステップ前の状態指標値A6が記憶されていれば、ロボット情報記憶手段60の現在の状態指標値A5への書き込みを行わなくても、強化信号の算定処理は行うことができるので、現在の状態指標値A5のためのメモリ確保は省略してもよい。
ネットワーク情報記憶手段61は、ノード情報記憶手段62の中の各入力ノード21の情報を記憶する部分のアドレスである入力ノードアドレスB1(可変長配列であり、各入力ノード21に対応するB1(1),B1(2)…B1(m)…からなる。)と、ノード情報記憶手段62の中の各中間ノード22の情報を記憶する部分のアドレスである中間ノードアドレスB2(可変長配列であり、各中間ノード22に対応するB2(1),B2(2)…B2(n)…からなる。)と、ノード情報記憶手段62の中の各出力ノード23の情報を記憶する部分のアドレスである出力ノードアドレスB3(可変長配列であり、各出力ノード23に対応するB3(1),B3(2)…B3(j)…からなる。)と、強化信号生成手段43により生成されてネットワーク20に対して付与される強化信号B4(実数)とを記憶するものである。
ノード情報記憶手段62は、6種類のノードのそれぞれについて複数ずつ存在する各ノードの情報を個別に記憶するものであり、各ノードについて、リンク情報記憶手段63の中の当該ノードの入力側リンクの情報を記憶する部分のアドレスである入力側リンクアドレスC1(可変長配列であり、各入力側リンクに対応するC1(1),C1(2)…C1(k)…からなる。)と、リンク情報記憶手段63の中の当該ノードの出力側リンクの情報を記憶する部分のアドレスである出力側リンクアドレスC2(可変長配列であり、各出力側リンクに対応するC2(1),C2(2)…C2(h)…からなる。)と、ネットワーク情報記憶手段61のアドレスであるネットワークアドレスC3と、リンク情報記憶手段63の中の当該ノードの入力側に設けられたテストリンクの情報を記憶する部分のアドレスであるテストリンクアドレスC4と、当該ノードがANDノードかORノードかを識別するためのAND・ORノードフラグC5(1ビットであり、ANDノードであれば「True(または1)」、ORノードであれば「False(または0)」となる。)と、当該ノードが入力ノード21であるか否かを識別するための入力ノードフラグC6(1ビットであり、入力ノードであれば「True(または1)」、入力ノードでなければ「False(または0)」となる。)と、当該ノードが出力ノード23であるか否かを識別するための出力ノードフラグC7(1ビットであり、出力ノードであれば「True(または1)」、出力ノードでなければ「False(または0)」となる。)と、当該ノードがテストノードであるか否かを識別するためのテストノードフラグC8(1ビットであり、テストノードであれば「True(または1)」、テストノードでなければ「False(または0)」となる。)と、当該ノードの出力C9(1ビットであり、「True(または1)」か「False(または0)」となる。)と、当該ノードに付与された強化信号の合計値C10(実数であるが、合計値とは各ステップの累積値のことではなく、各伝播元の構成エレメントから伝播された強化信号の合計値という意味である。)とを記憶するものである。このノード情報記憶手段62では、ノードの追加・削除に従って、これらのノードに対応するメモリの追加・削除を動的に行う。
なお、ノード情報記憶手段62において、当該ノードがテストノードの場合には、入力側リンクアドレスC1は、第1および第2の入力側テストリンクアドレスC1(C1(1)およびC1(2)のみ)となり、出力側リンクアドレスC2は、出力側テストリンクアドレスC2(C2(1)のみ)となり、テストリンクアドレスC4は無くなる。なお、テストリンクとは、出力に寄与しないリンクを意味し、付随するテストノードを所有していないリンクである。一方、実リンクというときは、出力に寄与する実用化されたリンクを意味し、付随するテストノードを所有しているリンクである。
リンク情報記憶手段63は、4種類のリンクのそれぞれについて複数ずつ存在する各リンクの情報を個別に記憶するものであり、各リンクについて、ノード情報記憶手段62の中の当該リンクの入力側ノードの情報を記憶する部分のアドレスである入力側ノードアドレスD1と、ノード情報記憶手段62の中の当該リンクの出力側ノードの情報を記憶する部分のアドレスである出力側ノードアドレスD2と、ネットワーク情報記憶手段61のアドレスであるネットワークアドレスD3と、ノード情報記憶手段62の中の当該リンクに付随するテストノードの情報を記憶する部分のアドレスであるテストノードアドレスD4と、当該リンクが反転リンクであるか非反転リンクであるかを識別するための反転・非反転フラグD5(1ビットであり、反転リンクであれば「True(または1)」、非反転リンクであれば「False(または0)」となる。)と、当該リンクがテストリンクであるか否かを識別するためのテストリンクフラグD6(1ビットであり、テストリンクであれば「True(または1)」、テストリンクでなければ「False(または0)」となる。)と、当該リンクの出力D7(1ビットであり、「True(または1)」か「False(または0)」となる。)と、当該リンクに対して付与された強化信号の累積値D8(実数であり、複数のステップの累積値である。)と、当該リンクに対して付与された強化信号D9(実数であり、1ステップ分の値である。)とを記憶するものである。このリンク情報記憶手段63では、リンクの追加・削除に従って、これらのリンクに対応するメモリの追加・削除を動的に行う。
また、ネットワーク情報記憶手段61のB1〜B3を記憶する部分と、ノード情報記憶手段62のC1〜C8を記憶する部分と、リンク情報記憶手段63のD1〜D6を記憶する部分とにより、構成エレメント間の結合関係を含むネットワーク20の構造を記憶するネットワーク構造記憶手段が構成されている。
さらに、ノード情報記憶手段62のC9を記憶する部分と、リンク情報記憶手段63のD7を記憶する部分とにより、ネットワーク20の出力生成処理で形成される構成エレメントの入出力状態を記憶する入出力状態記憶手段が構成されている。
そして、ネットワーク情報記憶手段61のB4を記憶する部分と、ノード情報記憶手段62のC10を記憶する部分と、リンク情報記憶手段63のD8,D9を記憶する部分とにより、学習手段51により生成された、構成エレメントに対する強化信号またはその累積値を構成エレメント毎に記憶する強化信号記憶手段が構成されている。
以上において、センサ信号取得手段41、状態評価用信号取得手段42、強化信号生成手段43、モータ出力信号送信手段44、およびネットワーク処理手段50は、情報処理システム10を構成するコンピュータ本体(パーソナル・コンピュータのみならず、その上位機種のものも含む。)の内部に設けられた中央演算処理装置(CPU)、およびこのCPUの動作手順を規定する1つまたは複数のプログラム(例えば、C++言語で記述されたプログラム等)により実現される。
また、ロボット情報記憶手段60、ネットワーク情報記憶手段61、ノード情報記憶手段62、およびリンク情報記憶手段63は、例えば、主メモリやキャッシュメモリ、あるいはローカルメモリ等で実現されるが、アクセス速度や記憶容量等に問題が生じない範囲であれば、例えば、ハードディスク、MO、DVD−RAM、FD、磁気テープ等の外部記憶装置を用いて実現してもよい。
このような本実施形態においては、以下のようにして情報処理システム10によりロボット30の動作の自律制御を行う。
先ず、図3〜図6を参照しながら、情報処理システム10によるロボット30の動作制御の全体的な流れを説明する。
図3において、情報処理システム10を実現するためのプログラムを立ち上げ、ロボット30の動作制御を開始する(ステップS1)。
続いて、ネットワーク処理手段50により、必要な初期化処理を行う(ステップS2)。ここで行う初期化処理には、ロボット情報記憶手段60に記憶される情報の初期化処理(後述する図11のロボット初期化処理G1)と、ネットワーク情報記憶手段61に記憶される情報の初期化処理(後述する図11のネットワーク初期化処理G2)と、必要個数(本実施形態では、128個)の入力ノード21を生成する初期化処理(後述する図11の入力ノード初期化処理G3)と、必要個数(本実施形態では、32個)の出力ノード23を生成する初期化処理(後述する図11の出力ノード初期化処理G4)と、各出力ノード23の入力側リンクとして各出力ノード23からいずれかの入力ノード21にランダムに連結する実リンクを生成する初期化処理(後述する図11の反転リンク初期化処理G9または非反転リンク初期化処理G10)と、各出力ノード23の入力側に設けられて各出力ノード23からいずれかの入力ノード21にランダムに連結するテストリンクを生成する初期化処理(後述する図11のテスト反転リンク初期化処理G11またはテスト非反転リンク初期化処理G12)と、生成した実リンク(後述する図11の反転リンク初期化処理G9または非反転リンク初期化処理G10で生成された反転リンクまたは非反転リンク)に付随するテストノードを生成する初期化処理(後述する図11のテスト中間ORノード初期化処理G7またはテスト中間ANDノード初期化処理G8)と、生成したテストノードの第1および第2の入力側テストリンクを生成する初期化処理(後述する図11のテスト反転リンク初期化処理G11またはテスト非反転リンク初期化処理G12)とがある。
それから、センサ信号取得手段41により、8本の赤外線センサ35で検出されたセンサ信号を取得し、取得した8個のセンサ信号をロボット情報記憶手段60の入力配列A1(1)〜A1(8)(図2参照)に書き込む(ステップS3)。
そして、状態評価用信号取得手段42により、状態評価用信号として、ロボット情報記憶手段60の入力配列A1(1)〜A1(8)に記憶されている8本の赤外線センサ35によるセンサ信号と、ロボット情報記憶手段60の出力配列A2(1),A2(2)に記憶されているモータ出力信号(回転数)と、ロボット情報記憶手段60に記憶されている1ステップ前の状態指標値A6とを取得する(ステップS4)。
続いて、強化信号生成手段43により、状態評価用信号取得手段42により取得した状態評価用信号に基づき、制御対象であるロボット30の状態(行動結果)を評価し、その評価結果に応じ、ネットワーク20に対して報酬または罰として付与する強化信号を生成する(ステップS4)。なお、前述した初回の状態評価用信号取得処理では、出力配列A2(1),A2(2)には、学習により構造を変化させたネットワーク20の出力結果に基づくモータ出力信号(回転数)は入っておらず、また、1ステップ前の状態指標値A6にも前回ステップで状態評価を行った結果としての状態指標値が入っているわけではないので、生成される初回の強化信号は、ゼロとなる。そして、強化信号生成手段43は、このようにして生成した強化信号を、ロボット情報記憶手段60の強化信号A4へ書き込む。また、強化信号生成手段43は、次回ステップでの状態評価処理で用いるために、現在のステップでロボット30の状態(行動結果)を評価して得られた現在の状態指標値を、ロボット情報記憶手段60の1ステップ前の状態指標値A6へ書き込んで保存する。なお、前述したように、初回の強化信号はゼロとなるので、後述する学習手段51による初回の学習処理は、実質的に行われないに等しく、ネットワーク20の構造は変化しない。
それから、ネットワーク処理手段50により、ネットワーク20の処理、すなわち学習処理および出力生成処理を行う(ステップS5)。
図4において、学習処理では、先ず、学習手段51により、ロボット情報記憶手段60の強化信号A4を読み込み、ネットワーク情報記憶手段61の強化信号B4に書き込むことにより、ネットワーク20として強化信号を受け取る(ステップS501)。
次に、学習手段51により、ネットワーク情報記憶手段61の出力ノードアドレスB3を参照し、ノード情報記憶手段62の中のこれらの出力ノードアドレスB3に対応する各出力ノード23の情報を記憶する部分における強化信号の合計値C10に、それぞれネットワーク情報記憶手段61の強化信号B4と同じ値を格納する。これにより、全ての出力ノード23に対し、均等に強化信号が伝わる(ステップS502)。
続いて、学習手段51により、ネットワーク情報記憶手段61の出力ノードアドレスB3に対応する各出力ノード23について学習処理を行う(ステップS503)。出力ノード23の学習処理の詳細は後述する。
さらに、学習手段51により、ネットワーク情報記憶手段61の中間ノードアドレスB2に対応する各中間ノード22について学習処理を行う(ステップS504)。中間ノード22の学習処理の詳細は、図5を用いて後述する。図5には、中間ORノード(実ノード)の学習処理の流れが示されている。
それから、学習手段51により、ネットワーク情報記憶手段61の出力ノードアドレスB3に対応する各出力ノード23についてのノード情報記憶手段62の入力側リンクアドレスC1を参照し、これらの入力側リンクアドレスC1に対応する各出力ノード23の各入力側リンクの学習処理を行う(ステップS505)。出力ノード23の入力側リンクの学習処理の詳細は後述する。
さらに、学習手段51により、ネットワーク情報記憶手段61の中間ノードアドレスB2に対応する各中間ノード22についてのノード情報記憶手段62の入力側リンクアドレスC1を参照し、これらの入力側リンクアドレスC1に対応する各中間ノード23の各入力側リンクの学習処理を行う(ステップS506)。中間ノード22の入力側リンクの学習処理の詳細は、図6を用いて後述する。図6には、非反転リンクの学習処理の流れが示されている。
その後、以上のようにして学習処理(ステップS501〜S506参照)を行って構造を変化させた後のネットワーク20を用いて、ネットワーク20の新たな出力を生成する処理を行う。なお、学習処理によるネットワーク20の構造の変化は、構造を変化させる前のネットワーク20の出力結果に基づいて形成されたロボット30の状態の評価結果に応じて生成された強化信号によってもたらされるので、学習処理(ステップS501〜S506参照)で各種判定に用いられる構成エレメントの入出力状態は、その強化信号の生成の基になるロボット30の状態を形成したネットワーク出力の生成処理で得られた入出力状態でなければならない。この点で、学習処理(ステップS501〜S506参照)で各種判定に用いられる構成エレメントの入出力状態は、メモリ(図2の入出力状態記憶手段)に残っている入出力状態、すなわち構造を変化させる前のネットワーク20の出力生成処理で得られた入出力状態であるから、上記の要請を満足している。
出力生成処理では、先ず、入力変換手段52により、ネットワーク情報記憶手段61の入力ノードアドレスB1を参照してノード情報記憶手段62の中の各入力ノード21の情報を記憶する部分を把握し、ロボット情報記憶手段60の入力配列A1(1)〜A1(8)に記憶された8個のセンサ信号をそれぞれ2進数に変換し、変換して得られた値をノード情報記憶手段62の各入力ノード21の出力C9として設定する(ステップS507)。
続いて、出力生成手段53により、ネットワーク情報記憶手段61の中間ノードアドレスB2を参照してノード情報記憶手段62の中の各中間ノード22の情報を記憶する部分を把握し、各中間ノード22を構成する論理回路の機能に従って、各中間ノード22の出力C9を計算する(ステップS508)。この際、新しく生成される中間ノード22は、ネットワーク情報記憶手段61の中間ノードアドレスB2の配列の後ろに追加されていき、この新設の中間ノード22は、入出力の連鎖上、ネットワーク20の入力層に近い側に配置されていくので、入力層から出力層に向かう出力生成処理を実現するために、中間ノード22の出力生成処理は、ネットワーク情報記憶手段61の中間ノードアドレスB2の配列の逆順で行う。
さらに、出力生成手段53により、ネットワーク情報記憶手段61の出力ノードアドレスB3を参照してノード情報記憶手段62の中の各出力ノード23の情報を記憶する部分を把握し、各出力ノード23を構成する論理回路の機能に従って、各出力ノード23の出力C9を計算する(ステップS509)。
以上のステップS508,S509で行うノードの計算処理は、通常の論理回路の処理と同様であり、ノード情報記憶手段62の当該ノードの全ての入力側リンクアドレスC1に対応する入力側リンクについてのリンク情報記憶手段63のリンクの出力D7を読み込み、これらの入力側リンクの出力D7を、計算対象となっている当該ノードの入力とする。そして、ノード情報記憶手段62の当該ノードのAND・ORノードフラグC5を参照して当該ノードがANDノードかORノードかを把握し、ANDノードであればAND回路と同じ処理を行い、ORノードであればOR回路と同じ処理を行うことにより、当該ノードの出力C9を算出する。
例えば、計算対象となっている当該ノードが、中間ORノード、テスト中間ORノード、出力ノード23(本実施形態では、ORノードのみとする。)である場合には、当該ノードの出力C9をFalse(または0)で上書きした後、入力側リンクアドレスC1に対応する全ての入力側リンクの出力D7のうち、1つでもTrue(または1)であれば、当該ノードの出力C9をTrue(または1)で上書きする。一方、計算対象となっている当該ノードが、中間ANDノード、テスト中間ANDノードである場合には、当該ノードの出力C9をTrue(または1)で上書きした後、入力側リンクアドレスC1に対応する全ての入力側リンクの出力D7のうち、1つでもFalse(または0)であれば、当該ノードの出力C9をFalse(または0)で上書きする。
また、ステップS508,S509のノードの計算処理と併せて行うリンクの計算処理も、通常の論理回路の処理と同様であり、計算対象となっている当該リンクが、反転リンク、テスト反転リンクである場合には、リンク情報記憶手段63の当該リンクの入力側ノードアドレスD1に対応する入力側ノードについてのノード情報記憶手段62のノードの出力C9の値を反転させた値を、当該リンクの出力D7に上書きし、計算対象となっている当該リンクが、非反転リンク、テスト非反転リンクである場合には、リンク情報記憶手段63の当該リンクの入力側ノードアドレスD1に対応する入力側ノードについてのノード情報記憶手段62のノードの出力C9の値を、そのまま当該リンクの出力D7に上書きする。
その後、出力変換手段54により、ネットワーク情報記憶手段61の出力ノードアドレスB3を参照してノード情報記憶手段62の中の各出力ノード23の情報を記憶する部分を把握し、各出力ノード23の出力C9(2進数)を実数に変換し、モータ出力信号(回転数)としてロボット情報記憶手段60の出力配列A2に書き込む(ステップS510)。
図3において、ネットワーク処理手段50による処理後に、モータ出力信号送信手段44により、ネットワーク20の出力結果(各出力ノード23の出力C9)に基づきロボット情報記憶手段60の出力配列A2に書き込まれたモータ出力信号(回転数)を、ロボット30のモータ32,34へ送信し、これによりモータ32,34を駆動させてロボット30を動作させる(ステップS6)。
続いて、センサ信号取得手段41により、8本の赤外線センサ35で検出されたセンサ信号を取得し、取得した8個のセンサ信号をロボット情報記憶手段60の入力配列A1(1)〜A1(8)に書き込む(ステップS7)。
そして、状態評価用信号取得手段42により、状態評価用信号として、ロボット情報記憶手段60の入力配列A1(1)〜A1(8)に記憶されている8本の赤外線センサ35によるセンサ信号と、ロボット情報記憶手段60の出力配列A2(1),A2(2)に記憶されているモータ出力信号(回転数)と、ロボット情報記憶手段60に記憶されている1ステップ前の状態指標値A6とを取得する(ステップS8)。なお、この際には、初回の状態評価用信号取得処理の場合(ステップS4の場合)とは異なり、出力配列A2(1),A2(2)には、ステップS5の学習処理で構造を変化させたネットワーク20の出力結果に基づくモータ出力信号(回転数)が入っており、また、1ステップ前の状態指標値A6にも前回ステップで状態評価を行った結果としての状態指標値が入っているので、この状態評価用信号に基づく評価結果に応じて強化信号生成手段43により生成される強化信号は、適正な状態評価結果に応じた意味のある強化信号となる。
続いて、強化信号生成手段43により、状態評価用信号取得手段42により取得した状態評価用信号に基づき、ステップS5の学習処理で構造を変化させたネットワーク20の出力結果に基づき形成された制御対象であるロボット30の状態(行動結果)を評価し、その評価結果に応じ、ネットワーク20に対して報酬または罰として付与する強化信号を生成する(ステップS8)。例えば、ロボット30が直進している場合には、「+1」の強化信号(報酬)を生成し、センサ信号の合計値が閾値(例えば0)より大きい場合には、その合計値の増減分(前回ステップの合計値との差分)に−1および定数を乗じた値の強化信号(報酬または罰)を生成し、それ以外の場合には、例えば「−0.01」の強化信号(小さな罰)を生成する。そして、強化信号生成手段43は、このようにして生成した強化信号を、ロボット情報記憶手段60の強化信号A4へ書き込む。また、強化信号生成手段43は、次回ステップでの状態評価処理のために、現在のステップでロボット30の状態(行動結果)を評価して得られた現在の状態指標値を、ロボット情報記憶手段60の1ステップ前の状態指標値A6へ書き込んで保存する。
その後、ロボット30の動作制御を終了させる指示が出ているか否かを判断し(ステップS9)、終了指示が出ていない場合には、ステップS5のネットワーク20の処理に戻り、以降、終了指示が出るまで、ステップS5〜S9の処理を繰り返し、一方、終了指示が出ている場合には、ロボット30の動作制御を終了する(ステップS10)。
以下には、学習手段51による中間ノード22(中間ORノード、中間ANDノード、テスト中間ORノード、テスト中間ANDノード)および出力ノード23の学習処理の流れを説明する。
<中間ORノードの学習処理>
図7には、学習対象となる中間ORノード(実ノード)100の一例が示されている。中間ORノード100には、一例として3本の入力側リンク101,102,103および出力側リンク104が結合されるとともに、中間ORノード100の入力側には、テストリンク105が設けられている。各入力側リンク101,102,103は、入力側ノード106,107,108にそれぞれ結合され、出力側リンク104は、出力側ノード109に結合され、テストリンク105は、任意のノード110にランダムに結合されている。
ここで、各入力側リンク101,102,103による中間ORノード100への入力を、X(1),X(2),X(3)とする。より一般的には、N本の入力側リンクがあるとすると、X(1)〜X(N)とする。つまり、k番目の入力側リンクによる中間ORノード100への入力を、X(k)(k=1〜N)とする。また、中間ORノード100の出力をYとする。また、X(1)〜X(N)のうちのTrueの数をNumTとし、中間ORノード100に対して付与された強化信号をRとする。さらに、各入力側リンク101,102,103に対して付与する強化信号を、R1(1),R1(2),R1(3)とし、これらの入力側ノード106,107,108に対して付与する強化信号を、R2(1),R2(2),R2(3)とする。より一般的には、着目するk番目の入力側リンクに対して付与する強化信号を、R1(k)(k=1〜N)とし、その入力側ノードに対して付与する強化信号を、R2(k)(k=1〜N)とする。
図5において、先ず、学習手段51は、中間ORノード100に対して付与された強化信号Rに基づき、中間ORノード100の入出力状態に応じて、各入力側リンク101,102,103の中間ORノード100の出力Yへの寄与度に従って各入力側リンク101,102,103に強化信号が分配(伝播)されるように、各入力側リンク101,102,103に対して付与する強化信号R1(1),R1(2),R1(3)を算定する(ステップS50401)。また、これと併せて、各入力側リンク101,102,103の入力側ノード106,107,108に対して付与する強化信号R2(1),R2(2),R2(3)を算定する(ステップS50402)。
この際、中間ORノード100への入力X(1),X(2),X(3)は、ノード情報記憶手段62の中の中間ORノード100の入力側リンクアドレスC1を参照し、リンク情報記憶手段63の各入力側リンク101,102,103の出力D7を読み込んで得られる。また、中間ORノード100の出力Yは、ノード情報記憶手段62の中の中間ORノード100の出力C9を読み込んで得られる。さらに、中間ORノード100に対して付与された強化信号Rは、ノード情報記憶手段62の中の中間ORノード100の強化信号の合計値C10を読み込んで得られる。
そして、学習手段51は、次のようなルールで、中間ORノードに結合されているN本の入力側リンクのうち着目する1本の入力側リンクに対して付与する強化信号R1(k)(k=1〜N)、および着目する1本の入力側リンクの入力側ノードに対して付与する強化信号R2(k)(k=1〜N)を算定する。すなわち、k番目(k=1〜N)の入力側リンクが、次のケース1〜5のいずれに該当するかを判断し、1本1本の入力側リンクについて強化信号R1(k)を算定するとともに、1本1本の入力側リンクの入力側ノードについて強化信号R2(k)を算定していく。
ケース1:(Y=T)∧(X(k)=F)の場合には、R1(k)=0,R2(k)=0とする。この場合は、k番目の入力側リンクによる入力X(k)が、中間ORノードの出力Yに寄与していないので、強化信号を0とする。
ケース2:Y=Fの場合には、R1(k)=R/N,R2(k)=R/Nとする。この場合は、Y=Fなので、全ての入力X(k)(k=1〜N)がX(k)=Fであり、出力Yに均等に寄与しているので、強化信号を均等に分配する。
ケース3:(Y=T)∧(NumT=1)の場合には、R1(k)=R,R2(k)=Rとする。この場合は、着目する入力側リンクによる入力がX(k)=Tであり、しかもTrueの入力がこの入力側リンクによる入力だけであり、この入力側リンクの出力Yへの寄与度が大きいので、絶対値の大きな強化信号を付与する。
ケース4:(Y=T)∧(NumT≠1)∧(R≧0)の場合には、R1(k)=−R×(NumT−1)/N,R2(k)=0とする。この場合は、着目する入力側リンクによる入力がX(k)=Tであるが、Trueの入力がこの入力側リンクによる入力だけではないので、この入力側リンクによる入力がたとえTrueでなかったとしても、出力Yは、他の入力側リンクによる入力により、Y=Tとなることから、この入力側リンクの出力Yへの寄与度は低い。従って、強化信号R1(k)として比較的小さな罰を付与する。
ケース5:(Y=T)∧(NumT≠1)∧(R≦0)の場合には、R1(k)=R×NumT/N,R2(k)=0とする。この場合も、ケース4の場合と同様に、着目する入力側リンクによる入力がX(k)=Tであるが、Trueの入力がこの入力側リンクによる入力だけではないので、この入力側リンクによる入力がたとえTrueでなかったとしても、出力Yは、他の入力側リンクによる入力により、Y=Tとなることから、この入力側リンクの出力Yへの寄与度は低い。また、伝播元の中間ORノードに対する強化信号Rとして罰が付与されているので、強化信号R1(k)として、ケース4の場合よりも大きな罰を付与する。
図8には、伝播元の中間ORノードが、図7の中間ORノード100である場合について、以上のケース1〜5のルールに従って算定した強化信号の分配例が示されている。
さらに、学習手段51は、テストリンク105に対して付与する強化信号RTを算定する。この際、学習手段51は、テストリンク105が、仮に中間ORノード100の入力側リンクとして存在していた場合を想定して強化信号を算定する(ステップS50403)。先ず、テストリンク105が入力側リンクとして加わることにより出力Yが変化しない場合には、入力X(k)にテストリンク105による入力TX、すなわちテストリンク105の出力(リンク情報記憶手段63のテストリンク105の出力D7を読み込んで得られる。)を追加し、前述したケース1〜5の場合分けに従ってその強化信号RTを算定する。次に、テストリンク105が入力側リンクとして加わることにより出力Yが変化する場合には、入力X(k)にテストリンク105による入力TX、すなわちテストリンク105の出力D7を追加し、Yへ中間ORノード100の出力C9(実際の出力)を反転させた値を代入し、Rへ中間ORノード100の強化信号の合計値C10(実際の強化信号の合計値)の符号を変えた−C10を代入して、前述したケース1〜5のルールを適用することにより、その強化信号RTを算定する。
そして、以上のようにして算定した強化信号、すなわち各入力側リンク101,102,103に対して付与する強化信号R1(1),R1(2),R1(3)と、テストリンク105に対して付与する強化信号RTとを、リンク情報記憶手段63の当該リンクの強化信号の累積値D8に加算して累積値を更新するとともに、当該リンクの強化信号D9に上書きし、また、各入力側リンク101,102,103の入力側ノード106,107,108に対して付与する強化信号R2(1),R2(2),R2(3)を、ノード情報記憶手段62の当該ノードの強化信号の合計値C10に加算(当該ノードには、他の構成エレメントからも強化信号が伝播されてくるので、それらを加算するという意味である。)する(ステップS50404)。
続いて、学習手段51は、各入力側リンク101,102,103について、それぞれリンク情報記憶手段63の当該リンクの強化信号の累積値D8が閾値(本実施形態では、一例として0とする。)を下回っているか否かを判断し、下回っている場合には、その入力側リンクを削除する(ステップS50405)。この場合には、後述する図12の反転リンクの削除処理E5または非反転リンクの削除処理E6を行う。
また、学習手段51は、テストリンク105について、リンク情報記憶手段63の当該リンクの強化信号の累積値D8が閾値(本実施形態では、一例として0とする。)を下回っているか否かを判断し、下回っている場合には、テストリンク105を削除する(ステップS50406)。この場合には、後述する図12のテスト反転リンクの削除処理E7またはテスト非反転リンクの削除処理E8を行う。そして、任意のノードに結合する新たなテストリンクをランダムに生成し、ノード情報記憶手段62の中間ORノード100のテストリンクアドレスC4に登録する。
さらに、学習手段51は、テストリンク105について、リンク情報記憶手段63の当該リンクの強化信号の累積値D8が閾値を上回っているか否かを判断し、上回っている場合には、テストリンク105を実リンクに昇格させて実用化するため、ノード情報記憶手段62の中間ORノード100のテストリンクアドレスC4と、中間ORノード100のアドレスB2と、ネットワークアドレスC3とを用いて、実リンクを新たに生成し、中間ORノード100の入力側リンクアドレスC1に追加登録する。この際、テストリンク105についてのリンク情報記憶手段63の反転・非反転フラグD5がTrue(反転リンクを意味する。)のときには、反転リンクを新たに生成し、False(非反転リンクを意味する。)のときには、非反転リンクを新たに生成する。また、これと併せて、テストリンク105を削除する。この場合には、後述する図12のテスト反転リンクの削除処理E7またはテスト非反転リンクの削除処理E8を行う。そして、任意のノードに結合する新たなテストリンクをランダムに生成し、ノード情報記憶手段62の中間ORノード100のテストリンクアドレスC4に登録する(ステップS50407)。
そして、学習手段51は、中間ORノード100の入力側リンクアドレスC1に登録されている入力側リンクの数が、1以下になった場合には、中間ORノード100を削除する(ステップS50408)。この場合には、後述する図12の中間ORノードの削除処理E1を行う。
それから、学習手段51は、ノード情報記憶手段62の中間ORノード100の強化信号の合計値C10をクリアして0にする(ステップS50409)。
<中間ANDノードの学習処理>
中間ANDノードの学習処理は、上述した中間ORノードの学習処理と略同様である。先ず、学習手段51は、中間ANDノードに対して付与された強化信号Rに基づき、中間ANDノードの入出力状態に応じて、各入力側リンクの中間ANDノードの出力Yへの寄与度に従って各入力側リンクに強化信号が分配(伝播)されるように、各入力側リンクに対して付与する強化信号R1(k)を算定する。また、これと併せて、各入力側リンクの入力側ノードに対して付与する強化信号R2(k)を算定する。
この際、前述した中間ORノードの強化信号の算定の際の入力X(k)および出力Yへ、中間ANDノードの入力側リンクアドレスC1に対応する各入力側リンクの出力D7および中間ANDノードの出力C9の値を代入するときに、それらの値を反転させて代入する。これは、ド・モルガンの法則により、ANDノードの入出力を全て反転させると、ORノードとなることによるものである。
そして、学習手段51は、上記のようにド・モルガンの法則に従って入出力を全て反転させることにより、前述した中間ORノードの学習処理の場合と同じルールで、中間ANDノードに結合されているN本の入力側リンクのうち着目する1本の入力側リンクに対して付与する強化信号R1(k)(k=1〜N)、および着目する1本の入力側リンクの入力側ノードに対して付与する強化信号R2(k)(k=1〜N)を算定する。すなわち、k番目(k=1〜N)の入力側リンクが、前述したケース1〜5のいずれに該当するかを判断し、1本1本の入力側リンクについて強化信号R1(k)を算定するとともに、1本1本の入力側リンクの入力側ノードについて強化信号R2(k)を算定していく。
図9には、伝播元の中間ANDノードが、図7の中間ORノード100のように3つの入力側リンクを有する場合について、前述したケース1〜5のルールに従って算定した強化信号の分配例が示されている。図9は、図8の入出力X(1),X(2),X(3),Yを反転させ、その他の強化信号R,R1(1),R1(2),R1(3),R2(1),R2(2),R2(3)をそのままとした状態となっている。
さらに、学習手段51は、テストリンクに対して付与する強化信号RTを算定する。この際、学習手段51は、テストリンクが、仮に中間ANDノードの入力側リンクとして存在していた場合を想定して強化信号を算定する。先ず、テストリンクが入力側リンクとして加わることにより出力Yが変化しない場合には、入力X(k)にテストリンクによる入力TX、すなわちテストリンクの出力(リンク情報記憶手段63のテストリンクの出力D7を読み込んで得られる。)を反転させて追加し、出力Yに中間ANDノードの出力C9を反転させた値を代入し、前述したケース1〜5の場合分けに従ってその強化信号RTを算定する。次に、テストリンクが入力側リンクとして加わることにより出力Yが変化する場合には、入力X(k)にテストリンクによる入力TX、すなわちテストリンクの出力D7を反転させて追加し、Yへ中間ANDノードの出力C9(実際の出力)の値を代入し、Rへ中間ANDノードの強化信号の合計値C10(実際の強化信号の合計値)の符号を変えた−C10を代入して、前述したケース1〜5のルールを適用することにより、その強化信号RTを算定する。
そして、以上のようにして算定した強化信号、すなわち各入力側リンクに対して付与する強化信号R1(k)(k=1〜N)と、テストリンクに対して付与する強化信号RTとを、リンク情報記憶手段63の当該リンクの強化信号の累積値D8に加算して累積値を更新するとともに、当該リンクの強化信号D9に上書きし、また、各入力側リンクの入力側ノードに対して付与する強化信号R2(k)(k=1〜N)を、ノード情報記憶手段62の当該ノードの強化信号の合計値C10に加算(当該ノードには、他の構成エレメントからも強化信号が伝播されてくるので、それらを加算するという意味である。)する。
続いて、学習手段51は、各入力側リンクについて、それぞれリンク情報記憶手段63の当該リンクの強化信号の累積値D8が閾値(本実施形態では、一例として0とする。)を下回っているか否かを判断し、下回っている場合には、その入力側リンクを削除する。この場合には、後述する図12の反転リンクの削除処理E5または非反転リンクの削除処理E6を行う。
また、学習手段51は、テストリンクについて、リンク情報記憶手段63の当該リンクの強化信号の累積値D8が閾値(本実施形態では、一例として0とする。)を下回っているか否かを判断し、下回っている場合には、テストリンクを削除する。この場合には、後述する図12のテスト反転リンクの削除処理E7またはテスト非反転リンクの削除処理E8を行う。そして、任意のノードに結合する新たなテストリンクをランダムに生成し、ノード情報記憶手段62の中間ANDノードのテストリンクアドレスC4に登録する。
さらに、学習手段51は、テストリンクについて、リンク情報記憶手段63の当該リンクの強化信号の累積値D8が閾値を上回っているか否かを判断し、上回っている場合には、テストリンクを実リンクに昇格させて実用化するため、ノード情報記憶手段62の中間ANDノードのテストリンクアドレスC4と、中間ANDノードのアドレスB2と、ネットワークアドレスC3とを用いて、実リンクを新たに生成し、中間ANDノードの入力側リンクアドレスC1に追加登録する。この際、テストリンクについてのリンク情報記憶手段63の反転・非反転フラグD5がTrue(反転リンクを意味する。)のときには、反転リンクを新たに生成し、False(非反転リンクを意味する。)のときには、非反転リンクを新たに生成する。また、これと併せて、テストリンクを削除する。この場合には、後述する図12のテスト反転リンクの削除処理E7またはテスト非反転リンクの削除処理E8を行う。そして、任意のノードに結合する新たなテストリンクをランダムに生成し、ノード情報記憶手段62の中間ANDノードのテストリンクアドレスC4に登録する。
そして、学習手段51は、中間ANDノードの入力側リンクアドレスC1に登録されている入力側リンクの数が、1以下になった場合には、中間ANDノードを削除する。この場合には、後述する図12の中間ANDノードの削除処理E2を行う。
それから、学習手段51は、ノード情報記憶手段62の中間ANDノードの強化信号の合計値C10をクリアして0にする。
<テスト中間ORノードの学習処理>
テスト中間ORノードの学習処理は、前述した中間ORノードの学習処理(図7参照)を簡略化したものである。先ず、学習手段51は、テスト中間ORノードに対して付与された強化信号Rに基づき、テスト中間ORノードの入出力状態に応じて、第1および第2の入力側テストリンク(後述する図10の場合と同様)のテスト中間ORノードの出力Yへの寄与度に従って第1および第2の入力側テストリンクに強化信号が分配(伝播)されるように、第1および第2の入力側テストリンクに対して付与する強化信号R1(1),R1(2)を算定する。但し、中間ORノードの学習処理(図7参照)の場合とは異なり、テスト中間ORノードの学習処理では、第1および第2の入力側テストリンクに対して付与する強化信号R1(1),R1(2)のみを算定し、第1および第2の入力側テストリンクの各入力側ノードに対して付与する強化信号R2(1),R2(2)は算定しない。
この際、学習手段51は、前述した中間ORノードの学習処理の場合と全く同じルールで、第1および第2の入力側テストリンクが、前述したケース1〜5のいずれに該当するかをそれぞれ判断し、強化信号R1(1),R1(2)を算定する。なお、テスト中間ORノードには、ノード情報記憶手段62のテストリンクアドレスC4に登録すべきテストリンクは無いので、このテストリンクアドレスC4に対応するテストリンクに対して付与する強化信号RTの算定は行わない。
そして、以上のようにして算定した第1および第2の入力側テストリンクに対して付与する強化信号R1(1),R1(2)を、リンク情報記憶手段63の当該リンクの強化信号の累積値D8に加算して累積値を更新するとともに、当該リンクの強化信号D9に上書きする。なお、第1および第2の入力側テストリンクの各入力側ノードに対して付与する強化信号R2(1),R2(2)は算定されないので、これらをノード情報記憶手段62の当該ノードの強化信号の合計値C10に加算する処理は行わない。
続いて、学習手段51は、第1、第2の入力側テストリンクについて、それぞれリンク情報記憶手段63の当該リンクの強化信号の累積値D8が閾値(本実施形態では、一例として0とする。)を下回っているか否かを判断し、下回っている場合には、その入力側テストリンクを削除する。この場合には、後述する図12のテスト反転リンクの削除処理E7またはテスト非反転リンクの削除処理E8を行う。なお、第1の入力側テストリンクは、削除されないように十分に大きな正の値の強化信号を蓄えた状態にしておくので、結局、ここで削除されるのは、第2の入力側テストリンクとなる。また、このようにして第2の入力側テストリンクが削除された場合の他に、第2の入力側テストリンクの入力側ノード(実ノード)の削除に伴って第2の入力側テストリンクが削除された場合を含め、リンクの数が1になったとき(つまり、第1の入力側テストリンクだけになったとき)には、任意のノードに結合する新たな第2の入力側テストリンクをランダムに生成し、ノード情報記憶手段62のテスト中間ORノードの入力側テストリンクアドレスC1(C1(2)となる。)に登録する。
さらに、学習手段51は、ノード情報記憶手段62のテスト中間ORノードの第1の入力側テストリンクアドレスC1(配列1番目のC1(1)となる。)に対応する第1の入力側テストリンクの強化信号の累積値D8を、十分大きな正の値(例えば10300等)に設定し、累積値D8に、十分大きな正の値が常に保持されるようにし、第1の入力側テストリンクが削除されないようにする。
<テスト中間ANDノードの学習処理>
テスト中間ANDノードの学習処理は、前述した中間ANDノードの学習処理を簡略化したものである。先ず、学習手段51は、テスト中間ANDノードに対して付与された強化信号Rに基づき、テスト中間ANDノードの入出力状態に応じて、第1および第2の入力側テストリンク(後述する図10参照)のテスト中間ANDノードの出力Yへの寄与度に従って第1および第2の入力側テストリンクに強化信号が分配(伝播)されるように、第1および第2の入力側テストリンクに対して付与する強化信号R1(1),R1(2)を算定する。但し、中間ANDノードの学習処理の場合とは異なり、テスト中間ANDノードの学習処理では、第1および第2の入力側テストリンクに対して付与する強化信号R1(1),R1(2)のみを算定し、第1および第2の入力側テストリンクの各入力側ノードに対して付与する強化信号R2(1),R2(2)は算定しない。
この際、学習手段51は、前述した中間ANDノードの学習処理の場合と全く同じルールで、第1および第2の入力側テストリンクが、前述したケース1〜5のいずれに該当するかをそれぞれ判断し、強化信号R1(1),R1(2)を算定する。なお、テスト中間ANDノードには、ノード情報記憶手段62のテストリンクアドレスC4に登録すべきテストリンクは無いので、このテストリンクアドレスC4に対応するテストリンクに対して付与する強化信号RTの算定は行わない。
そして、以上のようにして算定した第1および第2の入力側テストリンクに対して付与する強化信号R1(1),R1(2)を、リンク情報記憶手段63の当該リンクの強化信号の累積値D8に加算して累積値を更新するとともに、当該リンクの強化信号D9に上書きする。なお、第1および第2の入力側テストリンクの各入力側ノードに対して付与する強化信号R2(1),R2(2)は算定されないので、これらをノード情報記憶手段62の当該ノードの強化信号の合計値C10に加算する処理は行わない。
続いて、学習手段51は、第1、第2の入力側テストリンクについて、それぞれリンク情報記憶手段63の当該リンクの強化信号の累積値D8が閾値(本実施形態では、一例として0とする。)を下回っているか否かを判断し、下回っている場合には、その入力側テストリンクを削除する。この場合には、後述する図12のテスト反転リンクの削除処理E7またはテスト非反転リンクの削除処理E8を行う。なお、第1の入力側テストリンクは、削除されないように十分に大きな正の値の強化信号を蓄えた状態にしておくので、結局、ここで削除されるのは、第2の入力側テストリンクとなる。また、このようにして第2の入力側テストリンクが削除された場合の他に、第2の入力側テストリンクの入力側ノード(実ノード)の削除に伴って第2の入力側テストリンクが削除された場合を含め、リンクの数が1になったとき(つまり、第1の入力側テストリンクだけになったとき)には、任意のノードに結合する新たな第2の入力側テストリンクをランダムに生成し、ノード情報記憶手段62のテスト中間ANDノードの入力側テストリンクアドレスC1(C1(2)となる。)に登録する。
さらに、学習手段51は、ノード情報記憶手段62のテスト中間ANDノードの第1の入力側テストリンクアドレスC1(配列1番目のC1(1)となる。)に対応する第1の入力側テストリンクの強化信号の累積値D8を、十分大きな正の値(例えば10300等)に設定し、累積値D8に、十分大きな正の値が常に保持されるようにし、第1の入力側テストリンクが削除されないようにする。
<出力ノードの学習処理>
出力ノードの学習処理は、前述した中間ORノードの学習処理と略同様である。先ず、学習手段51は、出力ノードに対して付与された強化信号Rに基づき、出力ノードの入出力状態に応じて、各入力側リンクの出力ノードの出力Yへの寄与度に従って各入力側リンクに強化信号が分配(伝播)されるように、各入力側リンクに対して付与する強化信号R1(k)(k=1〜N)を算定する。また、これと併せて、各入力側リンクの入力側ノードに対して付与する強化信号R2(k)(k=1〜N)を算定する。
この際、学習手段51は、前述した中間ORノードの学習処理の場合と全く同じルールで、出力ノードに結合されているN本の入力側リンクのうち着目する1本の入力側リンクに対して付与する強化信号R1(k)(k=1〜N)、および着目する1本の入力側リンクの入力側ノードに対して付与する強化信号R2(k)(k=1〜N)を算定する。すなわち、k番目(k=1〜N)の入力側リンクが、前述したケース1〜5のいずれに該当するかを判断し、1本1本の入力側リンクについて強化信号R1(k)を算定するとともに、1本1本の入力側リンクの入力側ノードについて強化信号R2(k)を算定していく。
さらに、学習手段51は、出力ノードの入力側に結合されたテストリンク(出力ノードのテストリンクアドレスC4に対応するテストリンク)に対して付与する強化信号RTを算定する。この際、学習手段51は、テストリンクが、仮に出力ノードの入力側リンクとして存在していた場合を想定して強化信号を算定する。先ず、テストリンクが入力側リンクとして加わることにより出力Yが変化しない場合には、入力X(k)にテストリンクによる入力TX、すなわちテストリンクの出力(リンク情報記憶手段63のテストリンクの出力D7を読み込んで得られる。)を追加し、前述したケース1〜5の場合分けに従ってその強化信号RTを算定する。次に、テストリンクが入力側リンクとして加わることにより出力Yが変化する場合には、入力X(k)にテストリンクによる入力TX、すなわちテストリンクの出力D7を追加し、Yへ出力ノードの出力C9(実際の出力)を反転させた値を代入し、Rへ出力ノードの強化信号の合計値C10(実際の強化信号の合計値)の符号を変えた−C10を代入して、前述したケース1〜5のルールを適用することにより、その強化信号RTを算定する。
そして、以上のようにして算定した強化信号、すなわち各入力側リンクに対して付与する強化信号R1(k)(k=1〜N)と、テストリンクに対して付与する強化信号RTとを、リンク情報記憶手段63の当該リンクの強化信号の累積値D8に加算して累積値を更新するとともに、当該リンクの強化信号D9に上書きし、また、各入力側リンクの入力側ノードに対して付与する強化信号R2(k)(k=1〜N)を、ノード情報記憶手段62の当該ノードの強化信号の合計値C10に加算(当該ノードには、他の構成エレメントからも強化信号が伝播されてくるので、それらを加算するという意味である。)する。
続いて、学習手段51は、各入力側リンクについて、それぞれリンク情報記憶手段63の当該リンクの強化信号の累積値D8が閾値(本実施形態では、一例として0とする。)を下回っているか否かを判断し、下回っている場合には、その入力側リンクを削除する。この場合には、後述する図12の反転リンクの削除処理E5または非反転リンクの削除処理E6を行う。
また、学習手段51は、テストリンクについて、リンク情報記憶手段63の当該リンクの強化信号の累積値D8が閾値(本実施形態では、一例として0とする。)を下回っているか否かを判断し、下回っている場合には、テストリンクを削除する。この場合には、後述する図12のテスト反転リンクの削除処理E7またはテスト非反転リンクの削除処理E8を行う。そして、任意のノードに結合する新たなテストリンクをランダムに生成し、ノード情報記憶手段62の出力ノードのテストリンクアドレスC4に登録する。
さらに、学習手段51は、テストリンクについて、リンク情報記憶手段63の当該リンクの強化信号の累積値D8が閾値を上回っているか否かを判断し、上回っている場合には、テストリンクを実リンクに昇格させて実用化するため、ノード情報記憶手段62の出力ノードのテストリンクアドレスC4と、この出力ノードのアドレスB3と、ネットワークアドレスC3とを用いて、実リンクを新たに生成し、出力ノードの入力側リンクアドレスC1に追加登録する。この際、テストリンクについてのリンク情報記憶手段63の反転・非反転フラグD5がTrue(反転リンクを意味する。)のときには、反転リンクを新たに生成し、False(非反転リンクを意味する。)のときには、非反転リンクを新たに生成する。また、これと併せて、テストリンクを削除する。この場合には、後述する図12のテスト反転リンクの削除処理E7またはテスト非反転リンクの削除処理E8を行う。そして、任意のノードに結合する新たなテストリンクをランダムに生成し、ノード情報記憶手段62の出力ノードのテストリンクアドレスC4に登録する。
そして、学習手段51は、出力ノードの入力側リンクアドレスC1に登録されている入力側リンクの数が、0になった場合には、ネットワークアドレスC3でネットワーク情報記憶手段61を参照し、入力ノードアドレスB1、中間ノードアドレスB2、出力ノードアドレスB3からランダムに選択したノードアドレスと、当該出力ノードのアドレスと、ネットワークアドレスC3とを用いて、反転リンクまたは非反転リンクのいずれかをランダムに選択して新たに実リンクを生成し、生成した実リンクのアドレスを当該出力ノードの入力側リンクアドレスC1に加える。この場合には、後述する図11の反転リンクの初期化処理G9または非反転リンクの初期化処理G10を行う。
それから、学習手段51は、ノード情報記憶手段62の出力ノードの強化信号の合計値C10をクリアして0にする。
<反転リンクの学習処理>
反転リンクの学習処理は、後述する非反転リンクの学習処理と等しいので、説明を省略する。
<非反転リンクの学習処理>
図10には、学習対象となる非反転リンク(実リンク)120の一例が示されている。非反転リンク120の入力側には、入力側ノード121が結合され、出力側には、出力側ノード122が結合されている。また、非反転リンク120に付随してテストノード123(図示の例では、テスト中間ANDノードであるが、テスト中間ORノードでもよい。)が設けられている。このテストノード123の入力側には、第1および第2の入力側テストリンク124,125が結合され、出力側には、出力側テストリンク126が結合されている。但し、出力側テストリンク126は、本実施形態では、実質的な情報伝達を行わないので、二点鎖線で示されている。そして、第1の入力側テストリンク124は、非反転リンク120の入力側ノード121に結合され、第2の入力側テストリンク125は、任意のノード127にランダムに結合され、出力側テストリンク126は、非反転リンク120の出力側ノード122に結合されている。
ここで、非反転リンク120の出力をYとし、テストノード123の出力をTYとし、非反転リンク120に対して付与される強化信号をR1とし、非反転リンク120の入力側ノード121に対して付与される強化信号をR2とし、テストノード123に対して付与される強化信号をRTとする。
図6において、先ず、学習手段51は、伝播元の非反転リンク120に対して付与された強化信号R1に基づき、伝播元の非反転リンク120の出力Yおよび伝播先のテストノード123の出力TYの状態に応じて、伝播先のテストノード123に対して付与する強化信号RTを算定する(ステップS50601)。
この際、伝播元の非反転リンク120に対して付与された強化信号R1は、リンク情報記憶手段63の非反転リンク120の強化信号D9を読み込んで得られる。また、伝播元の非反転リンク120の出力Yは、リンク情報記憶手段63の非反転リンク120の出力D7を読み込んで得られる。さらに、伝播先のテストノード123の出力TYは、リンク情報記憶手段63の非反転リンク120のテストノードアドレスD4を参照し、そのテストノードアドレスD4に対応するテストノード123についてのノード情報記憶手段62のノードの出力C9を読み込んで得られる。
そして、学習手段51は、次のようなルールで、伝播先のテストノード123に対して付与する強化信号RTを算定する。
ケース1:(R1>0)∧(TY=Y)の場合には、RT=0とする。この場合は、TY=Yであるので、非反転リンク120が存在していれば、用が足りるため、テストノード123は、必要ないからである。
ケース2:(R1>0)∧(TY≠Y)の場合には、テストノード123を削除し、新たにテストノードを生成し(生成するテストノードの第2の入力側テストリンクを任意のノードにランダムに結合する。)、リンク情報記憶手段63の非反転リンク120のテストノードアドレスD4に登録する。この際、非反転リンク120の出力側ノードアドレスD2に対応する出力側ノード122のAND・ORノードフラグC5が、True(ANDノードを意味する。)のときには、テスト中間ORノードを生成し、False(ORノードを意味する。)のときには、テスト中間ANDノードを生成する。この場合は、R1>0であり、非反転リンク120が良い働きをしているのに対し、TY≠Yであり、テストノード123が非反転リンク120と異なる出力を行っているため、テストノード123が悪い働きをすると考えられるからである。
ケース3:(R1≦0)∧(TY=Y)の場合には、RT=R1とする。この場合は、R1≦0であり、非反転リンク120が悪い働きをしているのに対し、TY=Yであり、テストノード123も非反転リンク120と同じ出力を行っているので、テストノード123に対しても非反転リンク120の場合と同様に強化信号として罰を与える。
ケース4:(R1≦0)∧(TY≠Y)の場合には、RT=−R1とする。この場合は、R1≦0であり、非反転リンク120が悪い働きをしているのに対し、TY≠Yであり、テストノード123は、非反転リンク120と異なる出力を行っているので、テストノード123に対しては、非反転リンク120の場合とは異なり、強化信号として報酬を与える。
そして、以上のようにして算定したテストノード123に対して付与する強化信号RTを、ノード情報記憶手段62の当該ノードの強化信号の合計値C10に加算する(図6のステップS50602)。
続いて、学習手段51は、ノード情報記憶手段62のテストノード123のAND・ORノードフラグC5が、True(ANDノードを意味する。)のときには、テストノード123について前述したテスト中間ANDノードの学習処理を行い、False(ORノードを意味する。)のときには、前述したテスト中間ORノードの学習処理を行う(ステップS50603)。
その後、学習手段51は、テストノード123の第1および第2の入力側テストリンク124,125の双方について、リンク情報記憶手段63のこれらのリンクの強化信号の累積値D8が閾値を上回っているか否かを判断し、いずれも閾値を上回っている場合には、テストノード123を実ノードに昇格させて実用化するため、テストノード123のアドレスD4と、学習対象となっている非反転リンク120のアドレスと、ネットワークアドレスD3とを用いて、実ノードを新たに生成し、ネットワークアドレスD3を参照してネットワーク情報記憶手段61の中間ノードアドレスB2に追加登録する(ステップS50604)。この際、ノード情報記憶手段62のテストノード123のAND・ORノードフラグC5が、True(ANDノードを意味する。)のときには、中間ANDノードを生成し、False(ORノードを意味する。)のときには、中間ORノードを生成する。また、これと併せて、テストノード123を削除し、学習対象となっている非反転リンク120も削除する。
<テスト反転リンクの学習処理>
テスト反転リンクは、学習を行わない。
<テスト非反転リンクの学習処理>
テスト非反転リンクは、学習を行わない。
図11には、初期化の構成が示されている。図11において、ロボット初期化処理G1、ネットワーク初期化処理G2、入力ノード初期化処理G3、および出力ノード初期化処理G4は、プログラムを立ち上げ、ロボット30の動作制御を開始した直後にのみ行うが、その他のノードやリンクの初期化処理G5〜G12は、ロボット30の動作制御を開始した直後のみならず、その後の学習でノードやリンクが生成される都度に行う。また、初期化の方法は、ノードの種類やリンクの種類によって異なり、状況に応じて複数の初期化を使い分ける場合も存在する。さらに、初期化処理内で別の初期化処理を行う必要が生じる場合もあり、それぞれの初期化は関連しあっている。そして、これらの初期化の関係が図11に示されている。図11において、矢印の付け根の初期化を行うには、矢印の先端の初期化が必要である。図中の実線は、必ず使用し、点線は、使用する可能性があることを意味する。なお、図中の一点鎖線は、昇格によりテストノードやテストリンクから実ノードや実リンクになる場合を示している。
<ロボット初期化処理G1>
ロボット初期化処理G1では、ロボット情報記憶手段60の入力配列A1および出力配列A2は、初期化の必要はない。ネットワークアドレスA3については、本実施形態では、一例として、入力ノード数128、出力ノード数32で初期化し、得られたネットワークアドレスを登録する。A4,A5,A6は、0とする。
<ネットワーク初期化処理G2>
ネットワーク初期化処理G2では、ネットワーク情報記憶手段61に記憶する情報の初期化処理を行う。ネットワーク20は、入力ノード21の数と出力ノード23の数を指定して初期化する。入力ノードアドレスB1には、初期化されるべきネットワーク20のアドレスを使用し、指定された入力ノード数の分だけ入力ノード21の初期化処理G3を行い、得られた入力ノード21のアドレスを順次登録する。中間ノードアドレスB2への登録は、中間ノード22が生成される都度に行うので、中間ノードアドレスB2の初期化は必要ない。出力ノードアドレスB3には、初期化されるべきネットワーク20のアドレスを使用し、指定された出力ノード数の分だけ出力ノード23の初期化処理G4を行い、得られた出力ノード23のアドレスを順次登録する。ネットワーク20に対する強化信号B4は、0とする。
<入力ノード初期化処理G3>
入力ノード21は、この入力ノード21が所属するネットワーク20のアドレス(ノード情報記憶手段62に記憶させるネットワークアドレスC3)を指定して初期化する。入力ノード21は、ダミーノードなので、入力側リンクアドレスC1の初期化の必要はない。出力側リンクアドレスC2への登録は、入力ノード21の出力側に結合される出力側リンクが生成される都度に行うので、出力側リンクアドレスC2の初期化の必要はない。ネットワークアドレスC3は、指定されたネットワーク20のアドレスを用いて上書きする。入力ノード21は、ダミーノードなので、テストリンクアドレスC4およびAND・ORノードフラグC5の初期化の必要はない。当該ノードが入力ノード21であるから、入力ノードフラグC6は、Trueとし、出力ノードフラグC7およびテストノードフラグC8は、初期化しないか、Falseとする。ノードの出力C9は、入力変換手段52により設定されるので(図4のステップS507参照)、初期化の必要はない。強化信号の合計値C10は、0とする。
<出力ノード初期化処理G4>
出力ノード23は、この出力ノード23が所属するネットワーク20のアドレス(ノード情報記憶手段62に記憶させるネットワークアドレスC3)を指定して初期化する。入力側リンクアドレスC1については、指定されたネットワークアドレスC3で参照されるネットワーク情報記憶手段61の入力ノードアドレスB1、出力ノードアドレスB3からランダムに選択したノードアドレス(なお、中間ノードアドレスB2には、この時点ではデータは入っていないので、選択対象とはならない。)と、この初期化される出力ノード23のアドレスと、指定されたネットワークアドレスC3とを用いて、図13に示すように、ランダムに選択されたノード140に結合される実リンク141を、反転リンクまたは非反転リンクのいずれかをランダムに選択して新たに生成し(図11の反転リンク初期化処理G9または非反転リンク初期化処理G10を行う。)、生成された実リンク141のアドレスを入力側リンクアドレスC1に加える。この際、実リンク141に付随するテストノード142も新たに生成し(図11のテスト中間ORノード初期化処理G7またはテスト中間ANDノード初期化処理G8を行う。)、さらにノード140に結合される第1の入力側テストリンク143と、初期化の対象となっている出力ノード23に結合される出力側テストリンク144と、任意のノード145にランダムに結合される第2の入力側テストリンク146とを新たに生成する(図11のテスト反転リンク初期化処理G11またはテスト非反転リンク初期化処理G12を行う。)。
出力側リンクアドレスC2の初期化の必要はない。ネットワークアドレスC3は、指定されたネットワーク20のアドレスを用いて上書きする。
テストリンクアドレスC4については、指定されたネットワークアドレスC3で参照されるネットワーク情報記憶手段61の入力ノードアドレスB1、出力ノードアドレスB3からランダムに選択したノードアドレス(なお、中間ノードアドレスB2には、この時点ではデータは入っていないので、選択対象とはならない。)と、この初期化される出力ノード23のアドレスと、指定されたネットワークアドレスC3とを用いて、図13に示すように、ランダムに選択されたノード147に結合されるテストリンク148を、テスト反転リンクまたはテスト非反転リンクのいずれかをランダムに選択して新たに生成し(図11のテスト反転リンク初期化処理G11またはテスト非反転リンク初期化処理G12を行う。)、生成されたテストリンク148のアドレスをテストリンクアドレスC4に登録する。
AND・ORノードフラグC5は、本実施形態では、出力ノード23はORノードとするため、False(ORノードを意味する。)とする。また、当該ノードが出力ノード23であるから、入力ノードフラグC6は、Falseとし、出力ノードフラグC7は、Trueとし、テストノードフラグC8は、Falseとする。さらに、ノードの出力C9は、Falseとし、強化信号の合計値C10は、0とする。
<中間ORノード初期化処理G5>
中間ORノード初期化処理G5は、削除される実リンク(テストリンク以外のリンクのいずれか)を指定し、参照することで行われる。この処理は、ネットワーク20内から実リンク1本を削除し、その実リンクに付随するテストノード(その実リンクについてのリンク情報記憶手段63のテストノードアドレスD4に対応するテストノード)を実ノードへと昇格させる際に使用される処理だからである。
入力側リンクアドレスC1については、図14に示すように、削除対象として指定された実リンク160に付随するテスト中間ORノード161(リンク情報記憶手段63の実リンク160のテストノードアドレスD4に対応するテストノード)の第1および第2の入力側テストリンク162,163のアドレスC1(C1(1),C1(2))と、生成される初期化対象の中間ORノード180のアドレス(これから確保しようとしているメモリ領域のアドレス)とを用いて、第1の入力側テストリンク162がテスト反転リンクであれば反転リンク(実リンク)を、第1の入力側テストリンク162がテスト非反転リンクであれば非反転リンク(実リンク)を新たに初期化して生成し(図11の反転リンク初期化処理G9または非反転リンク初期化処理G10を行う。)、その生成された実リンクを中間ORノード180の入力側リンク181として登録するために、入力側リンク181のアドレスを入力側リンクアドレスC1に登録する。同様に、第2の入力側テストリンク163がテスト反転リンクであれば反転リンク(実リンク)を、第2の入力側テストリンク163がテスト非反転リンクであれば非反転リンク(実リンク)を新たに初期化して生成し(図11の反転リンク初期化処理G9または非反転リンク初期化処理G10を行う。)、その生成された実リンクを中間ORノード180の入力側リンク182として登録するために、入力側リンク182のアドレスを入力側リンクアドレスC1に登録する。つまり、第1の入力側テストリンク162と、入力側リンク181との反転・非反転を一致させ、かつ、第2の入力側テストリンク163と、入力側リンク182との反転・非反転を一致させる。この際、入力側リンク181の入力側ノードは、第1の入力側テストリンク162の入力側に結合されていたノード164(すなわち、削除される実リンク160の入力側ノード)とし、入力側リンク182の入力側ノードは、第2の入力側テストリンク163の入力側に結合されていたノード165とする。なお、図示は省略されているが、新たに生成した入力側リンク181,182には、これらにそれぞれ付随するテストノードが設けられる(図11のテスト中間ORノード初期化処理G7またはテスト中間ANDノード初期化処理G8を行う。)。
その後、中間ORノード180の第1番目の入力側リンク181(入力側リンクアドレスC1のうち、配列の先頭に格納される入力側リンクアドレスC(1)に対応する入力側リンク)の強化信号の累積値D8を、削除対象として指定された実リンク160の強化信号の累積値D8で上書きすることで初期化する。これは、後述するテスト中間ORノード初期化処理G7およびテスト中間ANDノード初期化処理G8の説明に示すように、削除される実リンク160と、テスト中間ORノード161の第1の入力側テストリンク162との反転・非反転は一致しているので、結局、第1番目の入力側リンク181は、実リンク160と反転・非反転が一致していることから、削除する実リンク160の強化信号を第1番目の入力側リンク181が受け継ぐ形にするものである。
出力側リンクアドレスC2については、図14に示すように、生成される初期化対象の中間ORノード180のアドレスと、削除対象として指定された実リンク160の出力側ノードアドレスD2と、削除対象として指定された実リンク160のネットワークアドレスD3とを用いて、非反転リンク(実リンク)を新たに初期化して生成し(図11の非反転リンク初期化処理G10を行う。)、その生成された実リンクを中間ORノード180の出力側リンク183として登録するために、出力側リンク183のアドレスを出力側リンクアドレスC2に登録する。この際、出力側リンク183の出力側ノードは、テスト中間ORノード161の出力側テストリンク166の出力側に結合されていたノード167(すなわち、削除される実リンク160の出力側ノード)とする。なお、図示は省略されているが、新たに生成した出力側リンク183には、これに付随するテストノードが設けられる(図11のテスト中間ORノード初期化処理G7またはテスト中間ANDノード初期化処理G8を行う。)。
また、生成された非反転リンク(実リンク)である出力側リンク183の強化信号の累積値D8を、削除される実リンク160の強化信号の累積値D8で上書きすることで初期化する。
ネットワークアドレスC3は、削除対象として指定された実リンク160のネットワークアドレスD3で上書きする。
テストリンクアドレスC4については、指定されたネットワークアドレスC3で参照されるネットワーク情報記憶手段61の入力ノードアドレスB1、中間ノードアドレスB2、出力ノードアドレスB3からランダムに選択した1つのノードアドレスと、生成される初期化対象の中間ORノード180のアドレスと、ネットワークアドレスD3とを用いて、図14に示すように、ランダムに選択されたノード184に結合されるテストリンク185を、テスト反転リンクまたはテスト非反転リンクのいずれかをランダムに選択して新たに生成し(図11のテスト反転リンク初期化処理G11またはテスト非反転リンク初期化処理G12を行う。)、生成されたテストリンク185のアドレスをテストリンクアドレスC4に登録する。
また、初期化対象が中間ORノード180であるから、AND・ORノードフラグC5は、False(ORノードを意味する。)とし、入力ノードフラグC6は、Falseとし、出力ノードフラグC7は、Falseとし、テストノードフラグC8は、Falseとする。さらに、ノードの出力C9は、Falseとし、強化信号の合計値C10は、0とする。
<中間ANDノード初期化処理G6>
中間ANDノード初期化処理G6は、前述した中間ORノード初期化処理G5と略同様である。すなわち、中間ANDノード初期化処理G6は、削除される実リンク(テストリンク以外のリンクのいずれか)を指定し、参照することで行われる。この処理は、ネットワーク20内から実リンク1本を削除し、その実リンクに付随するテストノード(その実リンクについてのリンク情報記憶手段63のテストノードアドレスD4に対応するテストノード)を実ノードへと昇格させる際に使用される処理だからである。
入力側リンクアドレスC1については、削除対象として指定された実リンクに付随するテスト中間ANDノード(リンク情報記憶手段63の実リンクのテストノードアドレスD4に対応するテストノード)の第1および第2の入力側テストリンクのアドレスC1(C1(1),C1(2))と、生成される初期化対象の中間ANDノードのアドレス(これから確保しようとしているメモリ領域のアドレス)とを用いて、第1の入力側テストリンクがテスト反転リンクであれば反転リンク(実リンク)を、第1の入力側テストリンクがテスト非反転リンクであれば非反転リンク(実リンク)を新たに初期化して生成し(図11の反転リンク初期化処理G9または非反転リンク初期化処理G10を行う。)、その生成された実リンクを中間ANDノードの入力側リンクとして登録するために、その実リンクのアドレスを入力側リンクアドレスC1に登録する。同様に、第2の入力側テストリンクがテスト反転リンクであれば反転リンク(実リンク)を、第2の入力側テストリンクがテスト非反転リンクであれば非反転リンク(実リンク)を新たに初期化して生成し(図11の反転リンク初期化処理G9または非反転リンク初期化処理G10を行う。)、その生成された実リンクを中間ANDノードの入力側リンクとして登録するために、その実リンクのアドレスを入力側リンクアドレスC1に登録する。
その後、中間ANDノードの第1番目の入力側リンク(入力側リンクアドレスC1のうち、配列の先頭に格納される入力側リンクアドレスC(1)に対応する入力側リンク)の強化信号の累積値D8を、削除対象として指定された実リンクの強化信号の累積値D8で上書きすることで初期化する。
出力側リンクアドレスC2については、生成される初期化対象の中間ANDノードのアドレスと、削除対象として指定された実リンクの出力側ノードアドレスD2と、削除対象として指定された実リンクのネットワークアドレスD3とを用いて、非反転リンク(実リンク)を新たに初期化して生成し(図11の非反転リンク初期化処理G10を行う。)、その生成された実リンクを中間ANDノードの出力側リンクとして登録するために、その実リンクのアドレスを出力側リンクアドレスC2に登録する。また、生成された非反転リンク(実リンク)である出力側リンクの強化信号の累積値D8を、削除される実リンクの強化信号の累積値D8で上書きすることで初期化する。
ネットワークアドレスC3は、削除対象として指定された実リンクのネットワークアドレスD3で上書きする。
テストリンクアドレスC4については、指定されたネットワークアドレスC3で参照されるネットワーク情報記憶手段61の入力ノードアドレスB1、中間ノードアドレスB2、出力ノードアドレスB3からランダムに選択した1つのノードアドレスと、生成される初期化対象の中間ANDノードのアドレスと、ネットワークアドレスD3とを用いて、ランダムに選択されたノードに結合されるテストリンクを、テスト反転リンクまたはテスト非反転リンクのいずれかをランダムに選択して新たに生成し(図11のテスト反転リンク初期化処理G11またはテスト非反転リンク初期化処理G12を行う。)、生成されたテストリンクのアドレスをテストリンクアドレスC4に登録する。
また、初期化対象が中間ANDードであるから、AND・ORノードフラグC5は、True(ANDノードを意味する。)とし、入力ノードフラグC6は、Falseとし、出力ノードフラグC7は、Falseとし、テストノードフラグC8は、Falseとする。さらに、ノードの出力C9は、Falseとし、強化信号の合計値C10は、0とする。
<テスト中間ORノード初期化処理G7>
テスト中間ORノード初期化処理G7は、実リンクと、この実リンクのネットワークアドレスD3とを指定することで行われる。これは、テスト中間ORノードが、必ず1本の実リンクに付随して設けられる(実リンクのテストノードアドレスD4に登録される)からである。
入力側テストリンクアドレスC1については、図15に示すように、指定された実リンク200の入力側ノードアドレスD1と、この生成されるテスト中間ORノード201のアドレスと、指定された実リンク200のネットワークアドレスD3とを用いて、指定された実リンク200が反転リンクであればテスト反転リンクを、指定された実リンク200が非反転リンクであればテスト非反転リンクを新たに初期化して生成し(図11のテスト反転リンク初期化処理G11またはテスト非反転リンク初期化処理G12を行う。)、生成したリンクを第1の入力側テストリンク202とし、そのアドレスを第1の入力側テストリンクアドレスC1(1)として登録し、この第1の入力側テストリンク202の強化信号の累積値D8を十分大きな正の値(例えば10300等)で上書きする。これは、第1の入力側テストリンク202が削除されることを防止するためである。
さらに、入力側テストリンクアドレスC1については、指定された実リンク200のネットワークアドレスD3で参照されるネットワーク情報記憶手段61の入力ノードアドレスB1、中間ノードアドレスB2、出力ノードアドレスB3からランダムに選択した1つのノードアドレスと、生成される初期化対象のテスト中間ORノード201のアドレスと、指定された実リンク200のネットワークアドレスD3とを用いて、図15に示すように、ランダムに選択されたノード203に結合される第2の入力側テストリンク204を、テスト反転リンクまたはテスト非反転リンクのいずれかをランダムに選択して新たに生成し(図11のテスト反転リンク初期化処理G11またはテスト非反転リンク初期化処理G12を行う。)、生成された第2の入力側テストリンク204のアドレスを第2の入力側テストリンクアドレスC1(2)として登録する。
出力側テストリンクアドレスC2については、初期化の必要はない。テスト中間ORノード201の出力側テストリンク205では、強化信号の蓄積は行われず、情報伝達も行わないからである。従って、図15では、出力側テストリンク205は、一点鎖線で示されている。
ネットワークアドレスC3は、指定された実リンク200のネットワークアドレスD3で上書きする。また、テストノードの場合には、テストリンクアドレスC4に登録すべきテストリンクは無いので、テストリンクアドレスC4の初期化は必要ない。
また、初期化対象がテスト中間ORノードであるから、AND・ORノードフラグC5は、False(ORノードを意味する。)とし、入力ノードフラグC6は、Falseとし、出力ノードフラグC7は、Falseとし、テストノードフラグC8は、Trueとする。さらに、ノードの出力C9は、Falseとし、強化信号の合計値C10は、0とする。
<テスト中間ANDノード初期化処理G8>
テスト中間ANDノード初期化処理G8は、前述したテスト中間ORノード初期化処理G7と略同様である。すなわち、テスト中間ANDノード初期化処理G8は、実リンクと、この実リンクのネットワークアドレスD3とを指定することで行われる。これは、テスト中間ANDノードが、必ず1本の実リンクに付随して設けられる(実リンクのテストノードアドレスD4に登録される)からである。
入力側テストリンクアドレスC1については、指定された実リンクの入力側ノードアドレスD1と、この生成されるテスト中間ANDノードのアドレスと、指定された実リンクのネットワークアドレスD3とを用いて、指定された実リンクが反転リンクであればテスト反転リンクを、指定された実リンクが非反転リンクであればテスト非反転リンクを新たに初期化して生成し(図11のテスト反転リンク初期化処理G11またはテスト非反転リンク初期化処理G12を行う。)、生成したリンクを第1の入力側テストリンクとし、そのアドレスを第1の入力側テストリンクアドレスC1(1)として登録し、この第1の入力側テストリンクの強化信号の累積値D8を十分大きな正の値(例えば10300等)で上書きする。これは、第1の入力側テストリンクが削除されることを防止するためである。
さらに、入力側テストリンクアドレスC1については、指定された実リンクのネットワークアドレスD3で参照されるネットワーク情報記憶手段61の入力ノードアドレスB1、中間ノードアドレスB2、出力ノードアドレスB3からランダムに選択した1つのノードアドレスと、生成される初期化対象のテスト中間ANDノードのアドレスと、指定された実リンクのネットワークアドレスD3とを用いて、ランダムに選択されたノードに結合される第2の入力側テストリンクを、テスト反転リンクまたはテスト非反転リンクのいずれかをランダムに選択して新たに生成し(図11のテスト反転リンク初期化処理G11またはテスト非反転リンク初期化処理G12を行う。)、生成された第2の入力側テストリンクのアドレスを第2の入力側テストリンクアドレスC1(2)として登録する。
出力側テストリンクアドレスC2については、初期化の必要はない。テスト中間ANDノードの出力側テストリンクでは、強化信号の蓄積は行われず、情報伝達も行わないからである。
ネットワークアドレスC3は、指定された実リンクのネットワークアドレスD3で上書きする。また、テストノードの場合には、テストリンクアドレスC4に登録すべきテストリンクは無いので、テストリンクアドレスC4の初期化は必要ない。
また、初期化対象がテスト中間ANDノードであるから、AND・ORノードフラグC5は、True(ANDノードを意味する。)とし、入力ノードフラグC6は、Falseとし、出力ノードフラグC7は、Falseとし、テストノードフラグC8は、Trueとする。さらに、ノードの出力C9は、Trueとし、強化信号の合計値C10は、0とする。
<反転リンク初期化処理G9>
反転リンク初期化処理G9には、次の2通りの場合がある。1つは、テスト反転リンクを昇格する場合であり、もう1つは、元になるテスト反転リンク無しに、直接、反転リンクを生成する場合である。後者の場合は、プログラムを立ち上げ、ロボット30の動作制御を開始した直後に、出力ノード23から他のノードに向けて生成される場合と、出力ノード23に結合されていた実リンクが一旦削除されたときにそれに代えて生成される場合とがある。
<反転リンク初期化処理G9:テスト反転リンクを用いた初期化処理>
テスト反転リンクを用いる場合には、元になるテスト反転リンクと、出力側ノードアドレスD2を指定して初期化を行う。生成される反転リンクは、昇格によるものであるため、生成される反転リンクの出力側ノードは、元になるテスト反転リンクの出力側ノードと同じノードとなる。
入力側ノードアドレスD1については、元になるテスト反転リンクの入力側ノードアドレスD1を登録する。出力側ノードアドレスD2については、指定された出力側ノードアドレスを登録する。ネットワークアドレスD3については、元になるテスト反転リンクのネットワークアドレスD3を登録する。
テストノードアドレスD4については、この生成される反転リンクと、ネットワークアドレスD3とを指定し、指定された出力側ノードアドレスD2に対応する出力側ノード(生成される反転リンクの出力側ノード)のAND・ORノードフラグC5が、True(ANDノードを意味する。)であればテスト中間ORノードを、False(ORノードを意味する。)であればテスト中間ANDノードを、新たに初期化して生成し(図11のテスト中間ORノード初期化処理G7またはテスト中間ANDノード初期化処理G8を行う。)、生成されたテストノードをテストノードアドレスD4へ登録する。つまり、生成される反転リンクの出力側ノードと、その反転リンクに付随するテストノードとのAND・ORを逆にする。
反転・非反転フラグD5は、True(反転リンクを意味する。)とし、テストリンクフラグD6は、Falseとする。また、リンクの出力D7は、Falseとし、強化信号の累積値D8は、指定された元になるテスト反転リンクの強化信号の累積値D8で上書きし、強化信号D9は、0とする。
<反転リンク初期化処理G9:テスト反転リンクを用いない直接の初期化処理>
テスト反転リンクを用いない直接の初期化処理は、入力側ノードアドレスD1と、出力側ノードアドレスD2と、ネットワークアドレスD3とを指定して行う。D1〜D3には、指定されたアドレスを登録する。この場合の初期化処理で生成される反転リンク(実リンク)は、出力ノード23からしか出ていかないので、生成される反転リンクの出力側ノードは、出力ノード23となる。一方、生成される反転リンクの入力側ノードは、ランダムに決定される。
テストノードアドレスD4を初期化する前に、D5〜D9の初期化を行う。反転・非反転フラグD5は、True(反転リンクを意味する。)とし、テストリンクフラグD6は、Falseとする。また、リンクの出力D7は、Falseとし、強化信号の累積値D8は、0とし、強化信号D9は、0とする。
テストノードアドレスD4については、この生成される反転リンクと、ネットワークアドレスD3とを指定し、指定された出力側ノードアドレスD2に対応する出力側ノード(生成される反転リンクの出力側ノード)のAND・ORノードフラグC5が、True(ANDノードを意味する。)であればテスト中間ORノードを、False(ORノードを意味する。)であればテスト中間ANDノードを、新たに初期化して生成し(図11のテスト中間ORノード初期化処理G7またはテスト中間ANDノード初期化処理G8を行う。)、生成されたテストノードをテストノードアドレスD4へ登録する。つまり、生成される反転リンクの出力側ノードと、その反転リンクに付随するテストノードとのAND・ORを逆にする。なお、テストノードアドレスD4を後に初期化するのは、テストノードの初期化の際に、そのテストノードが付随する反転リンクの反転・非反転フラグD5が参照されるからである。
そして、以上のテスト反転リンクを用いた初期化処理、およびテスト反転リンクを用いない直接の初期化処理の双方について、最後に、入力側ノードアドレスD1に対応する入力側ノードの出力側リンクアドレスC2と、出力側ノードアドレスD2に対応する出力側ノードの入力側リンクアドレスC1とへ、この生成される反転リンクのアドレスを登録し、初期化を終える。
<非反転リンク初期化処理G10>
非反転リンク初期化処理G10は、前述した反転リンク初期化処理G9と略同様である。すなわち、非反転リンク初期化処理G10には、次の2通りの場合がある。1つは、テスト非反転リンクを昇格する場合であり、もう1つは、元になるテスト非反転リンク無しに、直接、非反転リンクを生成する場合である。後者の場合は、プログラムを立ち上げ、ロボット30の動作制御を開始した直後に、出力ノード23から他のノードに向けて生成される場合と、出力ノード23に結合されていた実リンクが一旦削除されたときにそれに代えて生成される場合とがある。
<非反転リンク初期化処理G10:テスト非反転リンクを用いた初期化処理>
テスト非反転リンクを用いる場合には、元になるテスト非反転リンクと、出力側ノードアドレスD2を指定して初期化を行う。生成される非反転リンクは、昇格によるものであるため、生成される非反転リンクの出力側ノードは、元になるテスト非反転リンクの出力側ノードと同じノードとなる。
入力側ノードアドレスD1については、元になるテスト非反転リンクの入力側ノードアドレスD1を登録する。出力側ノードアドレスD2については、指定された出力側ノードアドレスを登録する。ネットワークアドレスD3については、元になるテスト非反転リンクのネットワークアドレスD3を登録する。
テストノードアドレスD4については、この生成される非反転リンクと、ネットワークアドレスD3とを指定し、指定された出力側ノードアドレスD2に対応する出力側ノード(生成される非反転リンクの出力側ノード)のAND・ORノードフラグC5が、True(ANDノードを意味する。)であればテスト中間ORノードを、False(ORノードを意味する。)であればテスト中間ANDノードを、新たに初期化して生成し(図11のテスト中間ORノード初期化処理G7またはテスト中間ANDノード初期化処理G8を行う。)、生成されたテストノードをテストノードアドレスD4へ登録する。つまり、生成される非反転リンクの出力側ノードと、その非反転リンクに付随するテストノードとのAND・ORを逆にする。
反転・非反転フラグD5は、False(非反転リンクを意味する。)とし、テストリンクフラグD6は、Falseとする。また、リンクの出力D7は、Falseとし、強化信号の累積値D8は、指定された元になるテスト非反転リンクの強化信号の累積値D8で上書きし、強化信号D9は、0とする。
<非反転リンク初期化処理G10:テスト非反転リンクを用いない直接の初期化処理>
テスト非反転リンクを用いない直接の初期化処理は、入力側ノードアドレスD1と、出力側ノードアドレスD2と、ネットワークアドレスD3とを指定して行う。D1〜D3には、指定されたアドレスを登録する。この場合の初期化処理で生成される非反転リンク(実リンク)は、出力ノード23からしか出ていかないので、生成される非反転リンクの出力側ノードは、出力ノード23となる。一方、生成される非反転リンクの入力側ノードは、ランダムに決定される。
テストノードアドレスD4を初期化する前に、D5〜D9の初期化を行う。反転・非反転フラグD5は、False(非反転リンクを意味する。)とし、テストリンクフラグD6は、Falseとする。また、リンクの出力D7は、Falseとし、強化信号の累積値D8は、0とし、強化信号D9は、0とする。
テストノードアドレスD4については、この生成される非反転リンクと、ネットワークアドレスD3とを指定し、指定された出力側ノードアドレスD2に対応する出力側ノード(生成される非反転リンクの出力側ノード)のAND・ORノードフラグC5が、True(ANDノードを意味する。)であればテスト中間ORノードを、False(ORノードを意味する。)であればテスト中間ANDノードを、新たに初期化して生成し(図11のテスト中間ORノード初期化処理G7またはテスト中間ANDノード初期化処理G8を行う。)、生成されたテストノードをテストノードアドレスD4へ登録する。つまり、生成される非反転リンクの出力側ノードと、その非反転リンクに付随するテストノードとのAND・ORを逆にする。なお、テストノードアドレスD4を後に初期化するのは、テストノードの初期化の際に、そのテストノードが付随する非反転リンクの反転・非反転フラグD5が参照されるからである。
そして、以上のテスト非反転リンクを用いた初期化処理、およびテスト非反転リンクを用いない直接の初期化処理の双方について、最後に、入力側ノードアドレスD1に対応する入力側ノードの出力側リンクアドレスC2と、出力側ノードアドレスD2に対応する出力側ノードの入力側リンクアドレスC1とへ、この生成される非反転リンクのアドレスを登録し、初期化を終える。
<テスト反転リンク初期化処理G11>
テスト反転リンク初期化処理G11は、入力側ノードアドレスD1と、出力側ノードアドレスD2と、ネットワークアドレスD3とを指定して行う。入力側ノードアドレスD1については、指定された入力側ノードアドレスを登録する。出力側ノードアドレスD2については、指定された出力側ノードアドレスを登録する。ネットワークアドレスD3については、指定されたネットワークアドレスを登録する。
テストリンクには、これに付随するテストノードは設けないので、テストノードアドレスD4は、初期化の必要はない。反転・非反転フラグD5は、True(反転リンクを意味する。)とし、テストリンクフラグD6は、Trueとする。また、リンクの出力D7は、Falseとし、強化信号の累積値D8は、0とし、強化信号D9は、0とする。
そして、最後に、入力側ノードアドレスD1に対応する入力側ノードの出力側リンクアドレスC2へ、この生成されるテスト反転リンクのアドレスを登録し、初期化を終える。
<テスト非反転リンク初期化処理G12>
テスト非反転リンク初期化処理G12は、前述したテスト反転リンク初期化処理G11と略同様である。すなわち、テスト非反転リンク初期化処理G12は、入力側ノードアドレスD1と、出力側ノードアドレスD2と、ネットワークアドレスD3とを指定して行う。入力側ノードアドレスD1については、指定された入力側ノードアドレスを登録する。出力側ノードアドレスD2については、指定された出力側ノードアドレスを登録する。ネットワークアドレスD3については、指定されたネットワークアドレスを登録する。
テストリンクには、これに付随するテストノードは設けないので、テストノードアドレスD4は、初期化の必要はない。反転・非反転フラグD5は、False(非反転リンクを意味する。)とし、テストリンクフラグD6は、Trueとする。また、リンクの出力D7は、Falseとし、強化信号の累積値D8は、0とし、強化信号D9は、0とする。
そして、最後に、入力側ノードアドレスD1に対応する入力側ノードの出力側リンクアドレスC2へ、この生成されるテスト非反転リンクのアドレスを登録し、初期化を終える。
図12には、学習時の削除処理の構成が示されている。図12において、前述した図11のロボット初期化処理G1、ネットワーク初期化処理G2、入力ノード初期化処理G3、および出力ノード初期化処理G4に対応する終了処理は、ロボット30の動作制御用のプログラムを終了させる直前にのみ行うが、これらの終了処理については、ネットワーク20の構造変化に直接結びつくものではないので、説明は省略する。その他のノードやリンクの終了処理は、ノードやリンクが削除される都度に行われるので、それぞれ学習時の削除処理E1〜E8として説明を行う。削除の方法は、ノードの種類やリンクの種類によって異なる。図12において、矢印の付け根の削除処理を行うには、矢印の先端の削除処理が必要である。図中の実線は、必ず使用し、点線は、使用する可能性があることを意味する。
<中間ORノード削除処理E1>
中間ORノード削除処理E1では、先ず、削除対象の中間ORノードのテストリンクアドレスC4に対応するテストリンクについてのメモリを開放する。すなわち、リンク情報記憶手段63の当該テストリンクの情報を、後述するテスト反転リンク削除処理E7またはテスト非反転リンク削除処理E8に従って開放し、テストリンクを削除する。次に、削除対象の中間ORノードのネットワークアドレスC3を参照し、ネットワーク情報記憶手段61の中間ノードアドレスB2から、削除対象の中間ORノードのアドレスを検索し、削除する。その後、条件によって場合分けし、それぞれ異なる次のような3通りの処理(1)、(2)、(3)のうちのいずれかの処理を行う。
(1)図16に示すように、削除対象の中間ORノード220の入力側リンクアドレスC1に対応する入力側リンクが1個であり(これを入力側リンク221とする。)、この入力側リンク221の入力側ノードアドレスD1に対応する入力側ノード222が、削除対象の中間ORノード220自身でない場合には、中間ORノード220の各出力側リンクアドレスC2に対応する出力側リンク(図16では、一例として3つの出力側リンク223,224,225とする。)のそれぞれについて、次のような3通りの処理(1−A)、(1−B)、(1−C)のうちのいずれかの処理を行う。
(1−A)出力側リンク223のテストリンクフラグD6がTrue(テストリンクを意味する。)で、かつ、その出力側リンク223の出力側ノードアドレスD2に対応する出力側ノード226のテストノードフラグC8がFalse(実ノードを意味する。)の場合には、出力側リンク223、すなわち出力側ノード226に結合されているテストリンク(出力側ノード226のテストリンクアドレスC4に対応するテストリンク)を削除し(後述する図12のテスト反転リンク削除処理E7またはテスト非反転リンク削除処理E8を行う。)、ランダムに選択されたノード240に結合するテストリンク241をランダムに生成し(前述した図11、図12のテスト反転リンク初期化処理G11またはテスト非反転リンク初期化処理G12を行う。)、そのテストリンク241のアドレスを出力側ノード226のテストリンクアドレスC4に登録する。
(1−B)出力側リンク224のテストリンクフラグD6がTrue(テストリンクを意味する。)で、かつ、その出力側リンク223の出力側ノードアドレスD2に対応する出力側ノード227のテストノードフラグC8がTrue(テストノードを意味する。)の場合には、出力側リンク224を削除する。
(1−C)出力側リンク225のテストリンクフラグD6がFalse(実リンクを意味する。)の場合には、その出力側リンク225の入力側ノードアドレスD1を、削除対象の中間ORノード220の入力側リンクアドレスC1に対応する入力側リンク221(1つしかない入力側リンク)の入力側ノードアドレスD1で上書きする。つまり、設定変更前の出力側リンク225の出力側ノード228と、入力側リンク221の入力側ノード222とを、新たな設定とされた出力側リンク225で連結する。また、設定変更前の出力側リンク225に付随していたテストノード(設定変更前の出力側リンク225のテストノードアドレスD4に対応するテストノード)を削除し(後述する図12のテスト中間ORノード削除処理E3またはテスト中間ANDノード削除処理E4を行う。)、新たなテストノード229を生成し(前述した図11のテスト中間ORノード初期化処理G7またはテスト中間ANDノード初期化処理G8を行う。)、生成したテストノード229のアドレスを、設定変更後の出力側リンク225のテストノードアドレスD4に登録する。その後、入力側リンク221の入力側ノード222の出力側リンクアドレスC2に、削除対象の中間ORノード220の出力側リンクアドレスC2(出力側リンク225のアドレス)を追加し、入力側リンク221を削除する(後述する図12の反転リンク削除処理E5または非反転リンク削除処理E6を行う。)。
(2)図17に示すように、削除対象の中間ORノード260の入力側リンクアドレスC1に対応する入力側リンクが1個であり(入力側リンク265とする。)、この入力側リンク265の入力側ノードアドレスD1に対応する入力側ノードが、削除対象の中間ORノード260自身である場合には、中間ORノード260の各出力側リンクアドレスC2に対応する出力側リンク(図17では、一例として2つの出力側リンク261,262とする。)のそれぞれについて、次のような2通りの処理(2−A)、(2−B)のうちのいずれかの処理を行う。
(2−A)出力側リンク261のテストリンクフラグD6がTrue(テストリンクを意味する。)で、かつ、その出力側リンク261の出力側ノードアドレスD2に対応する出力側ノード263のテストノードフラグC8がFalse(実ノードを意味する。)の場合には、出力側リンク261、すなわち出力側ノード263に結合されているテストリンク(出力側ノード263のテストリンクアドレスC4に対応するテストリンク)を削除し(後述する図12のテスト反転リンク削除処理E7またはテスト非反転リンク削除処理E8を行う。)、ランダムに選択されたノード280に結合するテストリンク281をランダムに生成し(前述した図11、図12のテスト反転リンク初期化処理G11またはテスト非反転リンク初期化処理G12を行う。)、そのテストリンク281のアドレスを出力側ノード263のテストリンクアドレスC4に登録する。
(2−B)出力側リンク262およびこの出力側リンク262の出力側ノード264の条件が、上記(2−A)以外の場合には、出力側リンク262を削除する。
(3)図18に示すように、削除対象の中間ORノード300の入力側リンクアドレスC1に対応する入力側リンクが0個の場合には、中間ORノード300の各出力側リンクアドレスC2に対応する出力側リンク(図18では、一例として2つの出力側リンク301,302とする。)のそれぞれについて、次のような2通りの処理(3−A)、(3−B)のうちのいずれかの処理を行う。
(3−A)出力側リンク301のテストリンクフラグD6がTrue(テストリンクを意味する。)で、かつ、その出力側リンク301の出力側ノードアドレスD2に対応する出力側ノード303のテストノードフラグC8がFalse(実ノードを意味する。)の場合には、出力側リンク301、すなわち出力側ノード303に結合されているテストリンク(出力側ノード303のテストリンクアドレスC4に対応するテストリンク)を削除し(後述する図12のテスト反転リンク削除処理E7またはテスト非反転リンク削除処理E8を行う。)、ランダムに選択されたノード320に結合するテストリンク321をランダムに生成し(前述した図11、図12のテスト反転リンク初期化処理G11またはテスト非反転リンク初期化処理G12を行う。)、そのテストリンク321のアドレスを出力側ノード303のテストリンクアドレスC4に登録する。
(3−B)出力側リンク302およびこの出力側リンク302の出力側ノード304の条件が、上記(3−A)以外の場合には、出力側リンク302を削除する。
そして、以上の(1)〜(3)の処理が終了した後、削除対象の中間ORノードの入力側リンクが存在すれば、それを削除し(後述する図12の反転リンク削除処理E5または非反転リンク削除処理E6を行う。)、さらに、削除対象の中間ORノードのC1〜C10のメモリを開放し、中間ORノードを削除する。
<中間ANDノード削除処理E2>
中間ANDノード削除処理E2は、前術した中間ORノード削除処理E1と略等しく、中間ORノード削除処理E1の説明において、中間ORノードを中間ANDノードと読み替えるだけなので、説明を省略する。
<テスト中間ORノード削除処理E3>
削除対象のテスト中間ORノードの第1および第2の入力側テストリンクアドレスC1に対応する第1および第2の入力側テストリンクを削除する(後述する図12のテスト反転リンク削除処理E7またはテスト非反転リンク削除処理E8を行う。)。その後、削除対象のテスト中間ORノードのC1〜C10のメモリを開放し、テスト中間ORノードを削除する。
<テスト中間ANDノード削除処理E4>
テスト中間ANDノード削除処理E4は、前述したテスト中間ORノード削除処理E3と略等しく、テスト中間ORノード削除処理E3の説明において、テスト中間ORノードをテスト中間ANDノードと読み替えるだけなので、説明を省略する。
<反転リンク削除処理E5>
反転リンク削除処理E5では、削除対象の反転リンクの入力側ノードアドレスD1に対応する入力側ノードの出力側リンクアドレスC2から、この削除対象の反転リンクのアドレスを検索して削除し、同様に、削除対象の反転リンクの出力側ノードアドレスD2に対応する出力側ノードの入力側リンクアドレスC1から、この削除対象の反転リンクのアドレスを検索して削除する。
また、削除対象の反転リンクに付随するテストノード(削除対象の反転リンクのテストノードアドレスD4に対応するテストノード)を削除する。この際、このテストノードのAND・ORノードフラグC5が、True(ANDノードを意味する。)ならば、前述したテスト中間ANDノード削除処理E4を行い、False(ORノードを意味する。)ならば、前述したテスト中間ORノード削除処理E3を行う。
その後、削除対象の反転リンクのD1〜D9のメモリを開放し、反転リンクの削除を終える。
<非反転リンク削除処理E6>
非反転リンク削除処理E6は、前述した反転リンク削除処理E5と同じであるため、説明を省略する。
<テスト反転リンク削除処理E7>
テスト反転リンク削除処理E7では、削除対象のテスト反転リンクの入力側ノードアドレスD1に対応する入力側ノードの出力側リンクアドレスC2から、この削除対象のテスト反転リンクのアドレスを検索して削除する。
また、削除対象のテスト反転リンクの出力側ノードアドレスD2に対応する出力側ノードのテストノードフラグC8が、True(テストノードを意味する。)ならば、その出力側ノード(テストノード)の入力側テストリンクアドレスC1から、削除対象のテスト反転リンクのアドレスを検出して削除し、False(実ノードを意味する。)ならば、その出力側ノード(実ノード)のテストリンクアドレスC4を削除する。
その後、削除対象のテスト反転リンクのD1〜D9のメモリを開放し、テスト反転リンクの削除を終える。
<テスト非反転リンク削除処理E8>
テスト非反転リンク削除処理E8は、前述したテスト反転リンク削除処理E7と同じであるため、説明を省略する。
このような本実施形態によれば、次のような効果がある。すなわち、情報処理システム10は、強化信号生成手段43を備えているので、制御対象であるロボット30の状態の評価結果に応じてネットワーク20に対して付与する強化信号を生成することができる。
また、情報処理システム10は、学習手段51を備えているので、強化信号生成手段43により生成した強化信号を、ネットワーク20の構成エレメントから他の構成エレメントへ伝播させることができる。この際、学習手段51は、伝播させる強化信号、すなわち伝播先の構成エレメントに対して付与する強化信号を、伝播元および/または伝播先の構成エレメントの入出力状態に応じて構成エレメント毎に生成するので、構成エレメント毎に個別に付与された強化信号の累積値を用いて、構成エレメント毎にその構成エレメントの生成(追加)または削除(淘汰)を行うか否かの判定を行い、その処理を実行し、ネットワーク20の構造を自律的に変化させることができる。
従って、前述した従来のニューロジェネティックラーニングによる学習器の場合とは異なり、情報処理システム10は、ネットワーク20の構造を変化させるにあたり、ネットワーク20全体を評価単位として評価を行うのではなく、構成エレメント単位(すなわち、1つ1つのノードやリンクの単位)での評価を行い、構成エレメント単位での生成または削除を行うので、評価に要する時間を短縮することができ、低い時間オーダでネットワーク20を自律的に構築していくことができるうえ、これに伴って計算コストの削減を図ることもできる。
また、前述した特許文献2,3に記載されたニューラルネットワーク学習方法のように、ネットワーク20の使用環境やタスクに応じてネットワーク20の構造を決定しておき、その決定された構造の中でニューロンユニット間の結合係数の最適化を行うのではなく、情報処理システム10は、ネットワーク20の構造そのものをも自律的に変化させ、最適化していくので、構造決定による環境、タスクへの限定を回避することができる。このため、ネットワーク20の使用環境やタスクが変化した場合でも、以前の学習結果を既存知識として再利用する学習を行うことができる。
さらに、情報処理システム10は、状態評価用信号取得手段42を備え、この状態評価用信号取得手段42により取得した状態評価用信号に基づき制御対象であるロボット30の状態を評価する構成とされているので、人為的判断を介在させることなく制御対象であるロボット30の状態の評価を行うことができる。このため、ネットワーク20の自律的な構築速度を向上させることができるうえ、目的に沿って一貫した学習を容易に行うことができる。
そして、学習手段51は、伝播元のノードに付与された強化信号に基づき、伝播元のノードの入出力状態に従って定まる伝播先の入力側リンクのノード出力への寄与度に応じ、伝播先の入力側リンクに対して付与する強化信号を生成するので(図8、図9参照)、ネットワーク20に対して付与された強化信号を、出力ノード23から逆伝播させていくことができるうえ、個々のリンクに対し、妥当な評価を個別に行うことができ、構成エレメント毎の適切な生成または削除を実現することができる。
また、学習手段51は、上記のようなノードからその入力側リンクへの強化信号の逆伝播と併せ、ノードからその入力側リンクの入力側ノードへの強化信号の逆伝播も行うので、より一層円滑な強化信号の逆伝播を実現することができる。
さらに、学習手段51は、リンクに対して付与された強化信号の累積値が閾値を下回ったときに、このリンクを削除する構成とされているので、目的通りに制御対象であるロボット30を制御するのに役立たないと考えられるリンク、すなわち不要と思われるリンクの適切な淘汰を行うことができ、ネットワーク20の構造を自律的に変化させていくことができる。
そして、学習手段51は、ノードの入力側リンクの数が1以下になったときに、このノードを削除する構成とされているので、目的通りに制御対象であるロボット30を制御するのに役立たないと考えられるノード、すなわち不要と思われるノードの適切な淘汰を行うことができ、ネットワーク20の構造を自律的に変化させていくことができる。
また、情報処理システム10では、ノードには、テストリンクが設けられるので、そのテストリンクが目的通りに制御対象であるロボット30を制御するのに役立つと考えられる場合に、そのテストリンクをノード出力に寄与する実リンクに昇格させ、正式に入力側リンクとして登録することができる。このため、自律的なリンクの生成を実現でき、ネットワーク20の構造を自律的に変化させていくことができる。
さらに、学習手段51は、上記のテストリンクに対して付与された強化信号の累積値が閾値を下回ったときに、そのテストリンクを削除し、任意のノードに結合される新たなテストリンクを生成する構成とされているので、新しく生成されるリンク(実リンク)の適切な候補となるテストリンクを常に用意しておくことができる。このため、リンクの適切で、かつ円滑な生成を実現することができ、ネットワーク20の構造を自律的に変化させていくことができる。
そして、情報処理システム10では、実リンクには、このリンクに付随するテストノードが設けられるので、新たに生成されるノード(実ノード)の候補を常に用意しておくことができる。このため、自律的なノードの生成を実現でき、ネットワーク20の構造を自律的に変化させていくことができる。
また、学習手段51は、上記のテストノードから第1および第2の入力側テストリンクへ強化信号を伝播させる構成とされているので、これによっても新たに生成されるリンク(実リンク)の候補を用意しておくことができ、ネットワーク20の構造を自律的に変化させていくことができる。
さらに、学習手段51は、上記の第1または第2の入力側テストリンクに対して付与された強化信号の累積値が閾値を下回ったときに、閾値を下回った入力側テストリンクを削除し、新たな入力側テストリンクを生成する構成とされているので、新しく生成されるリンク(実リンク)の適切な候補となるテストリンクを常に用意しておくことができる。このため、リンクの適切で、かつ円滑な生成を実現することができ、ネットワーク20の構造を自律的に変化させていくことができる。
そして、学習手段51は、上記の第1および第2の入力側テストリンクに対して付与された強化信号の累積値がいずれも閾値を上回ったときに、テストノードを実用化する構成とされているので、新たにノード(実ノード)を生成(追加)することができ、ネットワーク20の構造を自律的に変化させていくことができる。
また、情報処理システム10では、各ノードは、論理回路を用いて構成されているので、目的の制御を実現することができる情報処理システムを、単純な構造で構築することができる。
なお、本発明の効果を確かめるため、以下のような実験を行った。
目標となるI/O動作を行う回路として、2、3ビット程度の小規模な回路を10回路用意した。10回路の全てについて、履歴を含まない範囲での生成実験を行うとともに、10回路のうちの幾つかの回路について、1ステップ程度の履歴を含む生成実験を行った。
初期状態では、ネットワークの出力層にORノードを1つだけ用意し、ランダムな入力を加え、目標となるI/O動作ができた場合には、強化信号として報酬を付与し、失敗した場合には、強化信号として罰を付与することにより、回路を生成した。
図19には、この実験結果が示されている。図19は、3ビットのXOR回路を目標回路とし、100ステップ分の移動平均で正答率を示したもの、すなわち直近の100ステップ(100回の出力)のうち正解を出力したステップの割合を示したものである。
各目標回路についての実験は、10回ずつ行い、全て正しく目標回路を構成することができた。また、正誤判定にノイズをのせた場合にも、正しい回路が構成されることを確認することができ、正解へ達した回路は、構造的に安定することも確かめられた。
また、別の実験として、上記の実験により2ビットのXOR回路を学習させた後、問題を変えて、3ビットのXOR回路を学習させた。そして、これらの学習内容に関連性があるか否かを調べることにより、以前の学習結果を利用した新たな構造を獲得することが確かめられた。
図20には、この実験結果が示されている。実験で生成された3ビットのXOR回路の構造の中で、実験開始時に既知の知識として与えた2ビットのXOR回路の構造が再利用された部分については、太線で示されている。実際に構造が再利用されているか否かは、構造生成の履歴を追跡することにより調べることができる。また、図20において、3ビットのXOR回路の構造のうち、ノードAの部分は、2ビットのXOR回路の構造と異なっている。これは、この部分のリンクがノードAへと置き換わったからであり、構造的な再利用は達成されている。
さらに、以上の2つの実験の他にも、ケペラロボットシミュレータを用いた実験により、ノード数が1万個程度で、1ステップ64msのリアルタイムな学習や、バックアップの機能を持たせ、遅延報酬による迷路問題への適用も行うことができた。以上により、本発明の効果が顕著に示された。
なお、本発明は前記実施形態に限定されるものではなく、本発明の目的を達成できる範囲内での変形等は本発明に含まれるものである。
すなわち、前記実施形態では、制御対象は、ロボット30とされていたが、これに限定されず、ゲームのキャラクタ等でもよく、例えば、格闘系ゲームの場合には、対戦相手のキャラクタとの相対位置、対戦相手のキャラクタが出している技の種類等をネットワークへの入力とし、自分の分身キャラクタの動作、すなわち自分の分身キャラクタが出す技の種類や、自分の分身キャラクタの動く方向等をネットワークの出力で定めて制御するようにしてもよい。
また、前記実施形態では、図8、図9に示すような強化信号の分配(伝播)が行われていたが、分配方法は、これに限定されるものではなく、要するに、伝播元の構成エレメントに付与された強化信号に基づき、伝播元および/または伝播先の構成エレメントの入出力状態に応じて、伝播先の構成エレメントに対して付与する強化信号を生成し、構成エレメントから他の構成エレメントへの強化信号の伝播を実現できればよい。
さらに、前記実施形態では、情報処理システム10で用いられるネットワーク20は、主としてソフトウェアにより実現されていたが、これに限定されず、少なくとも一部にハードウェア回路を用いて実現してもよい。
そして、前記実施形態では、ノードは、AND回路やOR回路を用いた論理回路により構成されていたが、ネットワークの構成エレメントとしてのノードを論理回路により構成する場合には、XOR回路等のその他の論理回路を用いてもよい。