これが、変化アルゴリズムです。 または「Lisp」ができないこと

変異する方法を知っているだけの実際の変異アルゴリズムを見るのは面白いと思います。 いまいましい言語「Author」で書かれたほんの数個の関数。

この記事では、私は:







まず、著者言語と他の言語の唯一の基本的な違いは、プログラムが独自のアルゴリズムを視覚的に編集できることです。 プログラムのテキストではなく、アルゴリズム。 ここを見てください 。 私の意見では、この可能性は自己学習プログラムの存在に必要かつ十分であり、もちろん、私はこの言葉、人工知能を恐れていません。 はい、はいAIです。 コンピュータサイエンスの先生が私に言ったように:「ソフトウェア部門に行き、人工知能を叫びなさい」「そして誰もが混乱するでしょう。」 そして、私は感動しました-人々、私にAIを作らせてください、ただ私に説明してください、ばか、それをする方法。 すでに何かを理解していれば、この機械を確実に教えることができます。 インテリジェンスとは何ですか? 自己学習とは何ですか? インテリジェンスまたは利益を保護する方法は? 哲学的な質問。 情報の指数を1つ教えてください...



それで、ここに、それ自体を壊さないために、学習しようとしているプログラムの「最も簡単な」例があります:



 // killme.txt
 var generator(n){
	 if(n <2)return PROGRAM({1,5,18,3,7、 "x"、 "y"} [#]);
	 a =(int)(n / {1.4,2} [#]);
	 if(#?1:0)a = na;
	 b = na;
	演算子= {"+"、 "-"、 "*"、 "|"、 "&"};
	 command = PROGRAM( "#" +演算子[#] + "#");
	 command.setSub({0}、ジェネレーター(a));
	 command.setSub({1}、ジェネレーター(b));
	戻りコマンド。
 }

 void main(functionName){
	 if(!isset(functionName)){
		 main(getThisFunctionName());
		 main( "generator");
		帰る
		 }
	 f = getFunction(functionName);
	 ids = f.getIDs()+ {f.Root()};
	 pos = ids [#];
	 next = f.Next(pos);
	 isElse = 0;
	 if(typeof(next)== "vector")isElse = rand()%next.size();
	 pos = f.insertDown(pos、isElse);
	 f.setCommand(pos、generator(5));
	 pos = f.insertDown(pos);
	 f.setIF(pos、 "#?1:0");
 }




もちろん、すべてをすでに知っているプログラムの例はさらに簡単になると言うでしょう。 しかし、私たちはすべてを絶対的に上げることはしません。



最初の関数はガベージを生成し、2番目はそれ自体と1番目をフィードします。 アルゴリズムの開発の尺度は最初に決定されました。



これは、5回目の起動後にアルゴリズムが変換するものです。



 // killme.code
 var generator(var n){
	 if(n <2)return PROGRAM({1,5,18,3,7、 "x"、 "y"} [#]); else {
		 5-1&(7 | 1-18);
		 if(#?1:0);
		 }
	 a =((int)(n / {1.4,2} [#]));
	 if(#?1:0)a = na;
	 b = na;
	 7 * x | x-(x-18);
	 if(#?1:0);
	演算子= {"+"、 "-"、 "*"、 "|"、 "&"};
	 (5&3)-3-(1 | 18);
	 (3 | 7)| 18&3&y;
	 7 + 18 | 7-(y&x);
	 if(#?1:0);
	 if(#?1:0);
	 if(#?1:0);
	 command = PROGRAM( "#" +演算子[#] + "#");
	 command.setSub({0}、ジェネレーター(a));
	 command.setSub({1}、ジェネレーター(b));
	戻りコマンド。
 }

 void main(var functionName){
	 if(!isset(functionName)){
		 main(getThisFunctionName());
		 (5 | 5)-(7&x * x);
		 if(#?1:0);
		 main( "generator");
		帰る
		 } else {
		 7 * 5 + 7 *(18&7);
		 if(#?1:0);
		 }
	 f = getFunction(functionName);
	 ids = f.getIDs()+ {f.Root()};
	 pos = ids [#];
	 next = f.Next(pos);
	 isElse = 0;
	 if(typeof(next)== "vector")isElse = rand()%next.size();
	 pos = f.insertDown(pos、isElse);
	 x-(x&3)+(18 | 5);
	 if(#?1:0){
		 (3 | 7)+(x&1 + 3);
		 if(#?1:0); else {
			 (y | 7-1)&(18 | x);
			 if(#?1:0);
			 }
		 }
	 f.setCommand(pos、generator(5));
	 pos = f.insertDown(pos);
	 f.setIF(pos、 "#?1:0");
 }
 // killme.code:-|




もちろん、変数名を置き換えたり、コマンドのシーケンスを変更したりすることで、さらに変化するアルゴリズムを作成できますが、最初から目覚め、ますます複雑になります。



時々、私自身、自分の記事でゴミを生成しているように思えますが、銀行システム全体について言えます。



しかし、「変換」は別の方向で行うことができます。 自己改善のためのプログラムを設定します。 プログラムのサイズ、複雑さ、実行時間を最小限に抑えます。 「プログラマーのロボット」という点では、すでにAIに似たものになります。



ここで、「自己教育とは何ですか?」という質問について詳しく説明します。

ここでは、一方で、すべてが単純です-アルゴリズムはありませんでしたが、今では登場しました。 データはありませんでしたが、今では表示されました。 しかし、一方で、もし彼らが元々そこにいなかったら、どうやって彼らは現れたのでしょう。 だから、このデータを抽出できる場所から、アルゴリズムを理解できる場所から、何かが必要なのでしょうか?



ここにあなたは素早い心があります。 次のコードの作成者が書きたいことを教えてください。



 // smekni.txt
 void main(){
	 m = {4,6,1,78,43,59,8,12};
	 while(1){
		 ok = 1;
		 for(i = 1; i <m.size(); ++ i)if(m [i-1]> m [i])ok = 0;
		 if(ok)break;
		 a = rand()%m.size();
		 b = rand()%m.size();
		 Xはm [a]です。
		 m [a] = m [b];
		 m [b] = X;
		 }
	 trace(m.export());
	 getstring();
 }




まあ、配列を並べ替える方法がわかりません。 Lispは一生を研究しました。 私を理解してください。 わかる



いつかあなたは私を理解してくれると思います。



お願いがあります。 「 ヘノイの塔」や「棒」など、学習の尺度を確認できるタスクを送ってください。 確かに、ゲーム「Sticks」には元の名前もありますが、私にはわかりません。



ゲームは次のとおりです。 100万本のスティックと2人のプレイヤーがいる場合、各プレイヤーは自分のターン中に1つ、2つ、または3つのスティックを拾うことができます。 もちろん、最初に行く、私:)。 ここでは、損失または利益ではありませんが、これらのタスクは、ルール、スキルを取得する必要があるアルゴリズムとして表すことができるという事実です。 それが塩です。



それは子供の頃にターミネーターの後ろを見るということです)。



続行するには?



All Articles