遺伝的プログラミングとは
遺伝的プログラミングは、進化的アルゴリズムベースの方法論を使用して、あるコンピュータープログラムを使用して別のコンピュータープログラムを作成するプロセスです。 このプロセスは、多くの場合、プログラマーがコンピューターに実行させる特定の命令を書き込む線形プログラミングと比較されます。 LISPとSchemeは、高レベルの機能性と柔軟性のため、このタイプの作業に最も一般的なプログラミング言語です。 生物学的進化と概念的に類似しているため、遺伝子プログラミングはバイオインスパイアードコンピューティングの例としてよく引用されます。
遺伝的プログラム(GP)は、数千のプログラムを生成および実行することで機能し、最も効果的なプログラムを選択します。 たとえば、GPを使用して、写真のスケッチを描くプログラムを作成できます。 GPが最初に行うことは、さまざまなコンピューター描画機能をランダムに組み合わせて使用するプログラムのセットを作成することです。 その後、GPはこれらのプログラムを順番に実行し、それぞれの結果を画像ファイルに出力します。
GPの次のステップは、これらのプログラムの中から最良のものをセットから選択することです。 このプロセスは一般に、遺伝的プログラミングの最も難しい部分です。 描画プログラムの場合、GPは画像比較ソフトウェアを使用して、ランダム描画のどれがソフトウェアが描画しようとした画像に最も類似しているかを判断します。 ランダムに生成されたプログラムのうち、GPは上位のいくつかを選択し、残りを破棄します。 選択プロセスは適合性評価として知られており、一般的に遺伝的プログラミングの最も難しい部分と考えられています。
上位のいくつかのプログラムが選択されると、GPはそれらをプログラムの新しいバッチの基礎として使用します。 新しいバッチはそれぞれ世代と呼ばれます。 新世代を作成する2つの方法は、突然変異とクロスオーバーです。 突然変異は、既存のプログラムの1つを取得してランダムに変更することにより機能します。 クロスオーバーは、繁殖とも呼ばれ、上位2つのプログラムを取得し、それらの要素を組み合わせて新しいプログラムを作成します。
プログラムの新しいバッチを作成した後、GPはそれらを実行および評価するプロセスを繰り返し、その後、選択、削除、および生成のプロセスを繰り返します。 満足のいく結果が得られる単一のプログラムを見つける前に、GPは頻繁に何百世代も実行します。 この制限にもかかわらず、遺伝的プログラミングは、ロボット工学や人工知能の問題など、ある種の困難な計算問題を解決する一般的な方法です。