進化計算システム及び進化計算方法
【課題】本発明は、遺伝的プログラミングにより進化計算を行なう進化計算システムに係り、遺伝子情報として通常のデータ加工を行なう関数系演算子と区別して、処理フローの制御を行なう制御系演算子を設け、更に処理フローと区別してデータフローを記述することにより複雑な制御を含むアルゴリズムを最適化する。
【解決手段】f0〜f2の関数系演算子に係るノードでは、バッファ列のうち第一バッファID105と第二バッファID106の両バッファから得たデータに対して加算等のデータ加工を施し、第三バッファID107のバッファへ格納する。f3〜f5の制御系演算子に係るノードでは、第一バッファID105と第二バッファID106から得たデータを比較等の条件判定を行ない、次処理ノードとして第一連結先ノードNo103あるいは第二連結先ノードNo104を選択する。
【解決手段】f0〜f2の関数系演算子に係るノードでは、バッファ列のうち第一バッファID105と第二バッファID106の両バッファから得たデータに対して加算等のデータ加工を施し、第三バッファID107のバッファへ格納する。f3〜f5の制御系演算子に係るノードでは、第一バッファID105と第二バッファID106から得たデータを比較等の条件判定を行ない、次処理ノードとして第一連結先ノードNo103あるいは第二連結先ノードNo104を選択する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、遺伝的プログラミングにより進化計算を行なう進化計算システムに係り、複雑な制御を含むアルゴリズムを最適化する技術に関する。
【背景技術】
【0002】
進化計算法とは、生物の進化から着想した最適化(探索)アルゴリズムである。進化論的な発想に基づいてデータを操作し、解空間を探索する多点探索法の一種とも言える。その代表的な手法として、遺伝的プログラミングがある。
【0003】
遺伝的プログラミングは、遺伝的アルゴリズムを発展させたものであって、個体を構造的に表現する。例えば、(A(B)(C(D)))のように記述するLispのS式などにより木構造を表現する。
【0004】
しかし、遺伝的プログラミングは、複雑な制御を含むアルゴリズムを生成することには向いていない。上述のLispのS式を例とすると、Dノードは、Cノードの処理の後に、Cノードの出力データを入力して演算を行なう。祖父にあたるAノードや叔父にあたるBノードからデータを受け取ることはない。つまり、Dノードは、処理フロー上の親も、データフロー上の親も同一のノードであり、処理フローとデータフローが一体となっている。そして、それらフローを分離して扱うことはできない。
【非特許文献1】伊庭斉志、佐藤泰介,「システム同定アプローチに基づく遺伝的プログラミング」,人工知能学会誌,人工知能学会,1995年,vol.10,No.4,p.100−110
【非特許文献2】青木紳也、長尾智晴,「木構造状画像変換の自動構築法ACTIT」,映像情報メディア学会誌,映像情報メディア学会,1999年,vol.53,No.6,p.888−894
【発明の開示】
【発明が解決しようとする課題】
【0005】
本発明は、ノード間で処理フローと分離してデータを受け渡すことができる仕組みと、制御系のノードを設けることにより、複雑な制御を含むアルゴリズムを解とする最適化問題を解くことができる進化計算システムを提供することを課題とする。
【課題を解決するための手段】
【0006】
本発明に係る進化計算システムは、
ノードで起動されるファンクション実行部を識別する演算子識別情報と、次に実行されるノードの候補を識別する複数の連結先ノード識別情報と、当該ファンクション実行部への入力データを得る取得バッファ及び当該ファンクション実行部からの出力データを書き込む格納バッファを識別するバッファ識別情報群を含むノード情報が連続するグラフ型個体構造情報を用いて進化計算を行なう進化計算システムであって、以下の要素を有することを特徴とする
(1)初期値として、定数、学習用入力データ、あるいは学習用入力データに対する所定の演算を施した関数値を記憶する複数のバッファを、バッファ識別情報に対応付けて備えるバッファ列
(2)同一世代に係る個体集団の要素である各個体のグラフ型個体構造情報を記憶する個体集団記憶部
(3)個体集団記憶部に含まれる個体毎に、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報によって識別されるファンクション実行部が条件判定を行なう場合には、その判定結果に基づいてノード情報に含まれる複数の連結先ノード識別情報のうちいずれかにより次に処理するノードを選択する制御系演算と、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報によって識別されるファンクション実行部がデータ加工を行なう場合には、ノード情報に含まれるバッファ識別情報によって特定される取得バッファから取得したデータを加工し、加工結果をノード情報に含まれるバッファ識別情報によって特定される格納バッファに書き込み、ノード情報に含まれる所定の連結先ノード識別情報により次に処理するノードを選択する関数系演算を、順次選択されるノード毎に実行し、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報が完了を示す場合に、いずれかのバッファのデータを演算結果データとし、当該演算結果データと、学習用目標データを比較して、個体毎の適応度を計算する適応度計算部
(4)適応度に基づいて、個体集団から個体を選択する個体選択部
(5)選択した個体のグラフ型個体構造情報に対して、複数の個体間で一部の情報を交換する交叉処理、あるいは一部の情報を変化させる突然変異処理を行い、次世代の個体集団の要素となる各個体のグラフ型個体構造情報を求め、個体集団記憶部に記憶させる生殖部。
【0007】
本発明に係る進化計算方法は、
初期値として、定数、学習用入力データ、あるいは学習用入力データに対する所定の演算を施した関数値を記憶する複数のバッファを、バッファ識別情報に対応付けて備えるバッファ列と、
同一世代に係る個体集団の要素である各個体について、ノードで起動されるファンクション実行部を識別する演算子識別情報と、次に実行されるノードの候補を識別する複数の連結先ノード識別情報と、当該ファンクション実行部への入力データを得る取得バッファ及び当該ファンクション実行部からの出力データを書き込む格納バッファを識別するバッファ識別情報群を含むノード情報が連続するグラフ型個体構造情報を記憶する個体集団記憶部を有し、グラフ型個体構造を用いて進化計算を行なう進化計算システムによる進化計算方法であって、以下の要素を有することを特徴とする
(1)個体集団記憶部に含まれる個体毎に、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報によって識別されるファンクション実行部が条件判定を行なう場合には、その判定結果に基づいてノード情報に含まれる複数の連結先ノード識別情報のうちいずれかにより次に処理するノードを選択する制御系演算と、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報によって識別されるファンクション実行部がデータ加工を行なう場合には、ノード情報に含まれるバッファ識別情報によって特定される取得バッファから取得したデータを加工し、加工結果をノード情報に含まれるバッファ識別情報によって特定される格納バッファに書き込み、ノード情報に含まれる所定の連結先ノード識別情報により次に処理するノードを選択する関数系演算を、順次選択されるノード毎に実行し、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報が完了を示す場合に、いずれかのバッファのデータを演算結果データとし、当該演算結果データと、学習用目標データを比較して、個体毎の適応度を計算する適応度計算工程
(2)適応度に基づいて、個体集団から個体を選択する個体選択工程
(3)選択した個体のグラフ型個体構造情報に対して、複数の個体間で一部の情報を交換する交叉処理、あるいは一部の情報を変化させる突然変異処理を行い、次世代の個体集団の要素となる各個体のグラフ型個体構造情報を求め、個体集団記憶部に記憶させる生殖工程。
【0008】
本発明に係るプログラムを記録したコンピュータ読み取り可能な記録媒体は、
初期値として、定数、学習用入力データ、あるいは学習用入力データに対する所定の演算を施した関数値を記憶する複数のバッファを、バッファ識別情報に対応付けて備えるバッファ列と、
同一世代に係る個体集団の要素である各個体について、ノードで起動されるファンクション実行部を識別する演算子識別情報と、次に実行されるノードの候補を識別する複数の連結先ノード識別情報と、当該ファンクション実行部への入力データを得る取得バッファ及び当該ファンクション実行部からの出力データを書き込む格納バッファを識別するバッファ識別情報群を含むノード情報が連続するグラフ型個体構造情報を記憶する個体集団記憶部を有し、グラフ型個体構造を用いて進化計算を行なう進化計算システムとなるコンピュータに、以下の処理を実行させるためのプログラムを記録したことを特徴とする
(1)個体集団記憶部に含まれる個体毎に、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報によって識別されるファンクション実行部が条件判定を行なう場合には、その判定結果に基づいてノード情報に含まれる複数の連結先ノード識別情報のうちいずれかにより次に処理するノードを選択する制御系演算と、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報によって識別されるファンクション実行部がデータ加工を行なう場合には、ノード情報に含まれるバッファ識別情報によって特定される取得バッファから取得したデータを加工し、加工結果をノード情報に含まれるバッファ識別情報によって特定される格納バッファに書き込み、ノード情報に含まれる所定の連結先ノード識別情報により次に処理するノードを選択する関数系演算を、順次選択されるノード毎に実行し、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報が完了を示す場合に、いずれかのバッファのデータを演算結果データとし、当該演算結果データと、学習用目標データを比較して、個体毎の適応度を計算する適応度計算処理
(2)適応度に基づいて、個体集団から個体を選択する個体選択処理
(3)選択した個体のグラフ型個体構造情報に対して、複数の個体間で一部の情報を交換する交叉処理、あるいは一部の情報を変化させる突然変異処理を行い、次世代の個体集団の要素となる各個体のグラフ型個体構造情報を求め、個体集団記憶部に記憶させる生殖処理。
【0009】
本発明に係るプログラムは、
初期値として、定数、学習用入力データ、あるいは学習用入力データに対する所定の演算を施した関数値を記憶する複数のバッファを、バッファ識別情報に対応付けて備えるバッファ列と、
同一世代に係る個体集団の要素である各個体について、ノードで起動されるファンクション実行部を識別する演算子識別情報と、次に実行されるノードの候補を識別する複数の連結先ノード識別情報と、当該ファンクション実行部への入力データを得る取得バッファ及び当該ファンクション実行部からの出力データを書き込む格納バッファを識別するバッファ識別情報群を含むノード情報が連続するグラフ型個体構造情報を記憶する個体集団記憶部を有し、グラフ型個体構造を用いて進化計算を行なう進化計算システムとなるコンピュータに、以下の手順を実行させることを特徴とする
(1)個体集団記憶部に含まれる個体毎に、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報によって識別されるファンクション実行部が条件判定を行なう場合には、その判定結果に基づいてノード情報に含まれる複数の連結先ノード識別情報のうちいずれかにより次に処理するノードを選択する制御系演算と、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報によって識別されるファンクション実行部がデータ加工を行なう場合には、ノード情報に含まれるバッファ識別情報によって特定される取得バッファから取得したデータを加工し、加工結果をノード情報に含まれるバッファ識別情報によって特定される格納バッファに書き込み、ノード情報に含まれる所定の連結先ノード識別情報により次に処理するノードを選択する関数系演算を、順次選択されるノード毎に実行し、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報が完了を示す場合に、いずれかのバッファのデータを演算結果データとし、当該演算結果データと、学習用目標データを比較して、個体毎の適応度を計算する適応度計算手順
(2)適応度に基づいて、個体集団から個体を選択する個体選択手順
(3)選択した個体のグラフ型個体構造情報に対して、複数の個体間で一部の情報を交換する交叉処理、あるいは一部の情報を変化させる突然変異処理を行い、次世代の個体集団の要素となる各個体のグラフ型個体構造情報を求め、個体集団記憶部に記憶させる生殖手順。
【発明の効果】
【0010】
本発明によれば、ノード間のデータの受け渡しに用いるバッファ列を設けるとともに、個体構造のノード情報にノードへの入力データを得る取得バッファとノードからの出力データを書き込む格納バッファを特定するバッファIDを含めることにより、ノードの連結によって定義される処理フローとは別にデータフローを定義できるようにした。これにより、処理フローに係る遺伝子のみを操作することや、データフローに係る遺伝子のみを操作することが可能となる。例えば、グラフ型個体構造情報中の連結先ノードNoを書き換えれば、処理フローのみが変化する。また、グラフ型個体構造情報中のバッファIDを書き換えれば、データフローのみが変化する。
【0011】
更に、バッファから取得する入力データに対する判定条件の判定結果に従って、連結先を振り分ける制御系演算子を設けることにより、IF文制御などの制御処理を、通常のデータ加工を行なう関数系演算子によるデータ処理と別個のノードとして操作できるようにした。これにより、制御系のみを遺伝子操作することや、関数系のみを遺伝子操作することができるようになる。例えば、グラフ型個体構造情報中の制御系の演算子を他の制御系の演算子に書き換えれば、制御のみが変化し、グラフ型個体構造情報中の関数系の演算子を他の関数系の演算子に書き換えれば、データ加工のみが変化する。
【0012】
以上のことにより、遺伝子交代や遺伝子変異などの世代交代の遺伝子操作において、条件判定を伴う制御を含む複雑な制御フローの最適化と、処理フローと分離したデータフローの最適化を図ることができるようになる。
【発明を実施するための最良の形態】
【0013】
実施の形態1.
本発明の進化計算システムでは、集団を構成する要素としてグラフ型の個体の構造を特定するグラフ型個体構造情報(以下、グラフ型個体構造という。)を用いる。まず、そのグラフ型個体構造について説明する。図1は、グラフ型個体構造の例を示す図である。グラフ型個体構造は、当該グラフに含まれるノード数分のノード情報を有している。つまり、グラフ型個体構造全体は、ノード情報の列としてとらえることができる。ノード情報には、ノードNoに対応付けて、当該ノードにおける演算を識別する演算子Noと、当該ノードからの出力先のノード候補を識別する複数の連結先ノードNo(連結先ノード識別情報の例)と、当該演算子による演算の入力データを得る取得バッファの候補あるいは同演算の出力データを書き込む格納バッファの候補である複数のバッファID(バッファ識別情報の例)との項目を記憶するように構成されている。この例では、ノードNoの昇順に、ノード情報を並べているが、ノードを特定できれば他の構成(例えば、ノードNo自体をノード情報の項目に含める構成など)であっても構わない。
【0014】
グラフ型個体構造に含まれる値は、各項目で共通の数値である。図1では、各項目の意義を理解しやすくするために、数値の前にアルファベットを付して値の種別を示したが、実際にはアルファベット部分を除いた数値が格納されている。例えば、演算子Noでf0と表記しているが実際には0が格納されている。尚、網掛けの部分は、演算子の定義に関連して意味を成さない部分、つまり用いられない部分を示している。
【0015】
図2は、ノード間の連結関係の例を示す図である。図1のグラフ型個体構造におけるノードの連結を示すと図2のようになる。連結先のノードの数、つまり連結数は、後述する演算子テーブルで演算子毎に定義されている。
【0016】
本発明に係る進化計算システムでは、バッファ列を用いてノード間でデータを転送する。図3は、バッファ列の例を示す図である。ノードにおける入力データは、このバッファ列のいずれかのバッファに記憶されているデータを用いる。また、ノードにおける出力データは、このバッファ列のいずれかのバッファに記憶される。つまり、各ノードは、これらのバッファを介してそれ以降のノードに対して間接的にデータを渡すことになる。図中のxは、後述する学習用入力データxを示している。本文中では、以後この構成を(x,x,x,x,x,1,1,1,1,1)と表記する。
【0017】
図4は、進化計算システムの構成を示す図である。進化計算システムは、初期個体入力部401、個体集団記憶部402、適応度計算部403、演算子テーブル404、学習用データセット記憶部405、適応度記憶部406、個体選択部407、選択個体記憶部408、生殖部409、及び学習個体出力部410を有している。個体集団記憶部402は、同世代に係る個体集団を記憶するように構成されている。
【0018】
図5は、学習用データセットの例を示す図である。学習用データは、学習用入力データと学習用目標データの対からなる。この例では、学習用データ毎にレコードを設け、学習用入力データと学習用目標データの項目を対応付けて記憶するように構成されている。進化計算システムは、学習用入力データを入力して学習用目標データを出力する演算を行なう個体を求めることを解としている。尚、図5の例は、階乗の入力値xと算出値y=x!の関係を示している。
【0019】
以下、進化計算システムによる進化計算アルゴリズムによる学習処理について説明する。
図6は、進化計算アルゴリズムによる学習処理フローを示す図である。まず、初期個体入力部401による初期個体入力処理(S601)を行なう。この処理では、初期の個体集団を入力し、個体集団記憶部402に記憶させる。つまり、集団を構成する要素数の分、グラフ型の個体の構造を特定するグラフ型個体構造情報(以下、グラフ型個体構造という。)を入力して、それらに個体識別情報(以下、個体IDという。)を対応付けて、個体集団記憶部402に記憶させる。
【0020】
初期個体入力処理(図6のS601)の次に、適応度計算部403による適応度計算処理(S602)を行なう。この処理では、個体集団記憶部402に記憶している各個体の適応度を計算する。適応度とは、初期入力値である学習用入力データを入力して、個体の構造により特定される演算手順に従って演算した結果である演算結果データが、最終的に目標とする学習用目標データに近似する程度を示す情報である。適応度は、個体IDと対応付けて適応度記憶部406に記憶される。この適応度計算処理(S602)の詳細については後述する。
【0021】
次に、個体選択部407による個体選択処理(図6のS603)を行なう。この処理では、各個体の適応度に基づいて、生殖処理の対象とする個体を所定の選択数分だけ選択する。例えば、適応度が大きい順に、選択数の個体を選択する。あるいは、選択数を、適応度の高い層の高適応個体選択数と、適応度の低い層の低適応個体選択数に分け、それぞれ、適応度の高い順に、高適応個体選択数の個体を選択し、更に適応度の低い順に、低適応個体選択数の個体を選択するように、適応度を層別し、各層からそれぞれの所定数分を選別するようにしてもよい。他にも、適応度に比例した確率で個体を選択するルーレット選択方法、適応度の順位に従って選択回数を決定するランク選択方法、個体集団からトーナメントサイズとして既定された数の個体をランダムに選択し、その中の最大適応度の個体をトーナメントの勝者として選択するトーナメント選択方法などもある。このようにして、選択された個体群のIDを、選択個体記憶部408に記憶させる。
【0022】
次に、生殖部409による生殖処理(S604)を行なう。この処理では、選択された個体群から取り出した個体に対して、世代交代に係る構成の操作を施す。この例では、2つの個体間でノード情報列の一部を交換する交叉処理、ノード情報列の一部を変化させる突然変異処理、現在の個体構造を維持したまま存続させる延命処理を行なう。これらの処理により、所定次世代個体数の個体からなる次世代個体集団を生成し、それぞれ個体IDと対応付けてネットワーク型個体構造を個体集団記憶部402に記憶させる。この生殖処理(S604)の詳細については、後述する。
【0023】
そして、これらの世代交代処理(S602からS604)を繰り返し、世代交代終了判定部(図示せず)による世代交代終了判定処理(S605)により、継続と判定されると世代交代処理をループし、終了と判定されると世代交代処理のループを終了し、後処理に移行する。世代交代の終了は、例えば、世代数で判定する。世代交代処理の回数をカウントし、当該回数が所定の世代数に満たない場合は、継続と判定し、世代数に達した場合に、終了と判定する。あるいは、適応度が終了条件を満たした場合に、終了と判定することもできる。例えば、目標適応度と目標個体数を終了条件として設定し、目標適応度に達した個体数をカウントし、その数が目標個体数に達しない場合に継続と判定し、目標個体数に達した場合に終了と判定する。あるいは、世代交代処理の制限時間を設け、世代交代処理のループの間の処理時間を計測し、処理時間が制限時間に達しない場合に継続と判定し、制限時間に達した場合に終了と判定する。
【0024】
後処理として、前述と同様に、最終世代の個体集団について適応度計算部403による適応度計算処理(S606)を行ない、学習個体出力部410による学習個体出力処理(S607)を行なう。学習個体出力処理では、最終世代の個体集団に含まれる各個体のグラフ型個体構造と、当該個体の適応度を対応付けて出力する。つまり、個体集団記憶部402に記憶している個体ID毎に、当該IDに対応するグラフ型個体構造を取り出し、また当該IDと対応付けられている適応度を適応度記憶部406から取り出し、取り出したグラフ型個体構造と適応度を対応付けて、学習個体情報として出力する。その際、適応度をキーとして個体情報群をソートし、そのソート結果を出力することも有効である。
【0025】
以下、図6に示した適応度計算処理(S602,S606)と生殖処理(S604)について順に詳述する。
【0026】
まず、適応度計算処理(S602,S606)について説明する。図7は、適応度計算処理フローを示す図である。個体集団記憶部402に記憶しているすべての個体に対して、個体演算処理(S702)、エラー終了判定処理(S703)を行ない、正常終了の場合にはデータ比較処理(S704)を行なう。個体演算部601による個体演算処理(S702)では、初期入力値である学習用入力データを入力して、グラフ型個体構造により特定される演算手順に従って一連の演算を行ない、演算結果データを得る。詳しくは、後述する。エラー終了判定部(図示せず)によるエラー終了判定処理(S703)では、個体演算処理(S702)でエラー終了したケースが含まれているかを判定し、エラー終了が有る場合にはデータ比較を行なわず、適応度を求めない。以降の個体選択の対象からも除外する。データ比較処理(S704)では、学習用データの単位で、それぞれ演算結果データと学習用目標データを比較し、所定の基準に従って適応度を算出する。データ比較処理(S704)については、後述する。そして、すべての個体について処理した時点で終了する(S705)。
【0027】
以下、適応度算出処理(S602)について詳述する。図8は、適応度計算に係る構成(1/2)を示す図である。適応度計算部403は、学習用データ演算初期化部801、バッファ列802、処理ノードパラメータ記憶部803、処理ノード判定部804、関数系演算処理部805、制御系演算処理部807、演算完了処理部809、及び演算結果記憶部811を有している。また、演算子テーブル404は、関数系演算子テーブル806、制御系演算子テーブル808、及び完了演算子テーブル810からなる。
【0028】
前述の個体演算部601による個体演算処理(S702)について説明する。図9は、個体演算処理フローを示す図である。学習用データセット(図5)を構成する学習用データ毎に(S901)、当該学習データを読み出して学習用データ演算処理を行ない(S902)、すべての学習用データについて処理した時点で終了する(S903)。
【0029】
学習用データ演算処理(S902)について詳述する。図10は、学習用データ演算処理フローを示す図である。まず、バッファ列802を初期化する(S1001)。バッファ列には、初期値を導出する定義(バッファ列初期値定義)がなされている。各バッファは、定数(例えば、0、1、あるいは2など)、学習用入力データ(x)、あるいは、学習用入力データを入力して所定の演算によって得られる関数値(f(x)の形式で表されるxの二乗など)を設定するように定義されている。そして、このバッファ列初期値定義に従って、定数が定義されているバッファにはその定数を記憶させ、学習用入力データが定義されているバッファには、S901で学習用データセットから読み出した当該学習用データに含まれる学習用入力データを記憶させ、関数値が設定されているバッファには、当該学習用入力データを入力して当該関数で算出した値を記憶させる。この例では、(x,x,x,x,x,1,1,1,1,1)と定義されているので、図5の例で学習用データIDがL3の場合には、学習用入力データが2であるので、バッファ列は、(2,2,2,2,2,1,1,1,1,1)となる。
【0030】
本発明では、グラフ型個体構造に含まれるノードをその順序に従って処理するのではなく、ノードの演算の都度、次に処理するノードを判断するので、その処理ノードを記憶するための一次的な記憶領域として処理ノードパラメータ記憶部803を有している。処理ノードパラメータの初期化(S1002)では、その処理ノードパラメータ記憶部803に所定のスタートノードとしてn1を記憶させる。
【0031】
これらの初期化の処理(S1001、S1002)は、学習用データ演算初期化部801が行なう。
【0032】
続いて、各ノードの処理を行なう。具体的には、処理ノードパラメータ記憶部803で記憶しているノードNoで特定される処理ノード毎に以下の処理を繰り返す(S1003)。まず、処理ノード判定部804が処理ノードパラメータ記憶部803からノードNoを読み、そのノードNoに対応するノード情報を個体集団記憶部402から取得する。そして、取得した当該処理ノードの演算子No(S1004)について、その演算子の種類を判定する(S1005)。演算子は、関数系演算子と制御系演算子と完了演算子に分類される。関数系演算子は、バッファから得る入力データを所定の関数に従って計算し、計算結果として関数値を得て、それをバッファへの出力データとする演算を識別するものである。この例では、後述するように加算の演算子(f0)と、減算の演算子(f1)と、乗算の演算子(f2)が用意されている。制御系演算子は、バッファから得る入力データを用いて所定のデータ判定を行ない、判定結果に従って連結先のノード(つまり、遷移先のノード)を決定する演算を識別するものである。この例では、後述するように小なり比較の演算子(f3)と、大なり比較の演算子(f4)と、一致の演算子(f5)が用意されている。完了演算子は、バッファから得る入力データを当該個体の演算結果データとする処理を示す演算子である。この例では、1つの値を演算結果として終了する演算子(f6)が用意されている。
【0033】
演算子が関数系演算子である場合には、関数系演算処理部805による関数系演算処理(S1006)を行ない、演算子が制御系演算子である場合には、制御系演算処理部807による制御系演算処理(S1007)を行なう。詳しくは、後述する。いずれの処理でも、次に処理するノードNoを決定し、処理ノードパラメータ記憶部803に記憶させる。これにより一連のノードに対する処理が行なわれる。
【0034】
演算子が完了演算子である場合には、演算完了処理(S1010)で一連の演算を終了させる。この場合は、正常終了となる。詳しくは、後述する。一方、ループ回数が所定の制限に達した場合には、エラー終了とする(S1008)。
【0035】
前述の関数系演算処理部805による関数系演算処理(S1006)について詳述する。図11は、関数系演算子テーブルを示す図である。関数系の演算子毎にレコードを設け、関数系演算子Noと、連結数と、入力データ数と、出力データ数と、演算コードの項目を対応付けて記憶するように構成されている。ここでいう関数とは、通常のデータ加工の演算を指している。
【0036】
ここで、演算子テーブルの演算子以外の各項目について説明する。連結数は、遷移するノードの候補の数を示している。連結数が1の場合には、ノード情報中の第一連結先ノードNoを次の処理ノードNoとすることを意味している。連結数が2の場合には、ノード情報中の第一連結先ノードNoあるいは第二連結先ノードNoのいずれかを次の処理ノードNoとすることを意味している。
【0037】
入力データ数は、当該演算子による関数や判定条件で入力として用いるデータの数を示している。例えば、関数系演算子で2つの値を加算する場合には、入力データは2となる。また、制御系演算子で2つの値が一致するか判定する場合にも、入力データは2となる。つまり、入力データ数は、データを読み出す取得バッファの数に等しい。
【0038】
出力データ数は、演算結果として保持するデータの数を示している。例えば、関数系演算子で2つの値を加算する場合には、出力データは1となる。また、制御系演算子で2つの値が一致するか判定する場合には、判定結果は保持しないので出力データは0となる。つまり、出力データ数は、データを書き込む格納バッファの数に等しい。
【0039】
複数のバッファIDは、入力データを読み出すバッファあるいは出力データを書き込むバッファを特定するためのデータである。先頭から順に、入力データ数分のバッファからデータを読み出し、続いて出力データ数分のバッファへデータを書き込むことを意味している。
【0040】
演算コードは、演算処理の意義を示すために参考として記載した。例えば、演算子Noがf0の場合には、入力データ数は2であるので、バッファIDのDaとDbのバッファからデータを2つ取得して、それらを加算する。また、出力データ数が1であるので、加算結果をバッファIDのDcのバッファに格納する。また、連結数は1なので次の処理ノート(p_node)をNaとする。制御系演算子の演算コードについては、後述する。
【0041】
次に、関数系演算処理の動作を説明する。図12は、関数系演算処理フローを示す図である。当該関数系演算子に対応するファンクション実行部を特定する(S1201)。関数系演算処理部805は、関数系の演算に相当するファンクション実行部を有している。プログラミングとしては、例えば関数系演算子f0に対応する「2つの値の加算を行なうファンクション実行部」は、&outdata=add(&indata1,&indata2)のインターフェースにより、入力データとしてindata1とindata2を読込み、これらを加算して和をoutdataに書き込むように動作する。関数系演算子f1に対応する「2つの値の減算を行なうファンクション実行部」は、&outdata=sub(&indata1,&indata2)のインターフェースにより、入力データとしてindata1とindata2を読込み、indata1からindata2を引いて、差をoutdataに書き込むように動作する。関数系演算子f2に対応する「2つの値の乗算を行なうファンクション実行部」は、&outdata=mul(&indata1,&indata2)のインターフェースにより、入力データとしてindata1とindata2を読込み、これらを乗算して積をoutdataに書き込むように動作する。従ってこの例では、具体的には関数系演算子に対応するaddなどのコマンドを特定することになる。
【0042】
次に、入力データ数分の取得バッファを特定する。この例では、第一バッファIDから順に入力データ数分のバッファIDを特定する。例えば、入力データ数が2の場合には、ノード情報中の第一バッファIDと第二バッファIDを特定する。そして、ファンクション実行部の入力データ格納位置に設定する(S1202)。前述の&outdata=add(&indata1,&indata2)の例で言えば、コマンドの引数の&indata1に、第一バッファIDで特定されるバッファのアドレスを設定し、同じく&indata2に、第二バッファIDで特定されるバッファのアドレスを設定する。
【0043】
次に、出力データ数分の格納バッファを特定する。この例では、入力データのバッファに続いて、順に出力データ数分のバッファIDを特定する。例えば、入力データ数が2で出力データ数が1の場合には、ノード情報中の第一バッファIDと第二バッファIDに続く、第三バッファIDを特定する。そして、ファンクション実行部の出力データ格納位置に設定する(S1203)。前述の&outdata=add(&indata1,&indata2)の例で言えば、返値の&outdataに、第三バッファIDで特定されるバッファのアドレスを設定する。
【0044】
そして、ファンクション実行部を起動する(S1204)。これにより、設定された入力用のバッファから所定の入力データを取得し、計算し、計算結果を設定された出力用のバッファに書き込む。
【0045】
次に、連結先ノードを特定する(S1205)。具体的には、演算子に対応する連結数に従って、ノード情報に含まれるいずれかの連結先ノードNoを選択する。この例では、連結先が1の場合には、第一連結先ノードNoを選択することとしている。連結先が2の場合の処理については、後述する制御系演算処理の説明で触れる。そして、当該連結先ノードを処理ノードパラメータ記憶部803に書き込む(S1206)。
【0046】
これで関数系演算処理を終える。
【0047】
次に、前述の制御系演算処理部807による制御系演算処理(S1007)について詳述する。図13は、制御系演算子テーブルを示す図である。制御系演算子テーブル808は、制御系の演算子毎にレコードを設け、制御系演算子Noと、連結数と、入力データ数と、出力データ数と、演算コードの項目を対応付けて記憶するように構成されている。
【0048】
制御系演算子の演算コードについて説明する。例えば、演算子Noがf3の場合には、入力データ数は2であるので、バッファIDのDaとDbのバッファからデータを2つ取得して、それらの小なり比較を行なう。また、出力データ数が0であるので判定結果はバッファに格納しない。但し、連結数が2なので、判定結果によって連結先を振り分ける。この例では、判定結果が真のときに次の処理ノードをNaとし、偽のときに次の処理ノートをNbとする。
【0049】
次に、制御系演算処理の動作を説明する。図14は、制御系演算処理フローを示す図である。当該制御系演算子に対応するファンクション実行部を特定する(S1401)。制御系演算子テーブル808は、制御系の演算に相当するファンクション実行部を有している。プログラミングとしては、例えば制御系演算子f3に対応する「小なり比較を行なうファンクション実行部」は、ret=small(&indata1,&indata2)のインターフェースにより、入力データとしてindata1とindata2を読込み、indata1がindata2より小さいかを判定する。そして、判定結果としての真/偽を返値パラメータのretに返すように動作する。制御系演算子f4に対応する「大なり比較を行なうファンクション実行部」は、ret=large(&indata1,&indata2)のインターフェースにより、入力データとしてindata1とindata2を読込み、indata1がindata2より大きいかを判定する。そして、判定結果としての真/偽を返値パラメータのretに返すように動作する。制御系演算子f5に対応する「一致判定を行なうファンクション実行部」は、ret=equal(&indata1,&indata2)のインターフェースにより、入力データとしてindata1とindata2を読込み、indata1がindata2と一致するかを判定する。そして、判定結果としての真/偽を返値パラメータのretに返すように動作する。従ってこの例では、具体的には制御系演算子に対応するsmallのなどコマンドを特定することになる。
【0050】
次に、入力データ数分の取得バッファを特定する。この例では、第一バッファIDから順に入力データ数分のバッファIDを特定する。例えば、入力データ数が2の場合には、ノード情報中の第一バッファIDと第二バッファIDを特定する。そして、ファンクション実行部の入力データ格納位置に設定する(S1402)。前述のret=small(&indata1,&indata2)の例で言えば、コマンドの引数のindata1に、第一バッファIDで特定されるバッファのアドレスを設定し、同じくindata2に、第二バッファIDで特定されるバッファのアドレスを設定する。
【0051】
この例では、制御系演算子は、出力データ数が0なので、ファンクション実行部に出力格納位置を設定する処理は行なわないが、出力データ数が1以上の制御系演算子を用いる場合には、関数系演算子と同様に出力データの格納バッファを特定し、ファンクション実行部に出力格納位置を設定する処理を行なう。
【0052】
そして、ファンクション実行部を起動する(S1403)。これにより、設定されたバッファから所定の入力データを取得し、判定し、返値として判定結果を得る。
【0053】
そして、判定結果が真の場合には(S1404)、第一連結先ノードNoを処理ノードパラメータに設定する(S1405)。他方、判定結果が偽の場合には(S1404)第二連結先ノードNoを処理ノードパラメータに設定する(S1406)。これにより、処理ルートの分岐が起こる。
【0054】
ここで、関数系演算処理と制御系演算処理を繰り返す例を説明する。図15は、バッファデータの遷移の例を示す図である。この例では、バッファ列初期値定義が、(x,x,x,x,x,1,1,1,1,1)であり、学習用データIDがL3の場合を想定する。対応する学習用入力データxは2であるので、バッファ列の初期値は、(2,2,2,2,2,1,1,1,1,1)となる。
【0055】
まず、スタートノードである図1のノードNo1のノード情報に基づいて以下のように動作する。演算子f0は、関数系演算子であるので関数系演算処理(S1006)に移行する。第一バッファIDのBaがb0であり、第二バッファIDのBbがb1であるので、それぞれのバッファデータである2と2を加算し、その和である4を得る。そして、第三バッファIDのBcがb0であるので、そのバッファのデータData[b0]として和の4を格納する。最後に、第一連結先ノードNoのNaであるn2を処理ノードに設定する。
【0056】
次に、処理ノードである図1のノードNo2のノード情報に基づいて以下のように動作する。演算子f3は、制御系演算子であるので制御系演算処理(S1007)に移行する。第一バッファIDのBaがb0であり、第二バッファIDのBbがb1であるので、それぞれのバッファデータである2が2より小さいかを判定する。判定結果は偽となるので、第二連結先ノードNoのNbであるn4を処理ノードに設定する。
【0057】
同様に、ノードNoがn4の減算に係る関数系演算処理、ノードNoがn5の大なり比較に係る制御系演算処理を行ない、ノードNoがn7の演算完了処理(S1010)に移行する。
【0058】
次に、演算完了処理(S1010)について説明する。図16は、完了演算子テーブルを示す図である。この例では、完了演算子は1種類であるが、複数種類設けてもよい。本テーブルでは、前述の演算子テーブルと同様に、完了の演算子毎にレコードを設け、完了演算子Noと、連結数と、入力データ数と、出力データ数と、演算コードの項目を対応付けて記憶するように構成されている。ノード処理を終了するので連結先は、0である。また、学習用目標データ(図5の502)の数が1であり、いずれかのバッファデータをそのまま学習用目標データの比較対象となる演算結果データとするので、入力データ数は1となる。バッファデータを更新することもないので、出力データ数は0である。
【0059】
図17は、演算完了処理フローを示す図である。次に、入力データ数分のバッファを特定する。この例では、第一バッファIDを特定する。そして、そのバッファデータを読み取り(S1701)、当該バッファデータを、学習用データIDに対応する演算結果データとして演算結果記憶部811に記憶させる(S1702)。
【0060】
図15の例では、最後に処理ノードである図1のノードNo7のノード情報に基づいて以下のように動作する。演算子f6は、完了演算子であるので演算完了処理(S1010)に移行する。第一バッファIDのBaがb0であるのでそのバッファデータである−2を演算結果データとして、学習用データIDのL3に対応付けて演算結果記憶部811に記憶する。この例では、ノード情報中のバッファIDによって演算結果データを取得するバッファを特定したが、バッファ列中の所定のバッファから演算結果データを得るようにしてもよい。
【0061】
図18は、演算結果データの例を示す図である。各学習用データIDに対応付けて演算結果データ記憶するように構成されている。
【0062】
以上のようにして学習用データ演算処理(図10、S902)を終える。
【0063】
次に、適応度計算処理(図7)のうちデータ比較処理(S704)について説明する。
【0064】
図19は、適応度計算に係る構成(1/2)を示す図である。適応度計算部403は、更にデータ比較部1901を有している。
【0065】
図20は、データ比較処理フローを示す図である。学習用データID毎に以下の処理を繰り返す(S2001)。演算結果記憶部811で当該学習用データIDに対応付けられている演算結果データと、学習用データセット記憶部405で当該学習用データIDに対応付けられている学習用目標データの差を正規化する(S2002)。すべての学習用データについて処理すると(S2003)、正規化された演算結果データと目標データの差の合計を求める(S2004)。当該合計を学習用データセットで割って、商として適応度を得る(S2005)。
【0066】
最後に、本進化計算システムにより得られたグラフ型個体構造について説明する。図21は、階乗の計算を行なうグラフ型個体構造を模式的に表した図である。2101〜2105は、それぞれノードを示している。そのうち、2101と2104は、制御系演算子に係るノードであり、2103と2106は、関数系演算子に係るノードであり、2102と2105は、完了演算子に係るノードである。
【0067】
また、この処理をプログラム形式に書き改めると図22のようになる。図22は、階乗の計算に相当するプログラムを示す図である。図に示すように、まさに階乗の解法に従ったプログラムとなっている。
【0068】
実施の形態2.
上述の例では、関数系演算処理と、制御系演算処理を別のモジュールで処理する形態を示したが、両処理を共通のモジュールで処理してもよい。また、演算コードをそのまま解釈して実行できる構成の場合には、演算コードに従って処理を行なってもよい。
【0069】
進化計算システムは、コンピュータであり、各要素はプログラムにより処理を実行することができる。また、プログラムを記憶媒体に記憶させ、記憶媒体からコンピュータに読み取られるようにすることができる。
【図面の簡単な説明】
【0070】
【図1】グラフ型個体構造の例を示す図である。
【図2】ノード間の連結関係の例を示す図である。
【図3】バッファ列の例を示す図である。
【図4】進化計算システムの構成を示す図である。
【図5】学習用データセットの例を示す図である。
【図6】進化計算アルゴリズムによる学習処理フローを示す図である。
【図7】適応度計算処理フローを示す図である。
【図8】適応度計算に係る構成(1/2)を示す図である。
【図9】個体演算処理フローを示す図である。
【図10】学習用データ演算処理フローを示す図である。
【図11】関数系演算子テーブルを示す図である。
【図12】関数系演算処理フローを示す図である。
【図13】制御系演算子テーブルを示す図である。
【図14】制御系演算処理フローを示す図である。
【図15】バッファデータの遷移の例を示す図である。
【図16】完了演算子テーブルを示す図である。
【図17】演算完了処理フローを示す図である。
【図18】演算結果データの例を示す図である。
【図19】適応度計算に係る構成(1/2)を示す図である。
【図20】データ比較処理フローを示す図である。
【図21】階乗の計算を行なうグラフ型個体構造を模式的に表した図である。
【図22】階乗の計算に相当するプログラムを示す図である。
【符号の説明】
【0071】
401 初期個体入力部、402 個体集団記憶部、403 適応度計算部、404 演算子テーブル、405 学習用データセット記憶部、406 適応度記憶部、407 個体選択部、408 選択個体記憶部、409 生殖部、410 学習個体出力部、801 学習用データ演算初期化部、802 バッファ列、803 処理ノードパラメータ記憶部、804 処理ノード判定部、805 関数系演算処理部、806 関数系演算子テーブル、807 制御系演算処理部、808 制御系演算子テーブル、809 演算完了処理部、810 完了演算子テーブル、811 演算結果記憶部、1901 データ比較部。
【技術分野】
【0001】
本発明は、遺伝的プログラミングにより進化計算を行なう進化計算システムに係り、複雑な制御を含むアルゴリズムを最適化する技術に関する。
【背景技術】
【0002】
進化計算法とは、生物の進化から着想した最適化(探索)アルゴリズムである。進化論的な発想に基づいてデータを操作し、解空間を探索する多点探索法の一種とも言える。その代表的な手法として、遺伝的プログラミングがある。
【0003】
遺伝的プログラミングは、遺伝的アルゴリズムを発展させたものであって、個体を構造的に表現する。例えば、(A(B)(C(D)))のように記述するLispのS式などにより木構造を表現する。
【0004】
しかし、遺伝的プログラミングは、複雑な制御を含むアルゴリズムを生成することには向いていない。上述のLispのS式を例とすると、Dノードは、Cノードの処理の後に、Cノードの出力データを入力して演算を行なう。祖父にあたるAノードや叔父にあたるBノードからデータを受け取ることはない。つまり、Dノードは、処理フロー上の親も、データフロー上の親も同一のノードであり、処理フローとデータフローが一体となっている。そして、それらフローを分離して扱うことはできない。
【非特許文献1】伊庭斉志、佐藤泰介,「システム同定アプローチに基づく遺伝的プログラミング」,人工知能学会誌,人工知能学会,1995年,vol.10,No.4,p.100−110
【非特許文献2】青木紳也、長尾智晴,「木構造状画像変換の自動構築法ACTIT」,映像情報メディア学会誌,映像情報メディア学会,1999年,vol.53,No.6,p.888−894
【発明の開示】
【発明が解決しようとする課題】
【0005】
本発明は、ノード間で処理フローと分離してデータを受け渡すことができる仕組みと、制御系のノードを設けることにより、複雑な制御を含むアルゴリズムを解とする最適化問題を解くことができる進化計算システムを提供することを課題とする。
【課題を解決するための手段】
【0006】
本発明に係る進化計算システムは、
ノードで起動されるファンクション実行部を識別する演算子識別情報と、次に実行されるノードの候補を識別する複数の連結先ノード識別情報と、当該ファンクション実行部への入力データを得る取得バッファ及び当該ファンクション実行部からの出力データを書き込む格納バッファを識別するバッファ識別情報群を含むノード情報が連続するグラフ型個体構造情報を用いて進化計算を行なう進化計算システムであって、以下の要素を有することを特徴とする
(1)初期値として、定数、学習用入力データ、あるいは学習用入力データに対する所定の演算を施した関数値を記憶する複数のバッファを、バッファ識別情報に対応付けて備えるバッファ列
(2)同一世代に係る個体集団の要素である各個体のグラフ型個体構造情報を記憶する個体集団記憶部
(3)個体集団記憶部に含まれる個体毎に、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報によって識別されるファンクション実行部が条件判定を行なう場合には、その判定結果に基づいてノード情報に含まれる複数の連結先ノード識別情報のうちいずれかにより次に処理するノードを選択する制御系演算と、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報によって識別されるファンクション実行部がデータ加工を行なう場合には、ノード情報に含まれるバッファ識別情報によって特定される取得バッファから取得したデータを加工し、加工結果をノード情報に含まれるバッファ識別情報によって特定される格納バッファに書き込み、ノード情報に含まれる所定の連結先ノード識別情報により次に処理するノードを選択する関数系演算を、順次選択されるノード毎に実行し、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報が完了を示す場合に、いずれかのバッファのデータを演算結果データとし、当該演算結果データと、学習用目標データを比較して、個体毎の適応度を計算する適応度計算部
(4)適応度に基づいて、個体集団から個体を選択する個体選択部
(5)選択した個体のグラフ型個体構造情報に対して、複数の個体間で一部の情報を交換する交叉処理、あるいは一部の情報を変化させる突然変異処理を行い、次世代の個体集団の要素となる各個体のグラフ型個体構造情報を求め、個体集団記憶部に記憶させる生殖部。
【0007】
本発明に係る進化計算方法は、
初期値として、定数、学習用入力データ、あるいは学習用入力データに対する所定の演算を施した関数値を記憶する複数のバッファを、バッファ識別情報に対応付けて備えるバッファ列と、
同一世代に係る個体集団の要素である各個体について、ノードで起動されるファンクション実行部を識別する演算子識別情報と、次に実行されるノードの候補を識別する複数の連結先ノード識別情報と、当該ファンクション実行部への入力データを得る取得バッファ及び当該ファンクション実行部からの出力データを書き込む格納バッファを識別するバッファ識別情報群を含むノード情報が連続するグラフ型個体構造情報を記憶する個体集団記憶部を有し、グラフ型個体構造を用いて進化計算を行なう進化計算システムによる進化計算方法であって、以下の要素を有することを特徴とする
(1)個体集団記憶部に含まれる個体毎に、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報によって識別されるファンクション実行部が条件判定を行なう場合には、その判定結果に基づいてノード情報に含まれる複数の連結先ノード識別情報のうちいずれかにより次に処理するノードを選択する制御系演算と、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報によって識別されるファンクション実行部がデータ加工を行なう場合には、ノード情報に含まれるバッファ識別情報によって特定される取得バッファから取得したデータを加工し、加工結果をノード情報に含まれるバッファ識別情報によって特定される格納バッファに書き込み、ノード情報に含まれる所定の連結先ノード識別情報により次に処理するノードを選択する関数系演算を、順次選択されるノード毎に実行し、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報が完了を示す場合に、いずれかのバッファのデータを演算結果データとし、当該演算結果データと、学習用目標データを比較して、個体毎の適応度を計算する適応度計算工程
(2)適応度に基づいて、個体集団から個体を選択する個体選択工程
(3)選択した個体のグラフ型個体構造情報に対して、複数の個体間で一部の情報を交換する交叉処理、あるいは一部の情報を変化させる突然変異処理を行い、次世代の個体集団の要素となる各個体のグラフ型個体構造情報を求め、個体集団記憶部に記憶させる生殖工程。
【0008】
本発明に係るプログラムを記録したコンピュータ読み取り可能な記録媒体は、
初期値として、定数、学習用入力データ、あるいは学習用入力データに対する所定の演算を施した関数値を記憶する複数のバッファを、バッファ識別情報に対応付けて備えるバッファ列と、
同一世代に係る個体集団の要素である各個体について、ノードで起動されるファンクション実行部を識別する演算子識別情報と、次に実行されるノードの候補を識別する複数の連結先ノード識別情報と、当該ファンクション実行部への入力データを得る取得バッファ及び当該ファンクション実行部からの出力データを書き込む格納バッファを識別するバッファ識別情報群を含むノード情報が連続するグラフ型個体構造情報を記憶する個体集団記憶部を有し、グラフ型個体構造を用いて進化計算を行なう進化計算システムとなるコンピュータに、以下の処理を実行させるためのプログラムを記録したことを特徴とする
(1)個体集団記憶部に含まれる個体毎に、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報によって識別されるファンクション実行部が条件判定を行なう場合には、その判定結果に基づいてノード情報に含まれる複数の連結先ノード識別情報のうちいずれかにより次に処理するノードを選択する制御系演算と、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報によって識別されるファンクション実行部がデータ加工を行なう場合には、ノード情報に含まれるバッファ識別情報によって特定される取得バッファから取得したデータを加工し、加工結果をノード情報に含まれるバッファ識別情報によって特定される格納バッファに書き込み、ノード情報に含まれる所定の連結先ノード識別情報により次に処理するノードを選択する関数系演算を、順次選択されるノード毎に実行し、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報が完了を示す場合に、いずれかのバッファのデータを演算結果データとし、当該演算結果データと、学習用目標データを比較して、個体毎の適応度を計算する適応度計算処理
(2)適応度に基づいて、個体集団から個体を選択する個体選択処理
(3)選択した個体のグラフ型個体構造情報に対して、複数の個体間で一部の情報を交換する交叉処理、あるいは一部の情報を変化させる突然変異処理を行い、次世代の個体集団の要素となる各個体のグラフ型個体構造情報を求め、個体集団記憶部に記憶させる生殖処理。
【0009】
本発明に係るプログラムは、
初期値として、定数、学習用入力データ、あるいは学習用入力データに対する所定の演算を施した関数値を記憶する複数のバッファを、バッファ識別情報に対応付けて備えるバッファ列と、
同一世代に係る個体集団の要素である各個体について、ノードで起動されるファンクション実行部を識別する演算子識別情報と、次に実行されるノードの候補を識別する複数の連結先ノード識別情報と、当該ファンクション実行部への入力データを得る取得バッファ及び当該ファンクション実行部からの出力データを書き込む格納バッファを識別するバッファ識別情報群を含むノード情報が連続するグラフ型個体構造情報を記憶する個体集団記憶部を有し、グラフ型個体構造を用いて進化計算を行なう進化計算システムとなるコンピュータに、以下の手順を実行させることを特徴とする
(1)個体集団記憶部に含まれる個体毎に、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報によって識別されるファンクション実行部が条件判定を行なう場合には、その判定結果に基づいてノード情報に含まれる複数の連結先ノード識別情報のうちいずれかにより次に処理するノードを選択する制御系演算と、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報によって識別されるファンクション実行部がデータ加工を行なう場合には、ノード情報に含まれるバッファ識別情報によって特定される取得バッファから取得したデータを加工し、加工結果をノード情報に含まれるバッファ識別情報によって特定される格納バッファに書き込み、ノード情報に含まれる所定の連結先ノード識別情報により次に処理するノードを選択する関数系演算を、順次選択されるノード毎に実行し、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報が完了を示す場合に、いずれかのバッファのデータを演算結果データとし、当該演算結果データと、学習用目標データを比較して、個体毎の適応度を計算する適応度計算手順
(2)適応度に基づいて、個体集団から個体を選択する個体選択手順
(3)選択した個体のグラフ型個体構造情報に対して、複数の個体間で一部の情報を交換する交叉処理、あるいは一部の情報を変化させる突然変異処理を行い、次世代の個体集団の要素となる各個体のグラフ型個体構造情報を求め、個体集団記憶部に記憶させる生殖手順。
【発明の効果】
【0010】
本発明によれば、ノード間のデータの受け渡しに用いるバッファ列を設けるとともに、個体構造のノード情報にノードへの入力データを得る取得バッファとノードからの出力データを書き込む格納バッファを特定するバッファIDを含めることにより、ノードの連結によって定義される処理フローとは別にデータフローを定義できるようにした。これにより、処理フローに係る遺伝子のみを操作することや、データフローに係る遺伝子のみを操作することが可能となる。例えば、グラフ型個体構造情報中の連結先ノードNoを書き換えれば、処理フローのみが変化する。また、グラフ型個体構造情報中のバッファIDを書き換えれば、データフローのみが変化する。
【0011】
更に、バッファから取得する入力データに対する判定条件の判定結果に従って、連結先を振り分ける制御系演算子を設けることにより、IF文制御などの制御処理を、通常のデータ加工を行なう関数系演算子によるデータ処理と別個のノードとして操作できるようにした。これにより、制御系のみを遺伝子操作することや、関数系のみを遺伝子操作することができるようになる。例えば、グラフ型個体構造情報中の制御系の演算子を他の制御系の演算子に書き換えれば、制御のみが変化し、グラフ型個体構造情報中の関数系の演算子を他の関数系の演算子に書き換えれば、データ加工のみが変化する。
【0012】
以上のことにより、遺伝子交代や遺伝子変異などの世代交代の遺伝子操作において、条件判定を伴う制御を含む複雑な制御フローの最適化と、処理フローと分離したデータフローの最適化を図ることができるようになる。
【発明を実施するための最良の形態】
【0013】
実施の形態1.
本発明の進化計算システムでは、集団を構成する要素としてグラフ型の個体の構造を特定するグラフ型個体構造情報(以下、グラフ型個体構造という。)を用いる。まず、そのグラフ型個体構造について説明する。図1は、グラフ型個体構造の例を示す図である。グラフ型個体構造は、当該グラフに含まれるノード数分のノード情報を有している。つまり、グラフ型個体構造全体は、ノード情報の列としてとらえることができる。ノード情報には、ノードNoに対応付けて、当該ノードにおける演算を識別する演算子Noと、当該ノードからの出力先のノード候補を識別する複数の連結先ノードNo(連結先ノード識別情報の例)と、当該演算子による演算の入力データを得る取得バッファの候補あるいは同演算の出力データを書き込む格納バッファの候補である複数のバッファID(バッファ識別情報の例)との項目を記憶するように構成されている。この例では、ノードNoの昇順に、ノード情報を並べているが、ノードを特定できれば他の構成(例えば、ノードNo自体をノード情報の項目に含める構成など)であっても構わない。
【0014】
グラフ型個体構造に含まれる値は、各項目で共通の数値である。図1では、各項目の意義を理解しやすくするために、数値の前にアルファベットを付して値の種別を示したが、実際にはアルファベット部分を除いた数値が格納されている。例えば、演算子Noでf0と表記しているが実際には0が格納されている。尚、網掛けの部分は、演算子の定義に関連して意味を成さない部分、つまり用いられない部分を示している。
【0015】
図2は、ノード間の連結関係の例を示す図である。図1のグラフ型個体構造におけるノードの連結を示すと図2のようになる。連結先のノードの数、つまり連結数は、後述する演算子テーブルで演算子毎に定義されている。
【0016】
本発明に係る進化計算システムでは、バッファ列を用いてノード間でデータを転送する。図3は、バッファ列の例を示す図である。ノードにおける入力データは、このバッファ列のいずれかのバッファに記憶されているデータを用いる。また、ノードにおける出力データは、このバッファ列のいずれかのバッファに記憶される。つまり、各ノードは、これらのバッファを介してそれ以降のノードに対して間接的にデータを渡すことになる。図中のxは、後述する学習用入力データxを示している。本文中では、以後この構成を(x,x,x,x,x,1,1,1,1,1)と表記する。
【0017】
図4は、進化計算システムの構成を示す図である。進化計算システムは、初期個体入力部401、個体集団記憶部402、適応度計算部403、演算子テーブル404、学習用データセット記憶部405、適応度記憶部406、個体選択部407、選択個体記憶部408、生殖部409、及び学習個体出力部410を有している。個体集団記憶部402は、同世代に係る個体集団を記憶するように構成されている。
【0018】
図5は、学習用データセットの例を示す図である。学習用データは、学習用入力データと学習用目標データの対からなる。この例では、学習用データ毎にレコードを設け、学習用入力データと学習用目標データの項目を対応付けて記憶するように構成されている。進化計算システムは、学習用入力データを入力して学習用目標データを出力する演算を行なう個体を求めることを解としている。尚、図5の例は、階乗の入力値xと算出値y=x!の関係を示している。
【0019】
以下、進化計算システムによる進化計算アルゴリズムによる学習処理について説明する。
図6は、進化計算アルゴリズムによる学習処理フローを示す図である。まず、初期個体入力部401による初期個体入力処理(S601)を行なう。この処理では、初期の個体集団を入力し、個体集団記憶部402に記憶させる。つまり、集団を構成する要素数の分、グラフ型の個体の構造を特定するグラフ型個体構造情報(以下、グラフ型個体構造という。)を入力して、それらに個体識別情報(以下、個体IDという。)を対応付けて、個体集団記憶部402に記憶させる。
【0020】
初期個体入力処理(図6のS601)の次に、適応度計算部403による適応度計算処理(S602)を行なう。この処理では、個体集団記憶部402に記憶している各個体の適応度を計算する。適応度とは、初期入力値である学習用入力データを入力して、個体の構造により特定される演算手順に従って演算した結果である演算結果データが、最終的に目標とする学習用目標データに近似する程度を示す情報である。適応度は、個体IDと対応付けて適応度記憶部406に記憶される。この適応度計算処理(S602)の詳細については後述する。
【0021】
次に、個体選択部407による個体選択処理(図6のS603)を行なう。この処理では、各個体の適応度に基づいて、生殖処理の対象とする個体を所定の選択数分だけ選択する。例えば、適応度が大きい順に、選択数の個体を選択する。あるいは、選択数を、適応度の高い層の高適応個体選択数と、適応度の低い層の低適応個体選択数に分け、それぞれ、適応度の高い順に、高適応個体選択数の個体を選択し、更に適応度の低い順に、低適応個体選択数の個体を選択するように、適応度を層別し、各層からそれぞれの所定数分を選別するようにしてもよい。他にも、適応度に比例した確率で個体を選択するルーレット選択方法、適応度の順位に従って選択回数を決定するランク選択方法、個体集団からトーナメントサイズとして既定された数の個体をランダムに選択し、その中の最大適応度の個体をトーナメントの勝者として選択するトーナメント選択方法などもある。このようにして、選択された個体群のIDを、選択個体記憶部408に記憶させる。
【0022】
次に、生殖部409による生殖処理(S604)を行なう。この処理では、選択された個体群から取り出した個体に対して、世代交代に係る構成の操作を施す。この例では、2つの個体間でノード情報列の一部を交換する交叉処理、ノード情報列の一部を変化させる突然変異処理、現在の個体構造を維持したまま存続させる延命処理を行なう。これらの処理により、所定次世代個体数の個体からなる次世代個体集団を生成し、それぞれ個体IDと対応付けてネットワーク型個体構造を個体集団記憶部402に記憶させる。この生殖処理(S604)の詳細については、後述する。
【0023】
そして、これらの世代交代処理(S602からS604)を繰り返し、世代交代終了判定部(図示せず)による世代交代終了判定処理(S605)により、継続と判定されると世代交代処理をループし、終了と判定されると世代交代処理のループを終了し、後処理に移行する。世代交代の終了は、例えば、世代数で判定する。世代交代処理の回数をカウントし、当該回数が所定の世代数に満たない場合は、継続と判定し、世代数に達した場合に、終了と判定する。あるいは、適応度が終了条件を満たした場合に、終了と判定することもできる。例えば、目標適応度と目標個体数を終了条件として設定し、目標適応度に達した個体数をカウントし、その数が目標個体数に達しない場合に継続と判定し、目標個体数に達した場合に終了と判定する。あるいは、世代交代処理の制限時間を設け、世代交代処理のループの間の処理時間を計測し、処理時間が制限時間に達しない場合に継続と判定し、制限時間に達した場合に終了と判定する。
【0024】
後処理として、前述と同様に、最終世代の個体集団について適応度計算部403による適応度計算処理(S606)を行ない、学習個体出力部410による学習個体出力処理(S607)を行なう。学習個体出力処理では、最終世代の個体集団に含まれる各個体のグラフ型個体構造と、当該個体の適応度を対応付けて出力する。つまり、個体集団記憶部402に記憶している個体ID毎に、当該IDに対応するグラフ型個体構造を取り出し、また当該IDと対応付けられている適応度を適応度記憶部406から取り出し、取り出したグラフ型個体構造と適応度を対応付けて、学習個体情報として出力する。その際、適応度をキーとして個体情報群をソートし、そのソート結果を出力することも有効である。
【0025】
以下、図6に示した適応度計算処理(S602,S606)と生殖処理(S604)について順に詳述する。
【0026】
まず、適応度計算処理(S602,S606)について説明する。図7は、適応度計算処理フローを示す図である。個体集団記憶部402に記憶しているすべての個体に対して、個体演算処理(S702)、エラー終了判定処理(S703)を行ない、正常終了の場合にはデータ比較処理(S704)を行なう。個体演算部601による個体演算処理(S702)では、初期入力値である学習用入力データを入力して、グラフ型個体構造により特定される演算手順に従って一連の演算を行ない、演算結果データを得る。詳しくは、後述する。エラー終了判定部(図示せず)によるエラー終了判定処理(S703)では、個体演算処理(S702)でエラー終了したケースが含まれているかを判定し、エラー終了が有る場合にはデータ比較を行なわず、適応度を求めない。以降の個体選択の対象からも除外する。データ比較処理(S704)では、学習用データの単位で、それぞれ演算結果データと学習用目標データを比較し、所定の基準に従って適応度を算出する。データ比較処理(S704)については、後述する。そして、すべての個体について処理した時点で終了する(S705)。
【0027】
以下、適応度算出処理(S602)について詳述する。図8は、適応度計算に係る構成(1/2)を示す図である。適応度計算部403は、学習用データ演算初期化部801、バッファ列802、処理ノードパラメータ記憶部803、処理ノード判定部804、関数系演算処理部805、制御系演算処理部807、演算完了処理部809、及び演算結果記憶部811を有している。また、演算子テーブル404は、関数系演算子テーブル806、制御系演算子テーブル808、及び完了演算子テーブル810からなる。
【0028】
前述の個体演算部601による個体演算処理(S702)について説明する。図9は、個体演算処理フローを示す図である。学習用データセット(図5)を構成する学習用データ毎に(S901)、当該学習データを読み出して学習用データ演算処理を行ない(S902)、すべての学習用データについて処理した時点で終了する(S903)。
【0029】
学習用データ演算処理(S902)について詳述する。図10は、学習用データ演算処理フローを示す図である。まず、バッファ列802を初期化する(S1001)。バッファ列には、初期値を導出する定義(バッファ列初期値定義)がなされている。各バッファは、定数(例えば、0、1、あるいは2など)、学習用入力データ(x)、あるいは、学習用入力データを入力して所定の演算によって得られる関数値(f(x)の形式で表されるxの二乗など)を設定するように定義されている。そして、このバッファ列初期値定義に従って、定数が定義されているバッファにはその定数を記憶させ、学習用入力データが定義されているバッファには、S901で学習用データセットから読み出した当該学習用データに含まれる学習用入力データを記憶させ、関数値が設定されているバッファには、当該学習用入力データを入力して当該関数で算出した値を記憶させる。この例では、(x,x,x,x,x,1,1,1,1,1)と定義されているので、図5の例で学習用データIDがL3の場合には、学習用入力データが2であるので、バッファ列は、(2,2,2,2,2,1,1,1,1,1)となる。
【0030】
本発明では、グラフ型個体構造に含まれるノードをその順序に従って処理するのではなく、ノードの演算の都度、次に処理するノードを判断するので、その処理ノードを記憶するための一次的な記憶領域として処理ノードパラメータ記憶部803を有している。処理ノードパラメータの初期化(S1002)では、その処理ノードパラメータ記憶部803に所定のスタートノードとしてn1を記憶させる。
【0031】
これらの初期化の処理(S1001、S1002)は、学習用データ演算初期化部801が行なう。
【0032】
続いて、各ノードの処理を行なう。具体的には、処理ノードパラメータ記憶部803で記憶しているノードNoで特定される処理ノード毎に以下の処理を繰り返す(S1003)。まず、処理ノード判定部804が処理ノードパラメータ記憶部803からノードNoを読み、そのノードNoに対応するノード情報を個体集団記憶部402から取得する。そして、取得した当該処理ノードの演算子No(S1004)について、その演算子の種類を判定する(S1005)。演算子は、関数系演算子と制御系演算子と完了演算子に分類される。関数系演算子は、バッファから得る入力データを所定の関数に従って計算し、計算結果として関数値を得て、それをバッファへの出力データとする演算を識別するものである。この例では、後述するように加算の演算子(f0)と、減算の演算子(f1)と、乗算の演算子(f2)が用意されている。制御系演算子は、バッファから得る入力データを用いて所定のデータ判定を行ない、判定結果に従って連結先のノード(つまり、遷移先のノード)を決定する演算を識別するものである。この例では、後述するように小なり比較の演算子(f3)と、大なり比較の演算子(f4)と、一致の演算子(f5)が用意されている。完了演算子は、バッファから得る入力データを当該個体の演算結果データとする処理を示す演算子である。この例では、1つの値を演算結果として終了する演算子(f6)が用意されている。
【0033】
演算子が関数系演算子である場合には、関数系演算処理部805による関数系演算処理(S1006)を行ない、演算子が制御系演算子である場合には、制御系演算処理部807による制御系演算処理(S1007)を行なう。詳しくは、後述する。いずれの処理でも、次に処理するノードNoを決定し、処理ノードパラメータ記憶部803に記憶させる。これにより一連のノードに対する処理が行なわれる。
【0034】
演算子が完了演算子である場合には、演算完了処理(S1010)で一連の演算を終了させる。この場合は、正常終了となる。詳しくは、後述する。一方、ループ回数が所定の制限に達した場合には、エラー終了とする(S1008)。
【0035】
前述の関数系演算処理部805による関数系演算処理(S1006)について詳述する。図11は、関数系演算子テーブルを示す図である。関数系の演算子毎にレコードを設け、関数系演算子Noと、連結数と、入力データ数と、出力データ数と、演算コードの項目を対応付けて記憶するように構成されている。ここでいう関数とは、通常のデータ加工の演算を指している。
【0036】
ここで、演算子テーブルの演算子以外の各項目について説明する。連結数は、遷移するノードの候補の数を示している。連結数が1の場合には、ノード情報中の第一連結先ノードNoを次の処理ノードNoとすることを意味している。連結数が2の場合には、ノード情報中の第一連結先ノードNoあるいは第二連結先ノードNoのいずれかを次の処理ノードNoとすることを意味している。
【0037】
入力データ数は、当該演算子による関数や判定条件で入力として用いるデータの数を示している。例えば、関数系演算子で2つの値を加算する場合には、入力データは2となる。また、制御系演算子で2つの値が一致するか判定する場合にも、入力データは2となる。つまり、入力データ数は、データを読み出す取得バッファの数に等しい。
【0038】
出力データ数は、演算結果として保持するデータの数を示している。例えば、関数系演算子で2つの値を加算する場合には、出力データは1となる。また、制御系演算子で2つの値が一致するか判定する場合には、判定結果は保持しないので出力データは0となる。つまり、出力データ数は、データを書き込む格納バッファの数に等しい。
【0039】
複数のバッファIDは、入力データを読み出すバッファあるいは出力データを書き込むバッファを特定するためのデータである。先頭から順に、入力データ数分のバッファからデータを読み出し、続いて出力データ数分のバッファへデータを書き込むことを意味している。
【0040】
演算コードは、演算処理の意義を示すために参考として記載した。例えば、演算子Noがf0の場合には、入力データ数は2であるので、バッファIDのDaとDbのバッファからデータを2つ取得して、それらを加算する。また、出力データ数が1であるので、加算結果をバッファIDのDcのバッファに格納する。また、連結数は1なので次の処理ノート(p_node)をNaとする。制御系演算子の演算コードについては、後述する。
【0041】
次に、関数系演算処理の動作を説明する。図12は、関数系演算処理フローを示す図である。当該関数系演算子に対応するファンクション実行部を特定する(S1201)。関数系演算処理部805は、関数系の演算に相当するファンクション実行部を有している。プログラミングとしては、例えば関数系演算子f0に対応する「2つの値の加算を行なうファンクション実行部」は、&outdata=add(&indata1,&indata2)のインターフェースにより、入力データとしてindata1とindata2を読込み、これらを加算して和をoutdataに書き込むように動作する。関数系演算子f1に対応する「2つの値の減算を行なうファンクション実行部」は、&outdata=sub(&indata1,&indata2)のインターフェースにより、入力データとしてindata1とindata2を読込み、indata1からindata2を引いて、差をoutdataに書き込むように動作する。関数系演算子f2に対応する「2つの値の乗算を行なうファンクション実行部」は、&outdata=mul(&indata1,&indata2)のインターフェースにより、入力データとしてindata1とindata2を読込み、これらを乗算して積をoutdataに書き込むように動作する。従ってこの例では、具体的には関数系演算子に対応するaddなどのコマンドを特定することになる。
【0042】
次に、入力データ数分の取得バッファを特定する。この例では、第一バッファIDから順に入力データ数分のバッファIDを特定する。例えば、入力データ数が2の場合には、ノード情報中の第一バッファIDと第二バッファIDを特定する。そして、ファンクション実行部の入力データ格納位置に設定する(S1202)。前述の&outdata=add(&indata1,&indata2)の例で言えば、コマンドの引数の&indata1に、第一バッファIDで特定されるバッファのアドレスを設定し、同じく&indata2に、第二バッファIDで特定されるバッファのアドレスを設定する。
【0043】
次に、出力データ数分の格納バッファを特定する。この例では、入力データのバッファに続いて、順に出力データ数分のバッファIDを特定する。例えば、入力データ数が2で出力データ数が1の場合には、ノード情報中の第一バッファIDと第二バッファIDに続く、第三バッファIDを特定する。そして、ファンクション実行部の出力データ格納位置に設定する(S1203)。前述の&outdata=add(&indata1,&indata2)の例で言えば、返値の&outdataに、第三バッファIDで特定されるバッファのアドレスを設定する。
【0044】
そして、ファンクション実行部を起動する(S1204)。これにより、設定された入力用のバッファから所定の入力データを取得し、計算し、計算結果を設定された出力用のバッファに書き込む。
【0045】
次に、連結先ノードを特定する(S1205)。具体的には、演算子に対応する連結数に従って、ノード情報に含まれるいずれかの連結先ノードNoを選択する。この例では、連結先が1の場合には、第一連結先ノードNoを選択することとしている。連結先が2の場合の処理については、後述する制御系演算処理の説明で触れる。そして、当該連結先ノードを処理ノードパラメータ記憶部803に書き込む(S1206)。
【0046】
これで関数系演算処理を終える。
【0047】
次に、前述の制御系演算処理部807による制御系演算処理(S1007)について詳述する。図13は、制御系演算子テーブルを示す図である。制御系演算子テーブル808は、制御系の演算子毎にレコードを設け、制御系演算子Noと、連結数と、入力データ数と、出力データ数と、演算コードの項目を対応付けて記憶するように構成されている。
【0048】
制御系演算子の演算コードについて説明する。例えば、演算子Noがf3の場合には、入力データ数は2であるので、バッファIDのDaとDbのバッファからデータを2つ取得して、それらの小なり比較を行なう。また、出力データ数が0であるので判定結果はバッファに格納しない。但し、連結数が2なので、判定結果によって連結先を振り分ける。この例では、判定結果が真のときに次の処理ノードをNaとし、偽のときに次の処理ノートをNbとする。
【0049】
次に、制御系演算処理の動作を説明する。図14は、制御系演算処理フローを示す図である。当該制御系演算子に対応するファンクション実行部を特定する(S1401)。制御系演算子テーブル808は、制御系の演算に相当するファンクション実行部を有している。プログラミングとしては、例えば制御系演算子f3に対応する「小なり比較を行なうファンクション実行部」は、ret=small(&indata1,&indata2)のインターフェースにより、入力データとしてindata1とindata2を読込み、indata1がindata2より小さいかを判定する。そして、判定結果としての真/偽を返値パラメータのretに返すように動作する。制御系演算子f4に対応する「大なり比較を行なうファンクション実行部」は、ret=large(&indata1,&indata2)のインターフェースにより、入力データとしてindata1とindata2を読込み、indata1がindata2より大きいかを判定する。そして、判定結果としての真/偽を返値パラメータのretに返すように動作する。制御系演算子f5に対応する「一致判定を行なうファンクション実行部」は、ret=equal(&indata1,&indata2)のインターフェースにより、入力データとしてindata1とindata2を読込み、indata1がindata2と一致するかを判定する。そして、判定結果としての真/偽を返値パラメータのretに返すように動作する。従ってこの例では、具体的には制御系演算子に対応するsmallのなどコマンドを特定することになる。
【0050】
次に、入力データ数分の取得バッファを特定する。この例では、第一バッファIDから順に入力データ数分のバッファIDを特定する。例えば、入力データ数が2の場合には、ノード情報中の第一バッファIDと第二バッファIDを特定する。そして、ファンクション実行部の入力データ格納位置に設定する(S1402)。前述のret=small(&indata1,&indata2)の例で言えば、コマンドの引数のindata1に、第一バッファIDで特定されるバッファのアドレスを設定し、同じくindata2に、第二バッファIDで特定されるバッファのアドレスを設定する。
【0051】
この例では、制御系演算子は、出力データ数が0なので、ファンクション実行部に出力格納位置を設定する処理は行なわないが、出力データ数が1以上の制御系演算子を用いる場合には、関数系演算子と同様に出力データの格納バッファを特定し、ファンクション実行部に出力格納位置を設定する処理を行なう。
【0052】
そして、ファンクション実行部を起動する(S1403)。これにより、設定されたバッファから所定の入力データを取得し、判定し、返値として判定結果を得る。
【0053】
そして、判定結果が真の場合には(S1404)、第一連結先ノードNoを処理ノードパラメータに設定する(S1405)。他方、判定結果が偽の場合には(S1404)第二連結先ノードNoを処理ノードパラメータに設定する(S1406)。これにより、処理ルートの分岐が起こる。
【0054】
ここで、関数系演算処理と制御系演算処理を繰り返す例を説明する。図15は、バッファデータの遷移の例を示す図である。この例では、バッファ列初期値定義が、(x,x,x,x,x,1,1,1,1,1)であり、学習用データIDがL3の場合を想定する。対応する学習用入力データxは2であるので、バッファ列の初期値は、(2,2,2,2,2,1,1,1,1,1)となる。
【0055】
まず、スタートノードである図1のノードNo1のノード情報に基づいて以下のように動作する。演算子f0は、関数系演算子であるので関数系演算処理(S1006)に移行する。第一バッファIDのBaがb0であり、第二バッファIDのBbがb1であるので、それぞれのバッファデータである2と2を加算し、その和である4を得る。そして、第三バッファIDのBcがb0であるので、そのバッファのデータData[b0]として和の4を格納する。最後に、第一連結先ノードNoのNaであるn2を処理ノードに設定する。
【0056】
次に、処理ノードである図1のノードNo2のノード情報に基づいて以下のように動作する。演算子f3は、制御系演算子であるので制御系演算処理(S1007)に移行する。第一バッファIDのBaがb0であり、第二バッファIDのBbがb1であるので、それぞれのバッファデータである2が2より小さいかを判定する。判定結果は偽となるので、第二連結先ノードNoのNbであるn4を処理ノードに設定する。
【0057】
同様に、ノードNoがn4の減算に係る関数系演算処理、ノードNoがn5の大なり比較に係る制御系演算処理を行ない、ノードNoがn7の演算完了処理(S1010)に移行する。
【0058】
次に、演算完了処理(S1010)について説明する。図16は、完了演算子テーブルを示す図である。この例では、完了演算子は1種類であるが、複数種類設けてもよい。本テーブルでは、前述の演算子テーブルと同様に、完了の演算子毎にレコードを設け、完了演算子Noと、連結数と、入力データ数と、出力データ数と、演算コードの項目を対応付けて記憶するように構成されている。ノード処理を終了するので連結先は、0である。また、学習用目標データ(図5の502)の数が1であり、いずれかのバッファデータをそのまま学習用目標データの比較対象となる演算結果データとするので、入力データ数は1となる。バッファデータを更新することもないので、出力データ数は0である。
【0059】
図17は、演算完了処理フローを示す図である。次に、入力データ数分のバッファを特定する。この例では、第一バッファIDを特定する。そして、そのバッファデータを読み取り(S1701)、当該バッファデータを、学習用データIDに対応する演算結果データとして演算結果記憶部811に記憶させる(S1702)。
【0060】
図15の例では、最後に処理ノードである図1のノードNo7のノード情報に基づいて以下のように動作する。演算子f6は、完了演算子であるので演算完了処理(S1010)に移行する。第一バッファIDのBaがb0であるのでそのバッファデータである−2を演算結果データとして、学習用データIDのL3に対応付けて演算結果記憶部811に記憶する。この例では、ノード情報中のバッファIDによって演算結果データを取得するバッファを特定したが、バッファ列中の所定のバッファから演算結果データを得るようにしてもよい。
【0061】
図18は、演算結果データの例を示す図である。各学習用データIDに対応付けて演算結果データ記憶するように構成されている。
【0062】
以上のようにして学習用データ演算処理(図10、S902)を終える。
【0063】
次に、適応度計算処理(図7)のうちデータ比較処理(S704)について説明する。
【0064】
図19は、適応度計算に係る構成(1/2)を示す図である。適応度計算部403は、更にデータ比較部1901を有している。
【0065】
図20は、データ比較処理フローを示す図である。学習用データID毎に以下の処理を繰り返す(S2001)。演算結果記憶部811で当該学習用データIDに対応付けられている演算結果データと、学習用データセット記憶部405で当該学習用データIDに対応付けられている学習用目標データの差を正規化する(S2002)。すべての学習用データについて処理すると(S2003)、正規化された演算結果データと目標データの差の合計を求める(S2004)。当該合計を学習用データセットで割って、商として適応度を得る(S2005)。
【0066】
最後に、本進化計算システムにより得られたグラフ型個体構造について説明する。図21は、階乗の計算を行なうグラフ型個体構造を模式的に表した図である。2101〜2105は、それぞれノードを示している。そのうち、2101と2104は、制御系演算子に係るノードであり、2103と2106は、関数系演算子に係るノードであり、2102と2105は、完了演算子に係るノードである。
【0067】
また、この処理をプログラム形式に書き改めると図22のようになる。図22は、階乗の計算に相当するプログラムを示す図である。図に示すように、まさに階乗の解法に従ったプログラムとなっている。
【0068】
実施の形態2.
上述の例では、関数系演算処理と、制御系演算処理を別のモジュールで処理する形態を示したが、両処理を共通のモジュールで処理してもよい。また、演算コードをそのまま解釈して実行できる構成の場合には、演算コードに従って処理を行なってもよい。
【0069】
進化計算システムは、コンピュータであり、各要素はプログラムにより処理を実行することができる。また、プログラムを記憶媒体に記憶させ、記憶媒体からコンピュータに読み取られるようにすることができる。
【図面の簡単な説明】
【0070】
【図1】グラフ型個体構造の例を示す図である。
【図2】ノード間の連結関係の例を示す図である。
【図3】バッファ列の例を示す図である。
【図4】進化計算システムの構成を示す図である。
【図5】学習用データセットの例を示す図である。
【図6】進化計算アルゴリズムによる学習処理フローを示す図である。
【図7】適応度計算処理フローを示す図である。
【図8】適応度計算に係る構成(1/2)を示す図である。
【図9】個体演算処理フローを示す図である。
【図10】学習用データ演算処理フローを示す図である。
【図11】関数系演算子テーブルを示す図である。
【図12】関数系演算処理フローを示す図である。
【図13】制御系演算子テーブルを示す図である。
【図14】制御系演算処理フローを示す図である。
【図15】バッファデータの遷移の例を示す図である。
【図16】完了演算子テーブルを示す図である。
【図17】演算完了処理フローを示す図である。
【図18】演算結果データの例を示す図である。
【図19】適応度計算に係る構成(1/2)を示す図である。
【図20】データ比較処理フローを示す図である。
【図21】階乗の計算を行なうグラフ型個体構造を模式的に表した図である。
【図22】階乗の計算に相当するプログラムを示す図である。
【符号の説明】
【0071】
401 初期個体入力部、402 個体集団記憶部、403 適応度計算部、404 演算子テーブル、405 学習用データセット記憶部、406 適応度記憶部、407 個体選択部、408 選択個体記憶部、409 生殖部、410 学習個体出力部、801 学習用データ演算初期化部、802 バッファ列、803 処理ノードパラメータ記憶部、804 処理ノード判定部、805 関数系演算処理部、806 関数系演算子テーブル、807 制御系演算処理部、808 制御系演算子テーブル、809 演算完了処理部、810 完了演算子テーブル、811 演算結果記憶部、1901 データ比較部。
【特許請求の範囲】
【請求項1】
ノードで起動されるファンクション実行部を識別する演算子識別情報と、次に実行されるノードの候補を識別する複数の連結先ノード識別情報と、当該ファンクション実行部への入力データを得る取得バッファ及び当該ファンクション実行部からの出力データを書き込む格納バッファを識別するバッファ識別情報群を含むノード情報が連続するグラフ型個体構造情報を用いて進化計算を行なう進化計算システムであって、以下の要素を有することを特徴とする進化計算システム
(1)初期値として、定数、学習用入力データ、あるいは学習用入力データに対する所定の演算を施した関数値を記憶する複数のバッファを、バッファ識別情報に対応付けて備えるバッファ列
(2)同一世代に係る個体集団の要素である各個体のグラフ型個体構造情報を記憶する個体集団記憶部
(3)個体集団記憶部に含まれる個体毎に、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報によって識別されるファンクション実行部が条件判定を行なう場合には、その判定結果に基づいてノード情報に含まれる複数の連結先ノード識別情報のうちいずれかにより次に処理するノードを選択する制御系演算と、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報によって識別されるファンクション実行部がデータ加工を行なう場合には、ノード情報に含まれるバッファ識別情報によって特定される取得バッファから取得したデータを加工し、加工結果をノード情報に含まれるバッファ識別情報によって特定される格納バッファに書き込み、ノード情報に含まれる所定の連結先ノード識別情報により次に処理するノードを選択する関数系演算を、順次選択されるノード毎に実行し、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報が完了を示す場合に、いずれかのバッファのデータを演算結果データとし、当該演算結果データと、学習用目標データを比較して、個体毎の適応度を計算する適応度計算部
(4)適応度に基づいて、個体集団から個体を選択する個体選択部
(5)選択した個体のグラフ型個体構造情報に対して、複数の個体間で一部の情報を交換する交叉処理、あるいは一部の情報を変化させる突然変異処理を行い、次世代の個体集団の要素となる各個体のグラフ型個体構造情報を求め、個体集団記憶部に記憶させる生殖部。
【請求項2】
初期値として、定数、学習用入力データ、あるいは学習用入力データに対する所定の演算を施した関数値を記憶する複数のバッファを、バッファ識別情報に対応付けて備えるバッファ列と、
同一世代に係る個体集団の要素である各個体について、ノードで起動されるファンクション実行部を識別する演算子識別情報と、次に実行されるノードの候補を識別する複数の連結先ノード識別情報と、当該ファンクション実行部への入力データを得る取得バッファ及び当該ファンクション実行部からの出力データを書き込む格納バッファを識別するバッファ識別情報群を含むノード情報が連続するグラフ型個体構造情報を記憶する個体集団記憶部を有し、グラフ型個体構造を用いて進化計算を行なう進化計算システムによる進化計算方法であって、以下の要素を有することを特徴とする進化計算方法
(1)個体集団記憶部に含まれる個体毎に、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報によって識別されるファンクション実行部が条件判定を行なう場合には、その判定結果に基づいてノード情報に含まれる複数の連結先ノード識別情報のうちいずれかにより次に処理するノードを選択する制御系演算と、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報によって識別されるファンクション実行部がデータ加工を行なう場合には、ノード情報に含まれるバッファ識別情報によって特定される取得バッファから取得したデータを加工し、加工結果をノード情報に含まれるバッファ識別情報によって特定される格納バッファに書き込み、ノード情報に含まれる所定の連結先ノード識別情報により次に処理するノードを選択する関数系演算を、順次選択されるノード毎に実行し、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報が完了を示す場合に、いずれかのバッファのデータを演算結果データとし、当該演算結果データと、学習用目標データを比較して、個体毎の適応度を計算する適応度計算工程
(2)適応度に基づいて、個体集団から個体を選択する個体選択工程
(3)選択した個体のグラフ型個体構造情報に対して、複数の個体間で一部の情報を交換する交叉処理、あるいは一部の情報を変化させる突然変異処理を行い、次世代の個体集団の要素となる各個体のグラフ型個体構造情報を求め、個体集団記憶部に記憶させる生殖工程。
【請求項3】
初期値として、定数、学習用入力データ、あるいは学習用入力データに対する所定の演算を施した関数値を記憶する複数のバッファを、バッファ識別情報に対応付けて備えるバッファ列と、
同一世代に係る個体集団の要素である各個体について、ノードで起動されるファンクション実行部を識別する演算子識別情報と、次に実行されるノードの候補を識別する複数の連結先ノード識別情報と、当該ファンクション実行部への入力データを得る取得バッファ及び当該ファンクション実行部からの出力データを書き込む格納バッファを識別するバッファ識別情報群を含むノード情報が連続するグラフ型個体構造情報を記憶する個体集団記憶部を有し、グラフ型個体構造を用いて進化計算を行なう進化計算システムとなるコンピュータに、以下の処理を実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体
(1)個体集団記憶部に含まれる個体毎に、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報によって識別されるファンクション実行部が条件判定を行なう場合には、その判定結果に基づいてノード情報に含まれる複数の連結先ノード識別情報のうちいずれかにより次に処理するノードを選択する制御系演算と、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報によって識別されるファンクション実行部がデータ加工を行なう場合には、ノード情報に含まれるバッファ識別情報によって特定される取得バッファから取得したデータを加工し、加工結果をノード情報に含まれるバッファ識別情報によって特定される格納バッファに書き込み、ノード情報に含まれる所定の連結先ノード識別情報により次に処理するノードを選択する関数系演算を、順次選択されるノード毎に実行し、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報が完了を示す場合に、いずれかのバッファのデータを演算結果データとし、当該演算結果データと、学習用目標データを比較して、個体毎の適応度を計算する適応度計算処理
(2)適応度に基づいて、個体集団から個体を選択する個体選択処理
(3)選択した個体のグラフ型個体構造情報に対して、複数の個体間で一部の情報を交換する交叉処理、あるいは一部の情報を変化させる突然変異処理を行い、次世代の個体集団の要素となる各個体のグラフ型個体構造情報を求め、個体集団記憶部に記憶させる生殖処理。
【請求項4】
初期値として、定数、学習用入力データ、あるいは学習用入力データに対する所定の演算を施した関数値を記憶する複数のバッファを、バッファ識別情報に対応付けて備えるバッファ列と、
同一世代に係る個体集団の要素である各個体について、ノードで起動されるファンクション実行部を識別する演算子識別情報と、次に実行されるノードの候補を識別する複数の連結先ノード識別情報と、当該ファンクション実行部への入力データを得る取得バッファ及び当該ファンクション実行部からの出力データを書き込む格納バッファを識別するバッファ識別情報群を含むノード情報が連続するグラフ型個体構造情報を記憶する個体集団記憶部を有し、グラフ型個体構造を用いて進化計算を行なう進化計算システムとなるコンピュータに、以下の手順を実行させるためのプログラム
(1)個体集団記憶部に含まれる個体毎に、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報によって識別されるファンクション実行部が条件判定を行なう場合には、その判定結果に基づいてノード情報に含まれる複数の連結先ノード識別情報のうちいずれかにより次に処理するノードを選択する制御系演算と、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報によって識別されるファンクション実行部がデータ加工を行なう場合には、ノード情報に含まれるバッファ識別情報によって特定される取得バッファから取得したデータを加工し、加工結果をノード情報に含まれるバッファ識別情報によって特定される格納バッファに書き込み、ノード情報に含まれる所定の連結先ノード識別情報により次に処理するノードを選択する関数系演算を、順次選択されるノード毎に実行し、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報が完了を示す場合に、いずれかのバッファのデータを演算結果データとし、当該演算結果データと、学習用目標データを比較して、個体毎の適応度を計算する適応度計算手順
(2)適応度に基づいて、個体集団から個体を選択する個体選択手順
(3)選択した個体のグラフ型個体構造情報に対して、複数の個体間で一部の情報を交換する交叉処理、あるいは一部の情報を変化させる突然変異処理を行い、次世代の個体集団の要素となる各個体のグラフ型個体構造情報を求め、個体集団記憶部に記憶させる生殖手順。
【請求項1】
ノードで起動されるファンクション実行部を識別する演算子識別情報と、次に実行されるノードの候補を識別する複数の連結先ノード識別情報と、当該ファンクション実行部への入力データを得る取得バッファ及び当該ファンクション実行部からの出力データを書き込む格納バッファを識別するバッファ識別情報群を含むノード情報が連続するグラフ型個体構造情報を用いて進化計算を行なう進化計算システムであって、以下の要素を有することを特徴とする進化計算システム
(1)初期値として、定数、学習用入力データ、あるいは学習用入力データに対する所定の演算を施した関数値を記憶する複数のバッファを、バッファ識別情報に対応付けて備えるバッファ列
(2)同一世代に係る個体集団の要素である各個体のグラフ型個体構造情報を記憶する個体集団記憶部
(3)個体集団記憶部に含まれる個体毎に、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報によって識別されるファンクション実行部が条件判定を行なう場合には、その判定結果に基づいてノード情報に含まれる複数の連結先ノード識別情報のうちいずれかにより次に処理するノードを選択する制御系演算と、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報によって識別されるファンクション実行部がデータ加工を行なう場合には、ノード情報に含まれるバッファ識別情報によって特定される取得バッファから取得したデータを加工し、加工結果をノード情報に含まれるバッファ識別情報によって特定される格納バッファに書き込み、ノード情報に含まれる所定の連結先ノード識別情報により次に処理するノードを選択する関数系演算を、順次選択されるノード毎に実行し、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報が完了を示す場合に、いずれかのバッファのデータを演算結果データとし、当該演算結果データと、学習用目標データを比較して、個体毎の適応度を計算する適応度計算部
(4)適応度に基づいて、個体集団から個体を選択する個体選択部
(5)選択した個体のグラフ型個体構造情報に対して、複数の個体間で一部の情報を交換する交叉処理、あるいは一部の情報を変化させる突然変異処理を行い、次世代の個体集団の要素となる各個体のグラフ型個体構造情報を求め、個体集団記憶部に記憶させる生殖部。
【請求項2】
初期値として、定数、学習用入力データ、あるいは学習用入力データに対する所定の演算を施した関数値を記憶する複数のバッファを、バッファ識別情報に対応付けて備えるバッファ列と、
同一世代に係る個体集団の要素である各個体について、ノードで起動されるファンクション実行部を識別する演算子識別情報と、次に実行されるノードの候補を識別する複数の連結先ノード識別情報と、当該ファンクション実行部への入力データを得る取得バッファ及び当該ファンクション実行部からの出力データを書き込む格納バッファを識別するバッファ識別情報群を含むノード情報が連続するグラフ型個体構造情報を記憶する個体集団記憶部を有し、グラフ型個体構造を用いて進化計算を行なう進化計算システムによる進化計算方法であって、以下の要素を有することを特徴とする進化計算方法
(1)個体集団記憶部に含まれる個体毎に、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報によって識別されるファンクション実行部が条件判定を行なう場合には、その判定結果に基づいてノード情報に含まれる複数の連結先ノード識別情報のうちいずれかにより次に処理するノードを選択する制御系演算と、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報によって識別されるファンクション実行部がデータ加工を行なう場合には、ノード情報に含まれるバッファ識別情報によって特定される取得バッファから取得したデータを加工し、加工結果をノード情報に含まれるバッファ識別情報によって特定される格納バッファに書き込み、ノード情報に含まれる所定の連結先ノード識別情報により次に処理するノードを選択する関数系演算を、順次選択されるノード毎に実行し、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報が完了を示す場合に、いずれかのバッファのデータを演算結果データとし、当該演算結果データと、学習用目標データを比較して、個体毎の適応度を計算する適応度計算工程
(2)適応度に基づいて、個体集団から個体を選択する個体選択工程
(3)選択した個体のグラフ型個体構造情報に対して、複数の個体間で一部の情報を交換する交叉処理、あるいは一部の情報を変化させる突然変異処理を行い、次世代の個体集団の要素となる各個体のグラフ型個体構造情報を求め、個体集団記憶部に記憶させる生殖工程。
【請求項3】
初期値として、定数、学習用入力データ、あるいは学習用入力データに対する所定の演算を施した関数値を記憶する複数のバッファを、バッファ識別情報に対応付けて備えるバッファ列と、
同一世代に係る個体集団の要素である各個体について、ノードで起動されるファンクション実行部を識別する演算子識別情報と、次に実行されるノードの候補を識別する複数の連結先ノード識別情報と、当該ファンクション実行部への入力データを得る取得バッファ及び当該ファンクション実行部からの出力データを書き込む格納バッファを識別するバッファ識別情報群を含むノード情報が連続するグラフ型個体構造情報を記憶する個体集団記憶部を有し、グラフ型個体構造を用いて進化計算を行なう進化計算システムとなるコンピュータに、以下の処理を実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体
(1)個体集団記憶部に含まれる個体毎に、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報によって識別されるファンクション実行部が条件判定を行なう場合には、その判定結果に基づいてノード情報に含まれる複数の連結先ノード識別情報のうちいずれかにより次に処理するノードを選択する制御系演算と、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報によって識別されるファンクション実行部がデータ加工を行なう場合には、ノード情報に含まれるバッファ識別情報によって特定される取得バッファから取得したデータを加工し、加工結果をノード情報に含まれるバッファ識別情報によって特定される格納バッファに書き込み、ノード情報に含まれる所定の連結先ノード識別情報により次に処理するノードを選択する関数系演算を、順次選択されるノード毎に実行し、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報が完了を示す場合に、いずれかのバッファのデータを演算結果データとし、当該演算結果データと、学習用目標データを比較して、個体毎の適応度を計算する適応度計算処理
(2)適応度に基づいて、個体集団から個体を選択する個体選択処理
(3)選択した個体のグラフ型個体構造情報に対して、複数の個体間で一部の情報を交換する交叉処理、あるいは一部の情報を変化させる突然変異処理を行い、次世代の個体集団の要素となる各個体のグラフ型個体構造情報を求め、個体集団記憶部に記憶させる生殖処理。
【請求項4】
初期値として、定数、学習用入力データ、あるいは学習用入力データに対する所定の演算を施した関数値を記憶する複数のバッファを、バッファ識別情報に対応付けて備えるバッファ列と、
同一世代に係る個体集団の要素である各個体について、ノードで起動されるファンクション実行部を識別する演算子識別情報と、次に実行されるノードの候補を識別する複数の連結先ノード識別情報と、当該ファンクション実行部への入力データを得る取得バッファ及び当該ファンクション実行部からの出力データを書き込む格納バッファを識別するバッファ識別情報群を含むノード情報が連続するグラフ型個体構造情報を記憶する個体集団記憶部を有し、グラフ型個体構造を用いて進化計算を行なう進化計算システムとなるコンピュータに、以下の手順を実行させるためのプログラム
(1)個体集団記憶部に含まれる個体毎に、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報によって識別されるファンクション実行部が条件判定を行なう場合には、その判定結果に基づいてノード情報に含まれる複数の連結先ノード識別情報のうちいずれかにより次に処理するノードを選択する制御系演算と、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報によって識別されるファンクション実行部がデータ加工を行なう場合には、ノード情報に含まれるバッファ識別情報によって特定される取得バッファから取得したデータを加工し、加工結果をノード情報に含まれるバッファ識別情報によって特定される格納バッファに書き込み、ノード情報に含まれる所定の連結先ノード識別情報により次に処理するノードを選択する関数系演算を、順次選択されるノード毎に実行し、当該個体のグラフ型個体構造情報に含まれるノード情報に含まれる演算子識別情報が完了を示す場合に、いずれかのバッファのデータを演算結果データとし、当該演算結果データと、学習用目標データを比較して、個体毎の適応度を計算する適応度計算手順
(2)適応度に基づいて、個体集団から個体を選択する個体選択手順
(3)選択した個体のグラフ型個体構造情報に対して、複数の個体間で一部の情報を交換する交叉処理、あるいは一部の情報を変化させる突然変異処理を行い、次世代の個体集団の要素となる各個体のグラフ型個体構造情報を求め、個体集団記憶部に記憶させる生殖手順。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【公開番号】特開2008−197867(P2008−197867A)
【公開日】平成20年8月28日(2008.8.28)
【国際特許分類】
【出願番号】特願2007−31592(P2007−31592)
【出願日】平成19年2月13日(2007.2.13)
【出願人】(504182255)国立大学法人横浜国立大学 (429)
【公開日】平成20年8月28日(2008.8.28)
【国際特許分類】
【出願日】平成19年2月13日(2007.2.13)
【出願人】(504182255)国立大学法人横浜国立大学 (429)
[ Back to top ]