web-dev-qa-db-ja.com

遺伝的プログラミングの典型的な使用例は何ですか?

今日私は Roger Alsingによるこのブログエントリ 50の半透明ポリゴンのみを使用して モナリザ のレプリカをペイントする方法について読みました。

私はその特定のケースで 結果 に魅了されているので、疑問に思っていました(そしてこれが私の質問です):遺伝的プログラミングはどのように機能しますかそして遺伝的プログラミングによって他にどのような問題を解決できるか

36
splattne

ロジャーのモナリザプログラムが 遺伝的プログラミング であるかどうかについては、いくつかの議論があります。 (1 + 1) 進化戦略 に近いようです。どちらの手法も、進化的計算の幅広い分野の例であり、 遺伝的アルゴリズム も含まれます。

遺伝的プログラミング(GP)は、コンピュータープログラムを進化させるプロセスです(通常はツリーの形式で、多くの場合LISPプログラムです)。 GPについて具体的に質問している場合、ジョン・コーザは一流の専門家として広く認められています。彼の ウェブサイト には、より多くの情報へのリンクがたくさん含まれています。 GPは通常、非常に計算集約的です(重要な問題の場合、多くの場合、マシンの大規模なグリッドが関係します)。

より一般的に質問する場合、進化的アルゴリズム(EA)は通常、他の手法では簡単に解決できない問題(NP困難問題など)の適切な近似解を提供するために使用されます。多くの最適化問題はこのカテゴリに分類されます。正確な解を見つけるには計算量が多すぎる場合がありますが、最適に近い解で十分な場合もあります。これらの状況では、進化的手法が効果的です。進化的アルゴリズムはランダムな性質を持っているため、問題の最適な解決策を見つけることが保証されることはありませんが、問題があれば適切な解決策を見つけることがよくあります。

進化的アルゴリズムは、人間が実際に解決する方法を知らない問題に取り組むためにも使用できます。人間の先入観や偏見のないEAは、人間が生み出した最高の努力に匹敵する、またはそれよりも優れた驚くべき解決策を生み出すことができます。良い解決策を作る方法がわからなくても、それが提示されれば、良い解決策を認識できることが必要なだけです。言い換えれば、効果的な 適応度関数 を定式化できる必要があります。

いくつかの例

EDIT:無料で入手できる本 遺伝的プログラミングのフィールドガイド には、GPが作成した場所の例が含まれていますhuman-competitiveの結果。

28
Dan Dyer

興味深いことに、Grand Theft Auto IVや最新のスターウォーズゲーム(The Force Unleashed)などのゲームで使用されるダイナミックなキャラクターアニメーションの背後にある会社は、遺伝的プログラミングを使用して運動アルゴリズムを開発しました。会社のウェブサイトはここにあり、ビデオは非常に印象的です:

http://www.naturalmotion.com/euphoria.htm

彼らはキャラクターの神経系をシミュレートし、接続をある程度ランダム化したと思います。次に、彼らは最も遠くまで歩いたモデルの「遺伝子」を組み合わせて、次の世代でますます有能な「子供」を作成しました。本当に魅力的なシミュレーション作業。

私はまた、経路探索オートマトンで使用される遺伝的アルゴリズムを見てきました。典型的な例は、食物を探すアリです。

9
Dave R.

遺伝的アルゴリズムは、ほとんどすべての最適化問題を解決するために使用できます。ただし、多くの場合、それらを解決するためのより優れた、より直接的な方法があります。それはメタプログラミングアルゴリズムのクラスにあります。つまり、潜在的なソリューションをエンコードし、ソリューションを組み合わせ/変更し、どれを決定するかを決定する方法を生成できることを考えると、それはあなたが投げることができるほとんどすべてに適応できることを意味しますソリューションは他のソリューションよりも優れています。 GAは、シミュレーテッドアニーリングのような純粋な山登りアルゴリズムよりも極大値をより適切に処理できるという点で、他のメタプログラミングアルゴリズムよりも優れています。

8
FryGuy

私は自分の論文で遺伝的プログラミングを使用して、地形に基づいた種の進化をシミュレートしましたが、それはもちろん遺伝的アルゴリズムのA-lifeアプリケーションです。

問題GAが得意です 山登り問題 。問題は、問題を定義する要因がない限り、通常、これらの問題のほとんどを手作業で解決する方が簡単であるということです。不明です。言い換えると、社会やコミュニティに関連することを言ったり、優れたアルゴリズムはあるがパラメータを微調整する必要がある状況では、他の方法でその知識を達成することはできません。ここでGAはとても便利です。

私が行った微調整の状況は、同じアルゴリズムに基づいて複数のOthello AIプレーヤーを微調整し、それぞれに異なるプレイスタイルを与えて、各対戦相手をユニークにし、独自の癖を持たせて、トップを選別するために競争させました。ゲームで使用した16個のAI。アドバンテージは、全員がほぼ同等のスキルを持った非常に優れたプレイヤーだったため、AIを簡単に推測できなかったため、人間の対戦相手にとっては興味深いものでした。

6
Robert Gould
5
Yoni Roit

「特定のソリューションが他のソリューションと比較してどれだけ優れているかを判断する関数を(アプリオリに)定義できますか?」と自問する必要があります。

モナリザの例では、新しい絵が前の絵よりもソース画像に似ているかどうかを簡単に判断できるため、遺伝的プログラミングを「簡単に」適用できます。

5
Guido

遺伝的アルゴリズムを使用したプロジェクトがいくつかあります。 GAは、完全にシーケンシャルで正確なアルゴリズムを開発できない場合の最適化問題に最適です。たとえば、車の特性を組み合わせて高速化するのに最適な方法は何ですか。時間はもっと経済的ですか?

現時点では、プレイリストを作成するための単純なGAを開発しています。私のGAは、類似しているアルバム/曲のより良い組み合わせを見つける必要があります(この類似性last.fmの助けを借りて「計算」され、プレイリストを提案してくれます。

4
Paulo Guedes

Evolutionary Roboticsw:Evolutionary Robotics )と呼ばれるロボット工学の新しい分野があり、遺伝的アルゴリズム(GA)を多用しています。

w:遺伝的アルゴリズム :を参照してください。

単純な世代の遺伝的アルゴリズムの擬似コード

  1. 初期母集団を選択する
  2. 母集団内の各個人の適応度を評価します
  3. 終了するまで繰り返します:(制限時間または十分なフィットネスが達成されました)
  4. 繁殖する最高ランクの個人を選択する
  5. 交叉および/または突然変異(遺伝子操作)を通じて新世代を繁殖させ、子孫を産む
  6. 子孫の個々の健康状態を評価する
  7. 人口の最悪ランクの部分を子孫に置き換える

重要なのは生殖の部分であり、遺伝的演算子 クロスオーバー および 突然変異 を使用して、性的または無性的に発生する可能性があります。

2
Eugene Yokota