(57)【要約】【課題】  人工生命において、生成された空間的な構造により特定の機能を発揮させる仮想マシンを生成するプログラミングを可能とする仮想マシン生成装置を提供する。【解決手段】  ＣＰＵ１２０は、共有結合で結合する１次元のノード鎖を、（機能文字＋テンプレート文字）という文字列をもつ１個のノードに変換し（凝集）、各ノードに所定のテンプレート記号が含まれるとその直後の特定種類のエッジを切断する。さらに、相補的なテンプレート文字の組に応じて特定種類のエッジもしくは他の種類のエッジを張る。生成したノードクラスタは、機能文字に対応する処理をトークンに従って実行するデータフローマシンとして機能する。【選択図】        図１０
2007048199.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェア命令に対応する機能記号または他のノードとの結合を規定するためのテンプレート記号のいずれかに各々が対応する複数のノードの情報を格納するための第１の記憶手段と、
各前記機能記号と対応するソフトウェア命令との対応規則ならびに前記テンプレート記号間における結合生成規則を格納するための第２の記憶手段と、
特定種類の結合で１次元的に結合された各ノードにおいて、隣接するノードの列を機能記号の直前で区切り、区切られた部分ノード鎖を、各々、機能記号とテンプレート記号とを一体とした属性を有する１個の凝集ノードに変換させる凝集処理手段と、
前記結合生成規則に基づいて、前記特定種類の結合もしくは他の種類の結合を前記凝集ノード間に新たに生成してノードクラスタを生成するための結合生成手段と、
前記ノードクラスタ中の前記凝集ノード間で、前記特定種類の結合を介してトークンを伝達させ、データ駆動型演算器としての処理を実行させるための演算処理制御手段とを備える、仮想マシン生成装置。
【請求項２】
前記他の種類の結合は、
前記凝集ノードと前記ソフトウェア命令の処理対象とするノードとを結合する第１種類の結合と、
前記複数のノードのうち、各ノードについて隣接するノード間でのみ生成される局所的な第２種類の結合と、前記第１種類および前記第２種類の結合の発生可能性を保持するための第３種類の結合とを含み、
前記第３種類の結合でのノード間の結合を所定の規則にしたがって、各タイムステップでつなぎ変える処理を行なう局所結合変更手段をさらに備え、
前記データ駆動型演算器内の凝集ノードは、前記処理対象とするノードと前記データ駆動型演算器内の凝集ノードとを結合する前記第１種類の結合を、前記第２種類の結合により前記凝集ノードと結合している他の処理対象とするノードとの間の前記第１種類の結合に置き換える機能を有する凝集ノードを含む、請求項１記載の仮想マシン生成装置。
【請求項３】
仮想マシン生成処理をコンピュータに実行させるための仮想マシン生成プログラムであって、
ソフトウェア命令に対応する機能記号または他のノードとの結合を規定するためのテンプレート記号のいずれかに各々が対応する複数のノードの情報を格納するステップと、
各前記機能記号と対応するソフトウェア命令との対応規則ならびに前記テンプレート記号間における結合生成規則を格納するステップと、
特定種類の結合で１次元的に結合された各ノードにおいて、隣接するノードの列を機能記号の直前で区切り、区切られた部分ノード鎖を、各々、機能記号とテンプレート記号とを一体とした属性を有する１個の凝集ノードに変換させるステップと、
各前記凝集ノードの中の前記テンプレート記号に所定のテンプレート記号が含まれている場合、当該凝集ノードの直後の特定種類のエッジを切断するステップと、
前記結合生成規則に基づいて、前記特定種類の結合もしくは他の種類の結合を前記凝集ノード間に新たに生成してノードクラスタを生成するステップと、
前記ノードクラスタ中の前記凝集ノード間で、前記特定種類の結合を介してトークンを伝達させ、データ駆動型演算器としての処理を実行させるステップとを、コンピュータに実行させる、仮想マシン生成プログラム。
【請求項４】
前記他の種類の結合は、
前記凝集ノードと前記ソフトウェア命令の処理対象とするノードと結合する第１種類の結合と、
前記複数のノードのうち、各ノードについて隣接するノード間でのみ生成される局所的な第２種類の結合と、前記第１種類および前記第２種類の結合の発生可能性を保持する多々目の第３種類の結合とを含み、
前記第３種類の結合でのノード間の結合を所定の規則にしたがって、各タイムステップでつなぎ変える処理を行なうステップをさらにコンピュータに実行させ、
前記データ駆動型演算器内の凝集ノードは、前記処理対象とするノードと前記データ駆動型演算器内の凝集ノードとを結合する前記第１種類の結合を、前記第２種類の結合により前記凝集ノードと結合している他の処理対象とするノードとの間の前記第１種類の結合に置き換える機能を有する凝集ノードを含む、請求項３記載の仮想マシン生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、化学的遺伝的なアルゴリズムを用いて、ソフトウェアとして機能を実現できる仮想マシンを生成することが可能な仮想マシン生成装置および仮想マシン生成プログラムに関し、より特定的には、遺伝情報からデータフローマシンとして動作する仮想マシンを生成することが可能な仮想マシン生成装置および仮想マシン生成プログラムに関する。
【背景技術】
【０００２】
「人工生命」は大まかに言って、生命進化のお膳立てをコンピュータやその他の人工的な媒質の中に用意して、そこに観察される生命ライクな振舞いを通して、生命をより深く(構成論的に)理解したり、工学的なシステムの設計を行なうことを目的として研究されている。
【０００３】
最近ではその一分野として、原始地球で起こった化学進化のための条件を用意し、細胞や遺伝情報の進化を起こさせようとする「人工化学」の研究が試みられている（たとえば、非特許文献１）。
【０００４】
２００３年、鈴木らは人工化学のために用意しなければならない環境を検討し、それが大きく次の５つの要素から成ると提案した（たとえば、非特許文献２）。
【０００５】
・情報的空間
・要素シンボル
・シンボルの移動ルール
・シンボル間の反応ルール
・処理を上位から補正／指導するマネージャー
この内、シンボルを入れる空間とシンボル移動のルールは人工環境の底辺を成す最も基本的な枠組みであるが、従来の人工生命／化学の研究ではこの空間表現のために次のようないくつかのツールを用いてきた。
【０００６】
１）コアメモリ等の１次元アドレス空間（たとえば、非特許文献３）、
２）セルオートマタに代表される２／３次元ラティス空間（たとえば、非特許文献４）、
３）囲い込まれたシンボル間の順序を全く考慮しないタンク構造（たとえば、非特許文献５）。
【０００７】
しかしながらこれらの表現方法にはどれも一長一短があり、自己組織的な壁の形成やシンボルの移動／結合を柔軟に表現する枠組みにはなっていなかった。
【０００８】
本願の発明者は、この問題に対して、シンボル間の空間的な位置関係を純粋にネットワークで表現するネットワーク人工化学（Network Artificial Chemistry ：ＮＡＣ）を提案した（たとえば、非特許文献６，７，８）。ＮＡＣで用いるネットワークはノードとエッジから成るグラフであり、ノードは分子や原子クラスタを、エッジはそれらの間の衝突／結合の関係をそれぞれ抽象的に表現している。エッジは強さの異なる何種類かのエッジに区別され、弱いエッジはあらかじめ用意された受動的ルールによって時々刻々つなぎ変えられる。このような関係性の中から、強いエッジがノードやクラスタの持つ能動的働きにより形成される。そして、ＮＡＣにおいてノード鎖の複製、壁の形成が行われうることが示された。
【非特許文献１】Dittrich, P., Ziegler, J., Banzhaf, W.:”Artificial chemistries-a review.” Artificial Life 7 (2001) 225-275
【非特許文献２】Suzuki, H., Ono, N., Yuta, K.: Several necessary conditions for the evolution of complex forms of life in an artificial environment. Artificial Life 9(2) (2003) 537-558
【非特許文献３】Suzuki, H.: An approach to biological computation: unicellular core-memory creatures evolved using genetic algorithms. Artificial Life 5 N.4 (1999) 367-386
【非特許文献４】Langton, C.G.: Self-reproduction in cellular automata. Physica D 10 (1984) 135-144
【非特許文献５】Suzuki, Y., Tanaka, H.: Chemical evolution among artificial proto-cells. In: Bedau, M.A. et al. (eds.): Artificial Life VII: Proceedings of the Seventh International Conference on Artificial Life, MIT Press,Cambridge (2000) 54-63
【非特許文献６】Suzuki, H.: Artificial chemistry on small-world networks.(スモールワールド・ネットワークに基づく人工化学システムの提案) In: 2004 年度人工知能学会全国大会（第18回）論文集2H4-03
【非特許文献７】Suzuki, H.: Spacial representation for artificial chemistry based on small-world networks. In: Pollack, J., Bedau, M., Husbands, P., Ikegami, T., Watson, R.A.(eds.): Proceedings of the Ninth International Conference on the Simulation and Synthesis of Living Systems (Artificial Life IX) (2004) 507-513
【非特許文献８】Suzuki, H.: Network artificial chemistry - molecular interaction represented by a graph. In: Bedau, M., Husbands, P., Hutton, T., Kumar, S., Suzuki, H. (eds.): Workshop and Tutorial Proceedings of the Ninth International Conference on the Simulation and Synthesis of Living Systems (Alife IX) (2004) 63-70
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、現実の生命では、アミノ酸は、単純な１次元構造ではなく、所定の３次元構造を有することで、初めて酵素としての機能を果たすことが知られている。ところが、上述したような従来のＮＡＣにおいては、人工生命を表現するためのノードとエッジから成るグラフに対して、現実の生命に対応して、平面的または立体的な構造を持たせて特定の機能を発揮させるために、いかなる手法を用いればよいかが明らかでないという問題点があった。
【００１０】
本発明の目的は、人工生命において、空間的な構造を生成させるとともに、生成された空間的な構造により特定の機能を発揮させる仮想マシンを生成するプログラミングを可能とする仮想マシン生成装置および仮想マシン生成プログラムを提供することである。
【課題を解決するための手段】
【００１１】
この発明のある局面に従うと、仮想マシン生成装置であって、ソフトウェア命令に対応する機能記号または他のノードとの結合を規定するためのテンプレート記号のいずれかに各々が対応する複数のノードの情報を格納するための第１の記憶手段と、各機能記号と対応するソフトウェア命令との対応規則ならびにテンプレート記号間における結合生成規則を格納するための第２の記憶手段と、特定種類の結合で１次元的に結合された各ノードにおいて、隣接するノードの列を機能記号の直前で区切り、区切られた部分ノード鎖を、各々、機能記号とテンプレート記号とを一体とした属性を有する１個の凝集ノードに変換させる凝集処理手段と、結合生成規則に基づいて、特定種類の結合もしくは他の種類の結合を凝集ノード間に新たに生成してノードクラスタを生成するための結合生成手段と、ノードクラスタ中の凝集ノード間で、特定種類の結合を介して論理値としてのトークンを伝達させ、データ駆動型演算器としての処理を実行させるための演算処理制御手段とを備える。
【００１２】
好ましくは、他の種類の結合は、凝集ノードとソフトウェア命令の処理対象とするノードとを結合する第１種類の結合と、複数のノードのうち、各ノードについて隣接するノード間でのみ生成される局所的な第２種類の結合と、第１種類および第２種類の結合の発生可能性を保持するための第３種類の結合とを含み、第３種類の結合でのノード間の結合を所定の規則にしたがって、各タイムステップでつなぎ変える処理を行なう局所結合変更手段をさらに備え、データ駆動型演算器内の凝集ノードは、処理対象とするノードとデータ駆動型演算器内の凝集ノードとを結合する第１種類の結合を、第２種類の結合により凝集ノードと結合している他の処理対象とするノードとの間の第１種類の結合に置き換える機能を有する凝集ノードを含む。
【００１３】
好ましくは、仮想マシン生成処理をコンピュータに実行させるための仮想マシン生成プログラムであって、ソフトウェア命令に対応する機能記号または他のノードとの結合を規定するためのテンプレート記号のいずれかに各々が対応する複数のノードの情報を格納するステップと、各機能記号と対応するソフトウェア命令との対応規則ならびにテンプレート記号間における結合生成規則を格納するステップと、特定種類の結合で１次元的に結合された各ノードにおいて、隣接するノードの列を機能記号の直前で区切り、区切られた部分ノード鎖を、各々、機能記号とテンプレート記号とを一体とした属性を有する１個の凝集ノードに変換させるステップと、各凝集ノードの中のテンプレート記号に所定のテンプレート記号が含まれている場合、当該凝集ノードの直後の特定種類のエッジを切断するステップと、結合生成規則に基づいて、特定種類の結合もしくは他の種類の結合を凝集ノード間に新たに生成してノードクラスタを生成するステップと、ノードクラスタ中の凝集ノード間で、特定種類の結合を介してトークンを伝達させ、データ駆動型演算器としての処理を実行させるステップとを、コンピュータに実行させる。
【００１４】
好ましくは、他の種類の結合は、凝集ノードとソフトウェア命令の処理対象とするノードと結合する第１種類の結合と、複数のノードのうち、各ノードについて隣接するノード間でのみ生成される局所的な第２種類の結合と、第１種類および第２種類の結合の発生可能性を保持する多々目の第３種類の結合とを含み、第３種類の結合でのノード間の結合を所定の規則にしたがって、各タイムステップでつなぎ変える処理を行なうステップをさらにコンピュータに実行させ、データ駆動型演算器内の凝集ノードは、処理対象とするノードとデータ駆動型演算器内の凝集ノードとを結合する第１種類の結合を、第２種類の結合により凝集ノードと結合している他の処理対象とするノードとの間の第１種類の結合に置き換える機能を有する凝集ノードを含む。
【発明を実施するための最良の形態】
【００１５】
以下、図面を参照して本発明の実施の形態について説明する。
（本発明のシステム構成）  
図１は、本発明の仮想マシン生成装置１００の一例の外観を示す図である。
【００１６】
すなわち、図１に示した例では、仮想マシン生成装置１００は、一例として、汎用のコンピュータにより実現されるものとしている。
【００１７】
図１を参照して、この仮想マシン生成装置（コンピュータ）１００は、ＣＤ−ＲＯＭ（Compact Disc Read-Only Memory ）等の光学ディスク上の情報を読込むための光学ディスクドライブ１０８およびフレキシブルディスク（Flexible Disk、以下ＦＤ）１１６に情報を読み書きするためのＦＤドライブ１０６を備えたコンピュータ本体１０２と、コンピュータ本体１０２に接続された表示装置としてのディスプレイ１０４と、同じくコンピュータ本体１０２に接続された入力装置としてのキーボード１１０およびマウス１１２とを含む。
【００１８】
図２は、この仮想マシン生成装置１００のハードウェア構成をブロック図形式で示す図である。
【００１９】
図２に示されるように、この仮想マシン生成装置１００を構成するコンピュータ本体１０２は、光学ディスクドライブ１０８およびＦＤドライブ１０６に加えて、それぞれバスＢＳに接続されたＣＰＵ（Central Processing Unit ）１２０と、ＲＯＭ（Read Only Memory) およびＲＡＭ （Random Access Memory）を含むメモリ１２２と、直接アクセスメモリ装置、たとえば、ハードディスク１２４と、ネットワーク２００とデータの授受を行うための通信インタフェース１２８とを含んでいる。光学ディスクドライブ１０８には、たとえばＣＤ−ＲＯＭ１１８が装着される。ＦＤドライブ１０６にはＦＤ１１６が装着される。
【００２０】
なお、ＣＤ−ＲＯＭ１１８は、コンピュータ本体に対してインストールされるプログラム等の情報を記録可能な媒体であれば、他の媒体、たとえば、ＤＶＤ−ＲＯＭ（Digital Versatile Disc）やメモリカードなどでもよく、その場合は、コンピュータ本体１０２には、これらの媒体を読取ることが可能なドライブ装置が設けられる。
【００２１】
本発明の化学的遺伝プログラミング装置の主要部は、コンピュータハードウェアと、ＣＰＵ１２０により実行されるソフトウェアとにより構成される。一般的にこうしたソフトウェアはＣＤ−ＲＯＭ１１８、ＦＤ１１６等の記憶媒体に格納されて流通し、ＣＤ−ＲＯＭドライブ１０８またはＦＤドライブ１０６等により記憶媒体から読取られてハードディスク１２４に一旦格納される。または、当該装置がネットワーク２００に接続されている場合には、ネットワーク上のサーバから一旦ハードディスク１２４にコピーされてもよい。そうしてさらにハードディスク１２４からメモリ１２２中のＲＡＭに読出されてＣＰＵ１２０により実行される。なお、ネットワーク接続されている場合には、ハードディスク１２４に格納することなくＲＡＭに直接ロードして実行するようにしてもよい。
【００２２】
図１および図２に示したコンピュータのハードウェア自体およびその動作原理は一般的なものである。したがって、本発明の最も本質的な部分は、ＦＤ１１６、ＣＤ−ＲＯＭ１１８、ハードディスク１２４等の記憶媒体に記憶されたソフトウェアである。
【００２３】
（人工生命におけるノード鎖の折りたたみ）
以下では、１次元的なノード鎖が「折りたたみ」により「クラスタ」に変換される仕組みについて説明する。
【００２４】
作られたクラスタは強い結合のエッジでまとまり、それらがエッジに沿って互いに「トークン」を流しながら並列動作することでデータフローマシンとして動作する。さらに、ノードの改変、強いエッジのつなぎ変えといったＮＡＣにおける能動的処理も、このデータフローマシンによって行なわれる。
【００２５】
以下で説明する「折りたたみ」は、現実の生命との対比では、遺伝子型（ノード鎖）から表現型（データフローマシン）へのある種の変換処理である。
【００２６】
［ＮＡＣの概要］
まず、本発明の説明の前提として、ＮＡＣの概要について説明しておく。
【００２７】
生化学反応で主役を務める溶質分子たちは、溶媒中を動きまわりながら衝突を繰り返す。この動きは３次元溶液空間の物理特性と各分子の大きさ、形に制約されているが、ＮＡＣではこの制約をネットワークにおけるエッジのつなぎ変え規則に焼直す。
【００２８】
図３は、現実の溶液系とＮＡＣの構成とを比較して示す概念図である。
図３（ａ）は、溶液内の溶質分子を示し、図３（ｂ）は、ＮＡＣを示す。図３（ａ）においては分子の動きは３次元溶液空間によって制約され、図３（ｂ）においてはノードの動きはつなぎ変え則によって制約される。分子ＡとＢ、ＢとＣが互いに衝突していると、次にＡとＣが衝突する確率が高い。つまり、溶液内の溶質分子は、おおざっぱに言って、「空間的に近い」分子、すなわち現在自分が衝突している分子と接触もしくは衝突関係にある分子と次に衝突する確率が高い。ＮＡＣで用いる「つなぎ変え規則」はこの関係を表現する。
【００２９】
図４は、ＮＡＣのエッジの種類を示す概念図である。
以下では、図４に示すように、ＮＡＣのグラフは３種類のエッジを持つものとする。生物になぞらえて、エッジは強い順に共有結合（Covalent:ＣＶ, 有向）、水素結合（Hydrogen：ｈｙ, 有向）、ファンデアワールス結合（van del Waals：ｗａ,無向）と分けられる。
【００３０】
図５は、局所的なつなぎ変え規則を示す概念図である。このような局所的なつなぎ変え規則は、バックグラウンドの処理として、計算の各時間ステップにおいて、ｗａエッジのつなぎ変えを規定するものである。このような処理は、上述したデータフローマシンにより実行される処理ではないので、「受動的つなぎ変え」と呼ぶ。
【００３１】
なお、特に限定はされないが、計算の初期処理として、ネットワークを構成するノードとエッジは、原則として、ランダムに発生させる。ただし、ＮＡＣとして動作させるために必要な処理、たとえば、ノードの改変、強いエッジのつなぎ変えというような処理を実行可能なデータフローマシンに相当するノード鎖については、初期段階で予め生成しておく。
【００３２】
ＮＡＣにおいて、ｗａエッジは次の（１）〜（４）の処理を順番に繰り返すことによりローカルにつなぎ変えられる。
【００３３】
（１）開始ノードＡをネットワークからランダムに選ぶ。
（２）開始ノードＡからｗａエッジによって隣接するノード中、最大度数のノードＢ（停止ノード）を選ぶ。
【００３４】
ここで、「度数」とは、１つのノードから伸びるエッジの個数であって、各ノードごとの属性値である。
【００３５】
（３）開始ノードＡからｗａエッジによって所定の距離（たとえば、エッジ２個分または３個分の距離）にあるノード中、最小度数のノードＣ（新停止ノード）を選ぶ。
【００３６】
（４）エッジＡ−Ｂを切断し、エッジＡ−Ｃを新たに生成する。
このつなぎ変え規則のもとではグラフはスモールワールド性の強いものへ、また度数分布が一様な（ある種のレギュラー性を持つ）ものへと進化する。
【００３７】
なお、（４）のエッジのつなぎ変えにおいては、ノードに予め「親水性」「疎水性」のいずれかの属性を割り当てておき、結合の条件としては親−親、疎−疎、親−疎の順に結合が生じ易いように定めておくこともできる。この場合は、同一水特性のノードほど結合しやすいので、「親水性」のノードと「疎水性」のノードとの間に境界が発生し、「膜」の発生に対応する変化が、ネットワーク中に生じることになる。
【００３８】
［ノード鎖の計算論的折りたたみ］
以下では、さらに、上述したような「受動的つなぎ変え」が常時実行されていることを前提に、さらに、特定のノード鎖が折りたたまれて、データフローマシンが生成される過程について説明する。
【００３９】
図６は、ＮＡＣ中での１次元の共有結合によるノード鎖を示す図である。
ＮＡＣ中で遺伝情報は、図６に示されるようなノード鎖によって表現される。各ノードは文字または文字列を持っており、それらは機能文字（ａ，ｂ，ｃ，…）とテンプレート文字（０，１，２，…）から構成される。鎖は方向を持ち、ＣＶエッジによって順につながっており、鎖に沿っての文字列の並びが遺伝情報となる。図６の例では、遺伝情報は、「ａ０１ｃａ３２…」である。機能文字はそれぞれあらかじめ定義された単位機能を持つが、それらはノード鎖のままでは動作しえない。ここで、「単位機能」とは、プログラムとして機能する際の命令に相当する。
【００４０】
以下では、とりあえず、説明の簡単のために、このようなＣＶエッジで結合されたノード鎖は、初期処理において、予め設定されているものとして説明する。
【００４１】
図７は、折りたたみの処理を説明するための概念図である。
図６に示したようなノード鎖は、図７に示されるような処理を経て折りたたまれる。
【００４２】
まず「凝集（agglomeration）」により、隣接するノードの列は機能文字の直前で区切られ、区切られた部分ノード鎖は（ｎ３３５）（ａ１１２２）といったまとまった文字列をもつ１個のノードに変換される（折りたたみ規則１）。その後、凝集後のノード鎖のすべてのノードペアの間にｗａエッジが張られ（以下、この処理をタングリング（tangling）と呼ぶ）、「折りたたみ」のための準備が整う。
【００４３】
「折りたたみ（folding）」は、ｃｖエッジの切断と生成、およびｈｙエッジの生成からなる。
【００４４】
まず各ノードの中のテンプレート文字に注目し、そこに「５」が含まれていたらその直後のＣＶエッジを切断する（折りたたみ規則２）。図７では、「ｎ３３５」から出るＣＶエッジが除去される。
【００４５】
またテンプレート文字０，１，２，３は「０←→１」、「２←→３」の関係で相補的にマッチングするものとし、マッチングしたテンプレートをもつノードの間にはＣＶエッジ（０←→１の関係のとき）もしくはｈｙエッジ（２←→３の関係のとき）が新たに張られる。エッジの向きは０で始まるテンプレートから１で始まるテンプレートへ、２で始まるテンプレートから３で始まるテンプレートへとし、各々その向きにＣＶもしくはｈｙエッジが生成される（折りたたみ規則３）。
【００４６】
図７の例では、００から１１へＣＶエッジが、２２から３３へｈｙエッジが、すでに存在していたエッジに加えて新たに生成されている。
【００４７】
なお、上述した「折りたたみ規則１〜３」はあくまでも例示であり、より一般的には、以下のように表現される。
【００４８】
前提条件：複数種類あるエッジのうち特定種類のエッジ（ＣＶエッジ）で１次元的に結合された各ノードには、データフローマシンとして動作する場合の機能を表現するための機能記号と、折りたたみを行う際の結合関係を規定するためのテンプレート記号のいずれかが割り当てられている。
【００４９】
折りたたみ規則１：折りたたみ処理では、まず、隣接するノードの列は機能記号の直前で区切られ、区切られた部分ノード鎖は（機能記号＋テンプレート記号）というまとまった文字列をもつ１個のノードに変換される。
【００５０】
折りたたみ規則２：各ノードの中のテンプレート記号に注目し、そこに所定のテンプレート記号が含まれていたらその直後の特定種類のエッジを切断する。
【００５１】
折りたたみ規則３：あるテンプレート記号は、他のテンプレート記号との間で相補的にマッチングする関係が予め定められているものとし、マッチングしたテンプレートをもつノードの間に、相補的なテンプレート文字の組に応じて特定種類のエッジもしくは他の種類のエッジが新たに張られる。このとき、「エッジの向き」についても、相補的にマッチングするテンプレート記号のうち、エッジの起点となるテンプレート記号がいずれであり、エッジの終点となるテンプレート記号がいずれであるかも予め規定されている。
【００５２】
後に説明するように、ノードの属性、エッジの種類、エッジの結合関係等の情報は、たとえば、ハードディスク１２４内に各ノード毎に格納されている。また、機能文字と機能（対応する演算処理）、テンプレート文字の相補関係などもテーブルとして、ハードディスク１２４に格納されているものとする。ＣＰＵ１２０は、これらの情報に基づいて、上記折りたたみ規則１〜３に従い、折りたたみ処理を行なう。
【００５３】
［データフロークラスタの動作］
データフロークラスタ内のノードは、ＣＶエッジに沿ってトークンを流しながら並列動作し、これにより各データフロークラスタ（データフローマシン）は、データ駆動型演算器として機能する。トークンを受け取ったノードは発火し、トークン値が「真（true）」の場合に限り、機能文字（ａ，ｂ，ｃ，…）がもつルーチンを実行する。その後ノードは、発火の有無に関わらずトークンを次のノードに受け渡す。
【００５４】
図８は、スプリアターゼ（分裂酵素）として機能するデータフローマシンの例を説明するための概念図である。
【００５５】
図７で説明した折りたたみ処理によって生じたデータフローマシンの場合、図８に示すように、（ａ１１２２）（ｄ００２２）の２つのノードがＣＶエッジでつながれており、それらの間をトークンが行き来して動作が進む。ノード（ａ１１２２）はｈｙエッジで指し示されるノード（ｎ３３５）（活性部位）に働きかけ、ノード（ｎ３３５）を起点とするｈｙエッジを任意の隣接ノードにつなぎ変える。ここで「隣接」とはｗａエッジによってノード（ｎ３３５）ノードにつながれたものを指す。
【００５６】
一方、ノード（ｄ００２２）はノード（ｎ３３５）がｈｙエッジによって指しているノードに働きかけ、その水特性を疎水性に変更する働きをもつ。このようにこのデータフロークラスタは、ノード（ｎ３３５）を活性部位にもち、その部分が他のノードと次々にぶつかりながら相手ノードの水特性を疎水性に変換していく能力をもつ。従って、親水性のグラフの中でこれが動作すると油性分子（疎水性分子）がどんどん生産され、細胞分裂を引き起こす要因となる。
【００５７】
（折りたたみ処理のフロー）
以下では、ＣＰＵ１２０によって、実行される折りたたみ処理について、さらに詳しく説明する。
【００５８】
図９は、上述したようにハードディスク１２４に格納される各ノードｎｉごとの、ノードの属性、エッジの種類、エッジの結合関係、トークンの管理の各情報を格納するデータテーブルを説明するための図である。
【００５９】
図９に示すように、このデータテーブルは、ノードｎｉについて、ノードに対応する機能文字、または、テンプレート文字を特定するための情報を含む。
【００６０】
さらに、データテーブルは、他のノードとの結合状態を示すために、エッジの種類ごとに結合先を示すポインタを格納している。このポインタは、結合する相手のノードを特定するための情報、特に限定されないが、たとえば、結合相手のノードに対応したデータテーブルの格納位置を表すアドレスである。
【００６１】
図９において、たとえば、共有結合エッジＣＶについては、このノードｎｉを終点とする（ノードｎｉに向かう）結合（以下、総称してエッジＣＶ０と呼ぶ）について、その結合先を示すポインタＣＶＲと、このノードｎｉを起点とする（ノードｎｉから指す方向の）結合（以下、総称してエッジＣＶ１と呼ぶ）について、その結合先を示すポインタＣＶとを含んでいる。図９では、ポインタＰＣＶ０１，ＰＣＶ０２で示される他のノードからこのノードｎｉに向かう共有結合エッジが存在するとともに、このノードｎｉからポインタＰＣＶ１１で示されるノードに向かう共有結合エッジが存在することを示している。
【００６２】
他の種類の結合エッジである水素結合エッジｈｙ、ファンデルワールス結合エッジｗａについても、共有結合エッジＣＶと同様の結合関係を特定するための情報が格納されている。
【００６３】
なお、図９のテーブルは、結合の本数についてはあくまで例示であり、結合の最大個数も、状況に応じて、増加させることができる。
【００６４】
さらに、図９のデータテーブルには、このノードｎｉに渡されたトークンについて管理を行なうための情報も格納されている。
【００６５】
上述したように、トークンはＣＶエッジを介して伝達される。したがって、トークンデータの入出力管理データの格納領域には、このノードｎｉを終点とする（このノードに向かう）ＣＶエッジの結合先のノードを特定するための情報ＣＶＲを格納する領域と、共有結合エッジを介して、各ＣＶエッジからこのノードｎｉにトークンが伝達されているかを表す値（真／偽（Ｔ／Ｆ））ＴＩを示す情報を格納する領域と、このノードｎｉに伝達されたトークンの値（真／偽（Ｔ／Ｆ））ＴＩＶを一時格納するための領域と、このノードｎｉが入力されたトークンにより発火したか（発火するとセット状態となる）とトークンの送出を行なったか（送出するとリセット状態となる）を示す情報（TokenOut）と、このノードｎｉに結合する他のノードが、このノードから出力される出力トークンの値（TokenOutValue）とを参照するための領域とが設けられる。
【００６６】
図１０は、このような折りたたみ処理とデータフローマシンの処理の流れを説明するためのフローチャートである。
【００６７】
図１０を参照して、ＣＰＵ１２０は、初期設定として、ネットワークを構成するノードとエッジを、ランダムに発生させて準備する（ステップＳ１００）。ただし、ＮＡＣとして動作させるために能動的な処理、たとえば、強いエッジのつなぎ変え、折りたたみというような処理を実行可能なデータフローマシンに相当するノード鎖については、この初期段階で予め生成しておく。
【００６８】
続いて、ノードを指定するための変数ｎｉの値が１に設定される（ステップＳ１０２）。次にｉｎ番目のノードがＣＶエッジでつながるノード鎖のヘッドであるか否かが判断され（ステップＳ１０４）、ヘッドである場合には、折りたたみのための準備として、図７で説明したような凝集、タングリング、切断処理が行なわれる（ステップＳ１０６）。このような折りたたみの準備のための処理も、データフローマシンにより行なわせることが可能である。
【００６９】
ここで、「ヘッド」とは、自身が起点となるＣＶエッジを有するが、自身が終点となるＣＶエッジを有さないノードをいう。
【００７０】
一方、ヘッドでない場合は、処理は直接ステップＳ１０８に移行する。
ステップＳ１０８においては、全てのノードについての処理が終了したかが判断され、終了していなければ、変数ｎｉの値が１だけインクリメントされて（ステップＳ１１０）、処理はステップＳ１０４に復帰する。
【００７１】
一方、全てのノードに対して処理が終了した場合は、図７で説明したように、折りたたみのための準備が終わりタングリングによりｗａエッジでつながる全てのノードペアについて、テンプレート文字に従って、ＣＶ結合、またはｈｙ結合が新たに生成する（ステップＳ１１２）。この結合の生成もデータフローマシンにより実現できる。
【００７２】
さらに、受動的なつなぎ変え処理として、全てのノードについてｗａ結合のつなぎ変えが行なわれ（ステップＳ１１４）、折りたたみにより生成されたデータフローマシンでは、全てのノードについて発火ないしトークンの送出が行なわれて（ステップＳ１１６）、データフロークラスタの動作が完了したかが判断される（ステップＳ１１８）。
【００７３】
ステップＳ１１８において、動作が完了していなければ、処理はステップＳ１１２に復帰する。一方、ステップＳ１１８において、データフロークラスタの動作が完了していれば、処理は終了する。
【００７４】
以上のような処理により、ネットワーク内に共有結合でつながる１次元的なノード鎖に対して、折りたたみ処理によるデータフローマシンの生成と、このデータフローマシンにより演算処理が実行される。
【００７５】
［データフローマシンの他の例］
以下では、より複雑な処理を行なうデータフローマシンの例を説明する。すなわち、このようなデータフローマシンに対応するノード鎖が存在すると、折りたたみ処理により、以下のような処理を行なうデータフローマシンが生成されて、動作することが可能である。
【００７６】
図１１は、レプリカーゼ（複製酵素）として動作可能なデータフロークラスタ（データフローマシン）の構成の例を示す図である。
【００７７】
このマシンでは、右側半分にあるＣＶエッジによるループran → cmp →joi → wlk → wlk → ran が中心的な役割を果たす。
【００７８】
以下、その動作の概略を説明する。
このデータフローマシンには、３つの活性部位（活性ノード）Ｐ００１，Ｐ００２、Ｐ００３がある。活性ノードＰ００２は、すでに存在しているＣＶエッジで結合するノード鎖ＮＣのうち、この活性ノードＰ００２のｈｙ結合が順番に指していく各ノードの情報を読み取る機能を有する。一方、活性ノードＰ００１とＰ００３とは、この活性ノードがそれぞれｈｙエッジで指すノードをランダムにつなぎ変えながら、活性ノードＰ００２に読み取られたエッジ情報に基づいて、ノード鎖ＮＣの複製となるノード鎖を生成していく機能を有する。
【００７９】
つまり、まず、ノードｒａｎは、自身のｈｙエッジが指す活性ノードＰ００３がｈｙエッジにより結合するノードＲ１０２を各時間ステップでランダムにつなぎ変える（ＤＦ１０２）。つなぎ変えが終了すると、ノードｃｍｐは、ノードｒａｎから、つなぎ変え終了を示すトークンを受け取る。
【００８０】
次に、次にノードｃｍｐは、自身がｈｙエッジで結合する活性ノードＰ００２とＰ００３とが、それぞれｈｙエッジで結合するノードＮＣ１０２とノードＲ１０２とを比較する。ノードｃｍｐは、比較の結果、両者が等価なノードであれば、「Ｔ」のトークンを、異なるノードであれば「Ｆ」のトークンを送出する（ＤＦ１０４）。
【００８１】
ノードｃｍｐが、「Ｆ」のトークンを送出した場合は、次のｊｏｉノードは発火せず、一方、ｉｎｖノードは発火して、トークンの値を反転させ、「Ｔ」のトークンをノードｒａｎに送出する（ＤＦ１０６）。これに応じて、ノードｒａｎは、再び、ノードＰ００３がｈｙエッジで結合するノードをランダムにつなぎ変える。
【００８２】
一方、ステップＤＦ１０４において、ノードｃｍｐが、「Ｔ」のトークンを送出した場合は、次のｊｏｉノードは発火し、ｉｎｖノードは発火しない。
【００８３】
この結果、ノードｊｏｉは、自身がｈｙエッジで結合する活性ノードＰ００１とＰ００３が、それぞれｈｙエッジで結合するノードＲ００１とＲ００２とを共有結合エッジＣＶにより、ノードＲ１０１からＲ１０２に向かう方向に結合する（ＤＦ１０８）。応じて、ノードｃｍｐからは、「Ｔ」トークンが送出されて、次の、ノードｗｌｋが発火する。
【００８４】
ノードｗｌｋは、自身がｈｙエッジで結合する活性ノードＰ００１とＰ００３がｈｙエッジで結合するノードＲ１０１とＲ１０２について、これらの共有結合の方向に結合するノードを１つ分ずらせるようにつなぎ変える。すなわち、活性ノードＰ００１は、ノードＲ１０２とｈｙエッジで結合し、活性ノードＰ００３結合相手がなくなる（ＤＦ１１０）。ノードｗｌｋからは、「Ｔ」トークンが送出されて、次の、ノードｗｌｋが発火する。
【００８５】
次のノードｗｌｋは、自身がｈｙエッジで結合する活性ノードＰ００２が結合するノードをノード鎖ＮＣについて共有結合の方向に結合するノードを１つ分ずらせるようにつなぎ変える。すなわち、活性ノードＰ００２は、ノードＮＣ１０３と結合する（ＤＦ１１２）。ここで、つなぎ変えが正常に行なわれれば、ノードｗｌｋは「Ｔ」トークンを送出して、ノードｒａｎが再び発火する。
【００８６】
一方、ノード鎖ＮＣの終点のノードまで既に複製が終了しており、つなぎ変えが正常に行なわれなければ、ノードｗｌｋは「Ｆ」トークンを送出して、ノードｉｎｖが発火する。
【００８７】
以上の処理により、ノード鎖ＮＣの複製が作成される。
一方、ステップＤＦ１１２において、ノードｗｌｋが「Ｆ」トークンを送出した場合、ノードｉｎｖが発火して２つのノードｎｕｌｌが活性化して、これらのｎｕｌｌノードがｈｙエッジで結合する活性ノードＰ００１とＰ００２のｈｙエッジを切断する（ＤＦ２０４、ＤＦ２０６）。ｈｙエッジの切断が完了すると、ノードｎｕｌｌは、「Ｔ」トークンを送出して、ノードｒａｎが発火する。
【００８８】
ノードｒａｎは、自身がｈｙエッジで結合する活性ノードＰ００２に、ランダムに選んだノードをｈｙエッジで結合する（ＤＦ２０８）。結合が終わると、ノードｒａｎは、「Ｔ」トークンを送出して、ノードｃｖ０？とノードｃｖ１？とが発火する。
【００８９】
ノードｃｖ０？は、自身がｈｙエッジで結合する活性ノードＰ００２に結合するノードにエッジＣＶ０が存在するかを判断し、一方、ノードｃｖ１？は、自身がｈｙエッジで結合する活性ノードＰ００２に結合するノードにエッジＣＶ１が存在するかを判断する（ＤＦ２１０，ＤＦ２１２）。
【００９０】
ノードｃｖ０？は、エッジＣＶ０が存在しない場合、「Ｔ」トークンを送出し、一方、ノードｃｖ１？は、エッジＣＶ１が存在する場合、「Ｆ」トークンを送出する。このとき、ノードｉｎｖが発火して（ＤＦ２１４）、「Ｔ」トークンを送出する。
【００９１】
ノードａｎｄは、ノードｃｖ０？からのトークンとノードｉｎｖからのトークンを受け取って、それらの論理積に応じて、「Ｔ」トークンまたは「Ｆ」トークンを送出する（ＤＦ２１６）。上述した例では、エッジＣＶ０が存在せず、エッジＣＶ１が存在するのであるから、活性ノードＰ００２に現在結合しているノードが、ＣＶ結合でつながるノード鎖のヘッドであることを意味する。この場合は、ノードａｎｄから「Ｔ」トークンが送出されて、ノードｒａｎが発火する。
【００９２】
活性ノードＰ００２に現在結合しているノードが、ＣＶ結合でつながるノード鎖のヘッドでない場合は、ノードａｎｄからは「Ｆ」トークンが送出されて、ノードｉｎｖが発火して「Ｔ」トークンを送出するので（ＤＦ２１８）、再びノードｒａｎが発火する。
【００９３】
一方、ステップＤＦ２１６において、「Ｔ」トークンが送出される場合、つまり、活性ノードＰ００２にヘッドが結合している場合は、発火したノードｒａｎは、自身がｈｙエッジで結合する活性ノードＰ００１がｈｙエッジで結合するノードをランダムにつなぎ変える（ＤＦ２２０）。つなぎ変えが終わると、ノードｒａｎは、「Ｔ」トークンを送出し、ノードｃｍｐが発火する。
【００９４】
ノードｃｍｐは、自身がｈｙエッジで結合する活性ノードＰ００１とＰ００２が結合するノードが等価であれば、「Ｔ」トークンを送出する（ＤＦ２２２）。
【００９５】
ノードｃｍｐが、「Ｔ」トークンを送出すると、これとＣＶエッジで結合するノードｗｌｋが発火する。
【００９６】
一方、ステップＤＦ２２２において、ノードｃｍｐが「Ｆ」トークンを送出すると、ノードｉｎｖが発火して「Ｔ」トークンを送出し（ＤＦ２２４）、再び、ノードｒａｎが発火する。
【００９７】
以上のようにして、ＣＶエッジで結合するノード鎖から、折りたたみ処理により生成されるデータフローマシンにより、ノード鎖の複製というような比較的複雑な処理も、実行させることが可能である。
【００９８】
以上のとおり、本発明では、ネットワーク人工化学の上で動作する能動的マシンとしてのデータフロークラスタを生成することが可能で、それを１次元的なノード鎖から数理的な折りたたみによって構成することができる。
【００９９】
この数理的な折りたたみ処理は生物タンパク質分子の折りたたみになぞらえて設計されたものであり、両者は次のような共通の特徴を有している。
【０１００】
[表現の完全性]  １次元的なシークエンスの違いに応じて様々な形のクラスタが構成できる。生物タンパク質の形が充分なバリエーションを持ちえることはタンパク質の持つ機能、さらに、それによって構成される生物種の多様性によって間接的に示されているが、上述したようなアルゴリズムに基づいてクラスタを構成する場合も、適当なシークエンスさえ用意されれば原理的にいかなるトポロジーのノードクラスタ（部分ネットワーク）でも構成することができる。
【０１０１】
[相補マッチングの利用]  形、もしくは文字の相補的なマッチングを基準にしている。タンパク質の折りたたみは基本的にそれを構成するアミノ酸残基の形や大きさ、物理化学的特性により決まる。この時、一つの基準となるのが残基列間のある種の相補的なマッチングであり、それが良く照合するように折りたたまれれば、出来上がるタンパク質はエネルギー的に安定となる。図７に示した折りたたみはこれを簡略化し数理的に実現したものであると言える。
【０１０２】
なお、以上の説明では、共有結合により結合する１次元のノード鎖については、これを構成するノードおよびそれらを結合するエッジとも、予め与えられているものとして説明した。しかしながら、遺伝情報が、図６に示すようにノードとエッジから構成されている場合に、これらに対して、特に限定されないが、交叉、突然変異というような周知の遺伝的アルゴリズムを適用すれば、初期的なノード鎖から、多様なノード鎖を生成できる。
【０１０３】
たとえば、一例として、このようなノード鎖に対応するデータフローマシンについて、所望の処理対象に対する演算結果の所望の値への近さに応じて順次淘汰を行えば、所望の演算を行うデータフローマシン、つまり、所望のプログラムを、このようなアルゴリズムにより獲得することも可能である。
【０１０４】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【０１０５】
【図１】本発明の仮想マシン生成装置１００の一例の外観を示す図である。
【図２】仮想マシン生成装置１００のハードウェア構成をブロック図形式で示す図である。
【図３】現実の溶液系とＮＡＣの構成とを比較して示す概念図である。
【図４】ＮＡＣのエッジの種類を示す概念図である。
【図５】局所的なつなぎ変え規則を示す概念図である。
【図６】ＮＡＣ中での１次元の共有結合によるノード鎖を示す図である。
【図７】折りたたみの処理を説明するための概念図である。
【図８】スプリアターゼ（分裂酵素）として機能するデータフローマシンの例を説明するための概念図である。
【図９】各ノードｎｉごとの、ノードの属性等を格納するデータテーブルを説明するための図である。
【図１０】折りたたみ処理とデータフローマシンの処理の流れを説明するためのフローチャートである。
【図１１】レプリカーゼ（複製酵素）として動作可能なデータフロークラスタ（データフローマシン）の構成の例を示す図である。
【符号の説明】
【０１０６】
１００  仮想マシン生成装置、１０２  コンピュータ本体、１０４  ディスプレイ、１０６  ＦＤドライブ、１０８  光学ディスクドライブ、１１０  キーボード、１１２  マウス、１１８  ＣＤ−ＲＯＭ、１２０  ＣＰＵ、１２２  メモリ、１２４  ハードディスク、１２８  通信インタフェース、２００  ネットワーク。
【図１】
2007048199.tif 000003
【図２】
2007048199.tif 000004
【図５】
2007048199.tif 000005
【図６】
2007048199.tif 000006
【図７】
2007048199.tif 000007
【図８】
2007048199.tif 000008
【図９】
2007048199.tif 000009
【図１０】
2007048199.tif 000010
【図３】
2007048199.tif 000011
【図４】
2007048199.tif 000012
【図１１】
2007048199.tif 000013