6

ランダムだが有効なPythonプログラムを生成できるプログラムを探しています。

ランダムCプログラムジェネレータ

私はPython関数にランダムな入力を与えて自分でこれを行おうとしていましtokenize.untokenize()たが、もちろん、生成されたソースコードのほとんどは、で解釈できる有効なプログラムではありませんでしたeval()。ですから、ランダムで有効なPythonプログラムを生成する方法を知っているか(おそらくastモジュールを使用していますか?)、またはそのようなジェネレーターがすでに存在するかどうかを知りたいと思います。

編集: Pythonで遺伝的プログラミングを行うための開始点としてランダムなPythonソースコードを使用したいと思います。そこで、ランダムなプログラムのリストを作成し、それらを「HelloWorld!」を返すプログラムに進化させたいと思います。

4

3 に答える 3

4

python "random program generator"をグーグルで検索すると、Random Python Program Generatorが見つかりました。

ダウンロード可能なスクリプトが必要な場合は、pyfuzzをご覧ください。

于 2011-02-26T17:48:22.663 に答える
2

遺伝的プログラミングを実行して命令型プログラムを進化させることは、完全に簡単ではありません。

これらのプログラムでクロスオーバー/ミューテーションを実行する予定がある場合、文字列表現はおそらく理想的ではないため、これらのプログラムをどのような表現にするかについて検討する価値があるでしょう。むしろ、ある種の解析ツリーまたは抽象構文ツリーの方がおそらく望ましいでしょう。これにより、遺伝的演算子がサブツリーを簡単に操作できるようになります。困難の多くは、これらの操作中にプログラムの有効性を維持することです。

検討したいアプローチの 1 つは、 Grammatical Evolutionや Whigham のCFG-GPなどの文法ベースの進化的手法を使用することです。次に、 BNF 文法を使用して言語構文を指定すると、この文法に準拠するようにプログラムが生成されます。適応できる Python の文法をオンラインで見つけることができることは間違いありません。これらの手法には一般に文脈自由文法が使用され、微妙な意味上の制約を表すことができないため、いくつかの制限がありますが、必要に応じてそれを回避する方法があります。

さらに考慮すべきことは、Python 言語全体を進化プロセスで利用できるようにするかどうかです。使用できる機能が多いほど、検索スペースが大きくなります。従来の GP では、取り組む問題に応じて関数と端子セットが指定されており、過剰ではなく十分に表現力のある構文を決定することが課題の 1 つです。別の文法を使用すると、さまざまな問題に対して異なる文法を使用できるようになります。

于 2011-02-26T19:40:16.920 に答える
-1

PushGPをお勧めします。 ここに Python クラスへのリンクがあります。

于 2011-02-26T17:59:22.010 に答える