1

「自分自身を書く」コードをC#で書くことに興味があります。これは広い意味では不可能だと思いますが、ターゲット関数の本体を除くすべてを定義する動的アセンブリに、ある種のフォーマットを設定することを考えていました。次に、アルゴリズムまたはニューラルネットが関数本体を埋めようとします。この後、アセンブリが実行され、新しく起動されたアセンブリがターゲット関数の呼び出しを試み、その後、同じコードに基づいて別の新しいアセンブリを作成します。できれば、そのターゲット関数の実装を改善します。

この種の動作を考えると、C#と動的アセンブリが適切な選択になります(アセンブリの作成と実行にかかる時間が心配です)。実行するコードを動的に作成することに特化した言語はありますか、それともC#で十分なオプションですか?

また、アセンブリ全体のアプローチまたはセットアップに関するコメントは、アセンブリのアイデアを作成することを歓迎し、感謝しています!(あなたが言うことができなければ私は非常に新しいです)

ありがとう!

4

4 に答える 4

4

私は間違っているかもしれませんが、あなたが遺伝的プログラミングに興味を持っているように聞こえます。良いベースはいくつかの読書です(私は機械学習に関するこの本をお勧めします、それは素晴らしいです)。

特に遺伝的プログラミングの場合はGPdotNETを試すことができますが、より広範な機械学習の場合は、間違いなくAccord.NETFrameworkを検討します。アコードの背後にいる男は、それも役立つかもしれない素晴らしいブログを書いています。

于 2013-02-07T22:16:15.707 に答える
2

ソースコードを「進化」させたい場合は、それを操作できる必要があります。これは、抽象構文木を使用して最も簡単に実行できます。ASTを簡単に操作できるようにするツールは、プログラム変換システムと呼ばれ、遺伝子変異として機能するソース間変換ルールをエンコードできます。

DMS Software Reengineering Toolkitのそのようなルールコードの1つは、次のようになります。

 swap_operators(x:product,y:term): sum-> sum
       "\x + \y " ->  "\x - \y" if  somecondition();

適用される場合、これは「+」を「-」に置き換えます。理想的には、これらの「クロスオーバー」演算子(演算子の切り替え、表現の優先順位の変更、言及された変数の変更、制御構造の変更など)と、クロスオーバー演算子が進化の一部として適用されるかどうかを制御する「何らかの条件」があります。ステップ。

進化したプログラムの適合性をコンパイル/実行/評価するには、他の手段が必要です。

DMSでこのようなことを行うには、DMSにベースラインプログラムの読み取り(ASTへの解析)(「初期生成」)、一連の進化変換の適用、変更されたASTのコードの発行、コンパイルと実行を行います(DMSは「コンパイル」や実行などのサブプロセスを呼び出し、結果を評価して、この世代の上位Nを選択し、進化演算子を再度適用して、ニルヴァーナまたは電気料金がオーバーフローするまで繰り返します。

于 2013-02-07T23:18:23.417 に答える
0

C#は、特に動的言語ランタイムが.NET Frameworkにあり、C#のdynamicキーワードでアクセスできるようになったため、遺伝的プログラミングに適しています。

GeneticProgramming .NETは、あなたを軌道に乗せるかもしれないプロジェクトです。数年前に、C#とWindowsフォームを使用した遺伝的プログラミングに関するMSDNの記事「C#を使用した自然淘汰」もありました。

于 2013-02-07T22:12:07.147 に答える
0

コードをランダムに変更しても、線形の変更は行われません。あなたの小さな変化は、ほとんどあなたを成功へと導くはずです。したがって、ブルートフォースと違いはありません。遺伝的アルゴリズムは混乱状態に陥ります。

于 2013-08-15T14:32:22.017 に答える