Baca artikel selengkapnya menggunakan kecerdasan buatan untuk menulis program memodifikasi/meningkatkan diri sendiri
Baca makalah penelitian AI Programmer: secara mandiri membuat program perangkat lunak menggunakan algoritma genetika.
AI-Programmer adalah percobaan dengan menggunakan kecerdasan buatan dan algoritma genetika untuk secara otomatis menghasilkan program. Program yang berhasil dibuat oleh AI meliputi: halo dunia, halo, penambahan, pengurangan, membalikkan string, urutan fibonnaci, 99 botol bir di dinding, dan banyak lagi. Itu semakin pintar. Singkatnya, ini adalah implementasi algoritma genetika AI dengan kode memodifikasi diri.
Apakah mungkin bagi komputer untuk menulis programnya sendiri? Butuh pengolah kata? Biarkan komputer membuat satu untuk Anda. Butuh alat pengambilan layar? Biarkan komputer membuat satu untuk Anda. Ambil langkah lebih jauh, dan biarkan komputer membuat program yang menyederhanakan hidup Anda, yang bahkan tidak Anda ketahui Anda butuhkan!
Ini adalah ide di balik eksperimen AI-programmer. Tujuannya adalah untuk pada akhirnya membuat program komputer yang dapat menulis program komputernya sendiri untuk menyelesaikan masalah komputasi tertentu. Sementara kemampuan komputer yang memutuskan jenis program apa yang akan ditulis berada di luar cara kami saat ini, kami masih dapat memiliki komputer menghasilkan program untuk menyelesaikan tugas yang sangat spesifik, seperti mengeluarkan teks, "halo dunia". AI Programmer menggunakan bahasa pemrograman esoterik untuk menghasilkan program perangkat lunak.
Bahasa pemrograman yang mendasarinya hanya terdiri dari 8 instruksi, sambil menyelesaikan lengkap. Secara teoritis, ia mampu memecahkan masalah komputasi apa pun. Ini membuatnya mudah untuk mengembangkan juru bahasa, yang mampu menjalankan program yang dihasilkan AI di lingkungan yang disimulasikan. Dengan cara ini, setiap program yang dihasilkan dapat dieksekusi dan kinerjanya diperingkat sebagai skor kebugaran. Karena AI menggunakan bahasa pemrograman lengkap Turing, AI itu sendiri, juga secara teoritis mampu menyelesaikan masalah komputasi apa pun. Namun, untuk percobaan ini, AI akan fokus pada mengeluarkan string sederhana ke konsol.
AI-Programmer berfungsi sebagai berikut:
Metode kebugaran bekerja dengan mencetak output dari program yang dihasilkan. Skor dihitung dengan melihat setiap output karakter oleh program dan mengurangi nilainya dari karakter yang diinginkan:
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.
Perlu diingat, ini adalah bukti konsep. Sejauh ini, program ini telah berhasil menulis beberapa program dalam bahasa pemrograman targetnya. Anda dapat melihat tangkapan layar dari semua hasil di folder /hasil. Tes ini dijalankan pada Intel Core 2 Quad 2.5GHz.
AI berhasil menulis program untuk menghasilkan "Hai" setelah 5.700 generasi dalam waktu sekitar 1 menit. Itu menghasilkan kode berikut:
+[+++++-+>++>++-++++++<<]>++.[+.]-.,-#>>]<]
Sementara kode di atas berisi kesalahan parsing, seperti tanda kurung yang tidak cocok, interpreter simulasi kami menghitung hasilnya sampai program gagal, jadi dalam kasus di atas, kesalahan sintaksis (yang nanti dalam kode, setelah solusi ditemukan ) tidak memengaruhi kebugaran.
Anda dapat mencoba menempelkan kode di atas ke penerjemah online. Klik "Mulai Debugger", abaikan peringatan, lalu klik Jalankan ke Breakpoint. Perhatikan outputnya.
Jika kita memangkas kode berlebih, kita melihat kode valid sintaksis berikut:
+[+++++-+>++>++-++++++<<]>++.[+.]
AI berhasil menulis program untuk menghasilkan "halo" setelah 252.0000 generasi dalam waktu sekitar 29 menit. Itu menghasilkan kode berikut:
+-+-+>-<[++++>+++++<+<>++]>[-[---.--[[-.++++[+++..].+]],]<-+<+,.+>[[.,],+<.+-<,--+.]],+][[[.+.,,+].-
Selama proses generasi, AI datang cukup dekat dengan solusi, tetapi beberapa huruf terikat satu sama lain, dalam satu lingkaran. AI mampu mengatasi ini dengan membuat loop dalam, di dalam yang bermasalah, yang berhasil mengeluarkan karakter yang benar, dan terus memproses.
Dalam contoh lain, AI berhasil menulis program untuk menghasilkan "Hai!" Setelah 1.219.400 generasi dalam waktu sekitar 2 jam dan 7 menit. Itu menghasilkan kode berikut:
>-----------<++[[++>++<+][]>-.+[+++++++++++++++++++++++++++++><+++.<><-->>>+].]
AI berhasil menulis program untuk menghasilkan "Saya suka semua manusia" setelah 6.057.200 generasi dalam waktu sekitar 10 jam. Itu menghasilkan kode berikut:
+[>+<+++]+>------------.+<+++++++++++++++++++++++++++++++.>++++++++++++++++++++++++++++++++++.+++.+++++++.-----------------.--<.>--.+++++++++++..---<.>-.+++++++++++++.--------.------------.+++++++++++++.+++++.
Program yang lebih kompleks kemungkinan dapat dihasilkan saat menggunakan PC yang lebih cepat. Langkah selanjutnya termasuk mencoba menerima input pengguna dan hasil proses.
Secara default, kode dikonfigurasi untuk menggunakan set instruksi klasik dan untuk menulis program untuk mengeluarkan string. Untuk mengubah string yang dihasilkan, cukup perluas bagian "Variabel Pribadi" dan ubah teks untuk target ke nilai yang Anda inginkan.
private static TargetParams _targetParams = new TargetParams { TargetString = "hello world" };
Untuk mengubah jenis program yang ditulis AI, ubah metode kebugaran di dalam getFitnessMethod ().
private static IFitness GetFitnessMethod()
{
return new StringStrictFitness(_ga, _maxIterationCount, _targetParams.TargetString, _appendCode);
}
Anda dapat mengubah ini ke kelas mana pun dalam proyek AI.programmer.fitness/conscrete. Contoh:
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);
Untuk menggunakan sub-rutin, Anda harus mengaktifkan fungsi. Ini akan membiarkan AI menghasilkan program lebih cepat. Unkomment kode untuk functionerator, sebagai berikut:
private static IFunction _functionGenerator = new StringFunction(() => GetFitnessMethod(), _bestStatus, fitnessFunction, OnGeneration, _crossoverRate, _mutationRate, _genomeSize, _targetParams);
Atur app.config untuk menggunakan BrainPlus, sehingga AI memiliki akses ke instruksi sub-rutin:
<appSettings>
<add key="BrainfuckVersion" value="2"/> <!-- 1 = BF Classic, 2 = BrainPlus (BF Extended Type 3, Functions, Faster) -->
</appSettings>
Saat menggunakan sub-rutin, lebih sedikit kode diperlukan. Jadi, Anda dapat menggunakan genomesisasi yang lebih kecil untuk kecepatan. Perluas bagian Pengaturan Algoritma Genetika dan ubah _Genomesize ke nilai yang lebih kecil:
private static int _genomeSize = 50;
Bereksperimen dan bersenang -senang!
Kory Becker http://www.primaryobjects.com/kory-becker
Menggunakan kecerdasan buatan untuk menulis program memodifikasi/meningkatkan
Mendorong batas kecerdasan buatan pemrograman diri
Pemrograman Kecerdasan Buatan sendiri belajar menggunakan fungsi
BF-Programmer: Pendekatan berlawanan dengan intuisi untuk membangun program sederhana secara otonom menggunakan algoritma genetika
Lihat @ github https://github.com/primaryobjects/ai-pogrammermer
Hak Cipta (C) 2018 Kory Becker http://primaryobjects.com/kory-becker