遺伝的プログラミングの論文を見ると、テストケースの数は常に固定されているように思えます。ただし、ほとんどの変更は実行のすべての段階で非常に有害である (?) はずです。最初にごく少数 (1 つ?) のテスト ケースだけを試して、突然変異が意味を成すかどうかを調べたらどうなるでしょうか?
さまざまなテスト ケースがソリューションのさまざまな機能をテストし、1 つの突然変異でそれらの機能の 1 つだけが改善されるのではないでしょうか?
遺伝的プログラミングの論文を見ると、テストケースの数は常に固定されているように思えます。ただし、ほとんどの変更は実行のすべての段階で非常に有害である (?) はずです。最初にごく少数 (1 つ?) のテスト ケースだけを試して、突然変異が意味を成すかどうかを調べたらどうなるでしょうか?
さまざまなテスト ケースがソリューションのさまざまな機能をテストし、1 つの突然変異でそれらの機能の 1 つだけが改善されるのではないでしょうか?
ほとんどの突然変異は非常に有害であるはずだというあなたの仮定に同意するかどうかはわかりませんが、たとえそうであったとしても気にしないでください。あなたの目標は、個人を最適化することではなく、人口を最適化することです。したがって、「突然変異が意味をなす」かどうかを判断しようとすることは、まさに遺伝的プログラミングが行うことになっていることです。つまり、「意味をなさない」突然変異を排除します。アルゴリズムの唯一の「ガイダンス」は、適応度関数を介して取得する必要があります。
これは理論的には良いアイデアですが、実践するのは難しいと思います。このアプローチが以前に実際に使用されたのを見たことを思い出せませんが、使用されていたとしても驚かないでしょう。
これを行う動機は、フィットネス関数の適用効率を改善することだと思います。テストがひどいように見える場合は、評価を早期に停止して個人を破棄する (またはフィットネスを 0 に設定する) ことができます。
課題の 1 つは、適用するテスト ケースの数を決定することです。テスト ケースが実際の外れ値である可能性があるため、1 つのランダムなテスト ケースの後に個人を破棄することは、確かに良い考えではありません。おそらく、個体の適合度が最高の 10% 未満である場合、テスト ケースの 50% 後に評価を終了しても、非常に優れた個体が破棄されることはないでしょう。一方、多くの個人が中程度のフィットネスであり、計算のごく一部しか節約できない可能性があることを考えると、それは価値がないかもしれません. 数字を調整してより多くの労力を節約することもできますが、節約しようとすればするほど、本当に良い人が偶然に捨てられる可能性が高くなります.
これをコード化するのにかかる余分な時間やバグの可能性などを考慮すると、メリットが価値があるとは思えません (これが研究プロジェクトである場合を除きます。その場合、試してみると面白いかもしれません)。
いい考えだと思います。フィットネス評価は GP で最も計算量の多いプロセスであるため、実際にフィットネスを計算する計算コストを削減するために個人のフィットネス値を推定することは、重要な最適化になる可能性があります。
あなたのアイデアは、フィットネス近似の一形態であり、遅延評価と呼ばれることもあります (これらの単語を検索してみてください。研究論文がいくつかあります)。
明確ではあるが多少重複するスキームもあります。たとえば、次のとおりです。
また、Brood Recombination Crossover (Tackett) 子プログラムの PS は、通常、クロスオーバーを高速化するために、制限された数のテスト ケースで評価されます。
「テストケース」の意味もわかりませんが、多目的最適化(MOO)に関連するものを探しているように思えます。つまり、問題のさまざまな側面に関するソリューションを最適化しようとすることを意味します。したがって、特定のテスト ケースの母集団を変異/評価する必要はありませんが、多目的フィットネス関数を見つける必要があります。「MOO の主なアイデアは、パレート優勢の概念です」( http://www.gp-field-guide.org.uk )