인공 지능을 사용하여 전체 기사를 읽으려면 자체 수정/개선 프로그램을 작성하십시오.
연구 논문 AI 프로그래머 : 유전자 알고리즘을 사용하여 소프트웨어 프로그램을 자율적으로 생성하십시오.
AI-Programmer는 인공 지능 및 유전자 알고리즘을 사용하여 프로그램을 자동으로 생성하는 실험입니다. AI에 의해 성공적으로 생성 된 프로그램에는 다음이 포함됩니다 : Hello World, Hello, Addition, Subtraction, String, Fibonnaci 시퀀스, 벽에 99 병의 맥주 등이 포함됩니다. 더 똑똑해지고 있습니다. 요컨대, 자체 수정 코드를 사용한 AI 유전자 알고리즘 구현입니다.
컴퓨터가 자체 프로그램을 작성할 수 있습니까? 워드 프로세서가 필요하십니까? 컴퓨터가 당신을 위해 하나를 만들도록하십시오. 화면 캡처 도구가 필요하십니까? 컴퓨터가 당신을 위해 하나를 만들도록하십시오. 한 걸음 더 나아가서 컴퓨터가 당신의 삶을 단순화하는 프로그램을 만들고, 당신이 필요로하는 것을 몰랐습니다!
이것은 AI-Programmer 실험의 아이디어입니다. 목표는 궁극적으로 특정 계산 문제를 해결하기 위해 자체 컴퓨터 프로그램을 작성할 수있는 컴퓨터 프로그램을 만드는 것입니다. 어떤 유형의 프로그램 유형을 결정하는 컴퓨터의 기능은 현재의 수단을 넘어서도 여전히 컴퓨터가 "Hello World"를 출력하는 것과 같은 매우 구체적인 작업을 해결하기위한 프로그램을 생성 할 수 있습니다. AI 프로그래머는 소프트웨어 프로그램을 생성하기 위해 난해한 프로그래밍 언어를 사용합니다.
기본 프로그래밍 언어는 8 개의 지침으로 구성되며 튜링을 완료합니다. 이론적으로는 계산 문제를 해결할 수 있습니다. 이를 통해 시뮬레이션 된 환경에서 AI 생성 프로그램을 실행할 수있는 통역사를 쉽게 개발할 수 있습니다. 이러한 방식으로, 각 생성 된 프로그램이 실행되고 성능은 피트니스 점수로 순위가 매겨 질 수 있습니다. AI는 튜링 완전한 프로그래밍 언어를 사용하고 있기 때문에 AI 자체는 이론적으로 계산 문제를 해결할 수 있습니다. 그러나이 실험의 경우 AI는 콘솔에 간단한 문자열을 출력하는 데 중점을 둘 것입니다.
AI-Programmer는 다음과 같이 작동합니다.
피트니스 방법은 생성 된 프로그램의 출력을 채점하여 작동합니다. 점수는 프로그램별로 각 문자 출력을보고 원하는 문자로부터 그 값을 빼서 계산됩니다.
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는 "Hi!"를 출력하기위한 프로그램을 성공적으로 작성했습니다. 약 2 시간 7 분 만에 1,219,400 세대 후. 다음 코드를 작성했습니다.
>-----------<++[[++>++<+][]>-.+[+++++++++++++++++++++++++++++><+++.<><-->>>+].]
AI는 약 10 시간 만에 6,057,200 세대 후에 "I Love All Humans"를 출력하기위한 프로그램을 성공적으로 작성했습니다. 다음 코드를 작성했습니다.
+[>+<+++]+>------------.+<+++++++++++++++++++++++++++++++.>++++++++++++++++++++++++++++++++++.+++.+++++++.-----------------.--<.>--.+++++++++++..---<.>-.+++++++++++++.--------.------------.+++++++++++++.+++++.
더 빠른 PC를 사용하는 동안 더 복잡한 프로그램을 생성 할 수 있습니다. 다음 단계에는 사용자 입력 및 프로세스 결과를 수락하려는 시도가 포함됩니다.
기본적으로 코드는 클래식 명령 세트를 사용하고 문자열을 출력하기 위해 프로그램을 작성하도록 구성됩니다. 생성 된 문자열을 변경하려면 "개인 변수"섹션을 확장하고 TargetString의 텍스트를 원하는 값으로 변경하십시오.
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);
app.config를 BrainPlus를 사용하도록 설정하면 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-Programmer : 유전자 알고리즘을 사용하여 단순한 프로그램을 자율적으로 구축하기위한 반 직관적 인 접근
@ github https://github.com/primaryobjects/ai-programmer를 참조하십시오
저작권 (C) 2018 Kory Becker http://primaryobjects.com/kory-becker