遺伝的アルゴリズムの停止点を定義すると、アルゴリズムの目的が損なわれますか?


11

ウィキペディアでは、GAの終了ポイントを次のように定義しています。

通常、アルゴリズムは、世代の最大数が生成されるか、母集団に対して十分なフィットネスレベルに達すると終了します。世代の最大数が原因でアルゴリズムが終了した場合、満足のいく解決策に達したかどうかはわかりません。

さて、満足のいくフィットネスレベルに達したときに終了し、あなたがそのフィットネスレベルを定義している場合、特性をすでに知っているので、最初から「完璧な」ゲノムを作成できるのはなぜですか。この完璧なゲノムの?

ここで少し混乱していると思います。GAの目的は、常に進化し、考えていたよりもさらに良い解決策を示すことであると考えました。完全な」状態。それはポイントを破壊しませんか?


1
おそらくcstheoryにより適しています。
カールビーレフェルト

それがあってもなかった:)
slandau

1
@Karl:cstheoryの質問は少しやわらかいです。おそらくそこで閉鎖されます。
ロバートハーベイ

2
ありがとう、@ロバート。今、なぜそこに行かないのかを覚えています。これは、「クラック間」の質問の1つだと思います。
カールビーレフェルト

1
あなたはすでにあなたの「完璧な配偶者」の特徴も知っています。彼らはあなたを完全に幸せにします!しかし、それだけではそれらを見つけるのに十分ではありません(ゼロから構築するのはおろか...)。実験も必要です。
キリアンフォス16

回答:


17

フィットネス関数は、アルゴリズムの出力を評価します。見たときに理想的な出力を認識することは可能ですが、特定の入力からその出力を生成する手順はわかりません。それが、遺伝的アルゴリズムが最も役立つ場所です。

たとえば、GAの一般的な楽しいアプリケーションの1つは、仮想クリーチャーを効率的に移動できるアニメーションを作成することです。クリーチャーが特定の速度で比較的直線的に動いているかどうかは簡単にわかります。それがあなたのフィットネス機能です。そうするために、「筋肉」の動きの正確なシーケンスを伝えることははるかに困難です。


3
また、最適なフィットネススコアを満たさないローカルミニマム/マキシマムに「スタック」するため、GAが無期限に回転する可能性があるため、x世代後に頻繁に停止することにも注意してください。これは、選択/クロスオーバー/突然変異関数が問題セットに対して十分に調整されていない場合に発生する可能性があります。
スティーブンエバーズ

@Karl私が最初Malbolgeの「Hello World」を作成するアンドリュー・クックの遺伝的アルゴリズムのソリューションを覚えて&その後、よりよい解決策を失った彼に電子メールで送信stackoverflow.com/questions/5338627/...
pageman

8

多くの場合、ソリューションの適合性は判断できますが、ソリューション自体を直接判断することはできません。あなたは速いウサギを進化させようとしている、そしてウサギの速度に影響を与える少数の遺伝子があるとしましょう。ウサギの速度をテストできますが、速度に関連する遺伝子のすべての組み合わせを列挙することは実用的ではありません。このような場合、ウサギと競い合い、最速のものを繁殖させるGAがあります。あなたはそれを永遠に行うことができますが、おそらく次の場合に停止することを好むでしょう:

  • Xより速いウサギを見つけた、または
  • n世代にわたる漸進的な改善が何らかのしきい値を下回った、または
  • あなたはm世代を通してウサギを飼育しました

5

GAの重要なポイントは、そのフィットネスレベルを持つ問題の解決策提供することです。このソリューションは、他の従来の検索アルゴリズムを使用して見つけるのは非常に困難です。通常、最初にGAを使用するのはこのためです。

または、フィットネス値の制限の代わりに、実行する世代数を決定できます(実行する世代が多いほど、より高いフィットネス値を見つける可能性が高くなります)。たとえば、巡回セールスマンの問題では、通過する必要がある都市間で最もコストの低いパスを取得します。

停止条件が許容可能な特定のフィットネスレベルであるか、特定の時間制約(パスファインディングやAIアプリケーションなどのタイムクリティカルなアプリケーションの最大期間または限られた世代のGAの実行)が通常は問題によって決定されますドメイン。


3

直感的には、遺伝的アルゴリズムの目的は、単純な論理分析に役立たない問題に対するアルゴリズムの解決策を策定することです。その目標が達成されると、GAはそれ以上追求する必要はありません。

もちろん、より良い「適合性」が必要な場合、遺伝的アルゴリズムを実行したままにして、より高度に最適化されたソリューションを見つけることができるかどうかを確認できます。


2

遺伝的アルゴリズムには、優れた遺伝子に大きな伝播を与える何らかの方法が必要です。良い遺伝子と悪い遺伝子を区別する方法がなければ、遺伝的アルゴリズムをまったく使用できません。

遺伝的アルゴリズムを機能させるには、適合度の低いソリューションよりも適合度の高いソリューションを優先して再現できるようにする必要があります。それ以外の場合は、ランダムなソリューションを試すだけです。

