Python でCMA-ES最適化アルゴリズムの簡単な例を作成するのに苦労しています。CMA-ES アルゴリズムを使用して、関数x**2 + 2*y**2 -4*x*y - 0.5*y
を最適化する最も効率的な方法は何ですか?-2<x<2
-1<2*(x**2)*y<1
DEAP ライブラリを調べましたが、まとまりのある試みを開発できませんでした。彼らのドキュメントは直感的ではないことがわかりました。cmaパッケージも調べましたが、制約を実装する方法がわかりません。
Python でCMA-ES最適化アルゴリズムの簡単な例を作成するのに苦労しています。CMA-ES アルゴリズムを使用して、関数x**2 + 2*y**2 -4*x*y - 0.5*y
を最適化する最も効率的な方法は何ですか?-2<x<2
-1<2*(x**2)*y<1
DEAP ライブラリを調べましたが、まとまりのある試みを開発できませんでした。彼らのドキュメントは直感的ではないことがわかりました。cmaパッケージも調べましたが、制約を実装する方法がわかりません。
DEAP ドキュメントとの闘いが見られます。それにもかかわらず、私は独自の Evolutionary Computing ライブラリを作成しており、最近では多くの概念実証に DEAP を使用しており、彼らはそれでうまくいったと思います。
続けて、完全な例を見てみましょう。ドキュメントを読むと、コードを快適に見ることができます。問題のサイズは変数の数なので、あなたの場合、私が正しく理解していればN = 2
(x と y) になります。
また、次の代わりにカスタムフィットネス関数が必要ですbenchamrks.rastrigin
。
toolbox.register("evaluate", myownfunction)
制約は実装されていませんが、簡単な作業です。適応度関数では、制約に違反する個人を無効にすることができます (たとえば、最小化する場合は非常に高い適応度を割り当てることによって)。少数の世代では、母集団に無効な人がいないはずです。
これは DEAP での最も単純なアプローチですが、deap.cma.Strategy
クラスを拡張して任意のメソッド (たとえば、メソッドなど) をオーバーライド/拡張generate
して、初期母集団のすべての個体が有効になるようにすることができます。