(57)【特許請求の範囲】
【請求項１】
事前に指定された設計目的を満足する回路の構造的設計を遺伝的プログラミングを用いて生成する、コンピュータで繰り返し実施される方法であって、当該方法は、コンピュータのプロセッサで実施されたとき、生成された回路が前記事前に指定された設計目的を満足するまで、
様々なサイズと形状のエンティティのポピュレーション中の各エンティティのための回路であって、それぞれ少なくとも一つの構成要素値を有する複数の種類の構成要素をトポロジ構成内に備えた回路を、各エンティティ内で構成処置を実行することによって、開発するステップと、
各開発された回路の挙動を決定するステップと、
前記各開発された回路の挙動と前記事前に指定された設計目的との比較が前記エンティティのポピュレーションの進化が継続されるべきであることを示すとき、前記エンティティのポピュレーションを進化させるために、プログラムによる遺伝的プログラミングの操作を適用するステップと
を含む、システムに実装された操作を繰り返して呼び出す、前記コンピュータで繰り返し実施される方法。
【請求項２】
事前に指定された設計目的を満足する回路の構造的設計を生成する、コンピュータで繰り返し実施される方法であって、当該方法は、コンピュータのプロセッサで実施されたとき、
各エンティティのための回路を開発するために様々な形とサイズとを有する前記エンティティのポピュレーションの各エンティティ内で構成処置を実行するステップであって、前記回路はトポロジ構成内にそれぞれ少なくとも一つの構成要素値を有する複数の種類の構成要素を含み、前記構成処置の実行は、前記各エンティティのための一つの開発されている回路に構成要素を挿入することを含む、前記ステップと、
各開発された回路の挙動を決定するステップと、
前記各開発された回路の挙動と前記事前に指定された設計目的との比較が前記エンティティのポピュレーションの進化が継続されるべきであることを示すとき、前記エンティティのポピュレーションを進化させるために、プログラムによる遺伝的プログラミングの操作を適用するステップと
を含む、システムに実装された操作を繰り返して呼び出す、前記コンピュータで繰り返し実施される方法。
【請求項３】
事前に指定された設計目的を満足する回路の構造的設計を生成するシステムであって、
様々なサイズと形状のエンティティのポピュレーション中の各エンティティのための回路であって、それぞれ少なくとも一つの構成要素値を有する複数の種類の構成要素をトポロジ構成内に備えた回路を各エンティティ内で構成処置を実行することによって開発する手段と、
各開発された回路の挙動を決定する手段と、
前記各開発された回路の挙動と前記事前に指定された設計目的との比較が前記エンティティのポピュレーションの進化が継続されるべきであることを示すとき、前記エンティティのポピュレーションを進化させるために、プログラムによる遺伝的プログラミングの操作を適用する手段と
を有することを特徴とするシステム。
【発明の詳細な説明】
発明の分野
本発明の分野は、電気回路など複雑な構造の自動設計である。より詳細には、本発明は、コンピュータに実装した遺伝的アルゴリズムを使用して、電気回路など複雑な構造を設計することである。
発明の背景
設計者の要件を満足する複雑な構造の自動設計は、通常人間の知性を必要とすると考えられる困難な課題である。
電気技術者は、しばしばいくつかの設計目的または要件を満足する回路を設計するよう要求される。電気回路は、抵抗、コンデンサ、インダクタ、ダイオード、トランジスタ、変換器、エネルギー源を含めて、非常に様々な異なるタイプの構成要素から構成される。電気回路の個々の構成要素は、回路を形成する特定の「トポロジ」に構成される。
様々なタイプの構成要素が回路のトポロジ構成中の各位置に挿入される。さらに、各構成要素はさらに一組の構成要素値（一般に数字）によって指定（「寸法決定」）される。電気回路の完全な仕様は、そのトポロジ、トポロジ構成中の各位置に挿入すべき構成要素タイプの選択、およびすべてのその構成要素の寸法決定を含む。
回路を設計する場合、目的は、１つまたは複数の観測可能な量（例えば、回路中のあるプローブ・ポイントでのいくつかの時刻またはいくつかの周波数での電圧の観測されるパターン）のいくつかの所望の値を達成することである。しばしば１つまたは複数の追加の考慮事項（例えば、回路中の構成要素の数、構成要素のコストなど）がある。
同様に、機械及び民間技術者は、しばしばいくつかの設計目的または要件を満足する物理構造を設計するよう要求される。電気回路など物理構造は、様々な異なるタイプの構成要素から構成される。これらの個々の構成要素は、全体的な複雑な物理構造を形成する特定のトポロジに構成される。様々なタイプの構成要素がトポロジ構成中の各位置に挿入される。全体的な構造中の各構成要素はさらに一組の構成要素値（一般に数字）によって指定される。例えば、機械技術者は、堅い荷重支持金属ビームや荷重支持フレキシブル・ケーブルなどの構成要素から構成されるトラスとして設計すること望むであろう。その設計目的は、特定の荷重または複数の荷重を支持すること、または各バーまたはケーブル上の応力で堅いバーまたはフレキシブル・ケーブルが破壊されるほど大きくならないようにする要件を満足するものである。最後に、トラス中に含まれる材料の全重量を最小限に抑えるなど、物理構造全体があるコスト要件を満足する追加の設計目的がある。所望のトラスを設計するために、設計者は、構成要素の適切なトポロジ構成（すなわち構成要素の数やどのようにそれらを接続するか）を生成し、トポロジ構成中に挿入すべき構成要素タイプ（すなわち堅いビームやフレキシブル・ケーブル）を選択し、各構成要素ごとに適切な数値（すべてのそれらの厚さ）を選択しなければならない。
上記の電気および機械設計問題ならびに多数の他の分野からの多数の他の設計問題は、設計者が構成要素の適切なトポロジ構成を生成し、トポロジ構成中に挿入すべき構成要素タイプを選択し、全体的な複雑な構造中の各構成要素ごとに適切な数値を選択する必要がある共通の特徴を共有する。
自然界における自然淘汰プロセス
自然界において、生体は、様々な環境中で生き残り、繁栄する非常に様々な構造を示す。生体をそれらの自然環境の要件を満足するように設計する自然界の方法は、複雑な構造を設計するための有用なモデルを与える。
生物中のたいていの構造および挙動はタンパク質の作用反作用の結果である。実際、タンパク質は、生体の構造および機能が主としてタンパク質によって決定されると言えるほど非常に様々な生物構造および挙動の原因である。タンパク質は、アミノ酸の配列から構成されるポリペプチド分子である。タンパク質分子がそこから構成される（文字Ａ、Ｃ、Ｄ、Ｅ、Ｆ、Ｇ、Ｈ、Ｉ、Ｋ、Ｌ、Ｍ、Ｎ、Ｐ、Ｑ、Ｒ、Ｓ、Ｔ、Ｖ、Ｗ、およびＹによって示される）２０個のアミノ酸残基がある。タンパク質分子は、平均約３００個のそのようなアミノ酸残基から構成される（大きいタンパク質は数千個のアミノ酸残基を含む）。単純なバクテリアは１８００個程度の異なるタンパク質とともに生命を維持し、人間は推定１０００００個のタンパク質を有する。
タンパク質は、組織の染色体ＤＮＡ中に含まれる命令および情報に従って製造される。ＤＮＡ（デオキシリボ核酸）は、遺伝情報を伝える能力およびそれ自体の複製の生成用のモデルの役目をする能力を有する長い糸状の生物分子である。この惑星上のすべての既知の生命形態（バクテリア、菌類、植物、動物、人間を含む）は、ＤＮＡ分子に基づいている。自然界では、遺伝子は、遺伝情報がそれによって親から子孫に伝えられる基本的な機能単位である。遺伝子は、デオキシリボ核酸（ＤＮＡ）の分子に沿って特定の場所に現れる。
ＤＮＡ分子に関係するわゆる「遺伝コード」は、ＤＮＡ分子に沿って様々な遺伝子座に現れる４つの可能な値の長いストリング（シーケンス）から構成される。ＤＮＡの場合、４つの可能な値は、アデニン、グアニン、シトシン、チミン（通常それぞれＡ、Ｇ、Ｃ、Ｔと略される）と呼ばれる４つの「ベース」をさす。したがって、ＤＮＡ中の「遺伝コード」はＣＴＣＧＡＣＧＧＴなど長いストリングから構成される。生きた細胞が繁殖するとき、ＤＮＡ中の遺伝コードが読み取られる。３つのＤＮＡベースから構成される（「コドン」と呼ばれる）サブシーケンスは、２０個のアミノ酸の１つを指定する。したがって、遺伝コードは、ＤＮＡ分子中に含まれる情報および命令からタンパク質の構造を指定し、制御するために使用される。
組織は、それぞれ数千個の相互作用するタンパク質を含む生きた細胞から構成され、それらの生命をそれらの環境を処理しようと試みることに費やす。いくつかの組織は、それらの環境の処理を他の組織よりもよく行う。特に、いくつかの組織は、繁殖年齢まで生き延び、そのときそれによりそれらの遺伝構成（すべてのそれらの遺伝子）をそれらの子孫に伝えることができる。自然淘汰は、その特性が繁殖年齢までの生存を容易にする組織がそれらの遺伝構成の全部または一部を子孫に伝えるプロセスである（ダーウィン１８５９年）。ある時間期間および多数の世代にわたって、ポピュレーションは全体として進化し、したがって生き残ったポピュレーション中の個体中の染色体ストリングは、組織がその環境中で生き残るために貢献する特性を永続させる。すなわち、自然淘汰プロセスは、ある時間期間にわたって、それらの環境を効果的に処理するように設計される構造を進化させる傾向がある。
遺伝的アルゴリズム
遺伝的アルゴリズムは、所与の一組の物体を改善する方法を与える。自然淘汰および適者生存のプロセスは、遺伝的アルゴリズムの理論ベースを与える。Ｐｒｏｆｅｓｓｏｒ  Ｊｏｈｎ  Ｈ．Ｈｏｌｌａｎｄ（１９７５）著、Ａｄａｐｔａｔｉｏｎ  ｉｎ  Ａｒｔｉｆｉｃｉａｌ  ａｎｄ  Ｎａｔｕｒａｌ  Ｓｙｓｔｅｍｓは、自然システムならびに人工システムの適合の全体的な数学的理論を要約し、提示するものである。Ｈｏｌｌａｎｄの文献の重要な部分には、生物適合の自然の方法に習ってパターン化される「遺伝的アルゴリズム」が記載されている。後者の作業中、Ｈｏｌｌａｎｄ（１９８６）には、遺伝的アルゴリズムおよび問題を解決するためのバケット・ブリゲート・アルゴリズムを使用した選別システムが記載されている。米国特許出願第４６９７２４２号（Ｈｏｌｌａｎｄ他）および米国特許出願第４８８１１７８号（Ｈｏｌｌａｎｄ他）には、遺伝的アルゴリズムとともに固定長二進ストリングを使用する選別システムが記載されている。
遺伝的プログラミング
「遺伝的プログラミング」（以前は「非線形遺伝的アルゴリズム」または「階層遺伝的アルゴリズム」とも呼ばれた）が文献Ｇｅｎｅｔｉｃ  Ｐｒｏｇｒａｍｍｉｎｇ：Ｏｎ  ｔｈｅ  Ｐｒｏｇｒａｍｍｉｎｇ  ｏｆ  Ｃｏｍｐｕｔｅｒｓ  ｂｙ  Ｍｅａｎｓ  ｏｆ  Ｎａｔｕｒａｌ  Ｓｅｌｅｃｔｉｏｎ（Ｋｏｚａ１９９２）、文献Ｇｅｎｅｔｉｃ  Ｐｒｏｇｒａｍｍｉｎｇ  ＩＩ：Ａｕｔｏｍａｔｉｃ  Ｄｉｓｃｏｖｅｒｙ  ｏｆ  Ｒｅｕｓａｂｌｅ  Ｐｒｏｇｒａｍｓ（Ｋｏｚａ１９９２）および、米国特許出願第４９３５８７７号、第５１３６６８６号、第５１４８５１３号、および第５３４３５５４号に記載されている。
遺伝的プログラミングは、１９７５年にＨｏｌｌａｎｄによって記述された最初の遺伝的アルゴリズムが（性質が染色体に似ている）文字の線形ストリングに基づいて動作したので「非線形」または「階層」と呼ばれるが、遺伝的プログラミングは、様々なサイズおよび形状の階層プログラム・ツリー上で動作する。
遺伝的プログラミングは、様々な分野からの様々な問題を解決するか、またはほぼ解決するコンピュータ・プログラムを進化させることができる。遺伝的プログラミングは、使用できるプログラマティック成分から構成されるランダムに生成されたプログラムの原始分泌から始まり、次いでプログラムの新しい（そしてしばしば改善される）ポピュレーションを繁殖させるために家畜学原理を適用する。繁殖は、ダーウィンの適者生存の原理、クロスオーバの自然に発生する遺伝動作の類似物（性繁殖）、および突然変異を使用して、ドメインと無関係な形で行われる。クロスオーバ動作は有効な子孫プログラム（一組の成分中の所与の閉鎖）をシンタックス的に生成するように設計される。遺伝的プログラミングは、コンピュータ・プログラムの明示的なハイレベル記号表示をＨｏｌｌａｎｄの遺伝的アルゴリズムに関連する学習の最適に近い効率と組み合わせる。所与の問題を解決（またはほぼ解決）するプログラムは、しばしばこのプロセスから発生する。
文献Ｇｅｎｅｔｉｃ  Ｐｒｏｇｒａｍｍｉｎｇ  ＩＩ：Ａｕｔｏｍａｔｉｃ  Ｄｉｓｃｏｖｅｒｙ  ｏｆ  Ｒｅｕｓａｂｌｅ  Ｐｒｏｇｒａｍｓ（Ｋｏｚａ１９９４）で証明されているように、遺伝的プログラミングは、主プログラムおよび１つまたは複数の再使用可能なパラメータ化された階層的と呼ばれるサブプログラム（自動定義関数またはＡＤＦと呼ばれる）から構成されるマルチパート・プログラムを進化させることができる。
遺伝的プログラミングは、以下のステップを実行することによって問題を解決するコンピュータ・プログラムを繁殖させる。
（１）問題の関数および終端のランダムな組成の初期ポピュレーションを生成するステップ（例えばコンピュータ・プログラム）
（２）終了基準が満足されるまで以下のサブステップを繰り返し実施するステップ
（Ａ）ポピュレーション中の各プログラムを実行し、それに適応基準を使用して適応度値を割り当てるステップ
（Ｂ）以下の動作を適用することによってコンピュータ・プログラムの新しいポピュレーションを生成するステップ。動作は、適応度に基づく確率を有するポピュレーションから選択されるコンピュータ・プログラムに適用される。
（ｉ）繁殖。既存のプログラムを新しいポピュレーションにコピーする。
（ｉｉ）クロスオーバ。２つの既存のプログラムのランダムに選択された部分を再結合することによって新しいポピュレーション用の新しい子孫プログラムを生成する。
（ｉｉｉ）突然変異。１つの既存のプログラムのランダムに選択された部分をランダムに突然変異させることによって新しいポピュレーション用の新しい子孫プログラムを生成する。
（３）結果選定の方法（例えば、今まで最も良い個体）によって識別されたプログラムは、実行用の遺伝的アルゴリズムの結果に選定される。この結果は、問題に対する解決策（またはおおよその解決策）になる。
他の遺伝的プログラミング・プロセスは、「順列」、「ビルディング・ブロックを定義する」（「カプセル化」とも呼ばれる）、後述するアーキテクチャ変更操作（オペレーション）など追加の操作を使用する。
ニューラル・ネットワークの細胞符号化
ニューラル・ネットワークは１つまたは複数の神経処理単位（ニューロン）から構成される構造である。ニューラル・ネットワークは線ラベル付けされ、点ラベル付けされた有向グラフによって表示できる。グラフの点は、ニューラル・ネットワーク中の神経処理単位、入力点、または出力点である。線は、２つの点間の重み付けされた接続を表すために数字重みでラベル付けされる。神経処理単位は、処理単位のしきい値およびバイアスを示す２つの数字でラベル付けされる。
ニューラル・ネットワーク中の構成要素の唯一のタイプは神経処理単位である。ニューラル・ネットワークは、将来の時刻でのネットワークの状態が現在の時刻でのネットワークの状態と現在の時刻でのネットワークへの入力に依存する意味でダイナミックなシステムである。ニューラル・ネットワーク中には情報の方向性流れがある。フィードフォワード・ニューラル・ネットワークでは、情報は、ネットワークを表す有向グラフ中のサイクルなしに入力からネットワークまで、ニューロンを介して、ネットワークの出力まで流れる。再帰ニューラル・ネットワークでは、ネットワーク中の１つまたは複数の個々のニューロンの特定の時刻での出力は、ネットワークを表す有向グラフ中にサイクルを生成するために他の神経処理単位の将来の時刻での入力になるように返送される。
固定長文字ストリング上で動作する従来の遺伝的アルゴリズムは、接続用の数字重みならびにニューラル・ネットワークのしきい値およびバイアスを発見するために重みベクトルの高度線形多次元探索空間を探索する方法を与える。しかしながら、ニューラル・ネットワークのアーキテクチャは予め指定されなければならない（ＳｃｈａｆｆｅｒおよびＷｈｉｔｌｅｙ１９９２年）。遺伝方法を使用したアーキテクチャの発見を自動化する場合の難点は、遺伝的アルゴリズムによって実行される演算の種類を受け入れるニューラル・ネットワークを表す線ラベル付けされ、点ラベル付けされたグラフ用の順応性のある表示を見つけることに焦点を置いた。
ある初期の研究では、「ビルディング・ブロックを定義する」（「カプセル化」とも呼ばれる）遺伝的プログラミングの操作（ＫｏｚａおよびＲｉｃｅ１９９１年）を使用して、ニューラル・ネットワークのアーキテクチャならびに重みを発見する問題に遺伝的プログラミングを適用した。文献「Ｔｈｅ  Ａｌｇｏｒｉｔｈｍｉｃ  Ｂｅａｕｔｙ  ｏｆ  ＰｌａｎｔｓにはＬｉｎｄｅｎｍａｙｅｒシステム（Ｌシステム）および文法書き換え規則が記載されている。これらのシステムは、初期（またはエンブリオニック）パターンに書き換え規則を適用することによって複雑なパターンを開発する方法を与える。
彼のＣｅｌｌｕｌａｒ  Ｅｎｃｏｄｉｎｇ  ｏｆ  Ｇｅｎｅｔｉｃ  Ｎｅｕｔｒａｌ  Ｎｅｔｗｏｒｋｓ、Ｆｒｅｄｅｒｉｃ  Ｇｒｕａｕ（１９９２ａ）には、遺伝的プログラミングを使用して、ニューラル・ネットワーク中の個々のニューロンの重み、しきい値、およびバイアスとともに、ニューラル・ネットワークのアーキテクチャを同時に進化させる細胞符号化と呼ばれる技法が記載されている。この技法では、ポピュレーション中の各個々のプログラム・ツリーは、単一のニューロンから構成される非常に単純なニューラル・ネットワークから完全なニューラル・ネットワークを開発する仕様である。遺伝的プログラミングは、当該の問題を解決することができるニューラル・ネットワークを進化させるためにこれらのネットワーク構成プログラム・ツリーのポピュレーションに適用される。Ｇｒｕａｕ１９９２ｂ、１９９３、１９９４ａ、１９９４ｂも参照されたい。
細胞符号化では、各プログラム・ツリーは構成関数の構成物である。プログラム・ツリーは遺伝子型であり、ツリーの命令に従って構成されたニューラル・ネットワークは表現型である。ポピュレーション中の個々のプログラム・ツリーの適応度は、プログラム・ツリー中含まれる命令に従って構成されたニューラル・ネットワークが所望のタスクをどのくらいうまく実行するかによって測定される。これは、一般にニューラル・ネットワークを入力の可能な組合せのすべて（または大きいサンプリング）に触れさせ、ニューラル・ネットワークの出力が入力の特定の組合せに対して正確な出力に一致するかどうかをテストすることによって実施される。多数の問題に対して、ニューラル・ネットワークからの正確な出力および不正確な出力の数から適応度を計算する。遺伝的プログラミングは、次いでダーウィンの繁殖、クロスオーバ、および突然変異の通常の遺伝操作を使用して、プログラム・ツリーのポピュレーションを繁殖させる。
細胞符号化では、ニューラル・ネットワークの構成プロセスは、単一のニューロンから構成されるニューラル・ネットワークから始まる。このニューロンはしきい値０を有する。そのバイアスは０である。その入力は、重み＋１を有する接続を有するすべてのネットワークの入力ノードに接続される。その出力はすべてのネットワークの出力ノードに接続される。プログラム・ツリー中の関数は、次いでこのニューロンをどのようにして全ニューラル・ネットワーク中に成長させるかを指定する。いくつかの内容に関係ない関数は特定のニューロンを平行または連続的な形で分割することを可能にする。他の関数は、ニューロンのしきい値、接続の重み、またはニューロンに対するバイアスを変更することができる。
電気回路用のＳＰＩＣＥシミュレータ
工学の多数の分野では、コンピュータベースのシミュレータを使用して、複雑な物理現象をシミュレートできる。電気工学の分野では、ＳＰＩＣＥ（Ｓｉｍｕｌａｔｉｏｎ  Ｐｒｏｇｒａｍ  ｗｉｔｈ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ  Ｅｍｐｈａｓｉｓの頭文字）は、アナログ、ディジタル、混合アナログ／ディジタル電気回路のシミュレーション用に米国バークレーのカリフォルニア大学で数十年にわたって書かれたプログラムの大規模ファミリーである。
ＳＰＩＣＥ３（Ｑｕａｒｌｅｓ他１９９４年）はＳＰＩＣＥの最新バージョンである。ＳＰＩＣＥ３は、様々な回路要素を含む回路に対して様々なタイプの分析を実施する。回路要素は、抵抗、コンデンサ、インダクタ、スイッチ、ダイオード、トランジスタ、電圧源および電流源、伝送線、および多数の他のデバイスを含む。ＳＰＩＣＥは、ＤＣ分析、過渡分析、ポールゼロ分析、小信号歪み分析、感度分析、雑音分析、ＡＣ小信号分析、および他のタイプの分析を実施できる。ＳＰＩＣＥ３プログラムは、Ｃソース・コードの約２１７０００本の線を含む８７８個の別々のファイル上に広がった約６．１メガバイトのソース・コードから構成される。
ＳＰＩＣＥシミュレーションへの入力は、分析すべき回路を記述するネットリスト、および実行すべき分析のタイプおよび生成すべき出力の性質に関してＳＰＩＣＥに命令するいくつかのコマンドから構成される。
同様のシミュレータが多数の工学分野に存在する。例えば、機械工学の分野では、（それぞれ異なる数字パラメータおよび非数字パラメータによってさらに指定される）様々なタイプの物理構成要素のトポロジ構成をシミュレータに与え、それにより物理構造を次いでシミュレートできるようにする多数のシミュレータが存在する。
自動回路設計
純粋にディジタルな回路用にいくつかの設計問題を自動化することはかなり進歩した。しかしながら、アナログ回路および混合アナログディジタル回路の設計は自動化が可能であることが証明されていない（Ｒｕｔｅｎｂａｒ  １９９３年）。「アナログ・ジレンマ」を論じる場合、ＡａｓｅｒｕｄおよびＮｉｅｌｓｅｎ（１９９５年）は次のように述べている。
「アナログ設計者はごく少数である。ディジタル設計に対比して、アナログ回路の大部分はまだアナログ設計の専門家またはいわゆるアナログ設計の「ｚａｈ」によって製造されている。設計プロセスは、経験と勘の組合せによって特徴付けられ、プロセス特性および実際の製品の詳細な仕様の完全な知識を必要とする。」
「アナログ回路設計は通常かなりの時間期間にわたって延び、相当の技術を有する設計者によって実施される知識集中的、多相、反復作業であることが知られている。したがって、科学というよりも芸術の形態であると多くの人によって考えられている。」
アナログ回路および混合アナログディジタル回路の設計プロセスを自動化する多数の努力がなされている。次に、これらの努力の一部について以下で説明する。
ＩＤＡＣ（Ｄｅｇｒａｕｗｅ  １９８７年）と呼ばれるアナログ集積回路用の対話型設計ツールでは、ユーザは、回路用の可能な様々なトポロジを選択することから始める。ＩＤＡＣは、次いで（所望の挙動特性に関して）各回路中の構成要素の値を決定する。ユーザは最良回路を選択する。
ＯＡＳＹＳ（Ｈａｒｊａｎｉ、Ｒｕｔｅｎｂａｒ、Ｃａｒｌｅｙ  １９８９年）およびＯＰＡＳＹＮ（Ｋｏｈ、Ｓｅｑｕｉｎ、Ｇｒａｙ  １９９０年）では、トポロジが予めヒューリスティック規則に基づいて選択され、合成ツールが回路を寸法決定しようと試みる。合成ツールが選択されたトポロジを正確に寸法決定できない場合、ツールは他のヒューリスティック規則を使用して新しいトポロジを生成し、プロセスが継続する。これらのシステムの成功はヒューリスティック規則の知識ベースの有効性に依存する。
ＳＥＡＳ（Ｎｉｎｇ、Ｋｏｌｅ、Ｍｏｕｔｈａａｎ、Ｗａｌｌｉｎｇｓ  １９９２年）では、進化を使用してトポロジを修正し、シミュレート・アニーリングを使用して回路を寸法決定する。
Ｍａｕｌｉｋ、Ｃａｒｌｅｙ、Ｒｕｔｅｎｂａｒ（１９９２年）は、専門設計知識を使用して、トポロジ選択および回路寸法決定を同時に処理しようとする。
Ｎｉｅｌｓｅｎ（１９９５年）は、アナログ・フィルタ回路を設計するために使用できる連続時間フィルタ設計ツール（彼の「Ｃ−Ｔコンパイラ」）を開発した。Ｎｉｅｌｓｅｎのプロセスは原型フィルタを手動で設計することから始まる。次いで、構成要素値およびトポロジを調整して、当該の問題の設計要件との追従を達成する。
遺伝的アルゴリズムおよび自動回路設計
ＤＡＲＷＩＮ（ＫｒｕｉｓｋａｍｐおよびＬｅｅｎａｅｒｔｓ  １９９５年）では、二進文字ストリングに対して作用する遺伝的アルゴリズムを使用して、演算増幅器（オペアンプ）回路を設計する。ＤＡＲＷＩＮの初期ポピュレーションを生成する場合、初期ポピュレーション中の各回路がオペアンプの働きをするように事前に確立された手動設計された一組の２４個のトポロジからポピュレーション中の各オペアンプのトポロジをランダムに取り出す。さらに、すべてのトランジスタがそれらの適切な範囲内で動作し、かつすべてのトランジスタ・サイズが最大値と最小値との間に入るように一組の問題固有の制約を解決する。小信号評価回路およびオペアンプ回路に対して特殊化された分析計算を使用して、各オペアンプの挙動を評価する。回路の実際の挙動と所望の挙動との間のずれ、回路の電力消費を含めて、ファクタの組合せを使用して、各オペアンプの適応度を計算する。オペアンプを記述する二進染色体ストリング用のクロスオーバ操作および突然変異操作を使用して、子孫二進染色体ストリングを生成する。
Ｈｅｍｍｉ、Ｍｉｚｏｇｕｃｈｉ、Ｓｈｉｍｏｈａｒａ（１９９４年）、Ｈｉｇｕｃｈｉ他（１９９３年）、Ｍｉｚｏｇｕｃｈｉ、Ｈｅｍｍｉ、Ｓｈｉｍｏｈａｒａ（１９９４年）は、ハードウェア記述言語（ＨＤＬ）を使用して、遺伝方法をディジタル回路の設計に利用した。これらの手法では、文法を使用して、ディジタル回路の設計の開発を駆り立てる。
0003958793.tif 000002
0003958793.tif 000003
0003958793.tif 000004
0003958793.tif 000005
0003958793.tif 000006
0003958793.tif 000007
0003958793.tif 000008
0003958793.tif 000009
発明の概要
アナログおよびディジタル回路など、複雑な構造の自動設計の方法および装置。ただし、これに限定されない。本発明は、様々なサイズおよび形状のエンティティのポピュレーションを有するシステムとともに動作する。ポピュレーション中のエンティティは構成処置（constructing action）を含む。本発明は、一連のステップが反復する事前に指定された設計目的を満足する構造の設計を生成する反復プロセスを実行する方法および装置を含む。一実施態様では、本発明は、それぞれ構成要素値に関連する、トポロジに構成された多数のタイプの構成要素を有する構造を開発するためにポピュレーション中のエンティティ中の構成処置を繰り返し実行する方法および装置を含む。本発明はまた、前記開発した構造の挙動を決定する方法および装置を含む。
図面の説明
本発明は、以下に示す詳細な説明および本発明の好ましい実施形態の添付の図面からより完全に理解できよう。ただし、これらは、本発明を特定の実施形態に限定するものではなく、説明および理解のためのものにすぎない。
第１Ａ図は、本発明の流れ図である。
第１Ｂ図は、電気回路を設計するための遺伝的プログラミングの流れ図である。
第２図は、拘束構文構造の一実施形態を示す図である。
第３図は、１入力１出力エンブリオニック（embryonic）電気回路の一実施形態を示す図である。
第４図は、変更可能ワイヤＺ０を含む回路を示す図である。
第５図は、抵抗（Ｒ）関数を変更可能ワイヤに適用した結果を示す図である。
第６図は、コンデンサ（Ｃ）関数を変更可能ワイヤに適用した結果を示す図である。
第７図は、ダイオード関数を変更可能ワイヤに適用した結果を示す図である。
第８図は、接地トランジスタ関数を変更可能ワイヤに適用した結果を示す図である。
第９図は、ＱＰ関数を変更可能ワイヤに適用した結果を示す図である。
第１０図は、ＱＴ０関数を変更可能ワイヤに適用した結果を示す図である。
第１１図は、ＱＴ８関数を変更可能ワイヤに適用した結果を示す図である。
第１２図は、度数２の２つのノードに接続された抵抗Ｒ１を示す図である。
第１３図は、活動ノードならびに非活動ノードが度数２であるときにＱＴ７関数を適用した結果を示す図である。
第１４図は、ＦＬＩＰ関数をダイオードＤ１に適用した結果を示す図である。
第１５図は、直列分割関数ＳＥＲＩＥＳを抵抗に適用した結果を示す図である。
第１６図は、並列分割関数ＰＳＳを抵抗Ｒ１に適用した結果を示す図である。
第１７図は、並列分割関数ＰＳＬを抵抗Ｒ１に適用した結果を示す図である。
第１８図は、ノード１およびノード２が度数２である回路にＰＳＳまたはＰＳＬを適用した結果を示す図である。
第１９図は、ノード１が度数３であり、ノード２が度数２である抵抗Ｒ１を含む回路を示す図である。
第２０図は、ノード１が度数３であり、ノード２が度数２である回路にＰＳＳを適用した結果を示す図である。
第２１図は、ＣＵＴを抵抗Ｒ１に適用した結果を示す図である。
第２２図は、ＶＩＡ０関数を抵抗Ｒ１に適用した結果を示す図である。
第２３図は、ＴＨＶＩＡ０関数を抵抗Ｒ１に適用した結果を示す図である。
第２４図は、世代０の最良回路のプログラム・ツリーを示す図である。
第２５図は、最初の２つの書込みヘッドを有する１入力１出力エンブリオニック回路を示す図である。
第２６図は、コンデンサＣ３を生成するために変更可能ワイヤＺ０に作用するＣ関数を実行した結果を示す図である。
第２７図は、ＦＬＩＰ関数を実行した結果を示す図である。
第２８図は、ＳＥＲＩＥＳ関数を実行した結果を示す図である。
第２９図は、ＦＬＩＰ関数を実行した結果を示す図である。
第３０図は、ＳＥＲＩＥＳ関数を実行した結果を示す図である。
第３１図は、コンデンサを新しいインダクタに変換するためにコンデンサに作用するＬ関数を実行した結果を示す図である。
第３２図は、Ｌ関数を実行した結果を示す図である。
第３３図は、Ｌ関数を実行した結果を示す図である。
第３４図は、Ｌ関数を実行した結果を示す図である。
第３５図は、世代０の最良回路を示す図である。
第３６図は、並列遺伝的プログラミング・システムを示す図である。
第３７図は、６４個の処理ノードそれぞれの４つのプロセスを示す図である。
第３８図は、世代３２からの最良実行「７段はしご」回路を示す図である。
第３９図は、世代７６からの最良実行「１９段はしご」回路を示す図である。
第４０図は、世代６４からの「ブリッジＴ」回路を示す図である。
第４１図は、世代５８からの最良実行回路を示す図である。
第４２図は、世代２１２からの最良実行回路を示す図である。
第４３図は、世代５３からの最良実行回路を示す図である。
第４４図は、４つの関数定義ブランチおよび２つの結果作成ブランチを有するプログラムを示す図である。
第４５図は、２回使用され、自動的に定義される関数ＡＤＦ３および世代９を示す図である。
第４６図は、２回使用され、自動的に定義される関数ＡＤＦ０および世代９を示す図である。
第４７図は、５回使用される世代３１からの自動的に定義される関数ＡＤＦ０を示す図である。
第４８図は、世代３１の最良回路を示す図である。
第４９図は、ＡＤＦ０によって生成された遺伝３ポート・サブ構造を示す図である。
第５０図は、世代３５からの最良実行回路のＡＤＦ０の編集バージョンを示す図である。
第５１図は、世代３５からの最良実行回路を示す図である。
第５２図は、世代３５からの最良実行個体を示す図である。
第５３図は、１入力１出力エンブリオニック回路を示す図である。
第５４図は、Ｃ関数を実行した結果を示す図である。
第５５図は、ＴＨＶＩＡ関数を実行した結果を示す図である。
第５６図は、ＦＬＩＰ関数を実行した結果を示す図である。
第５７図は、３つのＥＮＤ関数を実行した結果を示す図である。
第５８図は、ＰＳＳ関数を実行した結果を示す図である。
第５９図は、ＰＳＳ関数を実行した結果を示す図である。
第６０図は、ＰＳＳ関数を実行した結果を示す図である。
第６１図は、ＦＬＩＰ関数、ＥＮＤ関数、ＰＳＳ関数を実行した結果を示す図である。
第６２図は、ＡＤＦを適用しようとしているところの回路を開発する破断図である。
第６３図は、ＡＤＦ中でＮＯＰ関数およびＬ関数を実行した結果を示す図である。
第６４図は、ＡＤＦ中で第１のＳＥＲＩＥＳ関数を実行した結果を示す図である。
第６５図は、ＡＤＦ中で第２のＳＥＲＩＥＳ関数を実行した結果を示す図である。
第６６図は、ＡＤＦ中でＬ関数を実行した結果を示す図である。
第６７図は、ＡＤＦ中でＬ関数を実行した結果を示す図である。
第６８図は、ＡＤＦ中でＰＳＳ関数を実行した結果を示す図である。
第６９図は、ＡＤＦ中でＣ関数を実行した結果を示す図である。
第７０図は、ＡＤＦによって生成された３ポート・サブ構造を示す図である。第７１図は、世代３５からの最良実行回路の異なる図である。
第７２図は、世代７７からの最良実行回路の自動的に定義されたＡＤＦ０を示す図である。
第７３図は、世代７７からの最良実行回路を示す図である。
第７４図は、世代３７からの最良世代回路を示す図である。
第７５図は、世代５２からのより倹約した回路を示す図である。
第７６図は、１入力２出力エンブリオニック電気回路を示す図である。
第７７図は、Ｌ関数、Ｃ関数、Ｃ関数を実行した結果を示す図である。
第７８図は、世代０の最良回路を示す図である。
第７９図は、世代７９の最良回路を示す図である。
第８０図は、世代１３７からの最良実行回路を示す図である。
第８１図は、１入力３出力エンブリオニック電気回路を示す図である。
第８２図は、ロボット用の２入力２出力コントローラ用のエンブリオニック回路を示す図である。
第８３図は、ＱＶＩＡＣ７関数を適用した結果を示す図である。
第８４図は、ＱＶＩＡＢ７関数を適用した結果を示す図である。
第８５図は、ＱＶＩＡＥ７関数を適用した結果を示す図である。
第８６図は、ＴＲＡＮＦＯＲＭＥＲ０関数を適用した結果を示す図である。
第８７図は、ＴＲＡＮＦＯＲＭＥＲ１関数を適用した結果を示す図である。
第８８図は、ＴＲＡＮＦＯＲＭＥＲ２関数を適用した結果を示す図である。
第８９図は、ＴＲＡＮＦＯＲＭＥＲ３関数を適用した結果を示す図である。
第９０図は、ＴＲＡＮＦＯＲＭＥＲ４関数を適用した結果を示す図である。
第９１図は、ＴＲＡＮＦＯＲＭＥＲ５関数を適用した結果を示す図である。
第９２図は、抵抗Ｒ１を有する回路を示す図である。
第９３図は、ＦＩＶＥ＿ＬＥＡＤ＿ＯＰＡＭＰ１関数を抵抗Ｒ１に適用した結果を示す図である。
第９４図は、ＳＴＡＲ１分割関数を抵抗Ｒ１に適用した結果を示す図である。
第９５図は、活動ノード（ノード１）が度数３のときにＴＲＩＡＮＧＬＥ１分割関数を抵抗Ｒ１に適用した結果を示す図である。
第９６図は、活動ノード（ノード１）が度数２のときにＴＲＩＡＮＧＬＥ１分割関数を抵抗Ｒ１に適用した結果を示す図である。
第９７図は、世代４５からの遺伝的に進化した最良世代増幅器を示す図である。
第９８図は、遺伝的に進化した増幅器の電圧利得段を示す図である。
第９９図は、遺伝的に進化した増幅器のダーリントン・エミッタ・フォロワ・セクションを示す図である。
第１００図は、遺伝的に進化した増幅器の他の図である。
第１０１図は、８つの剛性ビームおよび２つの負荷を支持する２つの可撓性ケーブルから構成されるトラスを示す図である。
第１０２図は、２つのスプリング、２つのダッシュ・ポット、２つのマスを含む機械システムを示す図である。
第１０３図は、楕円５低域フィルタ・サブ回路ＥＬＩＰ５＿ＬＰ＿１を示す図である。
第１０４図は、楕円５高域フィルタ・サブ回路ＥＬＩＰ５＿ＨＰ＿１を示す図である。
第１０５図は、世代４５からの遺伝的に進化した最良世代多帯域フィルタを示す図である。
第１０６図は、ディジタルＩＮＶＥＲＴＥＲ関数を修正可能なワイヤＺ０に適用した結果を示す図である。
第１０７図は、ディジタルＡＮＤ６関数を修正可能なワイヤＺ０に適用した結果を示す図である。
第１０８図は、ディジタルＯＲ６関数を修正可能なワイヤＺ０に適用した結果を示す図である。
第１０９図は、ＴＨＲＥＥ＿ＬＥＡＤ＿ＯＰＡＭＰ１関数を変更可能ワイヤＺ０に適用した結果を示す図である。
第１１０図は、ＴＷＯ＿ＬＥＡＤ＿ＯＰＡＭＰ１関数を適用した結果を示す図である。
第１１１図は、フィールド・プログラマブル・ディジタルまたはアナログ・アレイを使用して、所望の回路を物理的に実現する方法を示す図である。
第１１２図は、５個の構成要素、１０個のインタフェース・ポイント、７個のアークから構成される電気構造を示す図である。
第１１３図は、７個の構成要素、１１個のインタフェース・ポイント、６個のアークから構成される機械構造を示す図である。
第１１４図は、１３個の構成要素および２４個のインタフェース・ポイントから構成される機械構造を示す図である。
発明の詳細な説明
複雑な構造を設計する方法および装置について述べる。設計すべき複雑な構造は、電気回路、物理構造、機械構造、または特定のトポロジ構成に従ってインタフェースされ、かつ数値パラメータまたは他のタイプのパラメータに関して寸法決定される複数のタイプの構成要素から構成される他の複雑な構造である。
本発明の以下の詳細な説明では、本発明を完全に理解できるように多数の特定の詳細を記載する。しかしながら、本発明は、これらの特定の詳細なしに実施できることが当業者には明らかであろう。いくつかの例では、周知の構造および装置は、本発明を曖昧にするのを回避するために、詳細ではなく、ブロック図で示してある。
以下の詳細な説明の一部は、アルゴリズムおよびコンピュータ・メモリ中のデータ・ビットに対する動作の記号表示に関して提示される。これらの演算記述および表示は、データ処理技術の当業者が当業者の研究の要旨を当業者に最も効果的に伝えるために使用する手段である。アルゴリズムは、ここでは、一般に、所望の結果をもたらすステップの自己矛盾のないシーケンスであると考えられる。ステップは、物理量の物理的操作を必要とするステップである。通常、必ずしもそうではないが、これらの量は、記憶、転送、結合、比較、他の形の操作が可能な電気信号または磁気信号の形をとる。主として一般的な用法の理由で、これらの信号をビット、値、要素、記号、文字、項、数などと呼ぶことが時々便利であることが分かっている。
しかしながら、上記および同様のすべての用語は適切な物理量に関連すべきであり、これらの量に付けられた便利なラベルにすぎないことを念頭に置かれたい。以下の議論から明らかなように別段に詳述されていない場合、本発明では、「処理」、「コンピューティング」、「計算」、「決定」、「表示」などの用語を使用する議論は、コンピュータ・システムのレジスタおよびメモリ中の物理（電子）量として表されるデータを操作し、コンピュータ・システム・メモリまたはレジスタまたは他のそのような情報記憶装置、伝送装置または表示装置中の物理量として同様に表される他のデータに変換するコンピュータ・システムまたは同様の電子計算装置の処理およびプロセスをさす。
本発明はまた、ここに示される操作（オペレーション）を実施する装置にも関する。この装置は、所要の目的のために特別に構成されるか、またはコンピュータ中に記憶されたコンピュータ・プログラムによって選択的に活動化するか、または再構成される汎用コンピュータを含む。本明細書で提示するアルゴリズムおよびディスプレイは、本来特定のコンピュータまたは他の装置に関連しない。本明細書の教示に従うプログラムとともに様々な汎用マシンが使用でき、また所要の方法ステップを実施するためにより特殊化された装置を構成することが便利であることが分かる。様々なこれらの機械に必要な構造は以下の説明から明らかになろう。さらに、本発明は、特定のプログラミング言語に関連して説明されない。様々なプログラミング言語を使用して、本明細書に記載の本発明の教示を実施できることを理解されたい。
本発明の概要
本発明は、電気回路（例えば、アナログ回路、機械構造、またはいくつかの設計制約を満足する他の物理構造）など複雑な構造を設計する方法を提供する。
本発明の電気回路は、抵抗、コンデンサ、インダクタ、ダイオード、トランジスタ、エネルギー源を含めて、非常に様々な異なるタイプの構成要素を含む。ただし、これらに限定されない。個々の構成要素は、回路を形成する特定の「トポロジ」に構成される。さらに、各構成要素は、一組の構成要素値（一般に数値）によってさらに指定（寸法決定）される。回路は、一般に、１つまたは複数の入力源から入力信号を受信し、１つまたは複数の出力ポートで出力信号を発生する。一実施形態では、回路は、少なくとも１つのエネルギー源（例えば、着信信号、電源など）を有する。したがって、本発明は、電気回路をそのトポロジならびにすべてのその構成要素の寸法決定に関して完全に指定する。
一実施形態では、「構成要素」は、タイプ、構成要素をさらに指定するいくつかの構成要素値、およびいくつかのインタフェース・ポイントを有するオブジェクトである。例えば、抵抗について考えてみる。抵抗は、タイプ「抵抗」のオブジェクトであるので構成要素である。これは、１０００オームの単一の構成要素数値を有し、２つのインタフェース・ポイント（リード線、エンド）を有する。
構成要素のインタフェース・ポイントは、（例えば、抵抗の２つのリード線のように）操作上識別できないか、または（例えば、トランジスタのコレクタ、ベース、エミッタのように）操作上異なる。
「回路」は、構成要素のインタフェース・ポイント間に（１）一組の構成要素および（２）一組の無方向線線（アーク）を含む。各無方向線線は、ある構成要素のインタフェース・ポイントと（一般に他の構成要素の）他のインタフェース・ポイントとの間の接続の存在を示す。
物理構造（トラスなど）に関係する場合、異なるタイプの構成要素は、堅い荷重支持ビームおよびフレキシブル荷重支持ケーブルを含む。ただし、これらに限定されない。
機械構造に関係する場合、構成要素のタイプは、スプリング、マス、ダッシュ・ポットを含む。ただし、これらに限定されない。
ユーザが設計すべき複雑な構造の設計目的を指定した後、本発明の自動設計プロセスは完全な設計を生成する。すなわち、本発明は、トポロジならびに複雑な構造の寸法決定を生成する目的駆動方法である。本発明は目的駆動設計を達成する方法を提供する。
第１Ａ図に、遺伝的プログラミングを使用した本発明のプロセスを示す。このプロセスは、複雑な構造（例えば、トラス、回路など）を表すエンティティのポピュレーション（例えば、プログラム・ツリー）に適用される。ポピュレーションは、様々な形で（例えば、ランダムに）生成されることもあり、プロセスを開始するために供給されることもある。エンティティのポピュレーションを使用して、プロセスは、構造を開発するためにポピュレーションの各エンティティ中の構成処置（constructiong action）を実行することから始まる（処理ブロック１０１）。本発明では、構造は、トポロジに構成された複数のタイプの構成要素を含む。構成要素値がある場合、それらはトポロジ中の構成要素に関連する。一実施形態では、構成処置は、実行中に、すべてのエンティティに共通であるか、または最初に異なるエンティティ間で異なるエンブリオニック構造（embryonic structure）に適用される。
構成処置を実行した後、ポピュレーション中の各開発された構造の挙動を決定する（処理ブロック１０２）。この決定は、例えば、シミュレーションまたは観測である。ただし、これらに限定されない。挙動を決定した後、適応基準を得るために、それを事前に指定された設計目的と比較する（処理ブロック１０３）。
次いで、テストによって、以下でさらに論じるように、設計目的または終了基準が満足されているかどうかを決定する（処理ブロック１０４）。それらが満足されている場合、プロセスは終了する。他方、設計目的または終了基準が満足されていない場合、本発明の進化プロセスを継続するためにポピュレーション中のエンティティに遺伝操作を適用する（処理ブロック１０５）。遺伝操作を適用した後、プロセスは処理ブロック１０１に戻り、プロセスは引き続き繰り返す。
本発明のプロセスは、アナログ電気フィルタ回路を設計する問題を含む多数の問題に適用できる。１つのそのようなフィルタは、信号をその入力として受信し、ある指定された周波数範囲（通過帯域）中にある着信信号の周波数成分を通し、かつ他の周波数範囲（阻止帯域）中にある信号の周波数成分を阻止する１入力１出力電子回路である。
遺伝的プログラミングは、順序付けされたブランチを有する根のついた、点ラベルの付いた木のポピュレーション（すなわち円のないグラフ）を繁殖させる。遺伝的プログラミングの現在周知の形態によって繁殖させたツリーの種類と、電気回路の世界で使用されるラベルの付いたサイクリック・グラフの特殊な種類との間にはかなりの差がある。
電気回路はツリーではなく、サイクリック・グラフである。実際、電気回路は、線が円に属するサイクリック・グラフである（例えば、緩いワイヤやたれ下がる構成要素はない）。さらに、電気回路を表すグラフの線は互いにラベル付けされる。通常、各線上に多数のラベルがある。各線上の一次ラベルは、電気構成要素（例えば、ワイヤ、抵抗、コンデンサ、場合によっては構成要素の一部）のタイプを与える。各線上の二次ラベルは構成要素の値を与える（ただし、ダイオードなど、構成要素値を担持しない構成要素は除く）。単一の数値で多数の構成要素（例えば、抵抗、コンデンサ、インダクタ）を指定するのに十分である。他の構成要素（例えば、正弦波源の周波数およびピーク電圧）を指定するためには多数の値が必要である。電気回路中の多数の構成要素は、それらのリード線（例えば、トランジスタのコレクタ、ベース、エミッタ）の極性（例えば、ダイオード）または配向または特徴を有する。電気回路は、少なくとも１つのエネルギー源（例えば、着信信号または内部電源）を有する。いくつかの構成要素値は、エネルギー源が「ＡＣ」であるか「ＤＣ」であるかなど、数値でない。さらに、構成要素値のグループは、構成要素に適用できる数値を与える「モデル」を参照することによって指定されることが便利である。例えば、トランジスタやダイオードなど複雑な構成要素は、広範なモデルによって記述される。
本発明は、遺伝的プログラミングの世界で使用される点ラベルの付いたツリーの種類と、電気回路を表す線ラベルの付いたサイクリック・グラフとの間でマッピングを確立することによって遺伝的プログラミングを電気回路に適用する。
本明細書で使用される開発成長プロセスは、非常に簡単な、実質上無用な、エンブリオニック電気回路から始まる。エンブリオニック回路の他に、通常遺伝的プログラミングで使用されるタイプのプログラム・ツリーがある。電気回路は、その場合、プログラム・ツリー中の関数が実行され、徐々にエンブリオニック回路（およびその継承者）に適用されるときに開発される。プログラム・ツリー中の関数は、電気回路の重要な特徴を維持する形でエンブリオニック回路（およびその継承者）を操作する。この開発プロセスの最終結果は、回路のトポロジならびにすべてのその構成要素の寸法決定である。第１Ｂ図に、電気回路の自動設計用の本発明の方法の一実施形態を示す。（第１Ｂ図については以下でより詳細に説明する）。
電気回路について説明する本発明の方法は、機械構造など、他の複雑な構造の自動設計に適用できる。機械構造はツリーではなく、グラフである。機械構造を表すグラフの線にはそれぞれラベルが付けられる。各線上の一次ラベルは構成要素（例えばマス（mass））の名前を与える。各線上の二次ラベルは構成要素の値を与える。
本発明の方法から得られる設計は、実際の構造を実装または構成する機械または装置中に直接的か、または間接的に供給される。そのような機械およびそれらの構成は当技術分野において周知である。例えば、電気回路は、設計ツール、および／または場所ツールおよび経路ツールに基づいて周知の半導体加工技法を使用して製造される。ＦＰＧＡなどプログラム・デバイスは、ネットリストなどに応答するツールを使用してプログラムされる。機械構造など他の構造は、構成要素の処理、移動、および取付けを実施するコンピュータ制御処理およびハードウェア（例えば、組立ライン技術）を使用して物理的に構成される。
ポピュレーション中のプログラム・ツリーの拘束構文構造
本発明では、プログラム・ツリーは、以下の５つの関数の範疇のいずれかまたはすべてを含む。
（１）エンブリオニック回路からの回路のトポロジを修正する接続生成関数
（２）特定の構成要素をワイヤ（または他の構成要素）の代わりに回路のトポロジ中の位置に挿入し、その演算実行サブツリーが回路中に挿入された各構成要素ごとに数値（寸法決定）を指定する構成要素生成関数
（３）その数およびアリティ（arity）がユーザによって予め指定される自動定義関数
（４）その数およびアリティがユーザによって予め指定されず、アーキテクチャ変更操作の結果として遺伝プログラムの実行中に動的に生じる自動定義関数
一実施形態では、プログラム・ツリーは拘束構文構造に一致する。プログラム・ツリー中の各構成要素生成関数は、０、１つまたは複数の演算実行サブツリーおよび１つまたは複数の構造継続サブツリーを有し、各接続生成関数は１つまたは複数の構造継続サブツリーを有する。各構成要素生成関数の演算実行サブツリーがある場合、演算実行サブツリーは、いっしょに構成要素の数値をもたらす数値定数終端と演算関数の構成物を含む。構造継続サブツリーは回路の構成をどのように継続すべきかを指定する。第２図にプログラム・ツリーの１つの拘束構文構造を示す。この特定の図は、２つの結果作成ブランチおよび４つの自動定義関数の存在を保証する。他の実施形態では、プログラム・ツリーは、この特定の拘束構文構造またはいずれの拘束構文構造に一致しないことがあることに留意されたい。
慣例として、演算実行サブツリーは左側に配置され、構造継続サブツリーは右側に配置される。
初期ポピュレーション（世代０）中のランダム・プログラム・ツリーならびに後の世代で突然変異操作によって生成されるランダム・サブツリーは、この拘束構文構造に一致するように生成される。この拘束構文構造は、（Ｋｏｚａ１９９４年に記載されている）「ポイント・タイピング」を有する構造維持クロスオーバを使用したクロスオーバ操作によって維持される。
１入力１出力エンブリオニック回路
本発明では、プログラム・ツリーを実行することによって電気回路を生成する。ポピュレーション中の各プログラム・ツリーはエンブリオニック電気回路から１つの電気回路を生成する。特定の問題に対して使用されるエンブリオニック回路は、入力信号の数および出力信号（プローブ・ポイント）の数に依存する。これはまた、設計すべき回路に必要な、または望ましいいくつかの固定の構成要素を組み込む。
一実施形態では、エンブリオニック回路は、１つの入力信号、１つのプローブ・ポイント、２つの修正可能なワイヤ、固定のソース抵抗、および固定の負荷抵抗を含む。エンブリオニック回路中で、２つの修正可能なワイヤは、それぞれ最初に本明細書の図で円形ハイライトで表される書込みヘッドを所有する。書込みヘッドが回路構成プログラム・ツリー中の関数に従って指す構成要素を修正することによって回路を開発する。プログラム・ツリー中の各接続生成関数および構成要素生成関数は、開発中の回路中のその関連するハイライトされた構成要素を特定の形で修正し、継承者書込みヘッドがある場合、その将来の配置を指定する。
第３図に、１入力１出力エンブリオニック回路の一実施形態を示す。第３図を参照すると、エネルギー源は、２ボルト電源ＶＳＯＵＲＣＥ３１９であり、その負（−）のエンドはノード３００（接地）に接続され、その正（＋）のエンドはノード３０１に接続される。
「エンド」または「リード線」または「インタフェース」なる語は、構成要素が全体的な回路構造中の他の構成要素に接続される場所を説明するために使用していることに留意されたい。
固定の１０００オーム・ソース抵抗ＲＳＯＵＲＣＥ３１２がノード３０１とノード３０２の間にある。修正可能なワイヤＺ１（すなわち書込みヘッドを有するワイヤ）３０６がノード３０２とノード３０３の間にあり、他の修正可能なワイヤＺ０  ３０７がノード３０３とノード３０４の間にある。修正可能なワイヤＺ０およびＺ１のまわりに２つの書込みヘッドがそれらを指すことを示す円がある。固定の分離ワイヤＺＯＵＴ３０８がノード３０３とノード３０５の間にあり、電圧プローブＶＯＵＴ３０９がノード３０５にあり、固定の１０００オーム負荷抵抗ＲＬＯＡＤ３１０がノード３０５とノード３００（接地）の間にある。分離ワイヤＺＧＮＤ３１１がノード３０４とノード３００（接地）の間にある。開発プロセスの初めに、それぞれ２つの修正可能なワイヤＺ０およびＺ１を指す書込みヘッドがある。回路のすべてのその後の開発は書込みヘッドから生じる。回路構成プログラム・ツリー中の関連する関数に従って書込みヘッドが指している構成要素（時々構成要素とそのノードの１つ）を修正することによって電気回路を開発する。
この特定のエンブリオニック回路は、回路中の任意の１つのノードに当たる線の数が２または３になるように設計される。この条件は、回路構成プログラム・ツリー中のすべての関数によって維持される。
分離ワイヤＺＯＵＴ３０８は、プローブ・ポイントＶＯＵＴ３０９および負荷抵抗ＲＬＯＡＤ３１０が開発プロセス中に修正されないよう保護し、分離ワイヤＺＧＮＤ３１１も同様にＶＳＯＵＲＣＥ３１９の負の終端３００および接地を保護する。
このエンブリオニック回路中に入ったドメイン知識はほとんどないことに留意されたい。具体的には、（１）エンブリオニック回路は回路であり、（２）エンブリオニック回路は１つの入力および１つの出力を有し、（３）修正可能な接続が出力とソースの間および出力と接地の間にある。このエンブリオニック回路は任意の１入力１出力回路に適用できることに留意されたい。適応基準が進化探索プロセスを所望の回路に導く。これは、任意の特定の前に見られない問題に対する遺伝プログラムの特定の実行の結果がうまくいく保証があることをいっているのではなく、エンブリオニック回路によって入力および出力の性質を指定し、適応基準によって望まれるものを記述するため以外にユーザが設計プロセス中に導入する情報がほとんどないことをいっている。
人間の設計者は、特定の問題に対してエンブリオニック回路を生成するために彼の特定のフィールドのドメイン知識を適用することが有利であることが分かる。そのような知識は、特定の周知のまたは望ましい特性の方向に満足な設計の探索を偏らせる。また、いくつかの設計問題は、（おそらく特定の形で構成される）特定の構成要素を全体的な設計の一部として含めることを要求する。
一実施形態では、同じエンブリオニック回路がポピュレーション中のすべての個々のプログラム・ツリーの開発のための開始点として使用される。すなわち、ポピュレーション中の各個々のプログラム・ツリーごとに開発プロセス用の開始点である共通のエンブリオニック回路がある。ポピュレーション中の個々のエンティティはプログラム・ツリーから構成される。ポピュレーション中の個々のエンティティを実行するとき、実行は、特定の個々のエンティティ中に含まれるプログラム・ツリーの構成処置を共通のエンブリオニック回路に適用するステップを含む。代替実施形態では、プログラム・ツリーは異なるエンブリオニック回路から始まることに留意されたい。
いくつかの問題について、エンブリオニック回路およびプログラム・ツリーを含む一対のエンティティを同時に共進化させることが有利である。すなわち、ポピュレーション中の各エンティティは、エンブリオニック回路およびプログラム・ツリーから構成される対を有する。ポピュレーション中の個々のエンティティを実行するとき、実行は、特定の個々のエンティティ中に含まれるプログラム・ツリーの構成処置を特定の個々のエンティティ中に含まれる特定のエンブリオニック回路に適用するステップを含む。進化プロセスは、そのエンブリオニック回路およびプログラム・ツリーが互いに関連して作用するときに問題の設計目的をよりより満足するポピュレーション中のエンティティを助ける。
本発明の一実施形態ではエンブリオニック回路を使用しているが、エンブリオニック回路を有する必要は全くないことに留意されたい。代わりに、回路構成関数の組は回路全体を構築する関数を含むことができる。しかしながら、この手法は、回路がいくつかの最小の重要な特徴（例えば、着信信号、接地を含めること、プローブ・ポイントを含めることなど）を有することを保証するのでエンブリオニック回路を別個に与えることが非常に有利である。エンブリオニック回路がない場合、多数の個体は、例えば、着信信号源がない（したがって、問題の設計目的を満足することに関して十分な成績を達成できない）。そのような基本的な特徴を進化させるには、追加の努力の消費が必要である。したがって、一実施形態では、これらの最小の特徴は、予めエンブリオニック回路の形で与えられる。
構成要素生成関数
ポピュレーション中の各個々の回路構成プログラム・ツリーは一般に構成要素生成関数および接続生成関数を含む。
構成要素は構成要素生成関数によって回路のトポロジ中に挿入される。構成要素はまた構成要素生成関数からそれらの寸法決定を得る。プログラム・ツリー中の各構成要素生成関数は、開発中の回路中のハイライトされた構成要素（すなわち書込みヘッドを有する構成要素）を指し、ハイライトされた構成要素を何らかの形で修正する。各構成要素生成関数は１つまたは複数の書込みヘッドを（その構成継続サブツリーを介して）生成する。
各構成要素生成関数は、回路中の任意の１つのノードに当たる線の数を２または３にする。これは必要条件ではないことに留意されたい。
構成要素生成関数の一部は内容に関係なく、一部は内容に即している。構成要素生成関数が内容に関係ない場合、結果は単一のハイライトされた構成要素（すなわち書込みヘッドを有する構成要素）にのみ依存する。構成要素生成関数が内容に即している場合、結果は単一のハイライトされた構成要素にのみ依存するだけでなく、回路構成の他の近くの要素にも依存する。本発明は、内容に即した関数ならびに内容に関係ない関数の実行から得られる複雑な構造の生成を支持する。
表１に電気回路用のいくつかの例示的な構成要素生成関数を記載する。この表には、関数の短い名前、関数のより長い、より記述的な名前、およびそのアリティ（すなわちそれがとる引数の数）が示されている。この表は、電気回路の可能な有用な構成要素生成関数の徹底的なリストではなく、可能な構成要素生成関数の性質を示すためのものである。
0003958793.tif 000010
0003958793.tif 000011
各構成要素生成関数の構成継続サブツリーは回路構成プログラム・ツリー中の継承者関数または終端を指す。
構成要素生成関数の演算実行サブツリーは演算関数（加算および減算）の構成物およびランダムな定数（−１．０００から＋１．０００まで）を含む。演算実行サブツリーは浮動小数点値を戻すことによって構成要素の数値を指定する。
電気回路の構成要素の第１の値は多数の桁の範囲に及ぶ。したがって、対数スケール上で構成要素を見ることが有用である。したがって、この設計システムの一実施形態では、演算実行サブツリーによって戻された浮動小数点値を、関連する構成要素の特定のタイプに適切な測定単位を使用して１１桁の範囲内の構成要素の値と解釈することが有用であることが分かっている。演算実行サブツリーは浮動小数点値を戻し、これを以下の形で構成要素の値と解釈する。戻り値が−０．５と＋０．５の間である場合、Ｕはサブツリーによって戻された値に等しい。戻り値が−１００．０より小さいか、または＋１００よりも大きい場合、Ｕは０にセットされる。戻り値が−１００と−０．５の間である場合、Ｕは点（−１００、０）と点（−５、−５）を接続する直線から求まる。戻り値が＋５．０と＋１００の間である場合、Ｕは点（５，５）と点（１００，０）を接続する直線から求まる。構成要素の値は、構成要素のタイプに適切な単位で１０Uである。このマッピングは、現代の電気工学の文献で多数の実際的な回路を調べた後で決定した適切なまたは所定の値を中心とする値を構成要素に与える。幾分異なる解釈の方法もいくつかの特殊化された用途の範疇（例えば、より極端な値が一般に必要とされる場合）に適切である。
構成要素（例えばダイオード）が数値を有しない場合、残っているサブツリー（引数）はない。構成要素を記述するために通常１よりも大きい数値が必要な場合、多数の演算実行サブツリー（引数）がある。例えば、独立した交流電流正弦波電圧源の完全な仕様には５つの数値構成要素、すなわち電圧源の振幅、その周波数、そのオフセット電圧、その時間遅延、およびその減衰定数が必要である。構成要素は、構成要素の初期条件（例えば、コンデンサの初期電圧、インダクタの初期電流、いくつかの発振回路値のトランジスタの初期電圧）を指定することが必要な状況で追加の構成要素数値を必要とする。
抵抗関数
本発明では、２引数Ｒ（「抵抗」）関数はハイライトされた構成要素を抵抗に変化させる。
第４図に、４つのコンデンサを含む部分回路のノード４０１および４０２を接続する修正可能ワイヤＺ０  ４０３を示す。修正可能なワイヤＺ０  ４０３は書込みヘッドを保持する（すなわち円でハイライトされている）。
第５図に、Ｒ関数を第４図の変更可能ワイヤＺ０に適用し、それにより第４図の修正可能なワイヤＺ０  ４０３の代わりにノード４０１および４０２を接続する抵抗Ｒ１  ５０３を生成した結果を示す。抵抗の極性はその代わりになる修正可能なワイヤＺ０の極性に一致することに留意されたい。
この構成要素の値（５オーム）は演算実行サブツリーによって指定される。一実施形態では、抵抗の値はキロオーム（Ｋオーム）の中間値（Ｕ）の真数（ベース１０）である。
回路のネットリストは、回路の各構成要素、その構成要素が接続されるノード、およびその構成要素の値を識別するリストである。回路のネットリストは回路が完全に開発されるまで生成されない。さらに電気回路用のＳＰＩＣＥシミュレータに送られるネットリストはワイヤを含まない。しかしながら、議論のために、ネットリストが第４図のために生成された場合、以下の単一の行
Ｚ０  ４０２  ４０１
は修正可能なワイヤＺ０に関連する。
ネットリストのこの行の解釈は、回路のノード４０２とノード４０１の間に接続されたＺ０と呼ばれる構成要素があるということである。構成要素の正の端部はノード４０２に接続され、負の端部はノード４０１に接続される。
５オーム抵抗Ｒ１を生成するＲ関数の効果は、この単一の行を以下の行
Ｒ１  ４０２  ４０１  ５オーム
に変更することである。
ネットリストのこの行の解釈は、回路のノード４０２とノード４０１の間に接続されたＲ１と呼ばれる抵抗があり、かつこの構成要素が５オームの値を有するということである。ネットリスト値の最初に記載されたノードは構成要素の正の端部に接続されたノードであることを想起されたい。
構成要素生成関数（例えば上述のＲ関数）は、ワイヤが構成要素に変換された後でその構成要素がその後常に回路に残るように定義されたかもしれないことに留意されたい。この代替手法は、新たに生成された構成要素に書込みヘッドを与えない（すなわち、構成要素生成関数用の構成継続サブツリーを有しない）ことによって容易に実施できる。この代替手法の欠点は、抵抗の並列（または直列）構成をどのように生成するかを考えることによって説明できる。この代替手法を使用する場合、この構成物は、まず並列（または直列）分割関数をワイヤに適用し、次いでいま生成されたワイヤを抵抗に変換することによってのみ生成できる。上述の手法は、この構成物を得る第２の方法、すなわちまずあるワイヤを抵抗に変換し、次いで並列（または直列）分割関数をいま生成された抵抗に適用することができるので多数の状況に対してよりフレキシブルである。したがって、一実施形態では、新たに生成された構成要素は書込みヘッドを持っている。
コンデンサ関数
２引数Ｃ（「コンデンサ」）関数はハイライトされた構成要素をコンデンサに変化させる。一実施形態では、コンデンサの値は、ナノファラッド（ｎＦ）の上述の形で計算した中間値Ｕの真数（ベース１０）である。このマッピングは１ｎＦを中心としてプラスまたはマイナス５桁の範囲内の値をコンデンサに与える。
第６図に、Ｃ関数を第４図の修正可能なワイヤＺ０に適用し、それによりノード４０１および４０２を接続するコンデンサＣ１  ６０１を生成した結果を示す。
インダクタ関数
２引数Ｌ（「インダクタ」）関数はハイライトされた構成要素をインダクタに変化させる。一実施形態では、インダクタの値はマイクロヘンリーの中間値Ｕの真数（ベース１０）である。このマッピングは１マイクロヘンリーを中心としてプラスまたはマイナス５桁の範囲内の値をインダクタに与える。
ダイオード関数
１引数Ｄ（「ダイオード」）関数はハイライトされた構成要素をダイオードに変化させる。ダイオードは明示的な構成要素値を有せず、したがって演算実行サブツリーはない。したがって、この関数は構成継続サブツリーのみを有し、１引数関数である。
第７図に、Ｄ関数を第４図の修正可能なワイヤＺ０に適用し、それによりノード４０１および４０２を接続するダイオードＤ１  ７０１を生成した結果を示す。
Ｄ関数によって生成されたネットリスト中の１つの行の一例を以下に示す。
Ｄ１  ４０２  ４０１  Ｄ１Ｎ４１４８
この行の解釈は、ダイオードＤ１のアノード（＋端部）がノード４０２に接続され、カソード（−端部）がノード４０１に接続され、ダイオードがダイオードのＤ１Ｎ４１４８モデルであるということである。ダイオードは明示的な構成要素数値を有しないが、モデルの仕様はＳＰＩＣＥシミュレータに対して多数のパラメータの値を暗に指定する。実際、ただ１つのダイオード・モデルが特定の設計問題に対して使用できるのが普通である。しかし極端な場合、ダイオード用のモデル中に含まれる多数の別々のパラメータのすべての値が潜在的な構成要素値と見られ（そして別個の演算実行関数が割り当てられる）ことがある。
また、いくつかの問題に対して、モデル自体を構成要素の構成要素値にすることが望ましいことがある。このモデルは非構成要素数値の一例である。このモデルの可能な代替値は構成要素の異なる使用できるモデルに及ぶ。モデルは、同様にいくつかの他のタイプの構成要素（例えば、トランジスタ用のモデルＱ２Ｎ３９０４）に関連して本明細書に現れる。
ＱＧ関数
２引数ＱＧ（「接地されたトランジスタ」）関数はハイライトされた構成要素を、そのエミッタがアースに接続されたトランジスタに変化させる。トランジスタの構成要素値はトランジスタのコレクタでの初期条件（例えば９ボルト）である。初期条件は通常トランジスタで使用されない。しかしながら、それらはいくつかの回路（例えばいくつかの発振器）用のＳＰＩＣＥシミュレータに必要である。初期条件が不要な場合、この関数はただ１つの引数（すなわちその構成継続サブツリーの引数）を有するのでＤ関数と同じである。
第８図に、ＱＧ関数を第４図の修正可能なワイヤＺ０に適用し、それによりノード４０１および４０２を接続するトランジスタＱ１  ８０１を生成した結果を示す。トランジスタのコレクタはＺ０の＋端部（第４図のノード４０２）に接続され、ベースはＺ０の−端部（第４図のノード４０１）に接続される。
ＱＧ関数によって生成されたネットリスト中の２つの行の一例を以下に示す。
Ｑ１  ４０２  ４０１  Ｑ２Ｎ３９０４
．ＩＣ  Ｖ（４０２）＝９ボルト
第１の行の解釈は、トランジスタＱ１のコレクタが第８図のノード４０２に接続され、ベースが第８図のノード４０１に接続され、エミッタがノード０（アース）に接続され、トランジスタのモデルがＱ２Ｎ３９０４モデルであるということである。他のトランジスタ・モデルの例はＱ２Ｎ３０５５、Ｑ２Ｎ２２２２、ＤＨ３７２５Ｃである。任意選択の第２の行の解釈は第８図のコレクタ・ノード４０２の任意選択の初期条件が９ボルトであるということである。
ＱＰ関数
２引数ＱＰ（「正電圧源トランジスタ」）関数はハイライトされた構成要素を、そのコレクタが正電圧源（例えば、第９図のノード５０の５ボルトＤＣ）に接続されたトランジスタに変化させる。トランジスタの構成要素値はトランジスタのベースの初期条件（例えば９ボルト）である。初期条件は通常トランジスタで使用されない。しかしながら、それらはいくつかの回路（例えばいくつかの発振器）用のＳＰＩＣＥシミュレータに必要である。初期条件が不要な場合、この関数はただ１つの引数（すなわちその構成継続サブツリーの引数）を有するのでＤ関数と同じである。
第９図に、ＱＰ関数を第４図の修正可能なワイヤＺ０に適用し、それによりノード４０１および４０２を接続するトランジスタＱ１  ９０１を生成した結果を示す。トランジスタのベースはＺ０の＋端部（第４図のノード４０２）に接続され、エミッタはＺ０の−端部（第４図のノード４０１）に接続される。コレクタは第９図のノード５０の＋５ボルトＤＣ正電圧源に接続される。
ＱＧ関数によって生成されたネットリスト中の２つの行の一例を以下に示す。
Ｑ１  ５０  ４０２  ４０１  Ｑ２Ｎ３９０４
．ＩＣ  Ｖ（４０２）＝９ボルト
第１の行の解釈は、トランジスタＱ１  ９０１のコレクタが＋５ボルトＤＣ電力源に接続され、トランジスタのベースが第９図のノード４０２に接続され、トランジスタのエミッタがノード４０１に接続され、トランジスタのモデルがＱ２Ｎ３９０４モデルであるということである。第２の行の解釈は（第９図の）ベース・ノード４０２の初期条件が９ボルトであるということである。
ＱＶＩＡＣ関数
（ＱＶＩＡＣ０、．．．、ＱＶＩＡＣ７と呼ばれる）０引数関数のＱＶＩＡＣ（「コレクタからビアを有するトランジスタ」）グループ中の８つの関数は、ハイライトされた構成要素を、そのコレクタが（ビアと呼ばれる）番号付きポートに接続されたトランジスタに変化させる。書込みヘッドはＱＶＩＡＣ関数の実行によって失われる。新しいトランジスタ自体上には書込みヘッドがないので、トランジスタは、ＱＶＩＡＣ関数（または次のセクションで説明する密に関連するＱＶＩＡＢ関数またはＱＶＩＡＥ関数）によって挿入された後開発中の回路中に残る。
ＱＶＩＡＣ関数は、ハイライトされた構成要素を、そのベースがハイライトされた構成要素の負の端部に接続され、そのエミッタがハイライトされた構成要素の正の端部に接続され、そのコレクタが特定の番号の付いたポートに接続されたトランジスタと交換する。このポートは、回路が常駐する仮想的なウエハ中の８つの仮想的なレイヤの指定された１つに接続される。
完全に開発された回路の他の部分がＱＶＩＡＣ（またはＱＶＩＡＢまたはＱＶＩＡＥ）関数によって指定された特定の番号の付いたレイヤに接続しない場合、そのレイヤに接続するポートは無用である。その場合、ポートは削除され、トランジスタのいま取り外されたリード線は、ハイライトされた構成要素の正の端部がそれに接続されたノードに再び取り付けられる。この削除および再取付けは、回路のネットリストの生成の直前に行われる。
第８３図に、ＱＶＩＡＣ７関数を第４図の修正可能なワイヤＺ０に適用し、それによりノード４０１、ノード４０２、ポート７の間に配置されたトランジスタＱ６を生成した結果を示す。トランジスタのベースはハイライトされた構成要素の負の端部（ノード４０１）に接続され、エミッタはその正の端部（ノード４０２）に接続される。コレクタはポート７に接続される。
ＱＶＩＡＢ関数
（ＱＶＩＡＢ０、．．．、ＱＶＩＡＢ７と呼ばれる）０引数関数のＱＶＩＡＢ（「ベースからビアを有するトランジスタ」）グループ中の８つの関数は、ハイライトされた構成要素を、そのベースが番号付きポート（ビア）に接続されたトランジスタに変化させる。書込みヘッドはＱＶＩＡＢ関数の実行によって失われる。
ＱＶＩＡＢ関数は、ハイライトされた構成要素を、そのエミッタがハイライトされた構成要素の負の端部に接続され、そのコレクタがハイライトされた構成要素の正の端部に接続され、そのベースが特定の番号の付いたポートに接続されたトランジスタと交換する。
第８４図に、ＱＶＩＡＢ７関数を第４図の修正可能なワイヤＺ０に適用し、それによりノード４０１、ノード４０２、ポート７の間に配置されたトランジスタＱ６を生成した結果を示す。
ＱＶＩＡＥ関数
（ＱＶＩＡＥ０、．．．、ＱＶＩＡＥ７と呼ばれる）０引数関数のＱＶＩＡＥ（「エミッタからビアを有するトランジスタ」）グループ中の８つの関数は、ハイライトされた構成要素を、そのエミッタが番号付きポート（ビア）に接続されたトランジスタに変化させる。書込みヘッドはＱＶＩＡＥ関数の実行によって失われる。
ＱＶＩＡＥ関数は、ハイライトされた構成要素を、そのコレクタがハイライトされた構成要素の負の端部に接続され、そのベースがハイライトされた構成要素の正の端部に接続され、そのエミッタが特定の番号の付いたポートに接続されたトランジスタと交換する。
第８５図に、ＱＶＩＡＥ７関数を第４図の修正可能なワイヤＺ０に適用し、それによりノード４０１、ノード４０２、ポート７の間に配置されたトランジスタＱ６を生成した結果を示す。
ＱＴ関数
（ＱＴ０、．．．、ＱＴ１１と呼ばれる）４引数ＱＴ（「トランジスタ」）関数のグループ中の１２個の各関数は、ハイライトされた構成要素が現在接続されているノードの１つの代わりにトランジスタを挿入させる（またハイライトされた構成要素を削除する）。各ＱＴ関数はまた５つの新しいノードおよび３つの新しい修正可能なワイヤを生成する。ＱＴ関数を実行した後、３つの新しい修正可能なワイヤを指す３つの書込みヘッドがある。ＱＴ関数の適用によって生じる構成要素値はトランジスタのコレクタの初期条件（例えば９ボルト）である。新しいトランジスタ自体上には書込みヘッドがないので、トランジスタは、（以下で説明するＣＵＴ関数がその後その削除を引き起こさない場合）ＱＴ関数によって挿入された後開発中の回路中に残る。
１２個のＱＴ関数は、元のハイライトされた構成要素の極性、回路中の既存の構成要素の数、およびハイライトされた構成要素がそれに接続されたノードの度数に応じてわずかに異なる形で動作する。
まずハイライトされた構成要素の両方のノード（すなわち第４図のノード４０１および４０２）が度数３である場合について考えてみる。理解できるように、１２個のＱＴ関数はこの状況で１２個の明確な結果をもたらす。
第１の６つの関数（ＱＴ０、．．．、ＱＴ５）はトランジスタを、ハイライトされた構成要素の正の端部がそれに接続されたノードに挿入し、第２の６つの関数（ＱＴ６、..．、ＱＴ１１）はトランジスタを負の端部に挿入する。すなわちＱＴ０、．．．、ＱＴ５はハイライトされた構成要素の正の端部がそれに接続されたノードを「活動」ノードになるようにし、ＱＴ６、．．．、ＱＴ１１はハイライトされた構成要素の負の端部がそれに接続されたノードを「活動」ノードになるようにする。
これら２つのサブセット中の６つの関数の動作は、「活動」ノード（すなわち、トランジスタに変換すべきノード）に接続された回路中の３つの既存の樺成要素の番号付けに依存する。３つのオブジェクトの６つの可能な置換があるので、新しいトランジスタのコレクタ、ベース、エミッタを接続する６つの可能な方法がある。
表２に、新しいトランジスタのどのリード線（コレクタ、ベース、エミッタ）を度数３の活動ノードの最小番号、中間番号、最大番号の既存の構成要素に接続すべきかを示す。
0003958793.tif 000012
例えば、ＱＴ０関数が第４図の修正可能なワイヤＺ０に適用されたと仮定する。ＱＴ０は第１のサブセット（すなわちＱＴ０、．．．、ＱＴ５）中にあるので、ＱＴ０は第４図のハイライトされた構成要素Ｚ０の正の端部に対して動作する。すなわち、ノード４０２はトランジスタに変換される「活動」ノードである（そしてノード４０１は「非活動」ノードである）。第４図の活動ノード４０２の３つの既存の構成要素はＺ０、Ｃ４、およびＣ５である。表２は、新しいトランジスタのコレクタを最小番号構成要素に接続し、ベースを中間番号構成要素（すなわち第４図のＣ４）に接続し、エミッタを最大番号構成要素（すなわち第４図のＣ５）に接続するよう指定する。
第１０図に、ＱＴ０関数を第４図の修正可能なワイヤＺ０に適用し、それによりトランジスタＱ６を生成した結果を示す。
第１に、ＱＴ０関数は、３つの新しい修正可能なワイヤＺ７、Ｚ８、Ｚ９、および５つの新しいノード（１０１４、１０１５、１０１６、１０１７、１０１８）を生成する。
第２に、第１の新しいワイヤ（Ｚ７）は非活動ノード（すなわちノード４０１）および新しいトランジスタの１つのリード線を新しいノード１０１８に接続する。この新しいワイヤの極性は、非活動ノードに接続された元の梼成要素の端部によって（すなわち元の構成要素Ｚ０の負の端部がノード４０１にあったことによって）確立される。したがって、ノード４０１はＺ７の負の端部に接続され、ノード１０１８はＺ７の正の端部に接続される。
第３に、活動ノード（すなわちノード４０２）は２つの新しいノード１０１４および１０１６に分割される。
第４に、第２の新しいワイヤ（Ｚ８）は新しいノード１０１４を新しいトランジスタの１つのリード線の新しいノード１０１５に接続する。この新しいワイヤは、元のハイライトされた構成要素の正または負の端部が活動ノード（すなわちノード４０２）で正であったか、または負であったかに基づいてその極性を得る。
第５に、第３の新しいワイヤ（Ｚ９）は新しいノード１０１６を新しいトランジスタの１つのリード線の新しいノード１０１７に接続する。この新しいワイヤは、新しいワイヤＺ８と同じ形でその極性を得る。
第６に、新しいトランジスタのコレクタ・リード線、ベース・リード線、エミッタ・リード線はそれぞれ、実行中の特定のＱＴ関数に対して表２中のエントリによって指定された形で新しいノード１０１８、１０１５、１０１７に接続される。
以下は、このＱＴ０関数によって生成されたネットリスト中の２つの行の一例である。
Ｑ６  １０１８  １０１５  １０１７  Ｑ２Ｎ３９０４
．ＩＣ  Ｖ（１０１８）＝９ボルト
第１の行の解釈は、トランジスタＱ６のコレクタがノード１０１８に接続され、トランジスタのベースがノード１０１５に接続され、トランジスタのエミッタがノード１０１７に接続され、トランジスタのモデルがＱ２Ｎ３９０４モデルであるということである。任意選択の第２の行の解釈はコレクタ（ノード１０１８）の任意選択の初期条件が９ボルトであるということである。
第２の例のように、ＱＴ８関数が第４図の修正可能なワイヤＺ０に適用されたと仮定する。ＱＴ８は第２のサブセット（すなわちＱＴ６、．．．、ＱＴ１１）中にあるので、ＱＴ８はハイライトされた構成要素Ｚ０の負の端部に対して動作する。すなわち、ノード４０１はトランジスタに変換される「活動」ノードであり、ノード４０２は「非活動」ノードである。ノード４０２の３つの既存の構成要素はＺ０、Ｃ２、およびＣ３である。
表２は、新しいトランジスタのベースを最小番号構成要素（すなわちＺ０）に接続し、コレクタを中間番号構成要素（すなわちＣ２）に接続し、エミッタを最大番号構成要素（すなわちＣ３）に接続することを示す。第１１図に、ＱＴ８関数を第４図の修正可能なワイヤＺ０に適用し、それによりトランジスタＱ６を生成した結果を示す。
次に、ハイライトされた構成要素のただ１つのノードが度数３であり、かつ他のノードが度数２である場合について考えてみる。この場合、度数３の一方のノードは活動ノードであり、他方のノードは非活動ノードである。表２は前と同じ形で適用される。
最後に、ハイライトされた構成要素の両方のノードが度数２である場合について考えてみる。第１２図に度数２の２つのノードに接続されたハイライトされた構成要素を示す。
前のように、第１の６つの関数（ＱＴ０、．．．、ＱＴ５）はトランジスタを、ハイライトされた構成要素の正の端部がそれに接続されたノードに挿入し、第２の６つの関数（ＱＴ６、．．．、ＱＴ１１）はトランジスタを負の端部に挿入する。
表３に、新しいトランジスタのどのリード線（コレクタ、ベース、エミッタ）をハイライトされた構成要素に接続するか、およびどの２つのリード線を活動ノードの他の構成要素（すなわちハイライトされた構成要素以外の構成要素）に接続すべきかを示す。
0003958793.tif 000013
例えば、ＱＴ７（またはＱＴ１０）関数が第１２図のハイライトされた構成要素に適用されたと仮定する。ＱＴ７は第２のサブセット（すなわちＱＴ６、．．．、ＱＴ１１）中にあるので、ＱＴ７はハイライトされた構成要素Ｚ０の負の端部に対して動作する。すなわち、ノード１２０１はトランジスタに変換される「活動」ノードであり、ノード１２０２は「非活動」ノードである。活動ノード１２０１の２つの既存の構成要素はＲ１およびＣ２である。表３は、新しいトランジスタのベースをハイライトされた構成要素（すなわちＲ１）に接続し、コレクタおよびエミッタをともに活動ノード（すなわちＣ２）に接続された他の構成要素に接続することを示す。第１３図に、ＱＴ７関数を第１２図の抵抗Ｒ１に適用し、それによりトランジスタＱ６を生成した結果を示す。
一実施形態では、世代０の初期ランダムポピュレーションを生成するために、グループの関数の１つを選択する累積確率が関数集合から任意の他の非グループ化関数を選択する確率に等しくなるように、関数のグループに属するすべての関数を重み付けする。したがって、例えば、１２個の各ＱＴ関数は、いわば、Ｌ関数やＣ関数を選択する確率の１／１２に等しい選択される確率を有する。一実施形態では、この重み付けの手法はまた、一般にすべての他の同様の関数グループに使用される。
図示のように、構成要素生成関数のＱＴグループを定義する場合に使用される一般的な原理は任意の３リード線構成要素（例えば、後述するようにオペアンプ）に適用できる。
ディジタル・インバータ関数
２引数ディジタル・インバータ（否定）関数はハイライトされた構成要素をディジタル・インバータ構成要素に変化させる。
第１０６図に、ディジタル・インバータ関数を第４図の修正可能なワイヤＺ０に適用し、それにより第４図の修正可能なワイヤＺ０の代わりにノード１および２を接続するディジタル・インバータＮＯＴ１を生成した結果を示す。
ディジタルＡＮＤ関数
３引数ディジタルＡＮＤ関数（ＡＮＤ０、．．．、ＡＮＤ１１）のグループ中の１２個の関数はハイライトされた構成要素を、ＱＴ関数がハイライトされた構成要素を３リード線トランジスタに変換するのと同じ形でディジタルＡＮＤゲートに変換する。ディジタルＡＮＤ関数を実行した後、３つの新しい修正可能なワイヤを指す３つの書込みヘッドがある。
第１０７図に、ディジタルＡＮＤ６関数を第４図の修正可能なワイヤＺ０に適用し、それによりＡＮＤゲートＡＮＤ６を生成した結果を示す。
ディジタルＯＲ関数
３引数ディジタルＯＲ関数（ＯＲ０、．．．、ＯＲ１１）のグループ中の１２個の関数はハイライトされた構成要素を、ＱＴ関数がハイライトされた構成要素を３リード線トランジスタに変換するのと同じ形でディジタルＯＲゲートに変換する。ディジタルＯＲ関数を実行した後、３つの新しい修正可能なワイヤを指す３つの書込みヘッドがある。
第１０８図に、ディジタルＯＲ６関数を第４図の修正可能なワイヤＺ０に適用し、それによりＯＲゲートＯＲ６を生成した結果を示す。
他のディジタル関数
他の純粋にディジタルな関数（例えば、ＮＡＮＤ関数、ＮＯＲ関数、排他的論理和ＸＯＲ関数、非排他的論理和ＮＸＯＲ関数）が同様に定義できる。さらにフリップフロップなどのディジタル関数も定義できる。
回路のすべての構成要素がディジタル構成要素である場合に回路がディジタルであるという。回路のすべての構成要素がアナログである場合に回路がアナログであるという。回路がアナログ構成要素とディジタル構成要素の両方を含む場合に回路が混合アナログ／ディジタルであるという。ＳＰＩＣＥなど電気シミュレータは、ディジタル回路、アナログ回路、混合アナログ／ディジタル回路に適合する。
ネオン電球関数
１引数ＮＥ（「ネオン電球」）関数はハイライトされた構成要素をネオン電球に変化させる。ネオン電球は、そのリード線間に６７ボルト以上の電圧があるときに点灯する。この電圧は固定であり、ネオン電球は他の構成要素値を有しないので、演算実行サブツリーはない。したがって、この関数は構成継続サブツリーのみを有し、１引数関数である。
ＤＣ電源（ＤＣ）関数
２引数ＤＣ（「ＤＣ電源」）関数はハイライトされた構成要素をＤＣ電源に変化させる。構成要素値はそのＤＣ電圧の値である。演算実行サブツリーは浮動小数点値を戻すことによって構成要素の数値を指定する。浮動小数点値は構成要素の値と解釈される。電源の場合、解釈の方法は、抵抗、コンデンサ、インダクタなどの構成要素のそれと異なる。演算実行サブツリーは浮動小数点値を戻し、浮動小数点値は以下の形で構成要素の値と解釈される。戻り値が−１００．０と＋１００．０の間である場合、Ｕはサブツリーによって戻された値に等しい。戻り値が−１００．０より小さい場合、Ｕは−１００．０ボルトＤＣにセットされる。戻り値が＋１００．０よりも大きい場合、Ｕは＋１００．０にセットされる。この手法は、構成要素に適切な狭い範囲内の電源の電圧レベルをつくり出す。
ＡＣ電源（ＡＣ）関数
６引数ＡＣ（「ＡＣ電源」）関数はハイライトされた構成要素をＡＣ正弦波電源に変化させる。ＡＣ電源に関連する５つの構成要素値は、そのオフセット電圧、その振幅電圧、その周波数、その時間遅延（秒）、およびその減衰定数である。５つの演算実行サブツリーは、適切な形で解釈される５つの浮動小数点値を戻すことによってこれら５つの数値を指定する。電源の場合、解釈の方法は、抵抗、コンデンサ、インダクタなどの構成要素のそれと異なる。さらに、解釈の方法はこの特定の構成要素生成関数の５つの値に対して異なる。
振幅および周波数の場合、各演算実行サブツリーによって戻された浮動小数点値は以下の形で解釈される。戻り値が−１００．０と＋１００．０の間である場合、Ｕはサブツリーによって戻された絶対値に等しい。戻り値が−１００．０より小さいか、または＋１００よりも大きい場合、Ｕは＋１００．０にセットされる。
オフセット電圧、時間遅延、および減衰定数の場合、各演算実行サブツリーによって戻された浮動小数点値は以下の形で解釈される。戻り値が−１００．０と＋１００．０の間である場合、Ｕはサブツリーによって戻された値に等しい。戻り値が−１００．０より小さい場合、Ｕは−１００．０にセットされる。戻り値が＋１００．０よりも大きい場合、Ｕは＋１００．０にセットされる。
変圧器関数
変圧器は、その２つのコイル上の交流信号の電圧をその「巻線比」に従って変化させる。例えば、変圧器は、その一次コイル上の信号の電圧を１０倍に逓昇し、新しいより電圧の高い信号をその二次コイル上で使用できるようにする。「巻線比」は、一般に変圧器に対して固定であり、そのモデルの変圧器の仕様の一部である。
（ＴＲＡＮＦＯＲＭＥＲ０、．．．、ＴＲＡＮＦＯＲＭＥＲ５と呼ばれる）４引数関数のＴＲＡＮＦＯＲＭＥＲグループ中の６つの関数は、８つの新しいノード、４つの新しい修正可能なワイヤを生成し、ハイライトされた構成要素を変圧器に変化させる。ＴＲＡＮＦＯＲＭＥＲ関数を実行した後、４つの書込みヘッドがある。それらは、新しい変圧器の４つのリード線に接続された４つの新しい修正可能なワイヤを指す。新しい変圧器自体上には書込みヘッドがないので、変圧器は、ＴＲＡＮＦＯＲＭＥＲ関数によって挿入された後開発中の回路中に残る。
変圧器の４つのリード線のうち２つのリード線は変圧器の一次コイルに関連し、他の２つのリード線は変圧器の二次コイルに関連する。すなわち、変圧器の２つのコイルは別個であり、交換できない。２つの変圧器中の交流信号の位相が重要である用途では、各コイルの各リード線も別個であり、交換できない。しかしながら、用途によっては、位相は重要でないこともあり、したがって特定のコイルの２つのリード線は交換できると考えてよい。（位相が重要である場合、１２個の異なるＴＲＡＮＦＯＲＭＥＲ関数がある）。本明細書では後者の場合をこの議論のために仮定する。このように仮定すれば、ＴＲＡＮＦＯＲＭＥＲ関数によって生成された６つの潜在的に異なる結果は、４つのオブジェクトを２つのオブジェクトの２つのサブセットに分割する３つの異なる方法、およびより低い電圧およびより高い電圧を２つのコイルに割り当てる２つの異なる方法から生じる。
ハイライトされた構成要素の両方のノード（すなわち第４図のノード４０１および４０２）が度数３であるとき、６つのＴＲＡＮＦＯＲＭＥＲ関数は６つの別個の結果を生じる。いずれかのＴＲＡＮＦＯＲＭＥＲ関数を第４図のノード４０１および４０２に適用した結果を以下に示す。
第１に、ＴＲＡＮＦＯＲＭＥＲ関数は４つの新しい修正可能なワイヤＺ６、Ｚ７、Ｚ８、Ｚ９および８つの新しいノード３、４、５、６、１４、１５、１６、１７を生成する。
第２に、変圧器の一次コイルの２つのリード線が新しいノード３および４に接続される。
第３に、変圧器の二次コイルの２つのリード線が新しいノード５および６に接続される。
第４に、ノード１がノード１４および１５に分割され、ノード２がノード１６および１７に分割される。
表４は、ハイライトされた構成要素の両方のノードが度数３であるときに適用される。表４は、４つの新しいノード３、４、５、６のうち、ハイライトされた構成要素の正の端部の番号のより小さい構成要素、ハイライトされた構成要素の正の端部の番号のより大きい構成要素、ハイライトされた構成要素の負の端部の番号のより小さい構成要素、およびハイライトされた構成要素の負の端部の番号のより大きい構成要素に接続されるべきノードを示す。
0003958793.tif 000014
第８６図に、ＴＲＡＮＦＯＲＭＥＲ０関数を第４図の修正可能なワイヤＺ０に適用した結果を示す。
第８７図に、ＴＲＡＮＦＯＲＭＥＲ１関数を第４図の修正可能なワイヤＺ０に適用した結果を示す。
第８８図に、ＴＲＡＮＦＯＲＭＥＲ２関数を第４図の修正可能なワイヤＺ０に適用した結果を示す。
第８９図に、ＴＲＡＮＦＯＲＭＥＲ３関数を第４図の修正可能なワイヤＺ０に適用した結果を示す。
第９０図に、ＴＲＡＮＦＯＲＭＥＲ４関数を第４図の修正可能なワイヤＺ０に適用した結果を示す。
第９１図に、ＴＲＡＮＦＯＲＭＥＲ５関数を第４図の修正可能なワイヤＺ０に適用した結果を示す。
ノード４０１が度数２である場合、ワイヤＺ６およびＺ８は同じ点で終端する。同様に、ノード４０２が度数２である場合、ワイヤＺ７およびＺ９は同じノードで終端する。
４つの挙動の異なるリード線を有する４リード線構成要素の構成要素生成関数の２４個のバージョンがある。それを理解すれば、構成要素生成関数のＴＲＡＮＦＯＲＭＥＲグループを定義する場合に使用される一般的な原理は任意の４リード線構成要素に適用できることが示せる。
ＴＷＯ＿ＬＥＡＤ＿ＯＰＡＭＰ関数
オペアンプは（通常使用される）５つのリード線を有する構成要素である。その第１の２つのリード線はオペアンプへの入力である。さらに、第３のリード線は一般に固定の正電圧源に接続され、第４のリード線は一般に固定の負電圧源に接続される。オペアンプはその２つの入力電圧間の差をとり、その差と定数Ａ（増幅定数）との積を第５のリード線への出力として発生する。
これら２つの固定電圧源へのオペアンプの第３および第４のリード線の接続は非常に一般的であるので、これら２つのリード線が全く自由でなく、代わりにこれら２つの固定電圧源にハードワイヤされるオペアンプの特殊なバージョンについて考えることが有用である。さらに、いくつかの回路では、目的は、単に２つの入力電圧間の差をとり、次いでその差を増幅定数Ａだけ増幅するのではなく、１つの入力を増幅することである。したがって、ＴＷＯ＿ＬＥＡＤ＿ＯＰＡＭＰ関数を備えることが有用である。
２引数ＴＷＯ＿ＬＥＡＤ＿ＯＰＡＭＰ分割関数（ＴＷＯ＿ＬＥＡＤ＿ＯＰＡＭＰ０およびＴＷＯ＿ＬＥＡＤ＿ＯＰＡＭＰ１）のグループ中の２つの関数はハイライトされた構成要素をオペアンプに変換する。ＴＷＯ＿ＬＥＡＤ＿ＯＰＡＭＰ関数を実行した後、元の構成要素および２つのコピーを指す１つの新しい書込みヘッドがある。
オペアンプの増幅定数Ａはそのモデルによって指定される。
ＴＷＯ＿ＬＥＡＤ＿ＯＰＡＭＰ０関数はハイライトされた構成要素を、その正の入力リード線がハイライトされた構成要素の正の端部（第９２図のノード２）に接続され、その出力リード線がハイライトされた構成要素の負の端部（第９２図のノード１）に接続されたオペアンプに変換する。ＴＷＯ＿ＬＥＡＤ＿ＯＰＡＭＰ１関数はオペアンプを反対の方向に挿入する。
第１１０図に、ＴＷＯ＿ＬＥＡＤ＿ＯＰＡＭＰ１関数を適用した結果を示す。その正の入力リード線はハイライトされた構成要素の負の端部（第９２図のノード１）に接続され、その出力リード線がハイライトされた構成要素の正の端部（第９２図のノード２）に接続される。
ＴＨＲＥＥ＿ＬＥＡＤ＿ＯＰＡＭＰ関数
ＴＷＯ＿ＬＥＡＤ＿ＯＰＡＭＰ関数は、２つの入力電圧間の差をとり、次いでその差を増幅定数Ａだけ増幅する必要があるときには十分でない。したがって、ＴＨＲＥＥ＿ＬＥＡＤ＿ＯＰＡＭＰ関数を備えることが有用である。
３引数ＴＨＲＥＥ＿ＬＥＡＤ＿ＯＰＡＭＰ分割関数（ＴＨＲＥＥ＿ＬＥＡＤ＿ＯＰＡＭＰ０、．．．、ＴＨＲＥＥ＿ＬＥＡＤ＿ＯＰＡＭＰ１１）のグループ中の１２個の関数はハイライトされた構成要素を、ＱＴ関数がハイライトされた構成要素を３リード線トランジスタに変換するのと同じ形でオペアンプに変換する。ＴＨＲＥＥ＿ＬＥＡＤ＿ＯＰＡＭＰ関数を実行した後、３つの新しい修正可能なワイヤを指す３つの書込みヘッドがある。
オペアンプの増幅定数Ａはそのモデルによって指定される。
ＴＨＲＥＥ＿ＬＥＡＤ＿ＯＰＡＭＰ関数は実際の回路の広範囲に充分である。
第１０９図はＴＨＲＥＥ＿ＬＥＡＤ＿ＯＰＡＭＰ１関数を適用した結果を示す。
ＦＩＶＥ＿ＬＥＡＤ＿ＯＰＡＭＰ関数
５引数のＦＩＶＥ＿ＬＥＡＤ＿ＯＰＡＭＰ関数はオペアンプのリード線の割当ての融通性を高める。さらに、５本のリード線を備えたオペアンプの挿入方法は５本のリード線を備えたその他の構成要素、ならびにそれ以上の本数のリード線を備えた構成要素にも拡張できる原理を示している。
オペアンプへの５種類の入力を入れ替えるのには、１２０通りの方法が考えられる。さらに、ハイライトされた構成要素の各ノードが３度である場合、開発回路にオペアンプを挿入するのには、４種類の異なる方法がある。したがって、４８０のＦＩＶＥ＿ＬＥＡＤ＿ＯＰＡＭＰ関数がある。１２０の組合せのうち１つだけが実施形態の１つで使用され、本明細書で説明される（すなわち、オペアンプの５本のリード線がまったく入れ替えられない場合に適用される４８０種類のＦＩＶＥ＿ＬＥＡＤ＿ＯＰＡＭＰ関数のうちの４つ）。
構成要素作成関数のＦＩＶＥ＿ＬＥＡＤ＿ＯＰＡＭＰグループを定義する際に使用される原理を、５本の独自のリード線を備えた任意の構成要素に適用できることがわかる。
６引数の関数のＦＩＶＥ＿ＬＥＡＤ＿ＯＰＡＭＰグループの４つの関数（ＦＩＶＥ＿ＬＥＡＤ＿ＯＰＡＭＰ０、．．．、ＦＩＶＥ＿ＬＥＡＤ＿ＯＰＡＭＰ３という）は７つの新しいノード、５本の変更可能ワイヤを作成し、ハイライトされた構成要素を他の既存の構成要素とともにオペアンプへ変更させる。ＦＩＶＥ＿ＬＥＡＤ＿ＯＰＡＭＰ関数の実行後、５つの書込みヘッドが得られる。これらは新しいオペアンプの５本のリード線に接続された新しい５本の変更可能ワイヤをポイントする。新しいオペアンプ自体には書込みヘッドが存在しないため、あるオペアンプをＦＩＶＥ＿ＬＥＡＤ＿ＯＰＥＡＭＰ関数によって挿入された場合、これは開発回路に残る（後述のＣＵＴ関数がその後これを削除しない限り）。
オペアンプの増幅度Ａはそのモデルによって指定される。
第９２図は回路の一部を示している。その回路は、抵抗Ｒ１が書込みヘッドを有しており、端部の両方が３度のノードに接続されており、ノード３にある第２の削除対象構成要素（Ｒ７）の端部が３度である。抵抗Ｒ７が高い番号の構成要素であり、ハイライトされた構成要素（Ｒ１）のプラス端部と同じノードに接続されていることに留意されたい。
ハイライトされた構成要素の両方のノード（すなわち、第９２図の抵抗Ｒ１のノード１および２）が３度である場合、４つのＦＩＶＥ＿ＬＥＡＤ＿ＯＰＡＭＰ関数（１２０の組合せの１つに関連付けられた）は４種類の結果を生じる。
ＦＩＶＥ＿ＬＥＡＤ＿ＯＰＡＭＰ関数はハイライトされた構成要素Ｒ１、ならびにＲ１のノードの１つに接続された１つの付加的な構成要素を削除する。ＦＩＶＥ＿ＬＥＡＤ＿ＯＰＡＭＰ０、．．．、ＦＩＶＥ＿ＬＥＡＤ＿ＯＰＡＭＰ３の間の違いは、第２の削除対象構成要素の同一性である。たとえば、ＦＩＶＥ＿ＬＥＡＤ＿ＯＰＡＭＰ１はＲ１のプラス端部が接続されているノード、すなわちＲ７における高い番号の構成要素を削除する。
ＦＩＶＥ＿ＬＥＡＤ＿ＯＰＡＭＰ関数を図のノード１および２に適用した結果は次の通りである。
第１に、ＦＩＶＥ＿ＬＥＡＤ＿ＯＰＡＭＰ関数は５本の新しい変更可能ワイヤＺ８、Ｚ９、Ｚ１０、Ｚ１１およびＺ１２、ならびに新しいノード１５、１６、１７、１８、１９、２０および２１を作成する。
第２に、オペアンプのプラス入力は新しいノード１８に接続され、オペアンプのマイナス入力は新しいノード１７に接続される。
第３に、通常プラス電圧源（文献では、従来Ｖ＋で表されている）に接続されるリード線は新しいノード１９に接続され、通常マイナス電圧源（文献では、従来Ｖ−で表されていた）に接続されるリード線は新しいノード１５に接続される。
第４に、オペアンプの出力は新しいノード１５に接続される。
第５に、Ｒ１のマイナス端部が本来接続されていたノードは、新しいノード２０を生じるように分割される。Ｒ１のマイナス端部が本来接続されていた低い番号の構成要素（Ｒ１を除く）はノード１に接続されたままであるが、高い番号の構成要素は新しいノード２０に接続されるようになる。
第６に、第２の削除対象構成要素に接続されているノード（かつ、Ｒ１に接続されていない）（たとえば、ノード３）は、新しいノード２１を生じるように分割される。ノード３が本来接続されていた低い番号の構成要素（第２の削除対象構成要素を除く）はノード３に接続されたままであるが、高い番号の構成要素は新しいノード２１に接続されるようになる。
第７に、ノード２はＲ１および第２の削除対象構成要素の両方との接続から外される。
第８に、新しい変更可能ワイヤＺ８はノード１５とノード３の間に接続され、Ｚ９はノード１６およびノード２１の間に接続され、Ｚ１０はノード１７とノード２０の間に接続され、Ｚ１１はノード１とノード１８の間に接続され、Ｚ１２はノード１９とノード２の間に接続される。
第９３図はＦＩＶＥ＿ＬＥＡＤ＿ＯＰＡＭＰ１関数を第９２図の抵抗Ｒ１に適用した結果を示す。
この関数が内容に即した構成要素作成関数の一例（本明細書ではいくつかあるもののうちの）であることに留意されたい。
ＳＰＩＣＥにおけるサブ回路の定義
サブ回路の定義を構成要素作成関数に含めることができる。サブ回路によって、構成要素の組合せを定義してから、回路のネットリストに含めることが可能となる。
ＳＰＩＣＥは「ｓｕｂｃｋｔ」コマンドを使用してサブ回路の定義をサポートする。サブ回路の定義は数値パラメータを含んでいても、含んでいなくてもよい。
サブ回路の定義を自動定義関数と混同してはならない。サブ回路定義は設計する回路のプリミティブ構成要素であるかのように取り扱われる構成要素を定義する。サブ回路は遺伝的プログラミングの実行前に定義される。サブ回路はいったん定義されると、他のすべての構成要素（たとえば、抵抗、コンデンサ）とまったく同様に取り扱われる。対照的に、自動定義関数は作業実行本体が遺伝的プログラミングの実行中に動的に発展する関数定義ブランチである。自動定義関数は通常、接続作成関数と構成要素作成関数の構成要素を含んでいる。ただし、自動定義関数は数値パラメータ（ダミー引数）を含んでいても、含んでいなくてもよい。
他の構成要素作成関数
上記の構成要素作成関数は本発明の自動設計システムの汎用性と融通性を示している。多くの他の構成要素作成関数を作成して、回路の特定のクラスまたは回路要素の特定のトポロジ構成を設計する要件に対処することができる。ＱＴ関数によってすでに説明したように、構成要素を挿入して、ノード（点）を置き換えたり、回路図のエッジ（線）を置き換えることができる。内容に即したＦＩＶＥ＿ＬＥＡＤ＿ＯＰＡＭＰ関数によってすでに説明したように、５本（または、それ以上）のリード線を備えた構成要素を挿入して、ノード（点）、エッジ（線）および他の隣接する構成要素を置き換えることができる。本発明で使用される多くの他の関数は回路図の２つ以上のノード（点）またはエッジ（線）に動作したり、内容に即した態様で動作したりすることができる。
ノードの度数は上記の説明において２または３であるが、他の構成要素作成関数を、他の構成要素作成関数と関連させて、定義して、度数がもっと大きいノードに対処することができる。
接続作成関数
本発明において、接続作成関数が回路のトポロジを変更する。プログラム・ツリー内の各接続作成関数は関連するハイライトされた構成要素（変更可能ワイヤであることがしばしばある）をポイントし、何らかの態様で開発回路のトポロジを改変する。各接続作成関数はゼロ個、１個またはそれ以上の書込みヘッドを生じる。さらに、実施形態の１つにおいて、各接続作成関数は回路内のいずれか１つのノードに影響を与えるラインの数を２または３のいずれかにしておく。他の実施形態において、各接続作成関数の結果として残されるいずれか１つのノードに影響を与えるラインの数は、４以上（たとえば、４、５など）でよい。
接続作成関数のなかには内容に関係の無いものも、内容に即したものもある。接続作成関数が内容に関係のないものである場合、結果は単一のハイライトされた構成要素（すなわち、書込みヘッドを備えた構成要素）のみによって左右される。接続作成関数が内容に即したものである場合、結果は単一のハイライトされた構成要素だけではなく、回路構造の他の近傍の要素にも左右される。本発明は内容に即した関数ならびに内容に関係ない関数を実行することによって生じる複雑な構造の作成をサポートしている。
表５は電気回路に対する若干の例示的な接続作成関数をリストし、関数の短縮名、関数の長い説明的な名前、およびそのアリティを含んでいる。
0003958793.tif 000015
0003958793.tif 000016
表５の関数のセットは本発明の自動設計方法で用いられる接続作成関数に考えられる各種の変形を示している。多くの付加的な異なる接続作成関数を特定の問題または状況に合わせて作成することができる。
ＦＬＩＰ関数
２本のリード線（端部、インタフェース）を備えているすべての電気的構成要素は、これらのおのおのが指定されたプラス（＋）端部および指定されたマイナス（−）端部を有している意味で、ＳＰＩＣＥにおいて極性を有している。回路に対するネットリストの各ラインにおける最初にリストされたノードが構成要素のプラス端部に接続されたノードであり、第２にリストされたノードに構成要素のマイナス端部が接続されていることによって、極性が反映される。極性がダイオードなどの構成要素の問題であることは明らかである。極性は、エンブリオニック回路を完全に開発された回路に開発するプロセスの順次過程にこれが影響を及ぼすため、電気的挙動が構成要素の極性と無関係である構成要素（たとえば、ワイヤ、抵抗）の問題でもある。
本発明において、ＦＬＩＰ関数は２つの端部だけを備えている任意の構成要素の極性を逆転する方法を与える。第１４図はＦＬＩＰ関数を第７図のダイオードＤ１に適用することにより、極性が逆転されたダイオードＤ２を作成した結果を示す。
１引数ＦＬＩＰ関数はハイライトされた構成要素のプラス端部を、そのマイナス端部が現在接続されているノードへ、あるいはその逆に接続する。ＦＬＩＰ関数の実行後、１つの書込みヘッドは現在フリップされた元の構成要素をポイントする。
単一の５オーム抵抗のＲ１を記述している第４図のネットリストの部分は、以下の１行のネットリストからなっている。
Ｒ１  ４０２  ４０１  ５オーム
ネットリストで最初にリストされたノードが構成要素のプラス端部に接続されたノードであり、したがってノード４０２にそのプラス端部が、ノード４０１にそのマイナス端部が接続されているものとして抵抗Ｒ１が示されていることを想起されたい。
ＦＬＩＰ関数は上記の１行のネットリストを以下のものに変更する。
Ｒ１  ４０１  ４０２  ５オーム
ＳＥＲＩＥＳ分割関数
３引数のＳＥＲＩＥＳ（「直列分割」）関数は１つのハイライトされた構成要素で動作し、ハイライトされた構成要素、ハイライトされた構成要素のコピー、１つの新しい変更可能ワイヤ、２つの新しいノードを含んでいる直列構成を作成する。ＳＥＲＩＥＳ関数の実行後、元の構成要素、新しい変更可能ワイヤ、および元の構成要素のコピーをポイントする３つの書込みヘッドが得られる。
第１５図はＳＥＲＩＥＳ分割関数を第４図からの抵抗Ｒ１に適用した結果を示す。第１に、ＳＥＲＩＥＳ関数は２つの新しいノード、１５０３と１５０４を作成する。第２に、ＳＥＲＩＥＳは元の構成要素（図の例ではＲ１）のマイナス端部（現在、４０１というラベルがつけられている）を第１の新しいノード１５０４と名前変更し、そのプラス端部を元のノード４０２のままにしておく。第３に、ＳＥＲＩＥＳは新しいノード１５０３と１５０４の間に新しいワイヤ（図では、Ｚ６と呼ばれている）を作成する。新しいワイヤのマイナス端部は第１の新しいノード１５０３へ接続され、プラス端部は第２の新しいノード１５０４へ接続される。第４に、ＳＥＲＩＥＳは元の構成要素の複製（図では、Ｒ７と呼ばれれている）を、新しいノード１５０３と元のノード４０１の間に挿入する。複製のプラス端部は元のノード４０１へ接続され、マイナス端部は新しいノード１５０３へ接続されている。
単一の５オーム抵抗のＲ１を記述している第４図のネットリストの部分は、以下の１行のネットリストからなっている。
Ｒ１  ４０２  ４０１  ５オーム
ＳＥＲＩＥＳ関数は上記の１行のネットリストを以下の３行に変更する。
Ｒ１  ４０２  １５０４  ５オーム
Ｚ６  １５０４  １５０３
Ｒ７  １５０３  ４０１  ５オーム
変更可能ワイヤ（Ｚ６など）が開発プロセス中でだけ使用されるものであり、すべてのこれらのワイヤがＳＰＩＣＥに対するネットリスの最終的な作成前に編集されることに留意されたい。また、ＳＥＲＩＥＳ関数がワイヤに適用され、その結果が３本のワイヤ（各々がそれ自体の書込みヘッドを備えている）の直列構成であることにも留意されたい。すなわち、ワイヤは開発構成要素である。
各タイプの構成要素に対して異なるシリーズの連続した番号を維持するのではなく、構成要素に連続して包括的に番号を振るという規則（たとえば、新しい抵抗をＲ２ではなく、Ｒ７と呼ぶ）に留意されたい。この包括番号付け規則は次の節で説明するいくつかの関数（たとえば、ＰＳＳおよびＰＳＬ）の動作に役立つ。
ＰＳＳおよびＰＳＬ並列分割関数
並列分割関数のグループにおける２つの４引数関数（ＰＳＳおよびＰＳＬ）の各々はハイライトされた構成要素で動作して、元のハイライトされた構成要素、元の構成要素の複製、２本の新しい変更可能ワイヤ、および２つの新しいノードからなる並列構成を作成する。ＰＳＳまたはＰＳＬの実行後、４つの書込みヘッドが得られる。これらの書込みヘッドは元の構成要素、２本の新しいワイヤ、および元の構成要素の複製をポイントする。
ＰＳＳおよびＰＳＬ関数は、元のハイライトされた構成要素が接続されているノードの度数および回路内の既存の構成要素の番号付けによっては、若干異なる態様で動作する。
第１に、ハイライトされた構成要素の両方のノード（すなわち、第４図のノード４０１および４０２）が３度である場合を考える。第４図は４個のコンデンサを含んでいる部分回路のノード４０１および４０２を接続している抵抗Ｒ１を示す。本図において、ノード４０１は３度であり（Ｒ１、コンデンサＣ２およびコンデンサＣ３がこれに接続されているため）、ノード４０２も３度である（Ｒ１、コンデンサＣ４およびコンデンサＣ５がこれに接続されているため）。第１６図および第１７図は、ハイライトされた構成要素の両方のノード（すなわち、ノード４０１および４０２）が３度である（第４図の場合と同様に）ときに、ＰＳＳおよびＰＳＬ関数のそれぞれを抵抗Ｒ１に適用した結果を示す。
第１に、並列分割関数は２つの新しいノード１６０３および１６０４を作成し、また２本の新しいワイヤＺ６（元のノード４０２と新しいノード１６０３の間）とＺ８（元のノード４０１と新しいノード１６０４の間）を作成する。両方の新しいワイヤのマイナス端部は元の構成要素のノード（すなわち、４０１および４０２）に接続され、これにより新しいワイヤの極性を確立する。
第２に、並列分割関数はハイライトされた構成要素の複製（その構成要素値のすべてを含む）を新しいノード１６０３および１６０４の間に挿入する。複製のマイナス端部はノード１６０４（元の構成要素のマイナス端部に接続されている新しいワイヤ、すなわちＺ８によって接続されている新しいノード）に接続される。複製のプラス端部はノード１６０３（元の構成要素のプラス端部に接続されている新しいワイヤ、すなわちＺ６によって接続されている新しいノード）に接続される。これは新しい構成要素の極性を確立する。
第３に、元の構成要素に関して新しい構成要素のトポロジを確立しなければならない。２つの並列分割関数はこれに関し、若干異なる態様で動作する。関数の名前（ＰＳＳまたはＰＳＬ）の３番目の文字（ＳまたはＬ）は、新しい構成要素のマイナス端部がハイライトされた構成要素のマイナス端部に本来接続されていた２つの構成要素のうち小さい番号（Ｓ）の構成要素に接続されているか、大きい番号（Ｌ）の構成要素に接続されているかを示す。
第４図のネットリストは次の通りである。
Ｒ１  ４０２  ４０１  ５オーム
Ｃ２  ４０１  １０
Ｃ３  ４０１  １１
Ｃ４  ４０２  １２
Ｃ５  ４０２  １３
ネットリストで最初にリストされたノードが構成要素のプラス端部へ接続されたノードであることを想起されたい。
並列分割関数ＰＳＳは上記の元のネットリストを次の新しいネットリストへ変更する。
Ｒ１  ４０２  ４０１  ５オーム
Ｚ６  １６０３  ４０２
Ｚ８  １６０４  ４０１
Ｒ７  １６０３  １６０４  ５オーム
Ｃ２  １６０４  １０
Ｃ３  ４０１  １１
Ｃ４  １６０３  １２
Ｃ５  ４０２  １３
Ｃ２およびＣ３は元の構成要素Ｒ１のマイナス端部に本来接続されていた（元のノード１において）２つの元の構成要素である。抵抗が複製された場合、Ｃ２またはＣ３のいずれを新しい抵抗（元のＲ１とは異なる）に接続すべきかという疑問が生じる。Ｃ２の番号がＣ３よりも小さいため、ＰＳＳ関数はＣ２（番号が小さい構成要素）を新しいノード１６０４へ接続させるとともに、Ｃ３を元のノード４０１へ接続されたままにする。第４図の４つのコンデンサの極性が示されておらず、上記のネットリストを提示するにあたり、Ｃ２およびＣ３のプラス端部が元のノード４０１に接続されている（したがって、１６０４がＣ２に関してネットリストで１０行前にあり、４０１がＣ３に関して１１行前にある）と想定しただけであることに留意されたい。ＰＳＳ関数の重要な態様はＣ２およびＣ３の極性にではなく、１６０４がネットリストのＣ２の行に現れる（４０１はＣ３の行に現れる）ことにある。
ＰＳＬ関数はＰＳＳ関数と若干異なる動作をする。ＰＳＬ関数は元のネットリストを以下の新しいネットリストへ変更する。
Ｒ１  ４０２  ４０１  ５オーム
Ｚ６  １７０３  ４０２
Ｚ８  １７０４  ４０１
Ｒ７  １７０３  １７０４  ５オーム
Ｃ２  ４０１  １０
Ｃ３  １７０４  １１
Ｃ４  １７０３  １２
Ｃ５  ４０２  １３
Ｃ３の番号がＣ２よりも大きいため、ＰＳＬ関数はＣ３（番号が大きい構成要素）を新しいノード１７０４へ接続させるとともに、Ｃ２を元のノード４０１へ接続されたままにする。
抵抗Ｒ１が並列構成の一部として複製された場合に生じることのできるすべてのトポロジを、ＰＳＳおよびＰＳＬ関数が作成することに留意されたい。それ故、元の構成要素のプラス端部へ接続された構成要素に対する構成要素番号の相対的な大きさを考慮する必要がない。
極性が電気的な意義を有していない構成要素（たとえば、抵抗）に対してであっても、極性が開発プロセスに影響を及ぼすことに留意されたい。もちろん、多くの構成要素（たとえば、ダイオードおよびトランジスタ）に関しても、極性は電気的に重要である。
ハイライトされた構成要素の両方のノード（すなわち、第１２図のノード１２０１および１２０２）が２度である場合を考える。図示のように、ＰＳＳおよびＰＳＬはこの場合、同一の結果を生じる。
第１２図は２個のコンデンサを含んでいる部分回路のノード１２０１および１２０２を接続している抵抗Ｒ１を示す。Ｒ１は書込みヘッド（すなわち、丸印の）を有している。ノード１２０１は２度であり（Ｒ１およびコンデンサＣ２がこれに接続されているため）、ノード１２０２は２度である（Ｒ１およびコンデンサＣ４がこれに接続されているため）。第１８図はＰＳＳまたはＰＳＬのいずれかを回路に適用した結果を示す（たとえば、ノード１２０１および１２０２が２度である第１２図）。
第１に、並列分割関数は２つの新しいノード１８０３および１８０４を作成し、また２本の新しいワイヤＺ６（元のノード１２０２と新しいノード１８０３の間）とＺ８（元のノード１２０１と新しいノード１８０４の間）を作成する。両方の新しいワイヤのマイナス端部は元の構成要素のノード（すなわち、１２０１および１２０２）に接続され、これにより新しいワイヤの極性を確立する。
第２に、並列分割関数はハイライトされた構成要素の複製（その構成要素値のすべてを含む）を新しいノード１８０３と１８０４の間に挿入する。複製のマイナス端部はノード１８０４（元の構成要素のマイナス端部に接続されている新しいワイヤ、すなわち新しいワイヤＺ８によって接続されている新しいノード）に接続される。複製のプラス端部はノード１８０３（元の構成要素のプラス端部に接続されている新しいワイヤ、すなわち新しいワイヤＺ６によって接続されている新しいノード）に接続される。これは新しい構成要素の極性を確立する。
最後に、ハイライトされた構成要素のノードの１つ（たとえば、第４図のノード４０１）が３度であり、ノード４０２が２度である場合を考える。第１９図は３個のコンデンサを含んでいる、ノード１９０１が３度であり、ノード１９０２が２度である部分回路のノード１９０１および１９０２を接続している抵抗Ｒ１を示す。
トポロジに関する潜在的な問題は、新しいノード２００３がＣ４と元のノード１９０２の間に配置されるかどうか、および元のノード２がＣ４と新しいノード２００３の間に配置されるかどうか（Ｃ２に関しては同様に、ノード１９０１およびノード２００４）だけである。
第２０図はＰＳＳまたはＰＳＬのいずれかを第１９図に適用した結果を示す。
ＰＳＳおよびＰＳＬ関数が内容に即した構成要素作成関数の一例（本明細書ではいくつかあるもののうちの）であることに留意されたい。
ＳＴＡＲ分割関数
３引数のＳＴＡＲ分割関数のグループ内の２つの関数（ＳＴＡＲ０およびＳＴＡＲ１）はハイライトされた１つの構成要素で動作して、ハイライトされた構成要素、ハイライトされた構成要素の２つのコピー、および２つの新しいノードを含んでいる星状の構成を作成する。ＳＴＡＲ関数の実行後、元の構成要素および２つのコピーをポイントする３つの書込みヘッドが得られる。
ＳＴＡＲ関数はハイライトされた構成要素の「活動」ノードで２つのコピーを挿入する。ＳＴＡＲ０関数の場合、活動ノードはハイライトされた構成要素のプラス端部が接続されるノードである。ＳＴＡＲ１関数の場合、活動ノードはハイライトされた構成要素のマイナス端部が接続されるノードである。
ＳＴＡＲ関数を説明するため、これらの関数の一方を第５図の抵抗Ｒ１のノード４０１および４０２に適用した結果を考える。この結果を第９４図に示す。
第１に、ＳＴＡＲ関数は活動ノードをノード３と名前変更する。
第２に、活動ノードの度数が３である場合、ＳＴＡＲ関数は２つの新しいノード４および５を作成するが、活動ノードの度数が２でしかない場合には、ＳＴＡＲ関数は新しいノード４だけを作成する。第３に、ＳＴＡＲ関数は元の構成要素の複製の１つ（Ｒ６と呼ぶ）（その構成要素値のすべてを含む）を、新しいノード３と新しいノード４の間に挿入する（複製のプラス端部はノード３に接続されている）。第４に、活動ノードの度数が３である場合、ＳＴＡＲ関数は元の構成要素の複製の１つ（Ｒ７と呼ぶ）（その構成要素値のすべてを含む）を、新しいノード３と新しいノード５の間に挿入する（複製のプラス端部はノード３に接続されている）。しかしながら、活動ノードの度数が２である場合、ＳＴＡＲ関数は元の構成要素の第２の複製（Ｒ７）を新しいノード３とノード４の間に挿入する（したがって、Ｒ６およびＲ７はノード３および４の間で互いに並列である）。ノード４および５はＲ１のマイナス端部に接続している。
第９４図はＳＴＡＲ１分割関数を第５図の抵抗Ｒ１に適用した結果を示す。第５図のノード１がＳＴＡＲ１に対する活動ノードであり、３度であることに留意されたい。
単一の５オームの抵抗Ｒ１を記述している第５図のネットリストの部分は、以下の５行からなっている。
Ｒ１  ４０２  ４０１  ５オーム
Ｃ２  ４０１  １０
Ｃ３  ４０１  １１
Ｃ４  ４０２  １２
Ｃ５  ４０２  １３
ＳＴＡＲ１関数は上記を以下のように変更する。
Ｒ１  ４０２  ３  ５オーム
Ｒ６  ３  ４  ５オーム
Ｒ７  ３  ５  ５オーム
Ｃ２  ４  １０
Ｃ３  ５  １１
Ｃ４  ２  １２
Ｃ５  ２  １３
第５図のノード１が２度である場合、結果は次のようになる。
Ｒ１  ４０２  ３  ５オーム
Ｒ６  ３  ４  ５オーム
Ｒ７  ３  ４  ５オーム
Ｃ２  ４  １０
Ｃ４  ２  １２
Ｃ５  ２  １３
ＴＲＩＡＮＧＬＥ関数
６引数のＴＲＩＡＮＧＬＥ関数のグループの２つの関数（ＴＲＩＡＮＧＬＥ０およびＴＲＩＡＮＧＬＥ１）はハイライトされた構成要素の１つで動作して、これ（および隣接する１つのノード）を排除し、かつ元のハイライトされた構成要素の３つのコピー（およびその構成要素値のすべてを含む）、３本の新しい変更可能ワイヤ、および５つの新しいノードからなる三角形構成を作成する。ＴＲＩＡＮＧＬＥ関数の実行後、６つの書込みヘッドが得られる。これらは３つのコピーおよび３番の新しいワイヤをポイントする。
ＴＲＩＡＮＧＬＥ関数はハイライトされた構成要素の「活動」ノードで三角形構成を挿入する。ハイライトされた構成要素の２つのノードの度数が異なっている場合、活動ノードは３度のノードである。また、ＴＲＩＡＮＧＬＥ０関数の場合、活動ノードはハイライトされた構成要素のプラス端部が接続されているノードであるが、ＴＲＩＡＮＧＬＥ１関数の場合、活動ノードはハイライトされた構成要素のマイナス端部が接続されているノードである。
活動ノードが３度である場合、ＴＲＩＡＮＧＬＥ関数は第５図の抵抗Ｒ１のノード４０１および４０２に適用したときに、以下の結果を生じる。
第１に、ＴＲＩＡＮＧＬＥ関数はハイライトされた構成要素を排除し、活動ノードをノード３と名前変更し、ノード３と受動ノードの間に新しい変更可能ワイヤＺ５を作成する。
第２に、ＴＲＩＡＮＧＬＥ関数は４つの新しいノード４、５、６および７を作成する。
第３に、ＴＲＩＡＮＧＬＥ関数は元の構成要素の複製の１つ（Ｒ６と呼ぶ）（その構成要素値のすべてを含む）を、新しいノード３と新しいノード４の間に挿入し（複製のプラス端部はノード３に接続されている）、新しい変更可能ワイヤＺ９を新しいノード４と新しいノード６の間に挿入する。
第４に、ＴＲＩＡＮＧＬＥ関数は元の構成要素の第２の複製（Ｒ７と呼ぶ）を、新しいノード３と５の間に挿入し（複製のプラス端部はノード３に接続されている）、新しい変更可能ワイヤＺ１０を新しいノード５と新しいノード７の間に挿入する。
第５に、ＴＲＩＡＮＧＬＥ関数は元の構成要素の第３の複製（Ｒ８と呼ばれる）を新しいノード４と５の間に挿入する（複製のプラス端部はノード４に接続されている）。
第９５図は、活動ノード（ノード４０１）が３度である場合に、第５図の抵抗Ｒ１へＴＲＩＡＮＧＬＥ１分割関数を適用した結果を示す。
活動ノードが２度である場合、ＴＲＩＡＮＧＬＥ関数は第５図の抵抗Ｒ１のノード４０１および４０２に適用したときに、以下の結果を生じる。
第１に、ＴＲＩＡＮＧＬＥ関数は活動ノードをノード３と名前変更し、ノード３と受動ノードの間に新しい変更可能ワイヤＺ５を作成する。
第２に、ＴＲＩＡＮＧＬＥ関数は３つの新しいノード４、５および６を作成する。
第３に、ＴＲＩＡＮＧＬＥ関数は元の構成要素の複製の１つ（Ｒ６と呼ぶ）（その構成要素値のすべてを含む）を、新しいノード３と新しいノード４の間に挿入し（複製のプラス端部はノード３に接続されている）、新しい変更可能ワイヤＺ９を新しいノード４と新しいノード６の間に挿入する。
第４に、ＴＲＩＡＮＧＬＥ関数は元の構成要素の第２の複製（Ｒ７と呼ばれる）を新しいノード３と５の間に挿入し（複製のプラス端部はノード３に接続されている）、新しい変更可能ワイヤＺ１０を新しいノード５と新しいノード６の間に挿入する。
第５に、ＴＲＩＡＮＧＬＥ関数は元の構成要素の第３の複製（Ｒ８と呼ばれる）を新しいノード４と５の間に挿入する（複製のプラス端部はノード４に接続されている）。
第９６図は、活動ノード（ノード４０１）が２度である場合に、第５図の抵抗Ｒ１へＴＲＩＡＮＧＬＥ１分割関数を適用した結果を示す。
ＣＵＴ関数
０引数のＣＵＴ関数により、ハイライトされた構成要素が回路から除去される。ＣＵＴ関数により、書込みヘッドが失われ、これによりこの特定の開発パスが終了する。ＣＵＴ関数が発生すると、全体的なプログラム・ツリー内の開発パスに沿った開発のみが停止する。第２１図はＣＵＴ関数を第４図の変更可能ワイヤに適用した結果を示す。
２引数のＶＩＡ、ＧＮＤおよびＰＯＳ関数
８つの２引数のＶＩＡ関数（本明細書では、ＶＩＡ０、．．．、ＶＩＡ７と呼ぶ）、２引数のＧＮＤ（「接地」）関数、および２引数のＰＯＳ（「プラス基準電圧源」）関数により、回路の離れた部品を互いに接続することが可能となる。
２引数のＶＩＡ関数
８つの２引数のＶＩＡ関数（本明細書では、ＶＩＡ０、．．．、ＶＩＡ７と呼ぶ）の各々は、各々が後続の書き込みヘッドを有している２本のワイヤと、書込みヘッドを有していない番号がつけられたポート（「バイア」と呼ぶ）からなる直列構成を作成する。ポートは回路が置かれるウェハの８つの仮想層（０ないし７の番号がつけられている）の指定された１つに接続されている。回路の１つまたは複数の部品が特定のレイヤに接続している場合には、このような部品はすべてワイヤがこれらの間に延びているかのようにして、電気的に接続される。回路の他の部品が特定のレイヤに接続していない場合には、そのレイヤに接続している１つのポートが不要となる（また、このポートは回路のネットリストが結果として作成された場合に、削除される）。ＶＩＡ関数の実行後、２つの書込みヘッドが得られる。これらは２本の新しいワイヤをポイントする。
第２２図は第４図から抵抗Ｒ１にＶＩＡ０関数を適用した結果を示す。この場合、ノード４０１と新しいノード２２０３の間のワイヤＺ６、およびノード４０２と新しいノード２２０３の間のワイヤＺ７は、元の構成要素を置き換える。ポートＭ０  ２２０４は新しいノード２３０３を全体的な回路の他の部品へ接続する方法を与える。ポートＭ０  ２２０４は番号０のレイヤに接続される。
２引数のＧＮＤ関数
２引数のＧＮＤ（「接地」）関数により、回路の離れた部品を接地することが可能となる。ＧＮＤ関数は特別な「バイア」関数であり、回路の電気的接地に直接接続する。接地へのこの直接接続は、回路内の接地への接続を必要とするＧＮＤ関数が１つしかない場合でも行われる。ＧＮＤ関数の実行後、２つの書込みヘッドが得られる。これらは２本の新しいワイヤをポイントする。
２引数のＰＯＳ関数
２引数のＰＯＳ（「プラス基準電圧源」）関数により、回路の離れた部品をプラス（たとえば、＋５．０）の直流電圧電源に接続することが可能となる。ＰＯＳ関数は特別な「バイア」関数であり、プラス電源に直接接続する。この直接接続は、電源への接続を必要とするＰＯＳ関数が１つしかない場合でも行われる。ＰＯＳ関数の実行後、２つの書込みヘッドが得られる。これらは２本の新しいワイヤをポイントする。
３引数のＴＨＶＩＡ関数
８つの３引数のＴＨＶＩＡ関数（ＴＨＶＩＡ０、．．．、ＴＨＶＩＡ７と呼ぶ）の各々により、回路の離れた部品を互いに接続することが可能となる。ＴＨＶＩＡ関数はＶＩＡ関数と同様であるが、ＴＨＶＩＡ関数は３つの引数を取る。３本の新しい変更可能ワイヤが作成され、またＴＨＶＩＡ関数の実行後に３つの書きこみヘッドが得られる。３つの書きこみヘッドは３本の新しいワイヤをポイントする。
第２３図は、第４図からＴＨＶＩＡ０関数をワイヤＺ０に適用した結果を示す。ＴＨＶＩＡ０関数はＺ０をノード４０１と新しいノード２３０３の間の新しい変更可能ワイヤＺ６、ノード４０２と新しいノード２３０３の間の新しい変更可能ワイヤＺ７、新しいノード２２０３とポートＭ０  ２３０４の間の新しい変更可能ワイヤＺ８と置き換える。それ故、ＴＨＶＩＡ０  ２３０４はノード２３０３を全体的な回路の他の部品へ潜在的に接続する方法を与える。
３引数のＴＨＧＮＤ関数
３引数のＴＨＧＮＤ関数により、回路の離れた部品を接地することが可能となる。ＴＨＧＮＤ関数は特別な「バイア」関数であり、回路の電気的接地に直接接続する。接地へのこの直接接続は、回路内の接地への接続を必要とするＴＨＧＮＤ関数が１つしかない場合でも行われる。ＴＨＧＮＤ関数の実行後、３つの書込みヘッドが得られる。これらは３本の新しいワイヤをポイントする。
３引数のＴＨＰＯＳ関数
３引数のＴＨＰＯＳ関数により、回路の離れた部品をプラス（たとえば、＋５．０）の直流電圧電源に接続することが可能となる。ＴＨＰＯＳ関数は特別な「バイア」関数であり、プラス電源に直接接続する。この直接接続は、電源への接続を必要とするＴＨＰＯＳ関数が１つしかない場合でも行われる。ＴＨＰＯＳ関数の実行後、３つの書込みヘッドが得られる。これらは３本の新しいワイヤをポイントする。
ＮＯＰ関数
１引数のＮＯＰ関数はハイライトされた構成要素に何の影響も及ぼさないが、この関数が全体的なプログラム・ツリーの他の開発パスに関して現れる開発パスにおける活動を遅らせ、これによって構成プロセスによって生じる全体的な結果に影響を及ぼす（恐らくは）。ＮＯＰ関数の実行後、１つの書込みヘッドは元のハイライトされた構成要素をポイントする。
ＥＮＤ関数
０引数のＥＮＤ関数により、ハイライトされた構成要素が書きこみヘッドを失い、これによりこの特定の開発パスを終了させる。ＥＮＤ関数が発生すると、全体的なプログラム・ツリー内の開発パスに沿った開発のみが停止する。
他の接続作成関数
上記の接続作成関数は本発明の自動設計システムの汎用性と融通性を示している。多くの他の接続作成関数を使用して、回路の特定のクラスまたは回路要素のトポロジ構成を設計する要件に対処することができる。
他の関数
ＱＴ関数によってすでに説明したように、構成要素を作成して、ノード（点）を置き換えたり、回路図のエッジ（線）を置き換えることができる。さらに、ノードの度数は上記の説明において２または３であるが、他の構成要素作成関数を、他の接続作成関数と関連させて、定義して、度数がもっと大きいノードに対処することができる。
演算実行関数
構成要素作成関数の演算実行サブツリーは演算実行関数と終端を合成したものである。評価した場合、演算実行サブツリーは数値構成値となる（解釈後に）浮動小数点値を返す。
表６は演算実行関数および終端を示す。
0003958793.tif 000017
ただし、「Ｒ」は−１．０００と＋１．０００の間の浮動小数点ランダム定数を表す。
実施形態の１つにおいて、乗算および除算（ならびに、指数関数および対数関数などのその他の関数）は、演算実行サブツリーによって返される浮動小数点値が対数目盛で解釈されるため、演算実行関数のセットには含まれない。しかしながら、所望する場合、あるいは特定のアプリケーションで必要とされる場合には、他の演算実行関数を追加することができる。
演算実行サブツリーの関数は深さ優先順序で実行される（ＬＩＳＰなどのプログラミング言語にしたがって）。
ＡＤＦ０などの自動定義関数およびＡＲＧ０などのダミー変数（仮パラメータ）については次節で検討する。これらを特定の問題で使用しても、使用しなくてもよく、また演算実行サブツリーで使用しても、使用しなくてもよい。
自動定義関数
自動プログラミングおよび自動化設計の問題には、規則性、対称性、均一性、類似性、パターン、およびモジュラ性などがある。本発明における自動プログラミングおよび自動化設計の手法は問題環境に固有な規則性、対称性、均一性、類似性、パターン、およびモジュラ性を、再使用とパラメータ化とによって活用する階層機構を組み込んだものである。サブルーチンが通常のコンピュータ・プログラム内でこれを行う。
メイン・プログラムと、１つまたは複数の再使用可能で、パラメータ化され、階層的に呼び出されるサブプログラムとからなる複数パーツ・プログラムをどのように開発するかを記述することは、当技術分野において周知である。たとえば、米国特許第５３４３５５４号、およびＧｅｎｅｔｉｃ  Ｐｒｏｇｒａｍｍｉｎｇ  ＩＩ：  Ａｕｔｏｍａｔｉｃ  Ｄｉｓｃｏｖｅｒｙ  ｏｆ  Ｒｅｕｓａｂｌｅ  Ｐｒｏｇｒａｍｓ（Ｋｏｚａ、１９９４年）という文献を参照されたい。
自動定義関数（ＡＤＦ）は作業実行本体が遺伝的プログラミングの実行中に動的に発展させられ、作業実行本体が同時に発展する呼出し側メイン・プログラム（サブプログラムを呼び出すための）によって呼び出される関数である（サブルーチン、サブプログラム、ＤＥＦＵＮ、プロシージャ、またはモジュールと呼ばれることもある）。自動定義関数が使用されている場合、ポピュレーションにおけるプログラムは１つ（または、複数）の再使用可能な関数定義ブランチ（すなわち、自動的に定義された関数）の階層を１つ（または、複数）のメイン結果作成ブランチとともに有している。自動定義関数は１つまたは複数のダミー引数（仮パラメータ）を有していることができる。通常、自動定義関数はこれらのダミー引数のさまざまなインスタンス化で再使用される。実行中に、遺伝的プログラミングは全体的なプログラム関数定義ブランチ内にさまざまなサブプログラムを、結果作成ブランチ内にさまざまなメイン・プログラムを、関数定義ブランチ内での自動定義関数のダミー引数のさまざまなインスタンス化を、およびブランチ間でのさまざまな階層参照を発展させる。
自動定義関数が遺伝的プログラミングで使用されている場合、ポピュレーションの初期乱数世代が生成され、したがって個々のプログラムがブランチの特定のアーキテクチャ構成からなる制約構文構造を有する。実施形態の１つにおいて、クロスオーバを行う場合、親コンピュータ・プログラムの各潜在的クロスオーバ・ポイントに、ブランチ全体をベースとしてタイプを割り当てるか（ブランチ・タイピングと呼ぶ）、あるいは潜在的なクロスオーバ・ポイントの下のサブツリーの実際の内容に基づいてタイプを割り当てるかする（ポイント・タイピングと呼ぶ）。クロスオーバを構造を保存する態様（クロージャを与えて）で行って、子孫の構文的妥当性を確保する。
設計の点で、自動定義関数は、問題環境に固有な規則性、対称性、均一性、類似性、パターン、およびモジュラ性を、再使用とパラメータ化とによって活用する方法を与える。それ故、複雑な構造を設計するために遺伝的プログラミングを実行する際に、自動定義関数を含めることが望ましい。
表７は自動定義関数と関連して使用される潜在的な関数および終端をリストしたものである。自動定義関数の最大値ＭＡＸadfと、自動定義関数が有することのできる引数の最大値ＭＡＸargがある。
0003958793.tif 000018
演算実行サブツリーが自動定義関数を呼び出して、数値計算の結果を再使用できることに留意されたい。
プログラム・ツリーの実行中に自動定義関数に遭遇した場合、自動定義関数およびプログラム・ツリー内での関数の実行順序は、自動定義関数全体がプログラム・ツリーに挿入されたかのようなものとなる。
自動定義関数は２種類の異なる態様で使用される。第１に、これらを接続作成関数および構成要素作成関数で構成し、トポロジを作成し、構成要素をトポロジに挿入するプロセスの一部として呼び出すことができる。第２に、これらを演算関数で構成し、構成要素寸法決定プロセスの一部として演算実行サブツリーから呼び出すことができる。
エンブリオニック回路から回路を開発する詳細な例
本節ではエンブリオニック回路から回路を開発するプロセスの例を示す。本節で使用される個々のプログラム・ツリーは低域フィルタの設計に関する最初の節で後述する問題を１回実行した世代０からの最良の世代回路である。このプログラム・ツリーの第１の結果作成ブランチは２５の点（すなわち、関数および終端）を有しており、以下に示されている。
0003958793.tif 000019
第２の結果作成ブランチは５つの点を有しており、以下に示されている。
0003958793.tif 000020
第２４図は番号付きブランチを備えたルート化され、ポイントにラベルのついたツリーとして、この回路構成プログラムを示す。接続ＬＩＳＴ関数２４０１は２つの結果作成ブランチを接合する。第１の結果作成ブランチはＣ関数２４０２をルートとしており、第２の結果作成ブランチはＦＬＩＰ関数２４０３をルートとしている。
第２５図は第２４図のプログラム・ツリーの最上位の３つの点をこの問題のエンブリオニック回路とともに示す。第２４図は最初の２つの書込みヘッドも示す。一方の書込みヘッドは当初Ｃ関数２４０２と関連付けられ、変更可能ワイヤＺ０をポイントしており、他方は当初ＦＬＩＰ関数２４０３と関連付けられ、変更可能ワイヤＺ１をポイントしている。
プログラム・ツリーを実行すると、ツリーのルートにおける接続ＬＩＳＴ関数２４０１の下の結果作成ブランチの関数が幅優先順序で実行され、各演算実行サブツリー（ポイント２４０４をルートとする７ポイント・サブツリーなど）が、構成要素作成関数に遭遇したときに、深さ優先順序で直ちに実行される。それ故、第２４図のＣ（コンデンサ）関数２４０２が最初に実行される。この場合、７ポイント演算実行サブツリー２４０４が深さ優先方式で全体として直ちに実行されて、コンデンサ関数Ｃが必要とする数値構成要素値を供給する。次いで、幅優先順序が再開され、ＦＬＩＰ関数２４０３が実行される。
第２６図は第２５図のエンブリオニック回路の変更可能ワイヤＺ０に作用して、新しいコンデンサＣ３を作成するＣ関数２４０２を実行した結果を示す。７ポイントサブツリー
（−０．９６３（−（−−０．８７５−０．１１３）０．８８０））
（ポイント２４０４をルートとする）は演算実行サブツリーであり、したがって、Ｃ関数２４０２後に全体として直ちに実行される。この７ポイント・サブツリーは２．６０５に対して評価され、解釈され、評価されたときに（上述した態様で）、コンデンサＣ３の構成要素値として４０３ｎＦを確立する。Ｃ関数２４０２の実行後、一方の書き込みヘッドはＣ３をポイントする。
第２４図の全体的なプログラム・ツリーの第２の結果作成ブランチのＦＬＩＰ関数２４０３が、ここで実行される。第２７図は変更可能ワイヤＺ１（そのプラス端部が元はノード２５０２にあった）に作用して、その極性を変更する（マイナス端部がノード２５０２にあるように）ＦＬＩＰ関数２４０３を実行した結果を示す。極性の変更はワイヤ（または、コンデンサ、抵抗、またはインダクタ）に対して電気的な影響を持たないが、極性の変更は多くの構成要素（たとえば、ダイオード）に影響を及ぼす。いずれにせよ、極性はその後に実行できるある種の関数（たとえば、ＳＥＲＩＥＳ分割）によって生じるトポロジに影響を及ぼす。ＦＬＩＰ関数の実行後、一方の書き込みヘッドはＺ１をポイントする。
プログラム・ツリーの幅優先サーチの実行はここで、第２４図のツリーの第３レベルまで進む。７ポイント演算実行サブツリー２４０４が全体としてすでに実行されているため、ＳＥＲＩＥＳ関数２４０５が次に実行される。
第２８図はコンデンサＣ３に作用して、コンデンサＣ３、新しいノード２８０６、変更可能ワイヤＺ４、新しいノード２８０７、および新しいコンデンサＣ５（Ｃ１と同じ構成要素値４０３ｎＦを有している）からなる直列構成を作成するＳＥＲＩＥＳ関数２４０５の実行結果を示す。ＳＥＲＩＥＳ関数の実行後、３つの書込みヘッド（Ｃ３、Ｚ４、およびＣ５をポイントする）、ならびにＺ１をポイントする１つの書き込み静止ヘッドが得られる。
全体的なプログラム・ツリーの第２の結果作成ブランチのＮＯＰ（「ノー・オペレーション」）関数２４０６が、ここで実行される。その唯一の影響は第１の結果作成ブランチに関する、第２の結果作成ブランチにおける以降の関数の実行のタイミングに対するものである。
実行はここで第２４図のプログラム・ツリーの第４レベルへ進む。
第２９図はコンデンサＣ３（そのプラス端部が元はノード２５０３にあった）に作用して、その極性を変更する（マイナス端部がノード２５０３にあるように）ＦＬＩＰ関数２４０９を実行した結果を示す。ＦＬＩＰ関数を実行すると、一方の書込みヘッドはＣ３をポイントする（また、書込みヘッドは依然Ｚ４、Ｃ５およびＺ１をポイントしている）。
第３０図は変更可能ワイヤＺ４に作用して、変更可能ワイヤＺ４、新しいノード３００８、変更可能ワイヤＺ６、新しいノード３００９、およびＺ５からなる直列構成を作成するＳＥＲＩＥＳ関数２４１０の実行結果を示す。このＳＥＲＩＥＳ関数の実行後、６つの書込みヘッド（Ｃ３、Ｚ４、Ｚ６、Ｃ５、Ｃ５およびＺ１をポイントする）が得られる。
第３１図はコンデンサＣ５に作用するＬ関数２４１１の実行結果を示す。Ｌ関数はコンデンサＣ５を新しいインダクタＬ７に変換する。この３ポイント・サブツリー（２４１９をルートとする）の戻り値
（−−０．６４０  ０．７４９）
は−１．３８９である。解釈された後、この戻り値は新しいインダクタＬ７に対する構成要素値として０．０４１マイクロヘンリーを確立する。Ｌ関数の実行後も、６つの書込みヘッドが得られる。
全体的なプログラム・ツリーの第２の結果作成ブランチのＬ関数２４１２が、ここで実行される。第３２図は変更可能ワイヤＺ１に作用して、インダクタＬ８を作成する第２の結果作成ブランチからのＬ関数２４１２の実行結果を示す。解釈されると、定数−０．６５７（２４２１）はＬ８に対する構成要素値として０．２２０マイクロヘンリーを確立する。このＬ関数の実行後も、６つの書込みヘッドが得られる。
実行はここで第２４図のプログラム・ツリーの第５レベルへ渡される。
ＥＮＤ関数（５１５というラベルのつけられている）がここで実行され、これによりこの特定のパス（第２４図にあるツリーのポイント２４０１から始まり、ポイント２４０２、２４０５および２４０９を通ってポイント２４１５まで延びている）に対する開発プロセスを終了させる。このパスに関連付けられた書込みヘッドが排除されて、存在している書込みヘッドは５つだけとなる。
ＦＬＩＰ関数２４１６はワイヤＺ４で動作するため、電気的な影響を及ぼさない。
第３３図は変更可能ワイヤＺ５に作用して、新しいインダクタＬ９を作成するＬ関数２４１７の実行結果を示す。解釈されると、定数−０．２７７（２４２６）はインダクタＬ９に対する構成要素値として０．５２８マイクロヘンリーを確立する。
ＥＮＤ関数２４１８がここで実行され、これによりＺ５に対する開発プロセスを終了させ、この構成要素に関連付けられた書込みヘッドを排除させる。それ故、存在する書込みヘッドは４つだけとなる。
第３４図は既存の０．４７マイクロヘンリーのインダクタＬ７に作用して、代わりに新しいインダクタＬ１０を作成する第１の結果作成ブランチからのＬ関数２４２０の実行結果を示す。解釈されると、定数−０．１２３（２４３０）は新しいインダクタＬ１０に対する構成要素値として０．７５３マイクロヘンリーを確立する。
ポイント２４２２におけるＥＮＤ関数がここで実行され、これにより第２の結果作成ブランチを完了する。
実行がここで第２４図のプログラム・ツリーの第６（最下部）のレベルへ進む。ポイント２４２５，２４２７および２４３１におけるＥＮＤ関数がここで実行され、これによりＺ４、Ｌ９およびＬ１０における書込みヘッドを排除し、回路の開発全体的プロセスを完了する。残っている書込みヘッドはなくなる。
第３５図はすべてのここでは外来のワイヤ（すなわち、Ｚ４およびＺ５）ならびにすべてのここでは外来のノード（すなわち、３００８および３００９）を実行した後の世代０の最良の回路を示す。
実施形態の１つにおいては、プログラム・ツリーを幅優先方式で横切っている（直ちに実行される演算実行サブツリーを除く）。この横断方法はこのプロセスに関する現在の経験に基づくと、有利なものと思われる。しかしながら、このプロセスは深さ優先サーチなどの他の手法を使用して実施することもできる。
低域ＬＣフィルタの設計
理想的な低域フィルタは指定された周波数よりも低いすべての周波数を通すが、すべての高い周波数を停止するものである。理想的な高域フィルタは逆のことを行う。理想的な帯域フィルタは１つまたは複数の指定された範囲のすべての周波数を通すとともに、すべての他の周波数を停止する。理想的な停止帯域フィルタは１つまたは複数の指定された範囲のすべての周波数を停止するとともに、すべての他の周波数を通す。実用的なフィルタで理想的な性能を達成するものはない。
フィルタ設計のスタート・ポイントは通過帯域および停止帯域に対する周波数範囲をユーザが指定することである。さらに、ユーザは最大通過帯域リプル（すなわち、通過帯域内で許容されるわずかな変動）および最小停止帯域減衰（すなわち、停止帯域で要求される、信号の大きい閉塞度）またはロールオフなどのその他の要因を指定することができる。
ユーザがより多くの要件およびより厳格な制約を課すにつれて、フィルタの設計はますます困難となっている。実用上、ユーザは、たとえば、回路の電力消費量、回路内の構成要素の数、構成要素のコスト、すべての構成要素が占める表面積、あるいは温度に対する回路の感度を含む付加的な設計要件を課すことができる。
振幅が２ボルトのＡＣ入力信号でインダクタおよびコンデンサを使用したフィルタを設計することを目標とする、回路設計の問題を考える。回路は内部（電源）抵抗が１０００オームで、１０００オームの負荷抵抗で終端している電源によって駆動されるものとする。フィルタは９７０ミリボルトと１ボルトの間の電圧値で１０００ヘルツ未満の通過帯域を有しており、０ボルトと１ミリボルトの間の電圧値で２０００Ｈｚ超の停止帯域を有しているものとする。
デシベルは相対電圧の無単位の尺度である。デシベルは特定のプローブ・ポイントにおける電圧と基準電圧（本明細書において、これは常に１．０ボルトである）の間の比の常用対数を２０倍したものと定義される。それ故、上記の要件は最大０．３デシベルの通過帯域リプルおよび少なくとも６０デシベルの停止帯域減衰に対する要件と書き換えることができる。
実施技術者にはこれらの要件が複雑度５のチェブィシェフ−コウア（Ｃｈｅｂｙｃｈｅｖ−Ｃａｕｅｒ）フィルタによって満たされることを認識している。
低域ＬＣフィルタの準備ステップ
回路設計の問題に遺伝的プログラミングを適用する前に、７つの準備ステップをユーザが行うのが普通である。これらのステップは、（１）展開対象のプログラムの終端を特定し、（２）展開対象のプログラムに含まれている原始関数を特定し、（３）所与のプログラムが当面の問題をどの程度解決するかを評価するための適合尺度を作成し、（４）いくつかの制御パラメータ（特に、ポピュレーション規模および実行すべき世代の最大数）を選択し、（５）終了基準と結果指定方法とを決定し、（６）全体的なプログラムのアーキテクチャを決定し、（７）問題に適したエンブリオニック回路を特定することを含んでいる。
以下の検討では、準備ステップ（７）および（６）を検討してから、他のステップを検討する。
エンブリオニック回路
低域ＬＣフィルタを設計する問題が電源抵抗と負荷抵抗を備えた１入力１出力回路を必要としているため、第３図のエンブリオニック回路はこの例示的な問題に適したものである。
プログラムのアーキテクチャ
この例示的な問題には、自動定義関数は使用されない。
エンブリオニック回路が当初２つの書込みヘッド−結果作成ブランチの各々と関連付けられたもの−を有しているため、各全体的なプログラム・ツリーには２つの結果作成ブランチが存在する。それ故、ポピュレーションにおける各全体的なプログラム・ツリーのアーキテクチャは、ＬＩＳＴ関数によって接合された２つの結果作成ブランチからなっている。
関数および終端のセット
終端セットおよび関数セットはこの例示的な問題に対するポピュレーションにおけるプログラム・ツリーの結果作成ブランチの両方に同一のものである。
各ブランチは第２図に示すような拘束構文構造にしたがって作成される。
関数はこの例示的な問題の場合、３つのカテゴリーに分けられる。
（１）エンブリオニック回路から回路のトポロジを作成する接続作成関数。
（２）回路内のワイヤ（およびその他の構成要素）を指定された構成要素に変換する構成要素作成関数。
（３）一緒になって回路の各構成要素に対する数値を指定する（寸法決定する）演算実行関数および数値終端。
演算実行サブツリーは演算関数とランダム定数とを含んでおり、構成要素の数値を指定する。構築継続サブツリーは開発プロセスを継続する。この問題で使用される構成要素（すなわち、インダクタおよびコンデンサ）の各々が１つの数値構成要素値を取るため、各構成要素作成関数には１つの演算実行サブツリーだけが関連付けられている。
接続作成関数は１つまたは複数の構築継続サブツリーを有している。しかしながら、接続作成関数は演算実行サブツリーを有していない。
この例示的な問題の場合、各構築継続サブツリーに対する関数セットＦccsは次の通りである。
Ｆccs＝｛Ｃ，Ｌ，ＳＥＲＩＥＳ，ＰＳＳ，ＦＬＩＰ，ＮＯＰ，ＧＮＤ，ＶＩＡ０，ＶＩＡ１，ＶＩＡ２，ＶＩＡ３，ＶＩＡ４，ＶＩＡ５，ＶＩＡ６，ＶＩＡ７｝，
これはそれぞれ２、２、３、４、１、１、２、２、２、２、２、２、２、２および２個の引数を取る。
各構築継続サブツリーに対する終端セットＴccsは次のものからなる。
Ｔccs＝｛ＥＮＤ｝
各演算実行サブツリーに対する関数セットＦapsは次の通りである。
Ｆaps＝｛＋，−｝
各々は２つの引数を取る。
各演算実行サブツリーに対する終端セットＴapsは次の通りである。
Ｔaps＝｛Ｒ｝
ただし、「Ｒ」は−１．０００と＋１．０００の間の浮動小数点ランダム定数を表す。
適合尺度
エンブリオニック回路、プログラム・アーキテクチャ、関数および終端セット、ならびに上述の拘束構文構造は任意の１入力１出力ＬＣ回路に適用できることを留意されたい。評価プロセス（回路構築プログラム・ツリーのサーチ空間における）を所望のフィルタを構築するプログラムへ送るのは、ユーザが与える適合尺度である。換言すると、所望の回路構造は適応度から得られる。
第１Ｂ図は回路を設計する全体的なプロセスの流れ図である。ＲＵＮは現行の経路数であり、Ｎは作成される経路の最大数である。変数ＧＥＮは現在の世代番号を指す。変数Ｍはポピュレーション規模である。指標ｉはポピュレーションにおけるの現行の個体を指す。
第１Ｂ図を再度参照すると、本発明の全体的なプロセスは処理論理によって制御されるいくつかの独立した経路を含んでおり、プロセスは処理ブロック１００２で０に初期化される経路数ＲＵＮで開始される。処理論理はハードウェアおよび／またはソフトウェア、専用論理などを含んでいることができる。各経路は多くの世代からなっており、世代番号ＧＥＮは処理ブロック１００４において０に初期化される。
世代０において、第１のステップは「経路に対する初期ポピュレーションを作成する」（処理ブロック１００６）であり、これは個体数Ｍを作成する（通常はランダムに）。
処理ブロック１００８における「終了基準が実行に対して満たされる」に関するテストは通常、世代のある最大数Ｇに達したこと、または何らかの問題固有の基準を満たすことのいずれかに基づいている。「終了基準が実行に対して満たされる」に対するテストが満たされた場合（処理ブロック１００８）、次のステップは処理ブロック１０１０における「経路に対して結果を指定する」である（通常、世代にわたって達成される最良の個体を指定することによって）。次いで、経路数ＲＵＮが処理ブロック１０１２で増分される。経路数ＲＵＮが実行される最大経路数Ｎに等しいことという処理ブロック１０１４におけるテストを満たした場合、処理は「終了」（処理ブロック１０１６）で終了する。それ以外の場合、処理は処理ブロック１００４を次に行うことによって他の経路へ進む。
処理論理は次いで、ポピュレーションの個体に対する２つの主反復ステップを含んでいる世代反復ステップを実行する。これら２つの主反復ステップの第１のもの（処理ブロック１０２０で始まる）において、ポピュレーションの各個体ｉの適合が判定される。これら２つの主反復ステップの第２のもの（処理ブロック１４０で始まる）において、遺伝操作が行われる。
ポピュレーションにおける個体に対する２つの主反復ステップのうち第１のものは、ポピュレーションにおける個体の指標ｉを初期化することから始まる（処理ブロック１０２０）。ステップ１０２１において指標ｉを、これがポピュレーション規模Ｍと等しいか（あるいは、超えているか）どうかについてテストされる。そうでない場合には、ポピュレーションにおける各個体ｉが適合していると判定される。原則として、適応度の判定は暗黙のものであっても、明示のものであってもよく、また適応度の数値を生じても、生じなくてもよい。この流れ図は適応度の判定が明示的なものであり、適応度の数値が決定されている場合に基づいている。遺伝的プログラミングを回路の設計に使用している場合、適応度の測定は４つのステップからなっている。
（１）個々の回路構築プログラム・ツリーをエンブリオニック回路に適用して、完全に開発された回路を作成する（処理ブロック１０２２）。
（２）完全に開発された回路の記述を作成する（処理ステップ１０２４）。
（３）回路を分析して（実環境において、あるいは記述に基づいて回路のシミュレーションを行うことによって）、その挙動を作成する（処理ブロック１０２６）。
（４）適応度尺度を挙動に適用して、回路の適合値を作成する（処理ブロック１０２８）。
次いで、ポピュレーションにおける個体の指標ｉを処理ブロック１０３０で増分する。指標ｉがポピュレーション規模Ｍと等しい（あるいは、これを超えている）ことという処理ブロック１０２１におけるテストを満たす場合には、ポピュレーションにおける個体に対するこれらの主反復ステップの第１のものが終了し、処理は処理ブロック１０４０で継続する。
ポピュレーションにおける個体に対する２つの主反復ステップのうち第２のものは、ポピュレーションにおける個体の指標ｉを初期化することから始まる（処理ブロック１０４０）。指標ｉがポピュレーション規模Ｍに等しいか（あるいは、これを超えているか）どうかについてテストされる。そうでない場合には、「遺伝操作を選択する」ステップ（処理ブロック１０４６）を実行する。
「遺伝操作を選択する」ステップ（処理ブロック１０４６）は見込みに基づくものである。繁殖、クロスオーバ、突然変異、ブランチの複製、引数の複製、ブランチの削除、引数の削除、ブランチの作成、および引数の作成についての操作を選択する蓋然性の合計は１である。それ故、９つの選択肢のうちの１つが選択される。
９つの選択肢の各々は選択ステップから始まる。たとえば、繁殖の遺伝操作の場合、「選択１個体」ステップが選択ステップである（処理ブロック１０５８）。この選択ステップは蓋然的に比較的高い適応度値によってポピュレーションから個体を選択するものであり、この選択はほとんどの場合、比較的高い適応度値を有している個体が比較的低い適応度値を有している個体よりも好ましいという個体の適応度に実質的に基づくものである。処理ブロック１０６０におけるクロスオーバ操作に対する選択ステップは適応度に基づいて２つの個体を選択することを必要としていることに留意されたい。突然変異操作に対する選択ステップ（処理ブロック１０７０）および他の６つの選択ステップは、適応度に基づいて１つの個体を選択することを必要とする。ポピュレーションにおける同じ個体を各世代で２回以上選択できることに留意されたい。
９つの選択肢の各々に対して、遺伝操作が行われる。たとえば、繁殖操作を選択した場合、繁殖操作が行われる（処理ブロック１０５２）。クロスオーバ操作を選択した場合、クロスオーバ操作が行われる（処理ブロック１０６２）。本明細書で使用されているクロスオーバ操作の場合、単一の子孫が作成されることに留意されたい。突然変異操作を選択した場合、突然変異操作が行われる（処理ブロック１０７２）。他の６つの操作も同様に処理される。
次いで、「子孫を新しいポピュレーションに挿入する」という共通ステップ１０９０が、９つの選択肢の各々に対して行われる（処理ブロック１０９０）。
次いで、ポピュレーションにおける個体の指標ｉが増分される（処理ブロック１０９２）。指標ｉがポピュレーション規模Ｍと等しい（あるいは、超えている）という処理ブロック１０４２におけるテストを満たしていない場合、この第２の主反復ステップは処理ブロック１０４６で継続する。
指標ｉが処理ブロック１０４２におけるテストを満たしている場合には、ポピュレーションにおける個体に対するこれらの主反復ステップの第２のものが終了する。世代番号ＧＥＮは処理ブロック１０４４で増分され、処理は処理ブロック１００８で継続する。
全体的なプロセスにはさまざまなわずかな変更が可能であるということを認識すべきである。これらの変更の中には、便宜的に使用できるものがある。
簡単にするため、流れ図は実施形態の１つで用いられない、「入れ替え」や「ビルディング・ブロックの定義」（「カプセル化」とも呼ばれる）などの付加的な遺伝操作を示していない。
ポピュレーションにおける個別の回路構築プログラム・ツリーの各々に対する適応度の評価は、その実行時に開始される。この実行はプログラム・ツリーの関数をきわめて簡単なエンブリオニック回路に適用し、これによってエンブリオニック回路を完全に開発された回路へ展開する。この回路を記述したネットリストを次いで作成する。ネットリストは回路の各構成要素、その構成要素が接続されるノード、その構成要素の値（該当する場合）、および構成要素のモデル（該当する場合）を特定する。次いで、各回路のシミュレーションを行って、その挙動を決定する。２１７０００行のＳＰＩＣＥシミュレータを変更して、遺伝的プログラミング・システム内のサブモジュールとして実行した。ＳＰＩＣＥシミュレーションへの入力は分析対象の回路を記述したネットリストと、実行される分析のタイプおよび作成される出力の性質に関してＳＰＩＣＥに指示するいくつかのコマンドからなっている。ＳＰＩＣＥは回路の電気的挙動を記述した表情報を作成することができる。この表情報を次いで使用して、適応度を測定する。
適応度尺度は時間領域における回路の挙動、周波数領域におけるその挙動、その消費電力、構成要素の数、構成要素のコスト、その構成要素が占める表面積、または温度またはその他の変数に対する感度を含む、回路の計算可能な特性または特性の組合せを組み込むことができる。フィルタを設計しているのであるから、周波数領域における回路の挙動に焦点をおく。
この問題に関し、電圧ＶＯＵＴを第３図の分離されたノード３０５で調べ、回路を周波数領域で検討する。ＳＰＩＣＥシミュレータには、ＡＣ小信号分析を行い、５０段階の周波数（１Ｈｚから１０００００Ｈｚまで）にわたって選択した１０１の周波数値の各々に対する回路の挙動を報告することが要求される。各１０段階は２０の部分に分割される（対数尺を使用して）。
分離ノード３０５におけるプローブ・ポイントＶＯＵＴにおいて回路が発生する周波数領域における電圧の実際値と、電圧に対するターゲット値との間の絶対加重偏差の、これら１０１件の適応度に対する合計によって、適応度を測定する。適応度の値は小さければ小さいほどよい。ゼロという適応度は理想的なフィルタを表す。
具体的にいうと、標準化された適応度は次のようになる。
0003958793.tif 000021
ただし、ｆ（ｉ）は適応度の事例ｉの周波数（ヘルツ）であり、ｄ（ｘ）は周波数ｘにおけるターゲット値と観測値との差であり、Ｗ（ｙ，ｘ）は周波数ｘにおける差ｙに対する重み付けである。適応度尺度は理想値に負担をかけず、すべての許容偏差に若干の負担をかけ、許容されないすべての偏差に大きい負担をかける。
１Ｈｚから１０００Ｈｚまでの３０の間隔における６１の点の各々に対するプロシージャは次の通りである。電圧がこの間隔における１．０ボルトという理想値に等しい場合、偏差ｄ（ｆ；）は０．０であり、電圧が９７０ミリボルトと１０００ミリボルトの間である場合、１０００ミリボルトからの偏差の絶対値には１．０という係数で重みがつけられ、電圧が９７０ミリボルト未満の場合、１０００ミリボルトからの偏差の絶対値には、１０．０という係数で重みがつけられる。この構成は通過帯域における理想電圧が１．０ボルトであり、３０ミリボルトの不足は許容でき、通過帯域における９７０ミリボルト未満の電圧は許容できないことを反映している。電圧がこの種のＬＣ回路内で１．０ボルトを超えることはできない。
２０００Ｈｚから１０００００Ｈｚまでの間隔における３５の点の各々に対するプロシージャは次の通りである。電圧が０ミリボルトと１ミリボルトの間である場合、０ミリボルトからの偏差の絶対値には、１．０という係数で重みがつけられる。電圧が１ミリボルト超である場合、０ミリボルトからの偏差の絶対値には、１０．０という係数で重みがつけられる。この構成は停止帯域における理想電圧が０．０ボルトであり、０ミリボルトを超える１ミリボルトのリプルは許容でき、停止帯域における１ミリボルト超の電圧は許容できないことを反映している。
この例において、これら２つの主帯域における適応度事例の数（６１および３５）は、これら２つの主帯域における異なる数の適応度事例に対して与えられた重みを等化させる試みを行わなかったことに十分近いものである。１０００Ｈｚ超および２０００Ｈｚ未満の間隔（すなわち、「ｄｏｎ’ｔ  ｃａｒｅ」帯域）における５ポイントの各々に対して、偏差はゼロとみなされる。
ヒットは電圧が許容できる、あるいは理想である、あるいは「ｄｏｎ’ｔ  ｃａｒｅ」帯域内にある適応度事例の数と定義される。それ故、ヒット数はこの問題に対して５という低い値から１０１という高い値までの範囲である。ユーザが与える問題固有の適合尺度が展開プロセスを決定することに留意されたい。
初期のランダム・ポピュレーションに対してランダムに作成され、後の世代においてクロスオーバ操作および突然変異操作によって作成される風変わりな回路の中には、ＳＰＩＣＥによるシミュレーションが行えないものがある。ＳＰＩＣＥによるシミュレーションを行えない回路には、ペナルティ値が高い適応度（１０8）を割り当てる。これらの回路は各世代に対する最悪世代回路となる。ペナルティ値が高い適応度の実際上の効果は、これらの個体が選択されて、遺伝操作に関与することがほとんどなく、またこれらがポピュレーションから迅速に消滅することである。
実施形態の１つにおいて、回路のネットリストが以下の病理学的特性のいずれかを有している場合、ネットリストはシミュレーションのためにＳＰＩＣＥに沿って渡されることはなく、その代わりに、高いペナルティ値の適応度が直ちに割り当てられる。
（１）回路が電圧源を含んでおり、両端が同一のノードに接続されている。
（２）回路がインダクタを含んでおり、両端が同一のノードに接続されている。
（３）回路がリード線の接続されていない構成要素を含んでいる。
（４）回路がノードを含んでおり、コンデンサを通っていない接地へのＤＣパスがない。あるいは
（５）回路が一対のノードを有しており、これらの間にパスがない。
実施形態の１つにおいて、以下のタイプのエラーのいずれかがＳＰＩＣＥシミュレーション中に生じた場合、シミュレーションは停止され、回路には高いペナルティ値の適応度が割り当てられる。
（１）メモリ割振り要求の数が２０００の要求という規定の上限を超えている。
（２）割り振られたメモリの量が３００キロバイトという予め指定された上限を超えている（この限度はシミュレーションに対する時間制限として間接的に作用する）。
（３）浮動小数点エラー（たとえば、ゼロによる除算、アンダーフロー、オーバフローなど）が、たとえばバイポーラ接合トランジスタのシミュレーション中に生じ、場合によっては、浮動小数点のオーバフローが生じ、場合によっては、プローブ出力セットアップ中にゼロによる除算が生じる。
（４）ヌル（無効）ポインタがマトリックス・ルーチンの１つに現れた。あるいは
（５）これまで割り振られていなかったメモリのブロックを解除する試みがなされた。
制御パラメータ
この例示的な問題の場合、ポピュレーション規模Ｍはほとんどの経路について３２００００であった（ただし、若干の経路については４００００であった）。各世代における遺伝操作の割合は、クロスオーバが８９％、繁殖が１０％、突然変異が１％であった。アーキテクチャ変更操作はこの例示的な問題では使用されなかった。２００ポイントという最大サイズが全体的なプログラムの各々における２つの結果作成ブランチの各々に対して確立された。
最初のランダム・ポピュレーションの作成時に関数をランダムに選択する際に、Ｃ、Ｌ、ＳＥＲＩＥＳ、ＰＳＳ、ＦＬＩＰ、ＮＯＰ、各ＧＮＤの関数の各々には、８という相対重みが割り当てられ、８つのＶＩＡ関数の各々には１という相対重みが割り当てられた。
遺伝的プログラミングの経路を制御する他のパラメータはＫｏｚａ１９９４年（付録Ｄ）で指定されたデフォルト値であった。
終了基準および結果の指定
この例において、個々のスコアリングの１０１のヒットを展開できるかどうかを予め判断することは困難である。さらに、ヒットのこの最大値が達成できるものである場合、数種類の解決策を並列コンピュータ・システムの各種の処理ノードから得ることができる。問題がゆっくり実行されるため、世代の最大数Ｇは大きい数にセットされて、開発の可能性を高める。
並列コンピュータ・システム
プロセスの時間のかかる適応度の測定が非結合性であるから、本発明の実施に並列処理が有利である（ただし、必須というものではない）。並列化をほとんど１００％の効率で、本発明のプロセスが使用することができる。
実施形態の１つにおいて、処理論理はトロイダル・メッシュに配列された６４個のＰｏｗｅｒＰＣ６０１  ８０ＭＨｚプロセッサ（各々が付随するＩＮＭＯＳトランスピュータを備えている）からなり、ホストＰＣがＰｅｎｔｉｕｍ（登録商標）タイプ・コンピュータである中粒度並列パリスティック・コンピュータ・システム（ｍｅｄｉｕｍ−ｇｒａｉｎｅｄ  ｐａｒａｌｌｅｌ  Ｐａｒｙｓｔｅｃ  ｃｏｍｐｕｔｅｒ  ｓｙｓｔｅｍ）上で経路を実行する。ＰｏｗｅｒＰＣプロセッサは、各ＰｏｗｅｒＰＣプロセッサと関連付けられているＩＮＭＯＳトランスピュータによって通信を行う。いわゆる分散遺伝的アルゴリズムすなわち並列化のアイランド・モデルを使用する。すなわち、サブポピュレーション（本明細書ではデメスと呼ぶ）をシステムの処理ノードに配置する。ポピュレーション規模はＤ＝６４デメスの各々においてＱ＝５０００であり、したがって総ポピュレーション規模Ｍは３２００００となる。世代０の最初のランダム・サブポピュレーションが各処理ノードにおいて局部的に作成される。世代は各ノードにおいて非同期的に実行される。遺伝操作を各ノードにおいて局部的に実行した後、各々がＢ＝２％（システムの実施形態の１つで使用される移行率）のノードのサブポピュレーション（適応度に基づいて選択される）からなるエミグラントの４つのボートロードが４つのトロイダルに隣接した処理ノードの各々に送られる。イミグラントを各宛先処理ノードへ同化させる前に、そのノードがそのイミグラントを隣のノードへ送る。
並列遺伝的プログラミングの実装の１つとして使用される物理的システムはＰＣ  Ｐｅｎｔｉｕｍプロセッサ・タイプのコンピュータをホストとして使用し、また処理ノードのネットワークを使用している。第３６図はシステムの各種の要素を示す。これらの要素は次のものからなる全体的なシステムに配列されている。
（１）キーボード３６０２、ビデオ表示モニタ３６０３、および大型ディスク・メモリ３６０４からなるホスト・コンピュータ。
（２）中央スーパバイザ・プロセス（ボス・プロセス）を含んでいるプロセッサ３６０５。
（３）各々がモニタ・プロセス、ブリーダ・プロセス、エクスポータ・プロセス、およびインポータ・プロセスを実行する、６４個のプロセッサ３６０６の並列ネットワーク。
ＰＣコンピュータ３６０１はホストであり、全体的なシステムのファイル・サーバとして働く。「ボス・ノード」３６０５は遺伝的プログラミングを実行するための中央スーパバイザ・プロセスである。
６４の処理ノードはトロイダル・ネットワークに配列されており、６４の処理ノードのうち６２はネットワーク内の４つの隣のノード（東西南北方向の）に物理的に接続されている。ネットワークの６４のノードのうち２つは、これらがボス・ノード３６０５とたった３つの他の処理ノードとに物理的に接続されている点で例外的なものである。ボス・ノード３６０５はネットワークの２つの処理ノードのみと物理的にリンクされている。異なる処理ノードにおけるプロセス間の通信は、一方向、２点間非バッファ同期チャネルによって行われる。
処理ノードはチャネルによって接続された相互通信プロセスを実行する。ホスト３６０１は２つのプロセスを有している。ホスト３６０１上の第１のプロセスはキーボード３６０２からの入力を受け取り、経路を制御するパラメータを含んでいる入力ファイル３６０９を読み取り、２つの出力ファイル、すなわち出力ファイル３６０４とビデオ・バァファ（ＶＢ）ファイルを書き込み、ボス３６０５と通信を行う。ホスト・コンピュータ上の第２のプロセスはモニタ・プロセスである。図中の枠はホスト・コンピュータ（ＰＣ  Ｐｅｎｔｉｕｍプロセッサ・タイプのマシン）、オプションのデバッガ・ノード３６０７（ＩＮＭＯＳデバッガを収納するのに使用されるＴＲＡＭ）、ボス・ノード３６０５、および処理ノードのネットワーク（メッシュノードとも呼ばれる）を含む各種のコンピュータを指す。簡単にするため、第３６図は９つのノードのネットワークのみを示している（６４のノード全部ではなく）。楕円形は各経路の１つの入力ファイル（経路を制御するためのパラメータを含んでいる）および２つの出力ファイル（経路の中間および最終結果を含んでいるものと、本明細書ではＶＢプロセス３６１０と呼ばれるモニタ・プロセスが必要とする要約情報を含んでいるもの）を含む各種のファイル（全部がホスト・コンピュータ上にある）を指す。丸みのついた枠はキーボードおよびビデオ表示モニタを含むホスト・コンピュータの入出力装置を指す。ひし形はホスト・コンピュータのビデオ表示モニタ上に経路に関する情報を表示するモニタ・プロセスを指す。太い連続線はシステムの各種の要素の間の物理的リンクを示すために使用されている。太い破線はボス・ノード３６０５と処理ノードとの間の仮想通信の線を示す。細い連続線は処理ノードの各々をその４つの隣のノードと接続する仮想通信の線を示す。
デバッガ用のオプションのトランスピュータは１つのプロセス、すなわちＩＮＭＯＳデバッガ・プロセスだけを実行する。ボスのプロセッサは１つのプロセス、すなわちボスだけを実行する。
トロイダル・ネットワーク内の６４個のプロセッサの各々は、以下の４つのプロセスを同時に実行する。
（１）インポータ
（２）エクスポータ
（３）ブリーダ
（４）モニタ
第３７図は６４個のプロセッサの各々におけるこれら４つのプロセスを示す。処理ノードの各々における主プロセスはブリーダ・プロセス３７０１である。ブリーダ・プロセス３７０１は遺伝的プログラミングにおけるコンピュテーションを行い、３つの他のプロセスはボスおよび４つの隣のノードとの通信を容易とする。具体的にいうと、他の３つのプロセスは非同期通信を可能とし、デッドロックを回避する役割を果たす。
ボス・プロセスはホスト・プロセスとの通信、ネットワーク内のプロセッサの各々への初期開始メッセージの送信、各世代の終りに各プロセッサから送られてくる情報の作表、ホスト上のモニタ・プロセスへの情報の送信、およびエラー状態の取扱いを取扱う。
遺伝的プログラミングの実行の開始時に、ボス・プロセスは各種のデータ構造を初期化し、適応度事例のセットを機能的に、あるいはホスト上のファイルから情報を取得することによって作成し、各プロセッサに対する異なるランダム・シードを作成し、各プロセッサをピング（ping）して、準備ができていることを確認し、遺伝的プログラミングを制御するホスト上のファイルから一連のパラメータを読み込む。次いで、ボスはスタートアップ・メッセージをモニタ・プロセス３７０２などの各モニタ・プロセスへ送る（このプロセスは次いでこれをブリーダ・プロセス３７０１などのブリーダ・プロセスへ送る）。このメッセージは次のものを含んでいる。
・  処理ノードで作成すべきサブポピュレーションの規模
・  生成方法および初期ランダム個体の最大サイズ（ならびにその各関数定義ブランチおよび結果作成ブランチ）を含む初期ランダム・サブポピュレーションをその処理ノードで作成するための制御パラメータ
・  その問題に対するランダム定数のネットワーク全体にわたる共通テーブル（存在している場合）
・  各世代に対して実行される各遺伝操作（たとえば、繁殖、クロスオーバなど）の数を指定する制御パラメータ
・  ランダマイザ用のノード固有のシード
・  その問題に対する実際の適応度事例
・  プリントされた固体の数（および、存在している場合には、プリントされた個体そのもの）
スタートアップ・メッセージの送信後、ボスはループに入り、エラー状態が生じるか、解決策が見つかるか、すべてのプロセッサがパラメータ・ファイルに指定されたいくつかの世代を破壊するか、完成するかするまで、各モニタが送信する各種のメッセージを処理する。
各処理ノードのモニタ・プロセスはボス・ノードのボス・プロセス、ならびに処理ノードのブリーダ・プロセス両方からのメッセージを常に待っている。ボスからスタートアップ・メッセージを受け取ると、モニタ・プロセスはこのメッセージをそのノード上のブリーダ・プロセスへ渡す。モニタ・プロセスはそのノードのブリーダ・プロセスからの次のメッセージもボスへ渡す。
（１）エンドオブジェネレーション・メッセージ。エンドオブジェネレーション・メッセージは処理ノード上の現在のサブポピュレーションに対するベストオブジェネレーション個体と、適応度およびヒット数などのその個体に関する統計値とを含んでいる。このメッセージは処理ノードのワーストオブジェネレーション個体に対する適応度（およびヒット）、そのノードにおけるサブポピュレーションに対する平均適応度（およびヒット）、サブポピュレーションの適応度（およびヒット）の分散も含んでいる。
（２）ユーレカ・メッセージ。ユーレカ・メッセージは問題の成功基準を満たしており、作成されたばかりのべストオブラン個体およびこれに関する各種の統計値を含んでいるサブポピュレーションに、処理ノードが個体を作成したばかりであることを通知する。
（３）トレース・メッセージ。トレース・メッセージはブリーダ・プロセスがそのコード内の何らかのマイルストーン（たとえば、そのスタートアップ・メッセージの受取り、そのノードに対する初期ランダム・サブポピュレーションの作成の完了）に達したことを通知する。
（４）エラー・メッセージ。エラー・メッセージはブリーダ・プロセスが何らかの予測可能なエラー状態に遭遇したことを通知する。
処理ノードのブリーダ・プロセスはスタートアップ・メッセージを受け取った後、そのノードに対する個体の初期ランダム・サブポピュレーションを作成する。次いで、主世代ループにおいて、処理ノードのブリーダ・プロセスは次のステップを反復して行う。
（１）サブポピュレーションのすべての個体の適応度を評価する。
（２）エミグラントになる少数の個体（世代０のものを除く）を適応度に基づいて蓋然的に選択し、これをエクスポータ・プロセス内のバッファへ送る。
（３）インポータ・プロセスのバッファで現在待機中のイミグラント（世代０のものを除く）を同化させる。個体の適応度がその個体に関連付けられたデータ構造の一部であり、イミグラントの適応度をそれがその宛先に到着した際に再計算する必要がないことに留意されたい。
（４）サブポピュレーションに対してエンドオブジェネレーション・レポートを作成する。
（５）サブポピュレーションに遺伝操作を行う。
ブリーダ・プロセスは問題の成功属性を満たす１つの個体が作成されるまで、あるいはボス・プロセスによって停止されるまで実行される。
遺伝的プログラミングにおける個体を評価するのに必要なコンピュータ時間の長さは通常、小さいサブポピュレーションの間でかなり変動する。特定のサブポピュレーションに時間のかかるプログラムが１つだけ、あるいは若干存在していると、１つの世代を実行するのに必要なコンピュータ時間の長さが大きい影響を受ける。各種の処理ノードにおけるアルゴリズムの活動を同期させようとすると、すべての処理ノードの速度を最も遅いものの速度まで下げることが必要となる。したがって、各処理ノードは他のすべての処理ノードと非同期で動作する。わずかな世代の後、システムの各種の処理ノードは通常異なる世代で動作するようになる。
この速度の変動は、個々のプログラムの異なるサイズ、プログラムに高速および低速の原始関数が混在していること、最も重要なのは、全体的なプログラムの関数定義ブランチの数、性質および内容を含むさまざまな要因によって生じる。自動定義関数を呼び出すたびに、その自動定義関数の本体を実行することが必要となり、したがって、実行時の全体的なプログラムの有効サイズが全体的なプログラムに実際に現れるポイント（すなわち、関数および終端）の可視数よりもかなり大きくなる。さらに、１つの自動定義関数が階層的に他のものを参照できる場合、プログラムの有効サイズ（および、実行時間）は全体的なプログラムに実際に現れるポイントの可視数の指数関数となる。さらに、多くの時間ステップ、多くの別々の実験、あるいは多くの蓋然的シナリオに関する挙動のシミュレーションを含んでいる問題の場合、プログラムの中には他のものよりもかなり前に、あるいは後にシミュレーションを完了するものがある。
近傍のプロセッサにおける世代についての所望の非同時性は、近隣のプロセスが世代を完了するのをブリーダ自体が待つことを必要としない態様で、マイグレートするプログラムのエクスポートまたはインポートが行われることを必要とする。ブリーダ３７０１がコンピューティング時間をほとんど妨害しないようにするために、エクスポータ・プロセス３７０４とインポータ・プロセス３７０３が通信を取り扱う。モニタ・プロセスは同じような態様で、ボス・プロセスとの通信に作用する。さらに、デッドロックが生じないようにするには、複数のプロセスを使用することが重要である。
エクスポータ・プロセス３７０４は、各世代（世代０を除く）に対するブリーダの主世代ループの一部としてその処理ノードのブリーダ・プロセス３７０１と周期的に対話する。その場合、ブリーダ３７０１は個々のプログラム・ツリーの４つのボードロード（グループ）をポピュレーション（すなわち、エミグラント）からエクスポータ・プロセス３７０４のバッファへ送る。エクスポータ・プロセス３７０４は次いで、エミグラントのボートロードの１つをネットワークの４つの近隣処理ノードの各々のインポータ・プロセス３７０３へ送る。
インポータ３７０３の目的は、ブリーダ３７０１がエミグラントの着信ボートロードをサブポピュレーションに組み込めるようになるまで、これらのボートロードを格納することである。イミグラントのボートロードが、インポータ・プロセス３７０３を４つの近隣エクスポータ・プロセスへ接続している４つのチャネルのいずれか１つを介して到着した場合、インポータ３７０３はそのチャネルからのイミグラントを消費し、これらのイミグラントを、そのチャネルに関連付けられたバッファに入れる（しばしば、以前に到着しているが、まだ同化されていない、そのバッファ内のイミグラントを上書きして）。ブリーダ・プロセス３７０１はイミグラントを同化させられるようになった場合、インポータ３７０３のバッファの内容を呼び出す。４つのバッファ全部がいっぱいである場合、イミグラントの４つのボートロードは、ブリーダ・プロセス３７０１がそのノードのエクスポータ・プロセス３７０４へ送ったばかりのエミグラントを置き換える。４つよりも少ないバッファがいっぱいの場合には、新しいイミグラントが送られたばかりのエミグラントをできるだけ多く置き換える。
この例示的な問題の経路の中には、トロイダル・メッシュ構成の４個のＰｏｗｅｒＰＣ６０１  ８０ＭＨｚプロセッサからなり、ホストＰＣがＰｅｎｔｉｕｍタイプ・コンピュータである粗粒度並列パリスティック・コンピュータ・システムで動作するものがあった。ポピュレーション規模はＤ＝４デメスの各々においてＱ＝１００００であり、したがって総ポピュレーション規模Ｍは４００００となる。
低域ＬＣフィルタに対する結果
低域ＬＣフィルタを設計する問題に関し遺伝的プログラミングを数回実行した結果は、本発明の自動設計プロセスの背後にある原理を説明するものである。
第１回目の実行についての説明
この例示的な問題に対する遺伝的プログラミングの実行は、上述の関数および終端で構成され、上述の拘束構文構造にしたがって構成された３２００００のプログラム・ツリー（各々が２つの結果作成ブランチからなる）の初期ポピュレーションをランダムに作成することから始まる。
ポピュレーションにおける３２００００のプログラム・ツリーの各々に関して、回路構築プログラム・ツリー内の一連の関数をこの問題に対するエンブリオニック回路（第３図）に適用して、回路を作成する。得られる回路のネットリストを次いで決定する。ネットリストはＳＰＩＣＥコマンドの適切なセットの内部で折り返され、ＳＰＩＣＥの改変されたバージョンを使用して回路のシミュレーションが行われる。
遺伝的プログラミングの実行に関する初期ランダム・ポピュレーションは問題のサーチ空間のブラインド・ランダム・サーチである。したがって、これは以降の世代の結果を比較するための基準線を与える。
世代０からの最悪の個別回路構築プログラム・ツリーは、ＳＰＩＣＥシミュレータがこれらのシミュレーションを行えないほど病的な回路を作り出す。これらの回路には高いペナルティ値（すなわち、１０8）の適応度が割り当てられる。
世代０からの最悪のシミュレーション可能な個体の適応度は８９２．０である。個々のプログラム・ツリーはその第１の結果生成ブランチの１１点を、また第２の結果生成ブランチの１４点を有している。この回路構築プログラム・ツリーにしたがってエンブリオニック回路を開発した場合に得られる回路は、インダクタをまったく有していない。この回路で生じるヒットの数は５つだけに過ぎない（１０１の適応度事例のうちの５つの「ｄｏｎ’ｔ  ｃａｒｅ」ポイントを表す）。推定フィルタの挙動特性は周波数領域の挙動によって最もよく測定される。この場合、回路の周波数応答は低域フィルタのものと類似していない。
しかしながら、ランダムに作成した回路の間でも、他よりもよいものがある。
世代０（シミュレーション可能な個体からの）の２５パーセンタイルの適応度による回路の適応度は６１０．１であり、ヒットのスコアは３４（１０１のうちの）である。インダクタがまったくない以前の回路とは異なり、この回路は１つのインダクタと１つのコンデンサを有している。
世代０からの中位（５０パーセンタイル）回路の適応度は６１０．０であり、ヒットのスコアは４０（１０１のうち）である。この回路の出力プローブ・ポイントＶＯＵＴは、電圧源ＶＳＯＵＲＣＥから電力をまったく受け取らない。したがって、回路はすべての周波数に対して０ボルトの出力を発生する。周波数領域における世代０の中位回路の挙動は、回路がすべての周波数を同様に取り扱うため、フィルタのものではない。初期ランダム世代のこの中位回路は、アナログ電気フィルタ回路の動作特性から除去される。
世代０からの７５パーセンタイルの適応度の回路の適応度は４０１．０であり、ヒットのスコアは５である。周波数領域におけるこの７５パーセンタイル回路の挙動は、これがすべての周波数を同様に取り扱うため、フィルタのものではない。しかしながら、この回路はその電圧の一定値（約０．８ボルト）が通過帯域（１Ｈｚないし１０００Ｈｚ）の若干多くのポイントに関して、世代０の中位個体が発生する０ボルトという一定値よりも１ボルトに近いため、世代０の中位個体よりも良好な適応度値を達成する。換言すると、この例示的な問題に対して選択された適応基準を与えると、この個体は中位回路よりも若干良好である。
世代０からの３２００００の回路のうち最良の回路の適応度は５８．７１（上述した重み付けボルトの尺度で）であり、ヒットのスコアは５１である。この個々のプログラム・ツリーについては第２５図ないし第３５図で詳細に説明した。
１Ｈｚと１００Ｈｚの間の間隔における周波数領域のこの回路の挙動は、必要とされる１ボルトに極めて近いものである（この個体が示す５１ヒットのほとんどに対して）。しかしながら、１００Ｈｚと１０００Ｈｚの間で発生する電圧は、設計仕様書で要求されている９７０ミリボルトという最小値よりもかなり低いものである（実際には、１０００Ｈｚに接近した場合、数百ミリボルトだけ）。さらに、２０００Ｈｚ超で発生する電圧は、ほとんどの場合、設計仕様書で要求されている１ミリボルトという最小値よりもかなり高いものである（ほとんどの場合、数百ミリボルト）。しかしながら、世代０からのこの非適合回路の挙動は、電圧が最初の２０の周波数に対して１ボルトに近く、また電圧が高い周波数における若干数のサンプル・ポイントに対してゼロに近くて、低域フィルタのものと若干類似している。
世代１（および、その経路の以降の各世代）が、適応度に基づいて以前の世代におけるポピュレーションから選択された個体（あるいは、クロスオーバの場合には個体の対）に繁殖、クロスオーバ、および突然変異を行うことによって、先行する世代におけるポピュレーションから作成される。
世代１における最良の個別プログラムの適応度は５８．５９であり（すなわち、世代０の５８．７１よりも若干良好である）、ヒットのスコアは５２である（世代０よりも高い）。
経路が世代から世代へ進むと、ベストオブジェネレーション個体の適応度は向上する傾向がある。たとえば、適応度の新しいペース設定値（すなわち、それまでに報告されたどのベストオブジェネレーション適応度値よりも良好な、６４のプロセッサの１つから報告されたベストオブジェネレーション適応度値）が、世代２、３、４、５、６、７、９および１３で報告された。具体的にいうと、これらの世代のベストオブジェネレーション個体に対する適応度のこれらのペース設定値は、それぞれ、５８．５６，５７．５１，５７．４５，４８．５１，２２．５１，２１．５８，５．７５および５．５２である。ポピュレーションにおけるベストオブジェネレーション個体に対するヒット数は、世代５では５６、世代１３では８６に達する。ベストオブジェネレーション２３の適応度は０．３７であり、ヒットのスコアは９９である。
この問題に対する世代０のプログラムの７２％は、ＳＰＩＣＥではシミュレーションできない回路を作り出す。シミュレーション不能なプログラムは各世代に対してワーストオブジェネレーション・プログラムであり、高いペナルティ値の適応度を受け取る（１０8）。しかしながら、シミュレーション不能プログラムの割合は世代１では３１％に、世代２では１６％に、世代３では１５％に、世代１０では７％に低下する。換言すると、ダーウィン選択およびクロスオーバ操作によって作成される子孫の大部分はほんの数世代後にシミュレーション可能となる。
遺伝的プログラミングを使用して電子回路を展開することを試みるにあたり、主要な限界的問題の１つはこの極めて発現性の高いサーチ空間における世代０のランダムに作成された回路の有効数がシミュレーション可能であるかどうかである。第２の問題はクロスオーバ操作が有効な数のシミュレーション可能な回路を作り出すかどうかである。これらの問題はいずれもこの問題に関する遺伝的プログラミングによって実現されなかった。後続世代のポピュレーションを、親がクロスオーバ操作によりシミュレーション可能な子孫を生み出すことのできるサーチ空間の部分へ迅速に送るのに、ダーウィン選択が極めて有効であることは明らかである。
この観察は遺伝的プログラミングの経路の中間世代のポピュレーションにおける個体（および、これらから取り出したランダムなサブツリー）が、同じ経路の世代０のランダムに作成されたポピュレーションにおける個体（および、これらのランダムに取り出したサブツリー）と異なっているという原理を裏付けるものである。すなわち、遺伝的プログラミングの経路の中間世代からのクロスオーバ断片は、突然変異操作によって得られるランダムに成長したサブツリーと極めて異なっている。この重要な問題に関して、ポピュレーションが遺伝的アルゴリズムにおいて重要な役割を果たす−すなわち、サーチを迅速に進めるための有用な断片のリザーバを与える役割を果たすことは、実験的に実証されている。
遺伝的アルゴリズムにおいて、ポピュレーション全体は世代間で一般に改善される。ポピュレーション全体での適応度における世代間の改善は、世代ごとのポピュレーションの平均適応度を検証することによって明らかとなる。世代１の３２００００の個体のポピュレーションの平均適応度は３２４０４１５である（世代０では７２３２１９２である）。すなわち、ポピュレーション全体は世代０から世代１へと向上する。この向上の一部は適応度のペナルティ値が高い世代１におけるポピュレーションにおける少ない数の個体を反映している。ポピュレーション全体としての平均適応度は世代５では１３２８２２１に、世代１３では９２４０４６に達する（このこともポピュレーションの多くの少数の個体が適応度の高いペナルティ値を受け取ることを示している）。ポピュレーション全体としての平均適応度は世代０では１０５４に、世代２では４４３に、世代５では２１３に、世代１０では５８．２に、世代２０では３８．０に、世代３０では１６．５に達する。発展プロセスはそれ故、世代から世代へ継続する。
世代３２の最良の個別プログラム・ツリーの点は３０６、適応度は０．００７８１、ヒットのスコアは１０１である。すなわち、世代３２にまでに、すべての１０１個のサンプル・ポイントはこの例示的な問題に対する設計要件に適合することになる。偏差の平均値はサンプル・ポイントあたり約０．０８ミリボルトとなる。
第３８図は世代３２の最良の回路を示す。この回路はさまざまな反復値の各種のインダクタおよびコンデンサからなる７段のラダーである。このラダー構造はバッタワースまたはチェブィシェフ・フィルタのトポロジであるが、この回路はバッタワースまたはチェブィシェフ・フィルタに関連付けられる正確な数値の構成要素を有していない。
最初の１００％適合した個体の発生後に、遺伝的プログラミングの実行を継続した場合、他の１００％適合した個体がしばしば発生する。これらの付加的な解決策は大幅に異なるトポロジ、ならびに異なる大きさをしばしば有している。第２に、実行を継続すると、適応度のより良好な値に対する探索が続けられ、さらに適合した（１００％適合した）個体がしばしば作成される。デメスを備えた並列コンピューティング・システムを使用した場合、同じ経路から得られた解決策の間に極めて顕著な相違がしばしばある（デメスのない直列コンピュータ装備とは対照的なものである）。
この同じ経路の世代７６からの最良の個体は、世代３２で見られる最初の完全に適合した個体のものよりも１桁ほど良好な適応度（０．０００９９５）を有している。第３９図は世代７６からのベストオブラン回路を示す。この回路は１７の０．２０３ヘンリーのインダクタと１７の２０１ｎＦのコンデンサかなるラダーを有している。また、４つの異なる値のインダクタとコンデンサを、ラダーの先頭と末尾に有している。
ヒットのスコアが１０１のいくつかの他の回路がこの経路から得られた。すべての回路はラダー構造を用いていた（異なる数の段と異なる構成要素値を備えている）。
したがって、本発明により、ユーザの設計目標を満たす有用な電子回路を自動的に作成することが可能となる。
経路２からの「ブリッジＴ」回路
遺伝的プログラミングは少なくとも４個所に蓋然的ステップ、すなわち世代０の初期ポピュレーションを作成し、各操作が行われるポピュレーションから個体を選択し、実行する特定の操作を選択し、遺伝操作が行われる、選択された個体内でポイント（たとえば、クロスオーバ・ポイント）を選択するステップを含んでいる。それ故、遺伝的プログラミングの異なる経路は異なる結果を生じる。
第４０図はこの問題における遺伝的プログラミングの他の経路の世代６４からの完全に適合したベストオブラン回路を示す。この回路（０．０４２２４という適応度を有する）において、インダクタＬ１４はコンデンサＣ３およびＣ１５、ならびにインダクタＬ１１とともに、認識可能な「ブリッジＴ」サブ構造を形成する。もちろん、並列コンデンサ（Ｃ１８とＣ３３の対、ならびに３つ１組のＣ２４、Ｃ２１およびＣ１２）を組み合せることができる。この「ブリッジＴ」回路はトポロジが「ラダー」回路と異なっている。
他に展開された完全に適合した回路は遺伝的プログラミングから得ることのできる各種さまざまな結果を示している。
第４１図は適応度が０．０３２０１の、この問題における遺伝的プログラミングの経路３の世代５８からの他の完全に適合したベストオブラン回路を示す。この回路は組み合せることのできるさまざまな並列コンデンサと直列インダクタを有しており、またその右半分はラダー構造を有しているが、残りの左半分は上述のラダー回路と大幅に異なっている。
コンデンサＣ２９をバイパスすることは遺伝的に発展した構造にしばしば現れる異形の例である。多くのこのような異形はもちろん、標準的な手動または自動編集および簡素化方法によって除去することができる。
第４２図は適応度が０．００１１４の、この問題における遺伝的プログラミングの経路４の世代２１２からの他の完全に適合した回路を示す。この場合も、並列コンデンサおよび直列インダクタを組み合せた後であっても、この回路のトポロジは上述のものと異なっている。
第４３図は適応度が０．０６５０７の、この問題における遺伝的プログラミングの経路５の世代５３からの他の完全に適合した回路を示す。この回路の並列コンデンサと直列インダクタを組み合せた場合、この回路の右半分はラダー構造を有している。
自動定義関数を使用した低域ＬＣフィルタの設計
自動定義関数（ＡＤＦ）はコンピュータ・プログラムの部品を再使用する機構を与える。本節において、目標は自動定義関数を使用するとともに、上述したものと同じ設計特性を満たす低域フィルタを設計することである。本節において、アーキテクチャ構成はユーザによって予め指定されることとなる（すなわち、自動定義関数を作成し、変更し、削除するアーキテクチャ変更操作は使用されない）。
自動定義関数（ＡＤＦ）を使用した低域ＬＣフィルタの準備ステップ
エンブリオニック回路
２つの書込みヘッドを備えた１入力１出力回路に対する、第２５図のエンブリオニック回路は、この問題にも適したものである。
プログラムのアーキテクチャ
エンブリオニック回路が当初２つの書込みヘッド−結果生成ブランチの各々と関連付けられたもの−を有しているため、各プログラム・ツリーには２つの結果生成ブランチ（ＲＰＢ０およびＲＰＢ１と呼ばれる）が存在する。
４つの０引数の自動定義関数（ＡＤＦ０、ＡＤＦ１、ＡＤＦ２、ＡＤＦ３と呼ぶ）が各プログラム・ツリーに含まれている。自動定義関数の間には階層的参照はない。それ故、各プログラム・ツリーには４つの関数定義ブランチが存在する。希望する場合に、任意の数の自動定義関数を使用することができ、また任意の数のこれらを階層的に互いに参照することができることに留意されたい。
したがって、ポピュレーションにおける全体的な各プログラム・ツリーのアーキテクチャはＬＩＳＴ関数で接合された全部で６つのブランチがある（すなわち、４つの関数定義ブランチと２つの結果生成ブランチ）。第４４図はこの６ブランチの全体的なアーキテクチャ構造を示す。
関数および終端のセット
ポピュレーションにおける各プログラム・ツリーの４つの関数定義ブランチ全部および両方の結果生成ブランチは、この例示的な問題と同じ終端セットを用いている。また、４つの関数定義ブランチはすべてこの問題と同じ共通関数セットを用いている。結果生成ブランチは両方とも共通関数セットを用いており、これらの共通関数セットは、これが４つの自動定義関数を含んでいる点だけで、４つの関数定義ブランチと異なっている。各ブランチは拘束構文構造にしたがって作成される。
関数はこの例示的な問題の場合、４つのカテゴリーに分けられる。
（１）エンブリオニック回路から回路のトポロジを作成する接続作成関数。
（２）回路内のワイヤ（およびその他の構成要素）を指定された構成要素に変換する構成要素作成関数。
（３）一緒になって回路の各構成要素に対する数値を指定する（寸法決定する）演算実行関数および数値終端。
（４）その数とアリティがユーザにより予め指定される自動定義関数（サブルーチン）。
自動定義関数は引数を取らず、また階層的に互いを参照することがない。
各構築継続サブツリーに対する関数セットＦccsは次の通りである。
Ｆccs＝｛ＡＤＦ０，ＡＤＦ１，ＡＤＦ２，ＡＤＦ３，Ｃ，Ｌ，ＳＥＲＩＥＳ，ＰＳＳ，ＦＬＩＰ，ＮＯＰ，ＴＨＧＮＤ，ＴＨＶＩＡ０，ＴＨＶＩＡ１，ＴＨＶＩＡ２，ＴＨＶＩＡ３，ＴＨＶＩＡ４，ＴＨＶＩＡ５，ＴＨＶＩＡ６，ＴＨＶＩＡ７｝．
最初の１０の関数はそれぞれ、０、０、０、０、２、２、３，４，１，１，３および０個の引数を取る。８つのＴＨＶＩＡ関数の各々は３つの引数を取る。
各構築継続サブツリーに対する終端セットＴccsは次の通りである。
Ｔccs＝｛ＥＮＤ，ＣＵＴ｝．
各演算実行サブツリーに対する関数セットＦapsは次の通りである。
Ｆaps＝｛＋，−｝
各々は２つの引数を取る。
各演算実行サブツリーに対する終端セットＴapsは次の通りである。
Ｔaps＝｛Ｒ｝
ただし、Ｒは−１．０００と＋１．０００の間の浮動小数点ランダム定数を表す。
適応基準
適応基準は上述のＬＣ低域フィルタの設計問題のものと同じである。
パラメータ
制御パラメータは次のことを除き、上述のＬＣ低域フィルタの設計問題のものと同じである。
（１）３００ポイントという最大サイズが全体的なプログラムの各々における２つの結果作成ブランチの各々に対して確立された。
（２）最初のランダム・ポピュレーションの作成時に関数をランダムに選択する際に、Ｃ、Ｌ、ＳＥＲＩＥＳ、ＰＳＳ、ＦＬＩＰ、ＮＯＰ、およびＴＨＧＮＤの関数の各々には、８という相対重みが割り当てられ、８つのＴＨＶＩＡ関数の各々、および４つの自動定義関数（ＡＤＦ０、ＡＤＦ１、ＡＤＦ２、ＡＤＦ３）には１という相対重みが割り当てられた。
終了基準および結果の指定
終了基準および結果指定方法は上述のＬＣ低域フィルタの設計問題のものと同じである。
自動定義関数を使用した低域ＬＣフィルタの結果
世代０からの最良の回路の適応度は５８．６であり、ヒットのスコアは５２（１０１のうち）である。その第１の結果生成ブランチ２８３の点を、第２の結果生成ブランチに３つの点を有しており、また自動定義関数ＡＤＦ０、ＡＤＦ１、ＡＤＦ２、およびＡＤＦ３のそれぞれに５２、２８４、２０、および３３の点を有している。しかしながら、ベストオブジェネレーション個体の結果生成ブランチはいずれも、４つの自動定義関数のいずれも参照していない。ベストオブジェネレーション回路は単一のインダクタと単一のコンデンサを有している。これら２つの構成要素のトポロジ上の構成は古典的なラダー・フィルタの最初の段のものである。周波数領域における世代０からのベストオブジェネレーション回路の挙動は、希望する低域フィルタのものとわずかに類似しているに過ぎない。
この問題に対する世代０のプログラムの９８％が、ＳＰＩＣＥではシミュレーションできない回路を作り出すことに留意されたい。シミュレーション不能なプログラムは各世代に対してワーストオブジェネレーション・プログラムであり、高いペナルティ値の適応度を受ける（１０8）。しかしながら、シミュレーション不能プログラムの割合は世代１では８４％に、世代２では７７％に、世代３では４１％に、世代４では１５％に低下する。その後、この割合は経路の残りに対して６％と１２％の間の範囲となる。換言すると、ダーウィン選択およびクロスオーバ操作によって作成される子孫の大部分はほんの数世代後にシミュレーション可能となる。
世代９の処理ノード１８からのベストオブジェネレーション個体は第１のペース設定個体であり、自動定義関数が２回以上呼び出される。この個体の適応度は２９．５であり、ヒットのスコアは６５である。
第４５図は２回使用された自動定義関数ＡＤＦ３が２２８ｎＦのコンデンサを作成することを示す。ＡＤＦ３は自動定義関数の最も単純な利点の１つ、すなわち共通値を有する構成要素が回路内の２個所以上で利用できるようになることを示す。
世代９における処理ノード２１からの最良の個体の適応度は１０．３であり、ヒットのスコアは８４である。そのＲＰＢ０は１９の点を、ＲＰＢ１は８つの点を、またＡＤＦ０、ＡＤＦ１、ＡＤＦ２およびＡＤＦ３のそれぞれは４８、２８３、６および２つの点を有している。第４６図は２回使用されたＡＤＦ０を示す。
世代９における処理ノード２１からの最良の回路は、異なるトポロジ、すなわち２段のラダーを有している点で、上述のすべてのペース設定ベストオブジェネレーション個体と異なっている。ラダーの両方の段の誘導要素は３つのインダクタ（第１の段のＬ５、Ｌ１８、およびＬ１４、ならびに第２の段のＬ１６、Ｌ２０、およびＬ１１）の直列構成でできている。両方のグループのインダクタはＡＤＦ０のものである。２段のラダーは周波数領域における挙動を大幅に改善する。
世代１６における最良の個別プログラムの適応度は４．１であり、ヒットのスコアは９０である。ＡＤＦ０は３回使用される。ＡＤＦ０の３つのインダクタの５５５００μヘンリーという値を受け取ることは、ＡＤＦ０内でのＳＥＲＩＥＳ関数の上述の効果を反映している。世代１６の最良の回路は先行物とは異なるトポロジ、すなわち３段のラダーを有している。
世代１９における最良の個別プログラムの適応度は４．１であり、ヒットのスコアは９５である。そのＡＤＦ０は４回使用される。世代１９の最良の回路は先行物とは異なるトポロジ、すなわち４段のラダーを有している。
世代３１における最良の個別プログラムは楕円フィルタの正確なトポロジを有しているため、特に興味深いものである。この個体のヒットのスコアは１０１（１０１のうち）であり、適応度は０．０８５０である。これは処理ノード３で構成されている。そのＲＰＢ０は４１の点を、ＲＰＢ１は７つの点を、またＡＤＦ０、ＡＤＦ１、ＡＤＦ２およびＡＤＦ３のそれぞれは５２、２９７、２２および２つの点を有している。ＡＤＦ０（第４７図）は５回使用される。
第４８図は世代３１のこの最良な回路を示す。図示のように、この回路の５つの垂直な分路の各々にはインダクタとコンデンサがある（たとえば、第１の分路にはＬ３４とＣ１８がある）。
世代３５における最良の個別プログラムのヒットのスコアは１０１（１０１のうち）であり、適応度は０．００７５２である（すなわち、世代３１からのベストオブジェネレーション個体のものよりも約１桁良好である）。そのＲＰＢ０は３４の点を、ＲＰＢ１は４つの点を、またＡＤＦ０、ＡＤＦ１、ＡＤＦ２およびＡＤＦ３のそれぞれは５５、２６０、３および２つの点を有している。ＡＤＦ０だけが結果生成ブランチによって参照される。
ＡＤＦ０（第４９図）は世代３５からのベストオブジェネレーション・プログラムにおいて４回呼び出される。この自動定義関数によって作成される回路の部分のトポロジは、上述のものよりもかなり複雑なものである。２つのインダクタ（Ｌ１８およびＬ２０）ならびに１つのコンデンサ（Ｃ２５）が三角形を形成しており、インダクタＬ１８とＬ２０が合致するノード１０において三角形から分岐している付加的な誘導要素（具体的にいうと、３つのインダクタＬ２０、Ｌ２１およびＬ１６の直列構成）がある。また、ＡＤＦ０は３つのポートを有している。第５０図はインダクタの直列構成を単純化し、その配向を三角形配向に変更した後のＡＤＦ０の態様を示す。
第５１図は世代３５からのこのベストオブラン回路を示す。世代３５からのベストオブラン回路の周波数領域における挙動は、通過帯域と停止帯域を分離する古典的な「ブリック・ウォール」を示す。
第５２図は番号付きブランチを備えたルート化され、ポイントにラベルのついたツリーとして、世代３５からのベストオブラン個体を示す。第１の結果生成ブランチＲＰＢ０はＣ関数５２０６をルートとしており、第２の結果生成ブランチはＴＨＶＩＡ３関数５２０７をルートとしている。第１の自動定義関数ＡＤＦ０はＤＥＦＵＮ５２０２をルートとしている。ＡＤＦ０はいずれかの結果生成ブランチによって実際に参照される唯一の関数定義ブランチである。３つの参照されない関数定義ブランチＡＤＦ１、ＡＤＦ２、ＡＤＦ３は５２０３，５２０５というラベルのついた塗りつぶされた円によって略示されている。演算実行サブツリーは示されていないが、Ｖ１  ５２１７、Ｖ２  ５２４５、Ｖ３  ５２５２、Ｖ４  ５２５４、およびＶ５  ５２１０と略示されている。
結果生成ブランチの詳細な分析
第５３図は、この問題に使用される１入力１出力エンブリオニック回路を示す。以下では、このエンブリオニック回路の世代３５から得たこのベストオブラン個体の開発について説明する。
第１の結果生成ブランチＲＰＢ０のルートにあるプログラム・フラグメント（後述）内で下線を施された第５２図のＣ関数５２０６は、変更可能ワイヤＺ０をコンデンサＣ３に変換する。＋関数をルートとする１１ポイント演算実行サブツリー（第５２図では単にＶＳ５  ２１０と呼ばれ、以下のプログラム・フラグメントでは下線が施されている）は、Ｃ関数５２０６が実行されるときに全体的に深さ優先的に実行される。第５４図は、このＣ関数５２０６を実行した結果を示す。このサブツリーは、解釈されると、値１２８ｎＦをコンデンサＣ３に割り当てさせる値を返す。この場合、書込みヘッドはコンデンサＣ３を指し示す。
（Ｃ（＋（−０．１６６  −０．３７６）（＋（−０．９１０  −０．０３６６）（−−０．２９７  −０．９１７）））（ｆｌｉｐ（ｐｓｓ（ｐｓｓ  ｅｎｄ（ｐｓｓ  ｅｎｄ  ｅｎｄ  ｅｎｄ（ｆｌｉｐ（ａｄｆ０）））ｅｎｄ（ｆｌｉｐ（ａｄｆ０）））（ｐｓｓ  ｅｎｄ  ｅｎｄ  ｅｎｄ（ｆｌｉｐ（ａｄｆ０）））ｅｎｄ（ｆｌｉｐ（ａｄｆ０）））））
次に、プログラム・ツリーの幅優先実行によってＲＰＢ１のＴＨＶＩＡ３関数（第５２図の５２０７）が実行される。このＴＨＶＩＡ３関数はワイヤＺ１をレイヤ３の１つのポートおよび新しい変更可能ワイヤＺ９１、Ｚ９２、Ｚ９３に変換する。３本のワイヤはそれぞれ、書込みヘッドを有する。第５５図は、このＴＨＶＩＡ関数（７と呼ぶ）を実行した結果を示す。
Ｖ５  ５２１０は、Ｃ関数５２０６が実行されたときにただちにその全体が深さ優先的に実行された演算実行サブツリーを表すので、次に、プログラム・ツリーの幅優先実行によって、ＲＰＢ１のＦＬＩＰ関数（第５２図の５２１１、以下では下線が施されている）が実行される。ＦＬＩＰ関数はコンデンサＣ３の極性をフリップし、書込みヘッドは引き続きコンデンサＣ３を指し示す。第５６図は、このＦＬＩＰ関数を実行した結果として得られるコンデンサＣ３の極性の変更を示す。
（Ｃ（＋（−０．１６６  −０．３７６）（＋（−０，９１０  −０．０３６６）（−−０．２９７  −０．９１７）））（ｆｌｉｐ（ｐｓｓ（ｐｓｓ  ｅｎｄ（ｐｓｓ  ｅｎｄ  ｅｎｄ  ｅｎｄ（ｆｌｉｐ（ａｄｆ０）））ｅｎｄ（ｆｌｉｐ（ａｄｆ０）））（ｐｓｓ  ｅｎｄ  ｅｎｄ  ｅｎｄ（ｆｌｉｐ（ａｄｆ０）））ｅｎｄ（ｆｌｉｐ（ａｄｆ０）））））
次に、プログラム・ツリーの幅優先実行によってＲＰＢ１の３つのＥＮＤ関数（第５２図の５２１２ないし５２１４）が実行される。この３つのＥＮＤ関数は、ＴＨＶＩＡ３関数５２０７によって生成されたすべての３つの書込みヘッドをなくす。第５７図は、３つのＥＮＤ関数５２１２ないし５２１４を実行した結果を示す。
次いで、ＲＰＢ０の第１のＰＳＳ関数（第５２図の５２１６、以下では下線が施されている）が実行される。
（Ｃ（＋（−０．１６６  −０．３７６）（＋（−０．９１０  −０．０３６６）（−−０．２９７  −０．９１７）））（ｆｌｉｐ（ｐｓｓ（ｐｓｓ  ｅｎｄ（ｐｓｓ  ｅｎｄ  ｅｎｄ  ｅｎｄ（ｆｌｉｐ（ａｄｆ０）））ｅｎｄ（ｆｌｉｐ（ａｄｆ０）））（ｐｓｓ  ｅｎｄ  ｅｎｄ  ｅｎｄ（ｆｌｉｐ（ａｄｆ０）））ｅｎｄ（ｆｌｉｐ（ａｄｆ０）））））
このＰＳＳ関数は、コンデンサＣ３に作用し、重複コンデンサＣ４を作成し、新しい変更可能ワイヤＺ５およびＺ６を作成することによってコンデンサＣ３を並列化する。このＰＳＳ関数は４つの書込みヘッドを生成する。ＰＳＳ関数がＺ５とＺ６の両方の極性を確立することに留意されたい。この極性が必要になるのは、Ｚ６が後で各構成要素に変換されるときである。第５８図は、ＰＳＳ関数５２１６を実行した結果を示す。
次いで、ＲＰＢ０の次のＰＳＳ関数（第５２図の５２１９、以下では下線が施されている）は、コンデンサＣ３をもう１度並列化し、新しいコンデンサＣ７および変更可能ワイヤＺ８およびＺ９を作成する。
（Ｃ（＋（−０．１６６  −０．３７６）（＋（−０．９１０  −０．０３６６）（−−０．２９７  −０．９１７）））（ｆｌｉｐ（ｐｓｓ（ｐｓｓ  ｅｎｄ（ｐｓｓ  ｅｎｄ  ｅｎｄ  ｅｎｄ（ｆｌｉｐ（ａｄｆ０）））ｅｎｄ（ｆｌｉｐ）ａｄｆ０）））（ｐｓｓ  ｅｎｄ  ｅｎｄ  ｅｎｄ（ｆｌｉｐ（ａｄｆ０）））ｅｎｄ（ｆｌｉｐ（ａｄｆ０）））））
このＰＳＳ関数は４つの書込みヘッドを生成する。第５９図は、ＰＳＳ関数５２１９を実行した結果を示す。
次に、プログラム・ツリーの幅優先実行によってＲＰＢ０のＰＳＳ関数（第５２図の５２２０、以下では下線が施されている）が実行される。
（Ｃ（＋（−０．１６６  −０．３７６）（＋（−０．９１０  −０．０３６６）（−−０．２９７  −０．９１７）））（ｆｌｉｐ（ｐｓｓ（ｐｓｓ  ｅｎｄ（ｐｓｓ  ｅｎｄ  ｅｎｄ  ｅｎｄ（ｆｌｉｐ（ａｄｆ０）））ｅｎｄ（ｆｌｉｐ）ａｄｆ０）））（ｐｓｓ  ｅｎｄ  ｅｎｄ  ｅｎｄ（ｆｌｉｐ（ａｄｆ０）））ｅｎｄ（ｆｌｉｐ（ａｄｆ０）））））
このＰＳＳ関数はコンデンサＣ４（すなわち、１６として示したＰＳＳによって生成された第２の書込みヘッドが指し示す構成要素）を並列化する。このＰＳＳ関数は、新しいコンデンサＣ１０および変更可能ワイヤＺ１１およびＺ１２を作成する。このＰＳＳ関数は４つの書込みヘッドを生成する。第６０図は、ＰＳＳ関数５２２０を実行した結果を示す。
次に、プログラム・ツリーの幅優先実行によってＥＮＤ関数（第５２図の５２２１）が実行される。これによって、ＰＳＳ関数５２１６によって生成されたＺ５上の書込みヘッドがなくなる。
次に、プログラム・ツリーの幅優先実行によって、ワイヤＺ６に作用するＦＬＩＰ関数（第５２図の５２２２、以下では下線が施される）が実行される。このＦＬＩＰ関数を実行すると、１番上のＬＩＳＴ関数の下のプログラム・ツリーの第４レベルに配置された関数の実行が実行される。
第５レベルでは、ＥＮＤ関数（第５２図の５２２６、以下では下線が施されている）が実行され、それによって、Ｃ３上の書込みヘッドがなくなる。次いで、ＰＳＳ関数（第５２図の５２２７、以下では下線が施されている）が実行され、コンデンサＣ７（すなわち、ＰＳＳ５２１９によって生成された第２の書込みヘッドが指し示す構成要素）が並列化される。このＰＳＳ関数は、新しいコンデンサＣ１３および変更可能ワイヤＺ１４およびＺ１５を作成する。このＰＳＳ関数（５２２７）は４つの追加の書込みヘッドを生成する。
（Ｃ（＋（−０．１６６  −０．３７６）（＋（−０．９１０  −０．０３６６）（−−０．２９７  −０．９１７）））（ｆｌｉｐ（ｐｓｓ（ｐｓｓ  ｅｎｄ（ｐｓｓ  ｅｎｄ  ｅｎｄ  ｅｎｄ（ｆｌｉｐ（ａｄｆ０）））ｅｎｄ（ｆｌｉｐ（ａｄｆ０）））（ｐｓｓ  ｅｎｄ  ｅｎｄ  ｅｎｄ（ｆｌｉｐ（ａｄｆ０）））ｅｎｄ（ｆｌｉｐ（ａｄｆ０）））））
第６１図は、ＦＬＩＰ関数（５２２２）、ＥＮＤ関数（５２２６）、ＰＳＳ関数（５２２７）を実行した結果を示す。
この点で、第５２図のプログラム・ツリーの残りの部分は、ＥＮＤ関数（５２２８、５２３０、５２３１、５２３２）と、２ポイント構成要素の４つのオカレンスのみからなる。
（ｆｌｉｐ（ａｄｆ０））
この４つのオカレンスは、ポイント５２２２と５２３４、（前述の）５２２９と５２４３、５２３３と５２４４、及び５２２９と５２４３の各対に配置される。
５２２８、５２３０、５２３１、５２３２のＥＮＤ関数は、Ｚ８、Ｃ４、Ｃ１０、Ｚ１１の書込みヘッドをなくす。
ＡＤＦ０の詳細な分析
以下の議論は、第５２図の一対のポイント５２２２と５２３４（以下では下線が施されている）に配置された特定の（ｆｌｉｐ（ａｄｆ０））に焦点を当てたものである。
（Ｃ（＋（−０．１６６  −０．３７６）（＋（−０．９１０  −０．０３６６）（−−０．２９７  −０．９１７）））（ｆｌｉｐ（ｐｓｓ（ｐｓｓ  ｅｎｄ（ｐｓｓ  ｅｎｄ  ｅｎｄ  ｅｎｄ（ｆｌｉｐ（ａｄｆ０）））ｅｎｄ（ｆｌｉｐ（ａｄｆ０）））（ｐｓｓ  ｅｎｄ  ｅｎｄ  ｅｎｄ（ｆｌｉｐ（ａｄｆ０）））ｅｎｄ（ｆｌｉｐ（ａｄｆ０）））））
前述のように、ＦＬＩＰ５２２２はプログラム・ツリーの第４レベルで実行されており、ＡＤＦ０  ５２３４はまだ第５レベルで実行されていない。第６２図は、第６１図の切り取り部分であり、書込みヘッドは変更可能ワイヤＺ６を指し示している。
全体的なプログラム・ツリーの第１の関数定義ブランチは、自動定義関数ＡＤＦ０を定義するものであり、第５２図ではＤＥＦＵＮ５２０２で始まるように示されている。ＡＤＦ０の作業実行本体はＮＯＰ関数５２０９で始まる。ＡＤＦ０は次式で与えられる。
（ｎｏｐ（Ｌ（＋０．５０４（−（＋（＋（＋０．０８３０  ０．４０６）（−−０．２４３  ０．６５８））（−（−（＋（＋０．８０９  ０．４０７）（−０．８９３  −０．１１３））−０．２１２）（−（＋（−−０．５０６  −０．０３１３）（−−０．２４３  ０．６５８））（−（−０．５５６  ０．０３７０）−０．９４６））））−０．０００７４１））（ｓｅｒｉｅｓ（ｓｅｒｉｅｓ  ｅｎｄ（Ｌ  −０．０００７４１（Ｌ  ０．０６０９  ｅｎｄ））ｅｎｄ）ｅｎｄ（ｎｏｐ（ｐｓｓ  ｅｎｄ  ｅｎｄ  ｅｎｄ（Ｃ  −０．９４９  ｅｎｄ））））））
初期ＮＯＰ関数（第５２図の５２０９）が実行された後、インダクタ作成関数Ｌ（第５２図の５２１５、上記で下線が施されている）は変更可能ワイヤＺ６をインダクタＬ１６に変換する。３４ポイント演算実行サブツリー（上記で下線が施されている）は、値５６０００マイクロヘンリーを新しいインダクタＬ１６に割り当てる。この３４ポイント・サブツリーを第５２図では、単に値Ｖ１  ５２１７と呼ぶ。第６３図は、（第５２図の５２３４にある）ＡＤＦ０のＮＯＰ関数およびＬ関数を実行した結果を示す。
次いで、開発プロセスはＡＤＦ０の第１のＳＥＲＩＥＳ関数（第５２図の５２１８、以下では下線が施されている）に出会う。
（ｎｏｐ（Ｌ（＋０．５０４（−（＋（＋（＋０．０８３０  ０．４０６）（−−０．２４３  ０．６５８））（−（−（＋（＋８．０８６４９７ｅ−０１  ０．４０７）（−０．８９３  −０．１１３））−０．２１２）（−（＋（−−０．５０６  −０．０３１３）（−−０．２４３  ０．６５８））（−（−０．５５６  ０．０３７０）−０．９４６））））−０．０００７４１））（ｓｅｒｉｅｓ（ｓｅｒｉｅｓ  ｅｎｄ（Ｌ  −０．０００７４１（Ｌ  ０．０６０９  ｅｎｄ））ｅｎｄ）ｅｎｄ（ｎｏｐ（ｐｓｓ  ｅｎｄ  ｅｎｄ  ｅｎｄ（Ｃ  −０．９４９  ｅｎｄ））））））
このＳＥＲＩＥＳ関数５２１８は、初期インダクタＬ１６と、新しい変更可能ワイヤＺ１７と、重複５６０００マイクロヘンリー・インダクタＬ１８とからなる直列構成を作成する。このＳＥＲＩＥＳ関数は３つの書込みヘッドを作成する。第６４図は、ＡＤＦ０の第１のＳＥＲＩＥＳ関数５２１８を実行した結果を示す。
制御は次いで、ＡＤＦ０の第２のＳＥＲＩＥＳ関数（第５２図の５２２３、以下では下線が施されている）に渡される。このＳＥＲＩＥＳ関数はインダクタＬ１６に適用される。
（ｎｏｐ（Ｌ（＋０．５０４（−（＋（＋（＋０．０８３０  ０．４０６）（−−０．２４３  ０．６５８））（−（−（＋（＋８．０８６４９７ｅ−０１  ０．４０７）（−０．８９３  −０．１１３））−０．２１２）（−（＋（−−０．５０６  −０．０３１３）（−−０．２４３  ０．６５８））（−（−０．５５６  ０．０３７０）−０．９４６））））−０．０００７４１））（ｓｅｒｉｅｓ（ｓｅｒｉｅｓ  ｅｎｄ（Ｌ  −０．０００７４１（Ｌ  ０．０６０９  ｅｎｄ））ｅｎｄ）ｅｎｄ（ｎｏｐ（ｐｓｓ  ｅｎｄ  ｅｎｄ  ｅｎｄ（Ｃ  −０．９４９  ｅｎｄ））））））
この第２のＳＥＲＩＥＳ関数５２２３は、インダクタＬ１６（すなわち、第１のＳＥＲＩＥＳ５２１８によって生成された第１の書込みヘッドが指し示す構成要素）と、新しい変更可能ワイヤＺ１９と、他の重複５６０００マイクロヘンリー・インダクタＬ２０とからなる直列構成を作成する。このＳＥＲＩＥＳ関数は３つの書込みヘッドも生成する。第６５図は、ＡＤＦ０の第２のＳＥＲＩＥＳ関数５２２３を実行した結果を示す。
次に、プログラム・ツリーの幅優先実行によってＥＮＤ関数（第５２図の５２２４）が実行され、それによって、第１のＳＥＲＩＥＳ関数５２１８によって作成されたＺ１７上の書込みヘッドがなくなる。次いで、ＮＯＰ関数５２２５が実行される。そのため、ＡＤＦ０の４回の実行はこの特定のプログラムでは相互作用せず、したがって、ＮＯＰ関数は、最終的に開発される電気回路に影響を与えない。
次いで制御がＥＮＤ関数（第５２図の５２３５）に渡され、Ｌ１６上の書込みヘッドがなくなる。
開発は次いで、ＡＤＦ０のＬ関数（第５２図の５２３６、以下では下線が施されている）に進む。
（ｎｏｐ（Ｌ（＋０．５０４（−（＋（＋（＋０．０８３０  ０．４０６）（−−０．２４３  ０．６５８））（−（−（＋（＋８．０８６４９７ｅ−０１  ０．４０７）（−０．８９３  −０．１１３））−０．２１２）（−（＋（−−０．５０６  −０．０３１３）（−−０．２４３  ０．６５８））（−（−０．５５６  ０．０３７０）−０．９４６））））−０．０００７４１））（ｓｅｒｉｅｓ（ｓｅｒｉｅｓ  ｅｎｄ（Ｌ  −０．０００７４１（Ｌ  ０．０６０９  ｅｎｄ））ｅｎｄ）ｅｎｄ（ｎｏｐ（ｐｓｓ  ｅｎｄ  ｅｎｄ  ｅｎｄ（Ｃ  −０．９４９  ｅｎｄ））））））
この構成要素作成関数は、Ｚ１９に作用しそれをインダクタＬ２１に変換する。小さな数値−０．０００７４１（以下では下線が施されており、第６６図のポイント４５に単にＶ２として示されている）によって、インダクタＬ２１の値は０．９９８マイクロヘンリーに設定される。第６６図は、ＡＤＦ０のＬ関数５２３６を実行した結果を示す。
制御はＥＮＤ関数（第５２図の５２３７）に渡され、Ｌ２０上の書込みヘッドをなくす。次いで、制御はＰＳＳ並列分割関数５２３８に渡される。インダクタＬ２１に関する議論を完了するためにこのＰＳＳ関数について後で簡単に説明する。ＡＤＦ０のＬ関数（第５２図の５２４６、以下では下線が施されている）はインダクタＬ２１を値の異なるインダクタに変換する。
ｎｏｐ（Ｌ（＋０．５０４（−（＋（＋（＋０．０８３０  ０．４０６）（−−０．２４３  ０．６５８））（−（−（＋（＋８．０８６４９７ｅ−０１  ０．４０７）（−０．８９３  ０．１１３））−０．２１２）（−（＋（−−０．５０６  −０．０３１３）（−−０．２４３  ０．６５８））（−（−０．５５６  ０．０３７０）−０．９４６））））−０．０００７４１））（ｓｅｒｉｅｓ（ｓｅｒｉｅｓ  ｅｎｄ（Ｌ  −０．０００７４１（Ｌ  ０．０６０９  ｅｎｄ））ｅｎｄ）ｅｎｄ（ｎｏｐ（ｐｓｓ（ｐｓｓ  ｅｎｄ  ｅｎｄ  ｅｎｄ（Ｃ  −０．９４９  ｅｎｄ））））））
具体的には、数値０．０６０９（以下では下線が施され、第５２図の５２５２に単にＶ３として示されている）は、Ｌ２１の値を１．１５マイクロヘンリーに再設定する。第６７図は、ＡＤＦ０のＬ関数５２４６を実行した結果を示す。
以下で下線が施されているＰＳＳ並列分割関数５２３８に戻るとわかるように、この関数はＬ１８に作用し、新しいインダクタＬ２２と、２本の新しいワイヤＺ２３およびＺ２４と、Ｌ１８とからなる並列構成を作成する。このＰＳＳ関数は４つの書込みヘッドを作成する。
（ｎｏｐ（Ｌ（＋０．５０４（−（＋（＋（＋０，０８３０  ０．４０６）（−−０．２４３  ０．６５８））（−（−（＋（＋８．０８６４９７ｅ−０１  ０．４０７）（−０．８９３  −０．１１３））−０．２１２）（−（＋（−−０．５０６  −０．０３１３）（−−０．２４３  ０．６５８））（−（−０．５５６  ０．０３７０）−０．９４６））））−０．０００７４１））（ｓｅｒｉｅｓ（ｓｅｒｉｅｓ  ｅｎｄ（Ｌ  −０．０００７４１（Ｌ  ０．０６０９  ｅｎｄ））ｅｎｄ）ｅｎｄ（ｎｏｐ（ｐｓｓ  ｅｎｄ  ｅｎｄ  ｅｎｄ（Ｃ  −０．９４９  ｅｎｄ））））））
第６８図は、ＡＤＦ０のＰＳＳ関数５２３８を実行した結果を示す。ＰＳＳ関数５２３８によって生成されたこれらの書込みヘッドのうちの３つはＥＮＤ関数（５２４７、５２４８、５２４９）によってただちに終了し、したがって、Ｃ関数（５２５０、以下では下線が施されている）に注意が向けられる。
（ｎｏｐ（Ｌ（＋０．５０４（−（＋（＋（＋０．０８３０  ０．４０６）（−−０．２４３  ０．６５８））（−（−（＋（＋８．０８６４９７ｅ−０１  ０．４０７）（−０．８９３  −０．１１３））−０．２１２）（−（＋（−０．５０６  −０．０３１３）（−−０．２４３  ０．６５８））（−（−０．５５６  ０．０３７０）−０．９４６））））−０．０００７４１））（ｓｅｒｉｅｓ（ｓｅｒｉｅｓ  ｅｎｄ（Ｌ  −０．０００７４１（Ｌ  ０．０６０９  ｅｎｄ））ｅｎｄ）ｅｎｄ（ｎｏｐ（ｐｓｓ  ｅｎｄ  ｅｎｄ  ｅｎｄ  （Ｃ  −０．９４９  ｅｎｄ））））））
このＣ関数は、変更可能ワイヤＺ２４に作用しそれをコンデンサＣ２５に変換する。小さな数値−０．９４９（第５２図の５４５４に単にＶ４として示されている）によって、コンデンサＣ２５は構成要素値０．１１２ｎＦを得る。第６９図は、ＡＤＦ０のＥＮＤ関数５２４７ないし５２４９およびＣ関数５２５０を実行した結果を示す。
Ｌ１６、Ｌ２１、Ｌ２０、Ｚ１７、Ｌ２２、Ｚ２３、Ｌ１８、Ｃ２５がすべて、変更可能ワイヤＺ６からＡＤＦ０によって作成されたことに留意されたい。
Ｚ６が２つの端部（第６２図のノード７および８）を有する単なるワイヤであった場合でも、ＡＤＦ０を実行した結果が３つのポート（第６９図のノード６９０７、６９０８、６９０９）を有するサブストラクチャになることにも留意されたい。本明細書で「サブストラクチャ」の語を使用するのは、より一般的に使用される語の「サブサーキット」がＳＰＩＣＥでは特殊な意味を有するからである。
この３つのポートは、ＰＳＳ関数５２３８を実行し、それに続いてＣ関数５２５０を実行し、それによって、第６９図のノード８および９が、介在する構成要素（すなわち、コンデンサＣ２５）によって分離された結果として得られる。
ＥＮＤ関数５２５３および５２５５はＬ２１およびＣ２５上の書込みヘッドをなくす。
第４９図は、ＡＤＦ０によって作成された３ポート・サブストラクチャを示す。
第７０図は、ＡＤＦ０によって作成されたこの同じ３ポート・サブストラクチャを異なる配向で三角形サブストラクチャとして示す。
第７１図は、ＡＤＦ０によって作成された三角形３ポート・サブストラクチャを使用して世代３５から得たベストオブジェネレーション回路（上記では第６２図として示した）を示す。
アーキテクチャ変更操作を使用した低域ＬＣフィルタの設計
本節の目標は、自動定義関数およびアーキテクチャ変更操作を使用しながら、前述の設計特性を満たす低域フィルタを設計することである。すなわち、自動定義関数のアーキテクチャ構成は、ユーザによって事前に指定されることがなく、実行時にアーキテクチャ変更操作を使用して動的に進化する。
１９９４年８月４日に出願された「Ｓｉｍｕｌｔａｎｅｏｕｓ  Ｅｖｏｌｕｔｉｏｎ  Ｏｆ  Ｔｈｅ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｏｆ  Ａ  Ｍｕｌｔｉ−Ｐａｒｔ  Ｐｒｏｇｒａｍ  Ｔｏ  Ｓｏｌｖｅ  Ａ  Ｐｒｏｂｌｅｍ  Ｕｓｉｎｇ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ａｌｔｅｒｉｎｇ  Ｏｐｅｒａｔｉｏｎｓ」と題する米国特許出願第０８／２８６１３４号は、６つのアーキテクチャ変更操作、すなわちブランチ複製、引数複製、ブランチ削除、引数削除、ブランチ作成、引数作成を使用して遺伝的プログラミングの実行時にプログラム全体のアーキテクチャを動的に進化させる方法について説明している。Ｋｏｚａ（１９９４ｂ）も参照されたい。この６つのアーキテクチャ変更操作を以下に示す。
（ｉ）ブランチ複製：１つの既存のプログラムの１つの関数定義ブランチを複製し追加の適切な変更を加えてこの変更を反映することによって新しいポピュレーションの１つの新しい子孫プログラムを作成する。
（ｉｉ）引数複製：１つの既存のプログラムの１つの関数定義ブランチの１つの引数を複製し追加の適切な変更を加えてこの変更を反映することによって新しいポピュレーションの１つの新しい子孫プログラムを作成する。
（ｉｉｉ）ブランチ削除：１つの既存のプログラムの１つの関数定義ブランチを削除し追加の適切な変更を加えてこの変更を反映することによって新しいボピュレーションの１つの新しい子孫プログラムを作成する。
（ｉｖ）引数削除：１つの既存のプログラムの１つの関数定義ブランチの１つの引数を削除し追加の適切な変更を加えてこの変更を反映することによって新しいポピュレーションの１つの新しい子孫プログラムを作成する。
（ｖ）ブランチ作成：既存のブランチの一部を含む１つの新しい関数定義ブランチを追加し、そのブランチの参照を作成することによってポピュレーションの１つの新しい子孫プログラムを作成する。
（ｖｉ）引数作成：既存の関数定義ブランチの引数リストに１つの新しい引数を追加し、そのブランチの参照を適切に修正することによってポピュレーションの１つの新しい子孫プログラムを作成する。
この６つのアーキテクチャ変更操作は、遺伝的プログラミングが実行時に、関数定義ブランチを使用するかどうかと、いくつの関数定義ブランチを使用するかと、各関数定義ブランチが有する引数の数を動的に決定できるようにする自動方法を提供する。アーキテクチャ変更操作と自動定義関数は共に、問題の表現を変更し、同時に問題を解決する自動方法を提供する。別法として、アーキテクチャ変更操作と自動定義関数は、問題を非事前指定次元の非事前指定数のサブプロブレムに分解し、サブプロブレムを解き、サブプロブレムの解を組み立てて問題全体の解を得る自動方法とみなすこともできる。
アーキテクチャ変更操作を使用した低域ＬＣフィルタ用の準備ステップ
エンブリオニック回路
２つの書込みヘッドを有する１入力１出力回路に関する第４図のエンブリオニック回路はこの問題に適している。
プログラム・アーキテクチャ
エンブリオニック回路は最初、それぞれ、各結果生成ブランチに関連付けられた、２つの書込みヘッドを有するので、各プログラム・ツリーに２つの結果生成ブランチ（ＲＰＢ０およびＲＰＢ１と呼ぶ）がある。
自動定義関数がもしあればその数は、アーキテクチャ変更操作を使用して進化プロセスによって決定される。
プログラムの初期ポピュレーション中の各プログラムは、自動定義関数（すなわち、２つの結果生成ブランチ）を含まない一様なアーキテクチャを有する。
関数セットおよび終端セット
関数は、この問題に関しては４つの範疇に分割される。
（１）エンブリオニック回路から回路のトポロジを作成する接続作成関数
（２）回路内のワイヤ（およびその他の構成要素）を、指定された構成要素に変換する構成要素作成関数
（３）共に回路の各構成要素についての数値（寸法決定）を指定する演算実行関数および数値終端
（４）数がアーキテクチャ変更操作によって決定される自動定義関数（サブルーチン）
終端と関数セットは、自動定義関数の存在がアーキテクチャ変更操作によって決定されることを除いて前述の実行進化自動定義関数の例と同じである。
適応度
適応度は、前述のＬＣ低域フィルタ設計問題と同じである。
パラメータ
制御パラメータは、以下の違いを除いて、すでに使用したものと同じであった。
（１）アーキテクチャ変更操作は各世代でまれに使用されるものである。世代５よりも後の各世代での操作の割合は、クロスオーバが８６．５％、繁殖が１０％、突然変異が１％、ブランチ複製が１％、引数複製が０％、ブランチ削除が０．５％、引数削除が０．０％、ブランチ作成が１％、引数作成が０％であった。少数のプログラムしか自動関数を有さない初期世代で大量のコンピュータ時間を費やすのを回避するために、世代６よりも前の各世代での操作の割合は、クロスオーバが７８．０％、繁殖が１０％、突然変異が１％、ブランチ複製が５．０％、引数複製が０％、ブランチ削除が１％、引数削除が０．０％、ブランチ作成が５．０％、引数作成が０％であった。
（２）各プログラム全体中の２つの結果生成ブランチ（および自動定義関数）のそれぞれの最大サイズは３００ポイントである。
（３）自動定義関数の最大数は４である。
（４）各自動定義関数ごとの引数の数は零である。
（５）初期ランダムポピュレーションの作成時に関数をランダムに選択する際に、Ｃ関数、Ｌ関数、ＳＥＲＩＥＳ関数、ＰＳＳ関数、ＦＬＩＰ関数、ＮＯＰ関数、ＴＨＧＮＤ関数にそれぞれ、相対加重８を割り当て、同時に８つのＴＨＶＩＡ関数のそれぞれおよびＣＵＴ関数に相対加重１を割り当てた。
終端作成および結果指定
終端作成および結果指定方法は、すでに使用したのと同じである。
アーキテクチャ変更操作を使用した低域ＬＣフィルタに関する結果
世代７７から得たベストオブラン個体プログラムは、（１０１個中）１０１個のヒットを記録し、０．０００７６５の適応度を有する。プログラム・ツリーはＲＰＢ０が８７ポイントであり、ＲＰＢ１が２ポイントであり、ＡＤＦ０、ＡＤＦ１、ＡＤＦ２、ＡＤＦ３はそれぞれ、６５ポイント、６６ポイント、９４ポイント、９ポイントである。
ＡＤＦ０およびＡＤＦ１は、自動定義関数の一般的な使用法、すなわち特定のサブストラクチャを定義しそれを複数回にわたって再使用する一般的な方法を示す。ＡＤＦ０は６回呼び出され、ＡＤＦ１は３回呼び出される。第７２図はこのＡＤＦ０を示す。ＡＤＦ０のサブストラクチャは、３つのインダクタの直列構成からなる（かつ１つのインダクタと電気的に等価である）。ＡＤＦ０を６回呼び出すことによって、この値を１回定義し、複数回にわたって再使用することができる。
ＡＤＦ１は１つの２８６００マイクロヘンリー・インダクタからなる。ＡＤＦ１を３回呼び出すことによって、このインダクタを１回作成し、次いで再使用することができる。ＡＤＦ２は、１つの３７３００マイクロヘンリー・インダクタのみからなり、１回しか呼び出されない。ＡＤＦ３は１回呼び出される。ＡＤＦ３は、以下に示すように、接続作成関数のみからなり、構成要素を作成させない。
（ｐｓｓ  ｅｎｄ（ｓｅｒｉｅｓ  ｅｎｄ  ｅｎｄ（ｆｌｉｐ  ｅｎｄ））ｅｎｄ  ｅｎｄ）
第７３図は、世代７７から得たベストオブラン回路を示す。
多目的適応度
進化プロセスは適応度によって駆動される。上記の議論では、適応度を単一の因子、すなわち（設計中のフィルタの選択された周波数ドメイン内の）回路の所望の動作と回路の実際の動作との間の偏差の加重和で測定した。ユーザが供給する適応度は、回路の電力消費量や、回路の構成要素の数や、構成要素のコストや、構成要素が占める表面積や、時間ドメイン内の回路の動作や、周波数ドメイン内の回路の動作を含めて、回路の計算可能な特性または特性の組合せを組み込むことができる。
多くの場合、実行の適応度に複数の因子を組み込むことが望ましい。本節では、多目的適応度を用いて、前述の低域フィルタ設計問題を再び検討する。
適応度の一次因子は、（前述の）問題の設計要件に対する満足度である。二次因子は、（特定のコスト割り当てが与えられた場合）倹約された設計による解決策を推進する。具体的には、回路の適応度は、周波数ドメイン内の１０１個のサンプル・ポイントに関して、１０１回よりも少ないヒット（すなわち、１０１個の適合サンプル・ポイント）を記録したあらゆる回路の実際の電圧と所望の電圧の偏差の、すでに使用したのと同じ加重和を１０．０に加えた値である。しかし、完全に１０１回のヒットを記録した回路の場合、適応度は、コンデンサの数を０．００１倍し、それにインダクタの数の０．００２倍を加えた値である。すなわち、この多目的適応度では、適応度に二次因子として回路の倹約を組み込む。倹約性は、インダクタのコストをコンデンサの２倍にするように算出される。この二次因子は、（このような実行におけるプログラム・ツリーで最大数のポイントが許容される場合）常に１０．０よりもかなり小さく、したがって、１０１個の満足ポイントを有する回路の適応度は常に、１００個以下の満足ポイントを有する最良の回路の適応度よりも優れている（低い）。１０１個の満足ポイントを有する回路のうちで、より倹約された回路がより良い回路とみなされる。この多目的適応度は、１００％の満足度が得られるまで設計要件に対する満足度が完全に倹約性を支配し、それ以後、適応度は倹約性に基づくものになるという意味で辞書的である。
ある実行では、１０１回のヒットを記録した第１の個体は世代３７に現れた。第７４図は、世代３７から得た１００％満足回路の進化した１４個の構成要素（１０個のインダクタと４つのコンデンサ）のコストが０．０２４であることを示す。世代３７の後に、この実行によって、１０１回のヒットを記録した多数の他の回路構成プログラム・ツリーが生成された。１０１回のヒットを記録したすべてのプログラムは、１００回以下のヒットを記録したプログラムよりも適応度が優れていた。しかし、１０１回のヒットを記録したプログラムのうちで、より倹約されたプログラムの方が適応度が優れていた。したがって、世代５２など実行の後の世代では、１０１回のヒットを記録したより倹約された個体が現れた。
第７５図は、世代５２から得た１００％満足回路の進化した１２個の構成要素（８つのインダクタと４つのコンデンサ）のコストが０．０２０であることを示す。４つのインダクタ（Ｌ４１、Ｌ３１、Ｌ１８、Ｌ３９）からなる直列構成からＬ４１およびＬ３１を削除すると倹約性が向上することに留意されたい。設計要件に対する１００％満足度は、Ｌ２４、Ｌ５、Ｌ１７の値をわずかに変更することによって維持された。また、Ｌ１８およびＬ３９はフリップされている。この特定の倹約プログラムは（世代３７から得た１００％満足プログラムの場合の２３５ポイントと比べて）２６１ポイントを有する。
この実行は、ユーザが定義する倹約度に基づいて一次因子および二次因子を組み込んだ多目的適応度を使用した遺伝的プログラミングを使用して電子回路を進化させることが可能であることを示している。
１入力２出力回路の設計
２バンド・クロスオーバ（ウーハおよびツィータ）フィルタは１入力２出力回路であり、ある指定された周波数よりも低いすべての周波数を第１の出力ポート（ウーハ）に通過させ、この指定された周波数よりも高いすべての周波数を第２の出力ポート（ツィータ）に通過させる。２バンド・クロスオーバ・フィルタは、入力と第１の出力ポートとの間の低域フィルタと、入力と第２の出力ポートとの間の高域フィルタとからなる並列構成によって実現することができる。
本節では、クロスオーバ周波数が２５１２Ｈｚである２バンド・クロスオーバ・フィルタが設計される。
２バンド・クロスオーバ（ウーハおよびツィータ）フィルタ用の準備ステップ
本節では、この問題に関する準備ステップについて論じる。
エンブリオニック回路
この問題に必要なエンブリオニック回路は、２バンド・クロスオーバ（ウーハおよびツィータ）フィルタが２つの出力を有することを反映する。
第７６図の下４分の３は、２バンド・クロスオーバ・フィルタの１入力２出力回路用のエンブリオニック回路を示す。エネルギー源は２Ｖ正弦電圧源ＶＳＯＵＲＣＥであり、その負（−）の端部はノード０（接地）に接続され、正（＋）の端部はノード１に接続される。ノード１とノード２との間にソース抵抗ＲＳＯＵＲＣＥがある。ノード２とノード３との間に１本の変更可能ワイヤ（すなわち、書込みヘッドを有するワイヤ）Ｚ０があり、ノード２とノード６との間に第２の変更可能ワイヤＺ１があり、ノード３とノード６との間に第３の変更可能ワイヤＺ２がある。変更可能ワイヤＺ０、Ｚ１、Ｚ２の周りに、３つの書込みヘッド（太い線）がそれらのワイヤを指し示すことを示す円がある。ノード３とノード４との間に分離ワイヤーＺＯＵＴ１があり、ノード４に電圧プローブＶＯＵＴ１があり、ノード４と接地との間に固定負荷抵抗ＲＬＯＡＤ１がある。また、ノード６とノード５との間に分離ワイヤーＺＯＵＴ２があり、ＶＯＵＴ２と呼ばれる電圧プローブがノード５にあり、ノード５と接地との間に負荷抵抗ＲＬＯＡＤ２がある。すべての３つの抵抗は０．００７９４ＫΩの抵抗を有する。このエンブリオニック回路のすべての上記の素子（Ｚ０、Ｚ１、Ｚ２を除く）は常に固定され、回路の開発プロセス中に修正されることはない。開発プロセスの開始時に、書込みヘッドが３本の変更可能ワイヤＺ０、Ｚ１、Ｚ２のそれぞれを指し示す。
一実施形態では、エンブリオニック回路は、回路内の１つのノードに達する線の数が２と３のどちらかになるように設計される。この条件は、回路構成プログラム・ツリー内のすべての関数によって維持される。分離ワイヤーＺＯＵＴ１およびＺＯＵＴ２は、プローブ・ポイントＶＯＵＴ１およびＶＯＵＴ２を開発プロセス中に修正されないように保護する。
このエンブリオニック回路ではドメインの知識がほとんど必要とされないことに留意されたい。具体的には、（１）エンブリオニック回路は回路であり、（２）このエンブリオニック回路は１つの入力と２つの出力とを有し、（３）１つの入力（ノード２）と２つの出力（ノード４および５）との間に完全な２地点間接続性を与える変更可能な接続部Ｚ０、Ｚ１、Ｚ２がある。具体的には、低域フィルタと高域フィルタを並列に組み合わせることによって２バンド・クロスオーバ・フィルタを構築することができるという知識は使用されないことに留意されたい。
このエンブリオニック回路は、任意の１入力２出力回路に適用することができる。この適応度によって進化探索プロセスを所望の回路に近づけることができる。
プログラム・アーキテクチャ
エンブリオニック回路は最初、それぞれ、各結果生成ブランチに関連付けられた、３つの書込みヘッドを有し、３つの結果生成ブランチがある。この例示的な問題では、自動定義関数は使用されない。したがって、プログラム・ツリー全体のアーキテクチャは、ＬＩＳＴ関数によって結合された３つの結果生成ブランチからなる。
第７６図の上４分の１は、例示的なプログラム・ツリーの１番上の４つのポイントを示す。１つの書込みヘッドは最初、Ｌ関数７６０２に関連付けられ、変更可能ワイヤＺ０を指し示し、第２の書込みヘッドは、Ｃ関数７６０３に関連付けられ、変更可能ワイヤＺ１を指し示し、第３の書込みヘッドは、Ｃ関数７６０４に関連付けられ、変更可能ワイヤＺ２を指し示す。
第７８図は、第１の結果生成ブランチのＬ関数（第７６図の７６０２）、第２の結果生成ブランチのＣ関数（第７６図の７６０３）、第３の結果生成ブランチのＣ関数（第７６図の７６０４）を実行した結果としての第７６図のエンブリオニック回路に対する効果を示す。
Ｌ関数は、第７６図の変更可能ワイヤＺ０に作用して第７８図のインダクタＬ３に変換する。ノード２（第７６図には図示せず）の左側への演算実行サブツリー・ブランチは、このＬ関数の評価の一部として評価され、解釈されスケーリングされると、インダクタＬ３の構成要素値として４７８マイクロヘンリーを確立する。
Ｃ関数７６０３は、第７６図の変更可能ワイヤＺ１に作用して第７８図のコンデンサＣ４に変換する。ノード３（第７６図には図示せず）の左側への演算実行サブツリー・ブランチは、コンデンサＣ４の構成要素値として３４３０ｎＦを確立する。同様に、Ｃ関数７６０４は、第７６図の変更可能ワイヤＺ２に作用して第７８図の６．５８ｎＦコンデンサＣ５に変換する。
これらのＬ関数およびＣ関数の実行後に、書込みヘッドがＬ３、Ｃ４、コンデンサＣ５を指し示す。
関数セットおよび終端セット
終端セットおよび関数セットは、すべての３つの結果生成ブランチについて同じである。これらのセットは、自動定義関数を使用しなかったときに前述の低域フィルタを設計する問題で使用したセットと同じである。
適応度
ユーザが提供する適応度は進化プロセスを方向付ける。
ポピュレーション中の個別の各プログラム・ツリーについての適応度の評価はそのプログラム・ツリーを実行することから始まる。この実行によって、非常に簡単なエンブリオニック回路がより複雑な回路になる。そのような各回路は次いで、ＳＰＩＣＥシミュレータの修正バージョンを使用してシミュレートされる。
ＳＰＩＣＥシミュレータは、ＡＣ小信号分析を実行し、１０Ｈｚないし１０００００Ｈｚの範囲から選択された１０１個の周波数値のそれぞれについて、２つのプローブ・ポイントＶＯＵＴ１およびＶＯＵＴ２での回路の動作を報告するよう要求される。この４桁の周波数はそれぞれ、（対数スケールを使用して）２５の部分に分割され、したがって、この問題には合計で２０２個の適応度ケースがある。
適応度は、第１のプローブ・ポイントＶＯＵＴ１で回路によって生成される周波数ドメイン内の電圧の実際の値と、その第１のプローブ・ポイントの電圧に関する目標値との間の絶対加重偏差の、１０１個のＶＯＵＴ１周波数値にわたる和に、第２のプローブ・ポイントＶＯＵＴ２で回路によって生成される電圧の実際の値と、その第２のプローブ・ポイントの電圧に関する目標値との間の絶対加重偏差の、１０１個のＶＯＵＴ１周波数値にわたる和を加えた値で測定される。適応度の値が小さければ小さいほど良好である。零適応度は理想的なフィルタを表す。
具体的には、標準化適応度Ｆ（ｔ）は次式で与えられる。
0003958793.tif 000022
上式で、ｆ（ｉ）は適応度ケースｉの周波数（ヘルツ単位）であり、ｄ1（ｘ）はプローブ・ポイントＶＯＵＴ１に関する周波数ｘでの目標値と観測値との間の差であり、ｄ２（ｘ）はプローブ・ポイントＶＯＵＴ２に関する周波数ｘでの目標値と観測値との間の差であり、Ｗ1（ｙ，ｘ）はプローブ・ポイントＶＯＵＴ１に関する周波数ｘでの差ｙに対する加重であり、Ｗ（ｙ，ｘ）はプローブ・ポイントＶＯＵＴ２に関する周波数ｘでの差ｙに対する加重である。
適応度は、理想値にはペナルティを課さず、あらゆる受け入れられる偏差にわずかにペナルティを課し、あらゆる受け入れられない偏差に重いペナルティを課す。
まずウーハ部とＶＯＵＴ１について考える。２バンド・クロスオーバ・フィルタのウーハ部は低域フィルタである。
１０Ｈｚないし１９０５Ｈｚの間隔中の５８個のポイントのそれぞれに関する手順を以下に示す。電圧がこの間隔中の理想値の１．０Ｖに等しい場合、偏差は０．０である。電圧が９７０ｍＶないし１０００ｍＶである場合、１０００ｍＶからの偏差の絶対値が係数１．０で加重される。電圧が９７０ｍＶ未満である場合、１０００ｍＶからの偏差の絶対値が係数１０．０で加重される。この構成は、通過帯域内の理想電圧が１．０Ｖであり、３０ｍＶの不足がこの問題の設計要件を満たし、通過帯域内の９７０ｍＶよりも低い電圧が受け入れられないことを反映する。
周波数３３１１以上を表す３８個の適応度ケースの場合、手順を以下に示す。
電圧が０ｍＶないし１ｍＶである場合、０ｍＶからの偏差の絶対値が係数１．０で加重される。電圧が１ｍＶよりも高い場合、０ｍＶからの偏差の絶対値が係数１０．０で加重される。この構成は、停止帯域内の理想電圧が０．０Ｖであり、０ｍＶよりも高い１ｍＶリップルが受け入れられ、停止帯域内の１ｍＶよりも高い電圧が受け入れられないことを反映する。
この２つの主要帯域における適応度ケース（６１および３５）の数は十分近い数である。したがって、この２つの主要帯域における適応度ケースのそれぞれの異なる数に与える加重を等しくしようとはしなかった。次の適応度ケース（すなわち、２０８９Ｈｚおよび２２９１Ｈｚ）では、１０００ｍＶからの偏差の絶対値が係数１．０で加重される。次の適応度ケース（すなわち、周波数２５１２Ｈｚ）では、５００ｍＶからの偏差の絶対値が係数１．０で加重される。次の２つの適応度ケース（すなわち、２７５４Ｈｚおよび３０２０Ｈｚ）では、０ｍＶからの偏差の絶対値が係数１．０で加重される。
次に、ツィータ部およびＶＯＵＴ２について考える。２バンド・クロスオーバ・フィルタのツィータ部は高域フィルタである。ツィータ部の適応度は、ウーハ部の構成の鏡像である。
ＳＰＩＣＥでシミュレートできない回路には高い適応度ペナルティ値（１０8）が割り当てられる。
ヒットは、電圧が受け入れられるか、あるいは理想的なものであり、あるいは「ｄｏｎ’ｔ  ｃａｒｅ」帯域（この特定の問題とは関係がない）に存在する適応度ケースの数として定義される。したがって、ヒットの数は最大で２０２である。
パラメータ
ポピュレーションサイズＭは、６４００００である。
各世代の遺伝操作の割合は、クロスオーバが８９％、繁殖が１０％、突然変異が１％であった。この例示的な問題では、アーキテクチャ変更操作は使用しなかった。
各プログラム全体内の３つの結果生成ブランチのそれぞれについて最大サイズ２００ポイントを確立した。
初期ランダムポピュレーションの作成時に関数をランダムに選択する際に、Ｃ、Ｌ、ＳＥＲＩＥＳ、ＰＳＳ、ＦＬＩＰ、ＮＯＰ、ＧＮＤにそれぞれ、相対加重８を割り当て、同時に８つのＶＩＡ関数のそれぞれに相対加重１を割り当てた。
遺伝的プログラミングの実行を制御する他の小パラメータはＫｏｚａ１９９４（アペンディックスＤ）に指定されたデフォルト値であった。
終了基準および結果指定
設計要件が厳しいので、合理的な時間で２０２個のヒットを記録する個体を進化させることが可能であるかどうかはわからなかった。この問題は低速で実行されるので、世代Ｇの最大数を任意の大きな数に設定し、各実行時に開発を待った。
２バンド・クロスオーバ（ウーハおよびツィータ）フィルタに関する結果
世代０におけるランダムに作成された６４００００個の回路のポピュレーションのうちでいくつかの個体は他の個体よりも優れている。世代０から得た最悪の個体回路構成プログラム・ツリーは非常に異常であり、ＳＰＩＣＥシミュレータがそのような回路をシミュレートできない回路を作成する。このような回路には高い適応度ペナルティ値（すなわち、１０8）が割り当てられる。
世代０から得たシミュレート可能な回路の中間回路は適応度が９６４．３であり、１０回のヒットを記録する。世代０のこの中間回路は、周波数を顕著に差別的に通過させることはない。
世代０の最良の個体プログラム・ツリーは適応度が１５９．０であり、（２０２回中）８５回のヒットを記録する。このプログラム・ツリーの第１の結果生成ブランチは１８１ポイントを有し、第２の結果生成ブランチは１８１ポイントを有し、第３の結果生成ブランチは１８ポイントを有する。第７８図は、世代０から得たベストオブジェネレーション回路を示す。
世代１２から得たベストオブジェネレーション個体は適応度が８０．３であり、（２０２回中）１１６回のヒットを記録する。世代２０のベストオブジェネレーション個体は適応度が３８．８であり、１２５回のヒットを記録する。
後で世代１３７に現れるベストオブラン回路と同じトポロジを有する回路が世代７９に現れる。世代７９のこの回路は、第７９図に示されており、適応度が１．０６であり（すなわち、世代１３７から得たベストオブラン個体の適応度ほど良好ではない）、１９６回のヒットを記録する。この回路の大部分の構成要素値は、最終的なベストオブラン回路とは異なる。しかし、これらのそれぞれの異なる構成要素値はすべて、世代１３７に現れるまだ発見されていないベストオブラン個体の最終的な構成要素値の１桁内である。
世代１３７のベストオブラン個体プログラム・ツリーは適応度が０．７８０７であり、（２０２回中）１９２回のヒットを記録する。このプログラム・ツリーの３つの結果生成ブランチはそれぞれ、１８７ポイント、１９８ポイント、１９１ポイントを有する。進化したこの回路の対称性に留意されたい。
第８０図は、世代１３７から得たベストオブラン個体に関する回路を示す。世代１３７から得たこのベストオブラン回路が完全な２０２回のヒットは記録しないことに留意されたい。現在実施可能な量の時間および労力でこの問題に関する１００％満足回路を進化させることができるかどうかは不明である。
バッタワース回路は、等級付けされた一連の「はしご」ベンチマーク・フィルタである。オーダー３のバッタワース応答は、いくつかの実際的な応用例で十分なものとみなされている。（フィルタのカットオフ周波数を２５１２Ｈｚで適切にスケーリングした場合に）低域バッタワース３フィルタおよび高域バッタワース３フィルタの組合せに適応度およびヒット度を適用すると、組合せ回路は（２０２回中）１６２回のヒットを記録する。２つのバッタワース５フィルタの周波数ドメイン応答は１８４回のヒットのスコアに対応する。２つのバッタワース７フィルタの周波数ドメイン応答は１９０回のヒットのスコアに対応する。前述の世代１３７から得たベストオブラン回路は、１９２回のヒットを記録し、したがって、オーダー７の低域バッタワース・フィルタと高域バッタワース・フィルタの組合せよりもわずかに優れた応答を与えるとみなすことができる。低域バッタワース７フィルタと高域バッタワース７フィルタの組合せは、７つのインダクタと７つのコンデンサを必要とするが、遺伝的に進化したベストオブラン回路は６つのインダクタと７つのコンデンサしか必要としない。したがって、遺伝的に進化したフィルタ回路は、バッタワース７フィルタよりもわずかに優れた応答を有し、わずかにより倹約されている。
世代１３７から得たベストオブラン回路の低域部分はバッタワース・トポロジを有する（ただし、構成要素のバッタワース値は有さない）。これに対して、ベストオブラン回路の高域部分は、余分のコンデンサを有し、したがってバッタワース・トポロジを有さない。周波数応答の高域部分（すなわち、余分なコンデンサを含む部分）については、低域部分よりも鋭い境界が２５１２Ｈｚの周りにある。
１入力３出力回路の設計
３バンド・クロスオーバ（ウーハ−ミッドレンジ−ツィータ）フィルタは１入力３出力回路であり、ある指定された周波数よりも低いすべての周波数を第１の出力ポート（ウーハ）に通過させ、この指定された周波数とは異なりそれよりも高い指定されたある周波数より高いすべての周波数を第３の出力ポート（ツィータ）に通過させ、中間周波数を第２の出力ポートに通過させる（ミッドレンジ出力）。
この問題に必要な３バンド・クロスオーバ（ウーハ−ミッドレンジ−ツィータ）フィルタが３つの出力を有することを反映するエンブリオニック回路は、３つの出力を有する。
第８１図は、３バンド（ウーハ−ミッドレンジ−ツィータ）クロスオーバ・フィルタの１入力３出力回路用のエンブリオニック回路を示す。エネルギー源は２Ｖ正弦電圧源ＶＳＯＵＲＣＥであり、その負（−）の端部はノード０（接地）に接続され、正（＋）の端部はノード１に接続される。ノード１とノード２との間にソース抵抗ＲＳＯＵＲＣＥがある。ノード２とノード３との間に１本の変更可能ワイヤ（すなわち、書込みヘッドを有するワイヤ）Ｚ０があり、ノード２とノード５との間に第２の変更可能ワイヤＺ１があり、ノード２とノード７との間に第３の変更可能ワイヤＺ２がある。変更可能ワイヤＺ０、Ｚ１、Ｚ２の周りに、３つの書込みヘッドがそれらのワイヤを指し示すことを示す円がある。ノード３とノード４との間に分離ワイヤーＺＯＵＴ０があり、ＶＯＵＴ０と呼ばれる電圧プローブがノード４にあり、ノード４と接地との間に固定負荷抵抗ＲＬＯＡＤ１がある。第２に、ノード５とノード６との間に分離ワイヤーＺＯＵＴ１があり、、ＶＯＵＴ１と呼ばれる電圧プローブがノード６にあり、ノード６と接地との間に負荷抵抗ＲＬＯＡＤ１がある。第３に、ノード７とノード８との間に分離ワイヤーＺＯＵＴ２があり、ＶＯＵＴ２と呼ばれる電圧プローブがノード８にあり、ノード８と接地との間に負荷抵抗ＲＬＯＡＤ１がある。すべての３つの抵抗は０．００７９４ＫΩの抵抗を有する。このエンブリオニック回路のすべての上記の素子（Ｚ０、Ｚ１、Ｚ２を除く）は常に固定され、回路の開発プロセス中に修正されることはない。開発プロセスの開始時に、書込みヘッドが３本の変更可能ワイヤＺ０、Ｚ１、Ｚ２のそれぞれを指し示す。回路のすべてのその後の開発は書込みヘッドから始まる。回路構成プログラム・ツリー内の関連する関数に従って書込みヘッドが指し示す構成要素を修正することによって回路が開発される。
したがって、プログラム・ツリー全体のアーキテクチャは、ＬＩＳＴ関数によって結合された３つの結果生成ブランチからなる。すなわち、エンブリオニック回路は最初、それぞれ、各結果生成ブランチに関連付けられた、３つの書込みヘッドを有する。
問題の要件が高くなるにつれて、遺伝的プログラミングを実行する場合には一般に、ポピュレーションのサイズを大きくし、世代の数を増やして所望の結果を生成する必要がある。たとえば、この３出力問題を実行したときには、前述の問題で使用したのと同じポピュレーションサイズ（６４００００）を使用して、きちんと要件を満たす回路を進化させた。しかし、６４００００個の個体のみのポピュレーションを使用してこの問題に関して進化させた回路は、すべての３つの出力ポートに関する周波数ドメイン内の１００％のサンプル・ポイントを満足したわけではなかった。そのような場合は、ポピュレーションのサイズおよび世代の数を増加させる（その結果、問題の解決に関わる資源を増加させる）必要がある。
多重入力多重出力エンブリオニック回路
多くの電気回路は、複数の入力と複数の出力とを有する。１例として、複数の信号チャネルを処理するシステムが挙げられる。他の例として、ロボットを制御する回路が挙げられ、この回路には、たとえば距離センサからの２つの入力と、ロボットの左側および右側のホールの速度を制御する２つの出力がある。
第８２図は、２入力２出力回路を進化させる基礎として使用できるエンブリオニック回路を示す。電圧源ＶＳＯＵＲＣＥ１はノード０（接地）およびノード１に接続され、それに対して、ＶＳＯＵＲＣＥ２はノード８およびノード０（接地）に接続される。ノード１とノード２との間に１つのソース抵抗ＲＳＯＵＲＣＥ１があり、ノード８とノード７との間に他のソース抵抗ＲＳＯＵＲＣＥ１がある。ノード３とノード４との間に分離ワイヤーＺＯＵＴ１があり、ＶＯＵＴ１と呼ばれる電圧プローブがノード４にあり、ノード４とノード０（接地）との間に固定負荷抵抗ＲＬＯＡＤ１がある。また、ノード６とノード５との間に分離ワイヤーＺＯＵＴ２があり、ＶＯＵＴ２と呼ばれる電圧プローブがノード５にあり、ノード５とノード０（接地）との間に負荷抵抗ＲＬＯＡＤ２がある。変更可能ワイヤＺ１（ノード３とノード２との間）と、Ｚ２（ノード７とノード３との間）と、Ｚ３（ノード７とノード２との間）と、Ｚ４（ノード６とノード３との間）と、Ｚ５（ノード６とノード２との間）と、Ｚ６（ノード６とノード７との間）がある。この６本の変更可能ワイヤは２つの入力と２つの出力との間に完全な２地点間接続性を与える。開発プロセスの開始時には、（変更可能ワイヤＺ１、Ｚ２、Ｚ３、Ｚ４、Ｚ５、Ｚ６を指し示す）６つの書込みヘッドがある。
サブサーキットを構成要素として使用した多帯域通過フィルタの設計
回路を作成するために使用される構成要素は抵抗、コンデンサ、インダクタなどと同程度にプリミティブである必要はない。ＳＰＩＣＥにおけるサブサーキット機能によって、サブサーキットを定義することができる。ＳＰＩＣＥでサブサーキットを定義した後、そのサブサーキットは、プリミティブ構成要素を使用できる任意の場所で繰り返し使用することができる。すなわち、サブサーキットの参照は回路のネットリストに現れる。
サブサーキットは、１本または複数のリード線を有することができ、形式パラメータを有することができる。
サブサーキットは、ＳＰＩＣＥではＳＵＢＣＫＴコマンドを使用して定義される。各ＳＵＢＣＫＴ定義は、サブサーキットの名前と、そのノードの１つまたは複数の形式パラメータと、サブサーキットを定義するネットリストと、ＥＮＤＳコマンド（入れ子サブサーキット定義を使用している場合はサブサーキットの名前を含まなければならない）とからなる。各ＳＵＢＣＫＴ定義は、サブサーキットを定義するネットリスト内の構成要素およびノードのそれ自体のローカル番号付けを有する。サブサーキットは、Ｘで始まるネットリストの行、固有の番号、１つまたは複数のノード番号、サブサーキットの名前によって呼び出される。たとえば、以下に、楕円形５低域フィルタ用の２本のリード線を含むサブサーキットのサブサーキット定義を示す。この低域フィルタのカットオフ周波数は３４２５８ヘルツである。
．ＳＵＢＣＫＴ  ＥＬＩＰ５＿ＬＰ＿１  １  ２
Ｌ１  １  ３  ５．７６ｅ＋０３ｕＨ
Ｌ２  ３  ４  ３．４６ｅ＋０２ｕＨ
Ｃ３  ４  ０  ５．９０ｅ＋００ｎＦ
Ｌ４  ３  ５  ８．９９ｅ＋０３ｕＨ
Ｌ５  ５  ６  ９．４０ｅ＋０２ｕＨ
Ｃ６  ６  ０  ５．２６ｅ＋００ｎＦ
Ｌ７  ５  ２  ５．２４ｅ＋０３ｕＨ
．ＥＮＤＳ  ＥＬＩＰ５＿ＬＰ＿１
サブサーキットの名前はＥＬＩＰ５＿ＬＰ＿１である。サブサーキットは２つのノード、すなわちこの場合はノード１およびノード２を参照する。サブサーキットは５つのインダクタと２つのコンデンサとを有する。サブサーキット定義はＥＮＤＳ行で終了する。
第１０３図は、この楕円形５低域フィルタ・サブサーキットを示す。
第１０４図は、楕円形５高域フィルタ・サブサーキットを示す。高い抵抗を有する２つの抵抗Ｒ８およびＲ９は、ＳＰＩＣＥではシミュレートできない浮動ノードを防止するために追加される。これらの抵抗を物理回路に含める必要はない。
ＳＵＢＣＫＴコマンドが新しい構成要素を定義するために使用され、このコマンドが自動定義関数と同じではないことに留意されたい。
ＳＰＩＣＥのサブサーキット機能は、第１の通過帯域が１００Ｈｚから始まって２００Ｈｚで終わり、第２の通過帯域が１０ＫＨｚから始まって２０ＫＨｚで終わり、通過帯域および停止帯域の許容リップルがオーダー５の楕円形フィルタの許容リップルである多帯域通過フィルタを設計することによって示される。この目標は、低域フィルタおよび高域フィルタを構成要素として使用するが、インダクタやコンデンサを構成要素として使用することのない多通過帯域フィルタを設計することである。
多通過帯域フィルタ用の準備ステップ
エンブリオニック回路
この問題には、１つの書込みヘッドを有するエンブリオニック回路を使用する。このエンブリオニック回路は、ワイヤＺ０上に書込みヘッドがないことを除いて第３図のエンブリオニック回路と同じである。
プログラム・アーキテクチャ
この例示的な問題では、自動定義関数は使用されない。
エンブリオニック回路は最初に１つの書込みヘッドを有するので、各プログラム・ツリー全体に１つの結果生成ブランチがある。
この例示的な問題の場合、各構成継続サブツリーについての関数セットＦccsは次式で与えられる。
Ｆccs＝｛ＥＬＩＰ５＿ＬＰ，ＥＬＩＰ５＿ＨＰ，ＳＥＲＩＥＳ，ＰＳＳ，ＦＬＩＰ，ＮＯＰ，ＴＨＧＮＤ，ＴＨＰＯＳ，ＴＨＶＩＡ０，ＴＨＶＩＡ１，ＴＨＶＩＡ２，ＴＨＶＩＡ３，ＴＨＶＩＡ４，ＴＨＶＩＡ５，ＴＨＶＩＡ６，ＴＨＶＩＡ７｝，
この場合、ＥＬＩＰ５＿ＬＰ関数およびＥＬＩＰ５＿ＨＰ関数はそれぞれ、オーダー５の楕円形フィルタのカットオフ周波数を指定する１つの引数を取り出す。この引数は演算実行サブツリーに含まれる。その場合、ＥＬＩＰ５＿ＬＰ（またはＥＬＩＰ５＿ＨＰ）関数は、所望のカットオフ周波数を有するオーダー５の低域（または高域）楕円形フィルタがモデルであるサブサーキットを与える。
各構成継続サブツリーについての終端セットＴccsは以下のものからなる。
Ｔccs＝｛ＥＮＤ，ＣＵＴ｝．
各演算実行サブツリーについての関数セットＦapsは次式で与えられ、
Ｆaps＝｛＋，−｝
それぞれ、２つの引数をとる。
各演算実行サブツリーについての終端セットＴapsは次式で与えられる。
Ｔaps＝｛Ｒ｝
上式で、Ｒは−１．０００ないし＋１．０００の浮動小数点ランダム定数を表す。
適応度
この問題では、電圧ＶＯＵＴがプローブされ、回路は周波数ドメイン内で観察される。ＳＰＩＣＥシミュレータは、ＡＣ小信号分析を実行し、４桁の周波数（１０Ｈｚないし１０００００Ｈｚ）の範囲から選択された１０１個の周波数値のそれぞれについての回路の動作を報告するよう要求される。各桁は（対数スケールを使用して）２５個の部分に分割される。
適応度は、プローブ・ポイントＶＯＵＴで回路によって生成される周波数ドメイン内の電圧の実際の値と、目標電圧値との間の絶対加重偏差の、１０１個の適応度ケースにわたる和で測定される。適応度の値が小さければ小さいほど良好である。零適応度は理想的なフィルタを表す。
適応度は、理想値にはペナルティを課さず、あらゆる受け入れられる偏差にわずかにペナルティを課し、あらゆる受け入れられない偏差に重いペナルティを課す。
周波数範囲は、２つの通過帯域と、３つの停止帯域と、４つの「ｄｏｎ’ｔ  ｃａｒｅ」領域に分割される。
２つの通過帯域内のそれぞれの８ポイント（合計で１６ポイント）のそれぞれに関する手順を以下に示す。電圧がこの間隔中の理想値の１．０Ｖに等しい場合、偏差は０．０である。電圧が９５０ｍＶないし１０００ｍＶである場合、１０００ｍＶからの偏差の絶対値が係数１．０で加重される。電圧が９５０ｍＶ未満である場合、１０００ｍＶからの偏差の絶対値が係数１０．０で加重される。この構成は、通過帯域内の理想電圧が１．０Ｖであり、５０ｍＶの不足が受け入れられ、通過帯域内の９５０ｍＶよりも低い電圧が受け入れられないことを反映する。この種のＬＣ回路で電圧が１．０Ｖを超えることは不可能である。
３つの停止帯域内の５３個のポイントのそれぞれに関する手順を以下に示す。電圧が０ｍＶないし５ｍＶである場合、０ｍＶからの偏差の絶対値が係数１．０で加重される。電圧が５ｍＶよりも高い場合、０ｍＶからの偏差の絶対値が係数１０．０で加重される。この構成は、停止帯域内の理想電圧が０．０Ｖであり、０ｍＶよりも高い５ｍＶリップルが受け入れられ、停止帯域内の５ｍＶよりも高い電圧が受け入れられないことを反映する。
各通過帯域の直前に８つの「ｄｏｎ’ｔ  ｃａｒｅ」ポイントがあり、各通過帯域の直後に８つの「ｄｏｎ’ｔ  ｃａｒｅ」ポイントがある。
偏差は、３つの「ｄｏｎ’ｔ  ｃａｒｅ」帯域内の３２個のポイントのそれぞれについて零とみなされる。
ヒットは、電圧が受け入れられるか、あるいは理想的なものであり、あるいは「ｄｏｎ’ｔ  ｃａｒｅ」帯域に存在する適応度ケースの数として定義される。したがって、この問題の場合、ヒットの数は最小で３２であり、最大で１０１である。
制御パラメータ
ポピュレーションサイズＭは４００００であった。
終了基準および結果指定
終了基準および結果指定方法は、前述のＬＣ低域フィルタ設計問題の場合と同じである。
サブサーキットを構成要素として使用した多帯域通過フィルタに関する結果
世代２５から得た最良の回路は適応度が０．１９７であり、（１０１回中）１０１回のヒットを記録する。したがって、この問題は解決されるとみなすことができる。
第１０５図は、世代２５から得たベストオブジェネレーション個体を示す。図を見ればわかるように、２つの通過帯域は、利用可能な低域楕円形フィルタ・サブサーキットおよび高域楕円形フィルタ・サブサーキットの直列並列構成によって定義される。各サブサーキットに関連付けられた数値パラメータはそのフィルタのカットオフ周波数である。これらの数値パラメータはそれぞれ演算実行サブツリーから得られる。
ハード配線構成要素を含む回路の設計
多くの実際的な設計問題はまず、ある指定された構成要素を特定の方法で回路に組み込むという要件から始まる。そのような要件は、様々な実際的な電気的問題、経済的問題、またはパッケージ問題によって動機付けることができる。
たとえば、特定の方法で接続される２つのトランジスタを組み込むための解決策が必要とされるクラスＢプッシュプル増幅器を設計する必要があると仮定する。必要な方法で接続された必要な２つのトランジスタを組み込むには特殊なエンブリオニック回路を作成することができる。書込みヘッドは、この２つのトランジスタ上には配置されず、したがって開発進化全体的プロセスにわたって変更されない。次いで、進化プロセスが前述のように進行する。
トランジスタを使用した増幅器の設計
増幅器は１入力１出力回路であり、入力信号の電圧に増幅係数Ａを乗じる。
増幅器の設計の開始点は、ユーザが増幅係数Ａと、増幅器が動作することが予想される周波数範囲を指定することである。この問題の場合、周波数範囲２０Ｈｚないし２００００Ｈｚにわたって増幅係数３．５が追求される。
増幅器は、出力電圧が入力電圧よりも高くなる可能性があるという意味で能動回路である。抵抗、コンデンサ、インダクタのみで能動回路を実現することはできず、トランジスタや１つまたは複数の電源などの能動構成要素を存在させる必要がある。
増幅器用の準備ステップ
エンブリオニック回路
増幅器を設計する問題では、ソース抵抗と負荷抵抗とを含む１入力１出力回路が必要とされるので、第３図のエンブリオニック回路はこの例示的な問題に適している。ソース抵抗ＲＳＯＵＲＣＥは１０００Ωであり、負荷抵抗ＲＬＯＡＤは８Ωである。入力交流信号源ＶＳＯＵＲＣＥの振幅は５００ｍＶである。
プログラム・アーキテクチャ
この例示的な問題では、自動定義関数を使用する必要がある。
エンブリオニック回路は最初、それぞれ、各結果生成ブランチに関連付けられた、２つの書込みヘッドを有するので、各プログラム・ツリー全体には２つの結果生成ブランチがある。
したがって、ポピュレーション内の各プログラム・ツリー全体のアーキテクチャは、ＬＩＳＴ関数によって結合された２つの結果生成ブランチからなる。
関数セットおよび終端セット
終端セットおよび関数セットは、この例示的な問題ではポピュレーション内のプログラム・ツリーの両方の結果生成ブランチについて同じである。
各ブランチは、制約付き構文構造に従って作成される。
関数は、この問題では３つの範疇に分割される。
（１）エンブリオニック回路から回路のトポロジを作成する接続作成関数
（２）回路内のワイヤ（およびその他の構成要素）を、指定された構成要素に変換する構成要素作成関数
（３）回路の各構成要素について数値（寸法決定）を指定する演算実行関数および数値終端
この例示的な問題の場合、各構成継続サブツリーについての関数セットＦccsは次式で与えられる。
Ｆccs＝｛Ｒ，Ｃ，ＱＴ０，ＱＴ１，ＱＴ２，ＱＴ３，ＱＴ４，ＱＴ５，ＱＴ６，ＱＴ７，ＱＴ８，ＱＴ９，ＱＴ１０，ＱＴ１１，ＳＥＲＩＥＳ，ＰＳＳ，ＦＬＩＰ，ＮＯＰ，ＴＧＮＤ，ＰＯＳ，ＴＨＶＩＡ０，ＴＨＶＩＡ１，ＴＨＶＩＡ２，ＴＨＶＩＡ３，ＴＨＶＩＡ４，ＴＨＶＩＡ５，ＴＨＶＩＡ６，ＴＨＶＩＡ７｝，
各構成継続サブツリーについての終端セットＴccsは以下のものからなる。
Ｔccs＝｛ＥＮＤ，ＣＵＴ｝．
各演算実行サブツリーについての関数セットＦapsは次式で与えられ、
Ｆaps＝｛＋，−｝
それぞれ、２つの引数をとる。
各演算実行サブツリーについての終端セットＴapsは以下のものからなる。
Ｔaps＝｛Ｒ｝
上式で、Ｒは−１．０００ないし＋１．０００の浮動小数点ランダム定数を表す。
適応度
この問題では、電圧ＶＯＵＴがプローブされ、回路は周波数ドメイン内で観察される。
ＳＰＩＣＥシミュレータは、ＡＣ小信号分析を実行し、３桁の周波数（２０Ｈｚないし２００００Ｈｚ）の範囲から選択された１５１個の周波数値のそれぞれについての回路の動作を報告するよう要求される。各桁は（対数スケールを使用して）５０個の部分に分割される。
適応度は、プローブ・ポイントＶＯＵＴで回路によって生成される周波数ドメイン内の相対電圧の実際の値と、相対電圧目標値の５デシベルとの間の絶対加重偏差の、１５１個の適応度ケースにわたる（すなわち、１Ｖに対する）和で測定される。適応度の値が小さければ小さいほど良好である。零適応度は理想的なフィルタを表す。
適応度は、理想値にはペナルティを課さず、あらゆる受け入れられる偏差にわずかにペナルティを課し、あらゆる受け入れられない偏差に重いペナルティを課す。
２０Ｈｚないし２００００Ｈｚの間隔中の１５１個のポイントのそれぞれに関する手順を以下に示す。相対電圧が４ｄＢないし６ｄＢである場合、５ｄＢからの偏差の絶対値が係数１．０で加重される。相対電圧がこの範囲外である場合、５ｄＢからの偏差の絶対値が係数１０．０で加重される。この構成は、理想相対電圧が５ｄＢであり、１ｄＢの偏差が受け入れられ、１ｄＢを超える相対電圧の偏差が受け入れられないことを反映する。
ヒットは、電圧が受け入れられるか、あるいは理想的なものである適応度ケースの数として定義される。したがって、この問題の場合、ヒットの数は最小で０であり、最大で１５１である。
制御パラメータ
各世代での遺伝操作の割合は、クロスオーバが８９％、繁殖が１０％、突然変異が１％であった。この例示的な問題ではアーキテクチャ変更操作を使用しなかった。
各プログラム全体内の２つの結果生成ブランチのそれぞれについて最大サイズ３００ポイントを確立した。
初期ランダムポピュレーションの作成時に関数をランダムに選択する際に、Ｒ、Ｃ、ＳＥＲＩＥＳ、ＰＳＳ、ＦＬＩＰ、ＮＯＰ、ＴＨＧＮＤ、ＴＨＰＯＳにそれぞれ、相対加重２４を割り当てた。８つのＴＨＶＩＡ関数には相対加重３を割り当てた。１２個のＱＴ関数ＱＴ０．．．ＱＴ１１には相対加重２を割り当てた。
遺伝的プログラミングの実行を制御する他のパラメータは、Ｋｏｚａ  １９９４（アペンディックスＤ）で指定されたデフォルト値であった。
終了基準および結果指定
終了基準および結果指定方法は、前述のＬＣ低域フィルタ設計問題の場合と同じである。
増幅器に関する結果
世代４５（第９７図）から得た最良の回路は、ゼロ近傍適応度が０．００３２９であり、（１５１回中）１５１回のヒットを記録する。この回路は、第１の結果生成ブランチで１０９ポイントを有し、第２の結果生成ブランチで１１５ポイントを有する。目標相対電圧からの加重偏差の和がほぼ零であるので、所望の周波数範囲にわたって所望の増幅係数が達成された。
第９７図は、世代４５から得たベストオブジェネレーション遺伝進化増幅器を示す。
世代４５から得たベストオブジェネレーション遺伝進化増幅器は、様々な段で構成されるものとみなすことができる。
第９８図は、電圧利得段として解釈することのできる世代４５から得たベストオブジェネレーション遺伝進化増幅器の一部を示す。
世代４５から得たベストオブジェネレーション遺伝進化増幅器の他の部分（第９９図）はダーリントン・エミッタ・フォロワとして解釈することができる（ただし、トランジスタＱ７１は従来型の構成を反転させた状態で使用される）。
第９９図は、電圧利得段とダーリントン・エミッタ・フォロワ部がボックスによって強調表示された同じ回路を示す。
進化した電圧利得段および進化したダーリントン・エミッタ・フォロワ段を除く遺伝的に進化した増幅器内のあらゆるものを削除すると、残りの回路は実際に、全体的に遺伝的に進化した回路の利得に非常に類似した利得を有する増幅器になる。この残りの部分は、出力電圧１．７８８を達成し、それに対して、進化した回路全体は出力電圧１．７７８３を達成し、その差は０．０１よりも小さい。世代４５から得た全体的に遺伝的に進化した増幅器のデシベル単位の利得は周波数範囲全体にわたって５．０００１ｄＢであり、それに対して、残りの回路はこの範囲にわたって利得５．０４６４ｄＢを達成する。したがって、遺伝的に進化した増幅器は、電圧利得段とダーリントン・エミッタ・フォロワ段とで構成された増幅器回路に機能的に非常に類似したものとして解釈することができる。
他のシミュレータ
ＳＰＩＣＥシミュレータは好ましい実施形態では、ポピュレーション中の各個体の適応度を測定するために使用される。他のシミュレータは、特定の問題または問題のクラスに望ましいそれぞれの異なる動作特性を有する。他のシミュレータでは、ＳＰＩＣＥシミュレータでは実行できない回路の動作の特性を測定することができる。
ＳＰＩＣＥシミュレータを使用するには、このシミュレータを本発明に有用なものにするいくつかの変更を実施する必要がある。他のシミュレータを使用する場合、同様な変更を実施する必要がある。このような変更には、以下のことのうちのいくつかまたはすべてが含まれる。
（１）完全に開発された回路の記述がシミュレータへの適切な入力になるようにその記述を伝達することと、シミュレータから出力される生成された回路の動作が遺伝的プログラミングの実施に適した入力になるようにこの動作を伝達することとを含めて、シミュレータと汎用プログラミングとのインタフェースをとること。
（２）（必要に応じて）シミュレータを（必要な初期設定を用いて）バッチ指向システムから呼出し可能な再入サブモジュールへ変更すること。
（３）利用可能なメモリ資源を管理すること。
（４）シミュレータからの出口によってポピュレーション内の他のすべての個体および実行の他のすべての世代に対して実行全体を継続できるように、エラー条件によって生成された出口を管理すること。
（５）シミュレータが並列機械に対する指数性能劣化なしに多数の世代にわたる個体のディーム（deme）ポピュレーションを処理できるように、シミュレータを十分に効率的なものにすること。
代替実施形態では、プログラムされたディジタル信号プロセッサ（ＤＳＰ）を用いてアナログ回路をシミュレートすることができる。
実際の電気構成要素を使用した適応度の測定
第１Ｂ図で、本発明の開発プロセスによって作成された電気回路の動作を決定するステップを（一実施形態では）ＳＰＩＣＥシミュレータによって実施した。
回路の動作を決定する１つの有利な代替方法は、フィールド・プログラマブル・デバイスを使用して当該の回路を物理的に実現し、次いで、回路の物理的実現を実際に操作することによって回路の動作を決定することである。
たとえば、ディジタル回路の場合、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）はマイクロプロセッサ・チップであり、チップを特定のタスクを実行するようにカスタマイズするように構成できるディジタル・ゲート・アレイを含む。再構成可能なＦＰＧＡの種類では、ＦＰＧＡ内のある接続部を活動化し、ＦＰＧＡによって実行すべき特定の論理関数を指定するビット・パターンを、ＦＰＧＡのＳＲＡＭメモリに設定することによってカスタマイズが行われる。Ｘｉｌｉｎｉｘ  ＣｏｒｐｏｒａｔｉｏｎはＦＰＧＡの一流供給業者の１つである。アナログ回路については、Ｐｉｌｋｉｎｇｔｏｎ  Ｍｉｃｒｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｌｉｍｉｔｅｄがたとえば、切換コンデンサ技法に基づいて再構成可能なアナログ・デバイスのフィールド・プログラマブル・アナログ・アレイ（ＦＰＡＡ）を開発している。
第１１１図は、本発明のプロセスを実行する際に作成できるディジタル回路とアナログ回路のどちらかの動作を決定するためにフィールド・プログラマブル再構成可能デバイスをどのように使用できるかを示す。「全体的プロセス」１１１０は、電気回路の動作を決定するステップを除く本発明の全体的プロセスを表す。すなわち、「全体的プロセス」１１１０は、完全に開発された回路の記述を作成するステップを含む。プロセスの特定の世代でのポピュレーション内の１つの個体に関して完全に開発された回路の記述を作成すると、その記述は、通信バス１１１１によって「構成」ステップに伝達される。「構成」ステップ１１１２は回路の記述を詳細な情報に変換し、この情報は、フィールド・プログラマブル・デバイスにロードされると、このデバイスを特定の個々の回路にカスタマイズする。この情報は通常、ビット・パターンであり、フィールド・プログラマブル・デバイス内のＳＲＡＭメモリにロードされる。この情報は次いで、バス１１１３を介して「構成」ステップ１１１２からフィールド・プログラマブル・デバイス１１１４に伝達される。フィールド・プログラマブル・デバイス１１１４は次いで、所望の回路を物理的に実現する。次いで、フィールド・プログラマブル・デバイス１１１４に多数の異なる入力（すなわち、個々の回路の適応度を測定するために使用される適応度ケース）を与えることができる。ディジタル・フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）では、それぞれの異なる入力は通常、回路への様々なディジタル入力の多数の異なる組合せからなる。必要に応じて、この目的専用のＦＰＧＡの部分によって入力のこれらの組合せを好都合に生成することができる。アナログ・フィールド・プログラマブル・アレイでは、アナログ信号生成装置によって生成できる様々なアナログ試験信号でそれぞれの異なる入力を構成することができる。必要に応じて、この目的専用のアナログ・フィールド・プログラマブル・アレイの部分によってこれらのアナログ試験信号を生成することができる。（ディジタルであるか、それともアナログであるかにかかわらず）フィールド・プログラマブル・デバイスが（オンチップで生成されたか、それともオフチップで生成されたかにかかわらず）いくつかの異なる入力を受け取った後、通信バス１１１５によって個々の回路の動作を「全体的プロセス」１１１０に伝達することができる。
他の複雑な構造の設計
本発明の各方法に従って他の多数の複雑な構造を設計することができる。
物理構造は、電気回路と同様に、複数の異なる種類の構成要素からなる。これらの個別の構成要素は、複雑な物理構造全体を形成するように特定のトポロジに配置することができる。トポロジ構成内の各位置に様々な種類の構成要素を配置することができる。構造全体の各構成要素は、さらに１組の構成要素値（通常は数値）によって指定することができる。
第１０１図は、機械エンジニアが設計することができ、２つの１００ｋｇの荷重を支持するために剛性の荷重支持金属ビームや荷重支持可とう性ケーブルなどの構成要素からなる、縦壁に支持されたトラスを示す。この例示的な図では、剛性の金属ビームである構成要素はＢ１、Ｂ２、Ｂ３、Ｂ５、Ｂ６、Ｂ７、Ｂ８、Ｂ９として識別される。可とう性金属ケーブルはＣ４およびＣ１０として識別される。この図は、２つの質量と壁も含む。この図では、示した構造内の構成要素の数は１３であり、１０本のビームおよびケーブルの形状構成は、４本が水平であり、２本が垂直であり、４本が斜めである構成である（図示した特定のトポロジに構成される）。
トラスを設計する際、特定の荷重を支持し、各バーまたはケーブル上の応力が剛性のバーまたは可とう性のケーブルを破壊するほど大きくならないことを指定する応力制約を満たし、トラスに含まれる材料の総重量を最小限に抑えるなど、あるコスト要件を満たすという設計上の目標がある。設計者は、所望のトラスを設計するために、構成要素の適切なトポロジ構成（すなわち、構成要素の数と、構成要素をどのように結合するか）を作成し、トポロジ構成に挿入すべき構成要素タイプ（すなわち、剛性のビームまたは可とう性ケーブル）を選択し、各構成要素についての適切な数値（すなわち、構成要素の厚さ）を選択しなければならない。したがって、設計要件を満たすトラスを設計する問題は、そのトポロジを見出し、トポロジ内の各位置に配置される構成要素の種類を選択し、すべての構成要素をサイズ付けする（通常は数値）ことである。
第１０２図は、２つのばねと、２つのダッシュ・ポットと、２つの質量とからなる機械構造を示す。ばねＫ１は２つの接合点（リード線、端部）を有し、そのうちの一方の接合点は図の１番上に示した支持ビームに接続され、他方の接合点はダッシュ・ポットＢ１に接続される。ダッシュ・ポットＢ１はばねＫ１に直列に接続される。ダッシュ・ポットＢ１は２つの接合点を有し、そのうちの一方はばねＫ１に接続され、他方は質量Ｍ１に接続される。同様に、質量Ｍ１、ダッシュ・ポットＢ２、ばねＫ２、質量Ｍ２は直列に接続される。
電気回路に使用されるのと同様な方法でこの機械システムなど複雑な構造の設計に本発明の開発方法を適用できることが理解されよう。そのようなシステムでは、質量をコンデンサに関連付けることができ、ばね定数がインダクタンスの逆数に対応し、ダッシュ・ポットの減衰定数がコンダクタンス（抵抗の逆数）に対応し、力がトルクに対応し、角速度が電圧に対応する。
同様に、当然のことながら、電気回路に使用されるのと同様な方法で機械システムや回転システムなど複雑な構造の設計に本発明の開発方法を適用することができる。回転システムでは、ばね定数をインダクタンスの逆数に関連付けることができ、慣性のモーメントがコンデンサに対応し、ダッシュ・ポットの減衰定数がコンダクタンス（抵抗の逆数）に対応し、力が電流に対応し、速度が電圧に対応する。
構成要素と、構成要素から構築される全体的な構造の性質を検討することによって、それぞれの異なる種類の複雑な構造の間の類似性を理解することができる。
前述のように、一実施形態では、「構成要素」とは、種類と、構成要素をさらに指定するいくつかの構成要素値と、いくつかの接合点とを有する物体である。
構成要素の各接合点の動作は、（たとえば、抵抗の２つのリード線のように）区別不能であっても、あるいは（トランジスタのコレクタ、ベース、エミッタのように）異なるものであってもよい。
したがって、たとえば電気工学では、抵抗は、種類「抵抗」の物体であり、単一の構成要素数値１０００Ωを有し、２つの接合点（リード線、端部）を有するので構成要素である。
同様に、土木工学では、ある長さの剛性の金属ビームは、種類「３０フィート金属ビーム」の物体であり、その直径が１インチであることを指定する単一の構成要素数値を有し、２つの接合点（端部）を有するので構成要素である。
また、機械工学では、ばねは、種類「ばね」の物体であり、そのばね定数を指定する単一の構成要素数値を有し、２つの接合点（端部）を有するので構成要素である。ダッシュ・ポットは、種類「ダッシュ・ポット」の物体であり、その減衰定数を指定する単一の構成要素数値を有し、２つの接合点を有するので構成要素である。質量は、種類「質量」の構成要素であり、その質量を指定する単一の構成要素数値を有し、１つの接合点を有する。
したがって、一実施形態では、「構造」は、（１）１組の構成要素と、（２）構成要素どうしの接合点の間の１組の無方向線線（アーク）とからなる。各無方向線線は、１つの構成要素の接合点と（通常は他の構成要素の）他の接合点との間に接続が存在することを示す。
第１１２図は、電気回路の分野における、「構成要素」と、構成要素で構築された「構造」の図を示す。この構造は、５つの「構成要素」と、１０個の「接合点」と、７つの「アーク」とからなる。５つの構成要素とは、接地ＧＮＤ、電圧源Ｖ、抵抗Ｒ、コンデンサＣ、トランジスタＱである。接地は１つの接合点のみを有し、電圧源、抵抗、コンデンサはそれぞれ、２つの接合点を有し、トランジスタは３つの接合点を有する。
電圧源の２つの接合点およびトランジスタの３つの接合点の動作は区別できるが、抵抗およびコンデンサの接合点の動作は区別できない。この動作の識別を、関係のない目的（たとえば、場合によっては、極性以外の点では区別不能な、抵抗のリード線を含めて、あらゆる接合点に正の極性および負の極性を割り当てるＳＰＩＣＥシミュレータの規約）に適用できる識別ラベルと混同しないよう留意されたい。
次いで、５つの構成要素の接合点は、電気回路を作成するように７つの無方向性線（アーク）によって接続される。たとえば、アーク２０００１は接地ＧＤＮの接合点１１を接合点１２（バッテリＶの負のリード線）に接続する。アーク２０００２は接合点１６（バッテリＶの正のリード線）を接合点１７（抵抗Ｒの一方のリード線）に接続する。アーク２０００３は抵抗Ｒの接合点１７を接合点２０（トランジスタＱのエミッタ・リード線）に接続する。
アークは無方向線である。この無方向性は、アークが特定の構成要素の区別可能な接合点に接続するか、それとも区別不能な接合点に接続するかの影響を受けない。また、この無方向性は、このような接合点が接続される接合点が、１つの接合点を含む構成要素に属するか、あるいは２つの接合点を含む構成要素に属するか、あるいは３つの接合点を含む構成要素に属するか、あるいはそれ以上の接合点を含む構成要素に属するかの影響を受けない。
構造の接合点グラフとは、点（ノード）が構造の構成要素の接合点を表し、線（アーク、無方向線）が２つの接合点の間に接続が存在することを表すグラフである。
図示された５つの構成要素と、１０個の接合点と、７つのアークとからなる電気回路では、接合点グラフは、（１１から２０まで番号付けされた）１０個の点と（２０００１から２０００７まで番号付けされた）７つのアークとを有する。
第１１３図は、機械構造の分野における構成要素で構築された構造を示す。この構造は第１０２図の構造に対応する。この構造は、７つの構成要素と、１１個の接続点と、６つのアークとを有する。この構造は７つの構成要素、すなわち天井、ばねＫ１、ダッシュ・ポットＢ１、質量Ｍ１、ダッシュ・ポットＢ２、ばねＫ２、質量Ｍ２を有する。天井および２つの質量はそれぞれ、１つの接合点のみを有し、ばねおよびダッシュ・ポットはそれぞれ、２つの接合点を有する。すべてのこれらの構成要素の接合点の動作は区別不能である。
その場合、７つの構成要素の接合点が、機械構造を作成するように６本の無方向線（アーク）によって接続される。たとえば、アーク２１０００は天井の接合点７１を接合点７３（ばねＫ１の端部）に接続する。アーク２１００１はばねＫ１の接合点７３を接合点７４（ダッシュ・ポットＢ１の端部）に接続する。
アーク２１００２がダッシュ・ポットＢ１の接合点８１を接合点７５（質量Ｍ１の端部）に接続し、アーク２１００３がダッシュ・ポットＢ１の接合点８１を接合点７６（ダッシュ・ポットＢ２の端部）に接続することに留意されたい。上記で指摘したように、質量Ｍ１は１つの接合点のみを有する。第１０２図など機械工学図の形式は、ダッシュ・ポットＢ２が質量Ｍ１に結合され、それに対して、実際にはダッシュ・ポットＢ１の底部に３方向接合部があることを示す。第１１３図は、質量Ｍ１が１つの接合点のみを有し、質量Ｍ１とダッシュ・ポットＢ２が共にダッシュ・ポットＢ１の底部に接続されることを明確に示す。同様に、第１１３図中の他のアークは、図中の他の様々な構成要素の他の様々な接合点の間の接続を示す。
図に示された７つの構成要素と、１１個の接合点と、６つのアークとからなる機械構造では、接合点グラフは（７１から８１まで番号付けされた）１１個の点と（２１０００から２０００５まで番号付けされた）６つのアークとを有する。
第１１４図は、機械構造の分野における構成要素で構築された他の構造（トラス）の一部を示す。この構造は、第１０１図に示したトラスに対応する。この構造は１３個の構成要素と２４個の接合点とを有する。これらの構成要素は、壁と、６つの３０フィート剛性金属ビームＢ１、Ｂ３、Ｂ５、Ｂ６、Ｂ７、Ｂ８と、２つの４２フィート剛性金属ビームＢ２およびＢ９（トラスに斜めに配置される）と、２本の４２フィート可とう性ケーブルＣ４およびＣ１０（斜めに配置される）と、２つの１００ｋｇ質量Ｍ１およびＭ２である。質量はそれぞれ、１つの接合点のみを有する。各剛性金属ビームと、各可とう性ケーブルと、壁は２つの接合点を有する。
話を簡単にするために、この図は、質量Ｍ１  ２２０００の単一の接合点に接続する５つのアークのみを示している。
本発明のプロセスの一実施形態によれば、プロセスは、各種類の構成要素の多数のコピーを含む部品ビンから始まる。プロセスの開始時に、接合点グラフは、部品ビン内の各構成要素の各接合点ごとの１つの点から始まる。構成処置によって、この接合点グラフのある構成要素どうしの接合点の間に無方向線（アーク）が追加される。
すべての構成処置が実行されると、接合点との接続を有さない構成要素に関連付けられたすべての接合点を削除することによって接合点グラフが簡略化される。すなわち、完全に未使用の構成要素に関連付けられたあらゆるものが接合点グラフから削除される。このことは、未使用部品を部品ビンに返すことに対応する。
この簡略化の後、接合点グラフの点（ノード）は構造の構成要素の接合点を表し、接合点グラフの無方向線（アーク）は、２つの接合点の間に接続が存在することを表す。本発明のプロセスの一実施形態によれば、構成処置によって、構成要素が配置された開発構造全体内の位置のトポロジ構成が構築される。また、構成処置によって、構造全体の特定の位置にある特定の構成要素が他の構成要素で置き換えられる。構成処置によって、構成要素の構成要素値（寸法決定）も指定される。
この場合、本発明のプロセスによって暗黙的に探索される可能な回路のサーチ空間の広大なサイズを推定する方法も与えられる。可能な回路の数の推定は、３つの因子、すなわち可能なトポロジの数と、トポロジ構成内に様々な種類の構成要素を配置するための可能な方法の数と、各構成要素についての可能な値の数の積を検討することによって行うことができる。
場合によっては比較的簡単な問題の解を与える回路は多くの場合、２０個以上の構成要素を有する。上記の３つの因子を例示するために、丁度２０個の２リード線構成要素を含み、構成要素が３つの可能性、すなわちコンデンサ、インダクタ、または抵抗のみに限られた１入力１出力回路について考える。この回路は４２個の接合点を有するので、４２から２つの接合点を選択するための８６１通りの方法がある。したがって、これらの接合点を接続するための２861（約１０260）通りの可能な方法がある。３種類の構成要素があるので、２０個の構成要素に関する構成要素の種類を選択するための３20（約１０9）通りの可能な方法がある。各構成要素の種類ごとの１組の２８０個の値は、（１．０５280が約１０6であるので）６桁の範囲にわたって約５％の間隔で構成要素値を与える。構成要素の値にこの細分性を使用すると、２０個の構成要素に関する値を選択するための２８０20（約１０49）通りの可能な方法が得られる。この３つの係数を組み合わせると、可能な回路の数の推定値として約１０317が与えられる。この粗な推定では、（対称性など）ある種の係数が無視されるが、特定の数の構成要素が仮定され（これに対して、実際には数２０が事前に固定される）、３種類の構成要素のみが仮定され、６桁の構成要素値のみが仮定されるので、過小評価である。それにもかかわらず、この推定によって、回路設計の問題に関するサーチ空間の広大なサイズが明らかになる。
単一の実行における１００の世代にわたって６４００００のポピュレーションサイズを使用する場合、サイズが約１０317であるこの広大なサーチ空間から明示的に調べられる回路は６４００万個（重複は無視する）に過ぎない。本発明の方法は、電気回路に関する特定の知識も構成要素の特性の電気的性質に関する特定の知識も使用せずに問題の非常に大きなサーチ空間を暗黙的に探索する。
本発明が、物理法則に従う実際の物理システおよび実際の物理量を扱うものであることにも留意されたい。前述の３つの構造（すなわち、電気的構造、第１０２図および第１１３図のばねとダッシュ・ポットと質量とからなる機械的構造、第１０１図および第１１４図の剛性の金属ビームと可とう性ケーブルと質量とからなる機械的構造）はすべて、ある種の物理法則に従う。
電気システムに関するキルヒホフの電流の法則は、回路内の任意のノードでの電流の和が零になることを示している。機械的システムの場合、電流の相似形は力である。したがって、機械的システムに関するキルヒホフの電流の法則の相似形は、任意の点に加えられる力ベクトルの和も零になることである。すなわち、第１０１図および第１１４図のトラスまたは第１０２図および第１１３図の機械的システム内で構成要素どうしが出会う任意の接合点（ノード）での力の和は零である。最終的な構造の各開発段階で、本発明の構成処置（たとえば、電気回路に関する接続作成関数や構成要素作成関数）によって、現在の開発構造が新しい構造に変化する。しかし、開発プロセスにおけるそのような変更された構造は常に、あらゆるノードでこの保存の法則に従う。すなわち、各構造（電気的構造または機械的構造）ごとに、構成要素が接続される各点での力に対応する数量の値の和は零に維持される。
電気的システムでは、キルヒホフの電圧の法則によって、回路内の任意の閉ループの周りの電圧の和が零に維持されることが示されている。
結論
複雑な構造の自動設計に有用な遺伝的プログラミングのいくつかの変形実施態様について説明した。
本明細書の特定の構成および方法は、本発明の原則を例示したものに過ぎない。当業者なら、本発明の真の趣旨および範囲から逸脱せずに形態および細部に多数の修正を加えることができる。
本発明を特定の実施形態に関して示したが、本発明をそのように限定されるとみなすべきではない。本発明は、添付の請求の範囲によってのみ制限される。
【図１Ａ】
0003958793.tif 000023
【図１Ｂ】
0003958793.tif 000024
【図２】
0003958793.tif 000025
【図３】
0003958793.tif 000026
【図４】
0003958793.tif 000027
【図５】
0003958793.tif 000028
【図６】
0003958793.tif 000029
【図７】
0003958793.tif 000030
【図８】
0003958793.tif 000031
【図９】
0003958793.tif 000032
【図１０】
0003958793.tif 000033
【図１１】
0003958793.tif 000034
【図１２】
0003958793.tif 000035
【図１３】
0003958793.tif 000036
【図１４】
0003958793.tif 000037
【図１５】
0003958793.tif 000038
【図１６】
0003958793.tif 000039
【図１７】
0003958793.tif 000040
【図１８】
0003958793.tif 000041
【図１９】
0003958793.tif 000042
【図２０】
0003958793.tif 000043
【図２１】
0003958793.tif 000044
【図２２】
0003958793.tif 000045
【図２３】
0003958793.tif 000046
【図２４】
0003958793.tif 000047
【図２５】
0003958793.tif 000048
【図２６】
0003958793.tif 000049
【図２７】
0003958793.tif 000050
【図２８】
0003958793.tif 000051
【図２９】
0003958793.tif 000052
【図３０】
0003958793.tif 000053
【図３１】
0003958793.tif 000054
【図３２】
0003958793.tif 000055
【図３３】
0003958793.tif 000056
【図３４】
0003958793.tif 000057
【図３５】
0003958793.tif 000058
【図３６】
0003958793.tif 000059
【図３７】
0003958793.tif 000060
【図３８】
0003958793.tif 000061
【図３９】
0003958793.tif 000062
【図４０】
0003958793.tif 000063
【図４１】
0003958793.tif 000064
【図４２】
0003958793.tif 000065
【図４３】
0003958793.tif 000066
【図４４】
0003958793.tif 000067
【図４５】
0003958793.tif 000068
【図４６】
0003958793.tif 000069
【図４７】
0003958793.tif 000070
【図４８】
0003958793.tif 000071
【図４９】
0003958793.tif 000072
【図５０】
0003958793.tif 000073
【図５１】
0003958793.tif 000074
【図５２】
0003958793.tif 000075
【図５３】
0003958793.tif 000076
【図５４】
0003958793.tif 000077
【図５５】
0003958793.tif 000078
【図５６】
0003958793.tif 000079
【図５７】
0003958793.tif 000080
【図５８】
0003958793.tif 000081
【図５９】
0003958793.tif 000082
【図６０】
0003958793.tif 000083
【図６１】
0003958793.tif 000084
【図６２】
0003958793.tif 000085
【図６３】
0003958793.tif 000086
【図６４】
0003958793.tif 000087
【図６５】
0003958793.tif 000088
【図６６】
0003958793.tif 000089
【図６７】
0003958793.tif 000090
【図６８】
0003958793.tif 000091
【図６９】
0003958793.tif 000092
【図７０】
0003958793.tif 000093
【図７１】
0003958793.tif 000094
【図７２】
0003958793.tif 000095
【図７３】
0003958793.tif 000096
【図７４】
0003958793.tif 000097
【図７５】
0003958793.tif 000098
【図７６】
0003958793.tif 000099
【図７７】
0003958793.tif 000100
【図７８】
0003958793.tif 000101
【図７９】
0003958793.tif 000102
【図８０】
0003958793.tif 000103
【図８１】
0003958793.tif 000104
【図８２】
0003958793.tif 000105
【図８３】
0003958793.tif 000106
【図８４】
0003958793.tif 000107
【図８５】
0003958793.tif 000108
【図８６】
0003958793.tif 000109
【図８７】
0003958793.tif 000110
【図８８】
0003958793.tif 000111
【図８９】
0003958793.tif 000112
【図９０】
0003958793.tif 000113
【図９１】
0003958793.tif 000114
【図９２】
0003958793.tif 000115
【図９３】
0003958793.tif 000116
【図９４】
0003958793.tif 000117
【図９５】
0003958793.tif 000118
【図９６】
0003958793.tif 000119
【図９７】
0003958793.tif 000120
【図９８】
0003958793.tif 000121
【図９９】
0003958793.tif 000122
【図１００】
0003958793.tif 000123
【図１０１】
0003958793.tif 000124
【図１０２】
0003958793.tif 000125
【図１０３】
0003958793.tif 000126
【図１０４】
0003958793.tif 000127
【図１０５】
0003958793.tif 000128
【図１０６】
0003958793.tif 000129
【図１０７】
0003958793.tif 000130
【図１０８】
0003958793.tif 000131
【図１０９】
0003958793.tif 000132
【図１１０】
0003958793.tif 000133
【図１１１】
0003958793.tif 000134
【図１１２】
0003958793.tif 000135
【図１１３】
0003958793.tif 000136
【図１１４】
0003958793.tif 000137