私自身の経験からの典型的な例は次のとおりです。最初の音声ダイヤルシステムの1つを開発したとき、話された名前と同じ名前の保存されたコピーを一致させるアルゴリズムを見つけるのに苦労しました。25から1つの名前を選択する95%の精度で十分であると言われました。25の名前をそれぞれ10回言っている人々のコーパスが保存されていました。

最初に、話し言葉の長さと、そのいくつかの正規化されたチャンクの周波数エネルギーを測定する入力システムを開発しました。次に、それらのパラメーターの一致に重みを割り当てるアルゴリズムを開発し、それらの重みを介して2つのパラメーターセットを比較しました。

さて、最後のステップがありました-それらの重みの値はどうあるべきでしょうか?

1,000個のランダムな重みのセットを作成し、それらをコーパスに対してテストしました。最悪のパフォーマンスをした500を捨てました。残りの500個について、それぞれを複製し、そのうちの1つで、重みの1つをランダムに上げ下げしました。

コンピューターでこのプロセスを約2週間繰り返し、最終的に95%の精度基準を満たす重みのセットを作成しました。次に、コーパスにないデータでテストしました。精度は約92%でした。そのため、コーパスで98%の精度を達成するためにさらに実行し、その重みのセットはコーパスにないデータで95%の精度を生成しました。

つまり、ポイントは、遺伝的アルゴリズムを実行するにはフィットネス関数が必要だということです。悪い遺伝子から良い遺伝子を見分ける方法がない場合、良い遺伝子が繁殖し、悪い遺伝子が繁殖しないことをどのように確認できますか?


0

ソリューションが以前の反復と大きく変わらなくなるまで繰り返します。非常に多くの場合、固定許容差を理解してください。

Solution in iteration n-6: 600
Solution in iteration n-5: 800
Solution in iteration n-4: 768
Solution in iteration n-3: 780 
Solution in iteration n-2: 778
Solution in iteration n-1: 778.23
Solution in iteration n: 780.18
Solution in iteration n+1: 780.1815

この例では、固定許容誤差が0.01の場合、abs(solution(n + 1)-solution(n))<0.01であるため、(n + 1)は停止するように指示します。

再開すると、それはあなたのアルゴリズムが言うことができるときです:これは良くなることはありません!


0

あなたの主な質問への簡単な答えのために:あなたが達成したいものを知ることとそこに着く方法を知ることの間には大きな違いがあります。

より詳細には、たとえば、最も一般的な問題の1つで、通常はクラスのケーススタディである遺伝的/進化的アルゴリズムを使用して解決し、グラフで最適なルートを見つけます。これは、一方の端から他方の端までの最も安価なルートを見つけるために、ネットワーキングでよく使用されます。コスト(ホップ数、各ホップからのコストなど)を定義するとき、結果に満足するターゲットコスト(適合レベル)も定義します。アルゴリズムは最適なものを見つけられないかもしれませんが、アルゴリズム的に受け入れられる最適なものを見つけます。これにより、より良い答えを見つけることのコストと利益の関係が禁止されていることを意味します。

GA / EAを使用すると、95%以上の最適な答えがすぐに見つかるのが通常の動作であることがわかりますが、最後の5%を絞り込むと指数関数的にコストが高くなります。したがって、理論は、最短時間で最高の結果を達成するための許容可能な最適値を定義するというものです。上位1%などの検索コストは、上位5%よりもメリットを上回る可能性があるため、許容できる最適値を定義します。

要約すると、特定の問題に対する答えではなく、問題ごとに許容可能な最適値、つまりより良い答えを見つけることが実用的でないポイントを定義するだけです。


0

Cのバグを修正するためのいくつかの研究は、入力としての壊れたコードとともに、フィットネス関数としてネガティブおよびポジティブテストケースを提供することにより、遺伝的アルゴリズムを使用しています。これは人間が解決できる問題の例ですが、遺伝的アルゴリズムの方が簡単です。以下に注意することが重要です。

このペーパーで説明する方法は、新しいプログラムをゼロから進化させるものではありませんが、既存の障害を修復するためにレガシーソフトウェアを進化させる方法を示しています。

ただし、Cではなく、新しいプログラムゼロから進化しました。Malbolgeの難解なプログラミング言語で書かれた重要なプログラムは、(私の知る限りでは)書かれておらず、すべて進化しています。この言語はプログラマーが使用するには複雑すぎ、複雑すぎてロジックだけからプログラムを効率的に推測することができないため、その中で書かれたプログラムの大部分は遺伝的アルゴリズムによって作成されています。フィットネス関数は通常、予想される出力までの編集距離です。

ある意味では、これはきれいな円形です。複雑な遺伝コードが進化プロセスによって記述されていることを観察することで、コードがどのように機能するかを知らなくても、進化プロセスをシミュレートして別の複雑な言語でコードを生成できます!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.