人工知能を使用して記事全体を読んで、自己修正/改善プログラムを書きます
研究論文AIプログラマー:遺伝的アルゴリズムを使用してソフトウェアプログラムを自律的に作成することをお読みください。
AI-Programmerは、人工知能と遺伝的アルゴリズムを使用してプログラムを自動的に生成する実験です。 AIによる成功したプログラムには、Hello World、Hello World、Addition、減算、弦の逆、Fibonnaciシーケンス、壁に99本のビールなどが含まれます。それはより賢くなっています。要するに、それは自己修正コードを使用したAI遺伝的アルゴリズムの実装です。
コンピューターが独自のプログラムを作成することは可能ですか?ワードプロセッサが必要ですか?コンピューターにあなたのためにそれを作成させてください。スクリーンキャプチャツールが必要ですか?コンピューターにあなたのためにそれを作成させてください。さらに一歩進んで、コンピューターに自分の人生を簡素化するプログラムを作成させ、必要なことさえ知らなかった!
これは、AI-Programmer実験の背後にあるアイデアです。目標は、最終的に、特定の計算上の問題を解決するために独自のコンピュータープログラムを作成できるコンピュータープログラムを作成することです。コンピューターの能力は、どのタイプのプログラムを書くかを決定する能力は現在の手段を超えていますが、テキストの出力「Hello World」など、非常に具体的なタスクを解決するためのコンピューターを生成するプログラムを引き続き生成できます。 AIプログラマーは、ソフトウェアプログラムを生成するために難解なプログラミング言語を使用しています。
基礎となるプログラミング言語は、完全にチューリングをしている間、8つの指示のみで構成されています。理論的には、計算上の問題を解決することができます。これにより、シミュレートされた環境でAIに生成されたプログラムを実行できる通訳を簡単に開発できます。この方法で、生成された各プログラムは実行され、そのパフォーマンスはフィットネススコアとしてランク付けされます。 AIはチューリング完全なプログラミング言語を使用しているため、AI自体は理論的には計算上の問題を解決することができます。ただし、この実験では、AIはシンプルな文字列をコンソールに出力することに焦点を当てます。
ai-programmerは次のように動作します。
Fitnessメソッドは、生成されたプログラムの出力を獲得することで機能します。スコアは、プログラムによって各文字出力を調べ、目的の文字からその値を差し引くことによって計算されます。
fitness += 256 - Math.Abs(console[i] - targetString[i]);
> Increment the pointer.
< Decrement the pointer.
+ Increment the byte at the pointer.
- Decrement the byte at the pointer.
. Output the byte at the pointer.
, Input a byte and store it in the byte at the pointer.
[ Jump forward past the matching ] if the byte at the pointer is zero.
] Jump backward to the matching [ unless the byte at the pointer is zero.
これは概念実証です。これまでのところ、このプログラムは、ターゲットプログラミング言語でいくつかのプログラムを正常に作成してきました。 /resultsフォルダーですべての結果のスクリーンショットを表示できます。これらのテストは、Intel Core 2 Quad 2.5GHzで実行されました。
AIは、約1分で5,700世代後に「HI」を出力するプログラムを正常に書きました。次のコードを作成しました。
+[+++++-+>++>++-++++++<<]>++.[+.]-.,-#>>]<]
上記のコードには一致しないブラケットなどの解析エラーが含まれていますが、シミュレーションインタープリターはプログラムが失敗するまで結果を計算します。したがって、上記の場合、構文エラー(コードの後で、ソリューションが見つかった後、コードの後にあります。 )フィットネスに影響を与えません。
上記のコードをオンライン通訳に貼り付けてみてください。 [デバッガーの起動]をクリックし、警告を無視し、[実行]をクリックしてブレークポイントをクリックします。出力に注意してください。
余分なコードをトリミングすると、次の構文的に検証されたコードが表示されます。
+[+++++-+>++>++-++++++<<]>++.[+.]
AIは、約29分で252,0000世代後に「Hello」を出力するプログラムを正常に書きました。次のコードを作成しました。
+-+-+>-<[++++>+++++<+<>++]>[-[---.--[[-.++++[+++..].+]],]<-+<+,.+>[[.,],+<.+-<,--+.]],+][[[.+.,,+].-
生成プロセス中、AIは解決策にかなり近づきましたが、ループ内で数文字が互いに縛られていました。 AIは、問題のあるループ内で、正しい文字を正常に出力し、処理を継続することにより、これを克服することができました。
別の例では、AIは「こんにちは!」を出力するプログラムを正常に書きました。約2時間7分で1,219,400世代後。次のコードを作成しました。
>-----------<++[[++>++<+][]>-.+[+++++++++++++++++++++++++++++><+++.<><-->>>+].]
AIは、約10時間で6,057,200世代後に「I Love All Humans」を出力するプログラムを正常に書きました。次のコードを作成しました。
+[>+<+++]+>------------.+<+++++++++++++++++++++++++++++++.>++++++++++++++++++++++++++++++++++.+++.+++++++.-----------------.--<.>--.+++++++++++..---<.>-.+++++++++++++.--------.------------.+++++++++++++.+++++.
より速いPCを使用している間、より複雑なプログラムを生成する可能性があります。次のステップには、ユーザーの入力とプロセスの結果を受け入れようとすることが含まれます。
デフォルトでは、コードはクラシック命令セットを使用し、文字列を出力するプログラムを作成するように構成されています。生成された文字列を変更するには、単に「プライベート変数」セクションを展開し、ターゲットストリングのテキストを希望する値に変更します。
private static TargetParams _targetParams = new TargetParams { TargetString = "hello world" };
AIが書くプログラムのタイプを変更するには、GetFitnessMethod()内のフィットネスメソッドを変更します。
private static IFitness GetFitnessMethod()
{
return new StringStrictFitness(_ga, _maxIterationCount, _targetParams.TargetString, _appendCode);
}
これは、ai.programmer.fitness/concreteプロジェクト内の任意のクラスに変更できます。例:
return new StringStrictFitness(_ga, _maxIterationCount, _targetParams.TargetString, _appendCode);
return new AddFitness(_ga, _maxIterationCount);
return new SubtractFitness(_ga, _maxIterationCount);
return new ReverseStringFitness(_ga, _maxIterationCount);
return new HelloUserFitness(_ga, _maxIterationCount, _targetString);
サブルーチンを使用するには、機能を有効にする必要があります。これにより、AIはプログラムをより速く制作することができます。以下のように、functiongeneratorのコードを解除します。
private static IFunction _functionGenerator = new StringFunction(() => GetFitnessMethod(), _bestStatus, fitnessFunction, OnGeneration, _crossoverRate, _mutationRate, _genomeSize, _targetParams);
brainplusを使用するようにapp.configを設定すると、AIがサブルーチンの指示にアクセスできるようにします。
<appSettings>
<add key="BrainfuckVersion" value="2"/> <!-- 1 = BF Classic, 2 = BrainPlus (BF Extended Type 3, Functions, Faster) -->
</appSettings>
サブルーチンを使用する場合、必要なコードが少なくなります。したがって、スピードのために小さなゲノムズ化を使用できます。遺伝的アルゴリズム設定セクションを拡張し、_genomeSizeをより小さな値に変更します。
private static int _genomeSize = 50;
実験して楽しんでください!
Kory Becker http://www.primaryobjects.com/kory-becker
人工知能を使用して、自己修正/改善プログラムを作成します
セルフプログラミングの人工知能の限界を押し上げます
セルフプログラミング人工知能は、機能を使用することを学びます
BFプログラマー:遺伝的アルゴリズムを使用して単純なプログラムを自律的に構築するための直観に反するアプローチ
@ github https://github.com/primaryobjects/ai-programmerを表示します
Copyright(c)2018 Kory Becker http://primaryobjects.com/kory-becker