Tampilkan postingan dengan label genethello. Tampilkan semua postingan
Tampilkan postingan dengan label genethello. Tampilkan semua postingan

Jumat, 10 Juni 2011

Apa itu Othello?

Dear rekan-rekan,

Othello atau disebut juga reversi adalah permainan yang menggunakan papan berisi kotak sebanyak 8x8, antara dua orang pemain dengan keping hitam dan putih seperti di bawah.


Tujuan dari permainan ini adalah kedua pemain saling berusaha memiliki jumlah keping terbanyak di akhir permainan untuk jadi pemenang.

Aturan permainannya adalah sebagai berikut:

  1. Permainan dimulai dari posisi papan dengan susunan keping hitam dan putih seperti pada gambar di atas, yaitu dua keping hitam dan dua keping putih tepat di tengah-tengah papan dengan posisi saling memotong secara diagonal, dengan keping hitam miring ke kanan-atas dan putih miring ke kiri-atas.
  2. Pemain hitam melangkah pertama kali dengan meletakkan keping hitam di kotak kosong di mana dia bisa mengapit keping putih di antara dua keping hitam, yaitu di antara keping hitam yang sudah ada di papan dan keping hitam yang baru diletakkan, boleh mengapit secara horizontal, vertikal maupun diagonal, misalnya di kotak "d3".
  3. Keping putih yang terjepit pada no. 2 di atas, dibalik semua menjadi keping hitam.
  4. Berikutnya giliran pemain putih melangkah dengan meletakkan keping putih di kotak kosong di mana dia bisa mengapit keping hitam di antara dua keping putih, yaitu di antara keping putih yang sudah ada di papan dan keping putih yang baru diletakkan, boleh mengapit secara horizontal, vertikal maupun diagonal, misalnya di kotak "c3".
  5. Keping hitam yang terjepit pada no. 4 di atas, dibalik semua menjadi keping putih.
  6. Demikian kedua pemain bergantian saling meletakkan kepingnya di kotak kosong di mana dia bisa mengapit keping lawannya, dan membalik keping lawannya menjadi kepingnya.
  7. Kedua pemain tidak boleh meletakkan kepingnya di kotak yang sudah terisi, atau di kotak kosong di mana dia tidak mengapit keping lawannya.
    Gambar kiri menunjukkan kotak yang sudah terisi sehingga tidak bisa diletakkan keping baru. Gambar kanan, tanda lingkaran biru menunjukkan kotak kosong yang mengapit keping putih oleh hitam, sehingga hitam boleh melangkah ke sana. Tanda silang merah dan semua kotak kosong diluarnya, menunjukkan kotak kosong yang tidak mengapit keping putih oleh hitam, sehingga hitam tidak boleh melangkah ke sana. 
  8. Apabila pemain tidak mempunyai kotak di mana dia bisa melangkah, maka dia harus 'pass' yaitu memberikan gilirannya melangkah kepada lawannya.
  9. Apabila kedua pemain sama-sama tidak mempunyai kotak di mana dia bisa melangkah, biasanya ketika papan sudah penuh, maka permainan selesai.
  10. Pemain dengan jumlah keping terbanyak adalah pemenang.
Demikianlah sekilas tentang permainan othello. Anda ingin mencobanya? Silakan coba lawan genethello di..



Rabu, 01 Juni 2011

Telah keluar GeneThello v 0.7: animated GIF generator, parallel Evolver

Dear rekan-rekan GeneThello..

Hari ini GeneThello versi 0.7 telah rilis.. beberapa fitur baru adalah:

  1. Animated GIF generator.
  2. Parallel Evolver.
  3. Penyesuaian nilai pattern.
  4. Warna baru untuk papan game.. :)

Transkrip permainan othello adalah penting untuk merekam permainan othello sehingga dapat dimainkan dan dipelajari kembali di kemudian hari. Tetapi transkrip othello memerlukan aplikasi player untuk memainkannya kembali. Pada versi sebelumnya GeneThello telah dilengkapi fitur untuk meload dan memainkan kembali transkrip othello yang disimpan dalam format SGF.

Karena transkrip memerlukan aplikasi player untuk memainkannya kembali, maka tidak cocok untuk ditampilkan di halaman situs web, karena tidak mudah dipahami secara visual oleh manusia. Untuk tujuan ditampilkan di halaman situs web seperti ini, yang paling tepat adalah transkrip dalam bentuk animated GIF, yang otomatis memainkan transkrip tersebut dari awal sampai akhir. Pada versi 0.7 ini GeneThello dilengkapi dengan fitur baru untuk men-generate animated GIF dari permainan yang baru dimainkan, maupun dari transkrip berformat SGF.

Fitur baru yang juga ditambahkan untuk versi ini adalah parallel Evolver. Evolver adalah sebuah program GeneThello yang digunakan untuk melakukan evolusi algoritma genetika terhadap populasi kromosom di server. Pada versi ini, evolusi yang dilakukan oleh Evolver dilakukan secara parallel dengan dibagi ke dalam 8 thread, sehingga proses evolusi yang memakan waktu lama dapat dipercepat.

Selanjutnya fitur lain yang juga ditambahkan adalah penyesuaian nilai pattern. Seperti diketahui salah satu fitur yang digunakan GeneThello untuk menghitung nilai evaluasi langkahnya adalah nilai pattern, yaitu nilai statistika pola susunan keping (disc) di tepi dan sudut papan, yang menunjukkan seberapa baik/buruk susunan keping tersebut. Nilai pola ini selalu bertambah/berkurang setiap kali pemain mendapatkan kemenangan/kekalahan. 

Akibatnya untuk pola yang hampir selalu menang, misalnya susunan 8 keping hitam di tepi papan untuk pemain hitam, nilainya akan selalu bertambah tanpa batas. Demikian pula untuk pola yang hampir selalu kalah, misalnya susunan 8 keping hitam di tepi papan untuk pemain putih, nilainya akan selalu berkurang tanpa batas. Untuk mengatasi masalah ini, pada versi sekarang telah ditambahkan fitur penyesuaian nilai pattern yang menjaga deviasi standar dari nilai pattern selalu kurang dari 10000, dengan cara membagi dua nilai seluruh pattern ketika deviasi standar melebihi 10000.

Terakhir adalah pemberian warna baru untuk papan permainan dan penambahan hiasan pada penggambaran keping.. sehingga tampilan GeneThello kini menjadi lebih othello.. :)

User manual dan javadoc untuk GeneThello dapat dilihat di:

http://genethello.sourceforge.net/manual/
http://genethello.sourceforge.net/javadoc/

Dan silakan download versi terbaru di..

http://sourceforge.net/projects/genethello/files

Lalu silakan lawan kromosom 'Best so far' yang telah ditemukan.. dengan limit waktu 1 menit (60 detik).. dapatkah anda menang?.. :)

Rabu, 18 Mei 2011

Rilis GeneThello versi 0.6

Dear rekan-rekan GeneThello..

Aplikasi GeneThello versi 0.6 telah dirilis.. beberapa fitur baru yang ditambahkan antara lain:

  • Support transkrip dalam bentuk file format SGF.
  • Dapat membaca dan mereplay file format SGF.
  • Menggabungkan tipe-tipe kromosom menjadi satu.

Format SGF (Smart Game Format) adalah format file komputer yang digunakan untuk menyimpan transkrip permainan papan. Permainan yang disupport oleh forma SGF antara lain: Igo, Shogi, Catur, Reversi (Othello), Amazons, Backgammon, Gomoku+Renju dll. Igo adalah yang paling banyak menggunakan format ini dan menjadi default. SGF menggunakan representasi berbasis tree dari permainan untuk menyimpan informasi; struktur tree membuat penambahan variasi menjadi mudah. SGF juga berbasis teks bukan binari untuk tujuan portabilitas.

Fungsi replay dapat digunakan untuk memainkan kembali secara otomatis, permainan yang baru saja berakhir, atau untuk memutar ulang permainan lama yang disimpan dalam format SGF.

Pada versi sebelumnya tipe kromosom dibagi berdasarkan 6 fitur yang digunakan pada perhitungan fungsi evaluasi, yaitu: flips, discs, mobility, xsquares, corners, dan pattern. Flips adalah jumlah disc yang dibalik, di awal permainan sedikit flips lebih baik, tetapi di akhir permainan banyak flips lebih baik. Discs adalah jumlah disc yang dimiliki, mirip seperti flips, di awal permainan sedikit discs lebih baik, tetapi di akhir permainan banyak discs lebih baik. Kemudian mobility adalah jumlah valid move yang dimiliki, sepanjang permainan banyak mobility adalah lebih baik. XSquares adalah jumlah kotak x-square (kotak yang adjacent dengan sudut) yang dimiliki, sepanjang sudut belum terisi maka sedikit xsquares lebih baik. Dan corners adalah jumlah kotak sudut yang dimiliki, semakin banyak semakin baik. Dan terakhir patterns adalah pola menang dan kalah dari disc di sisi dan sudut papan, nilainya ditentukan secara statistik menggunakan ribuan permainan aktual.

Berdasarkan 6 fitur tersebut, maka dulu kita mengenal kromosom tipe 'fmc' yang menggunakan fitur flips, mobility dan corners, atau kromosom tipe 'dmc' yang menggunakan fitur discs, mobility dan corners, atau kromosom tipe 'dmp' yang menggunakan fitur discs, mobility dan pattern, dll. Tetapi kini semua tipe-tipe tersebut disatukan menjadi satu tipe besar yang mencakup semua fitur-fitur ini, yaitu tipe 'fdmxcp' yang menggunakan flips, discs, mobility, xsquares, corners dan pattern.

Tujuan penyatuan tipe-tipe ini adalah supaya proses evolusi dapat dilakukan secara global mencakup semua fitur fungsi evaluasi. Sehingga kita akan mendapatkan fungsi evaluasi optimal yang bersifat global bukan lokal pada fitur-fitur yang dipilih saja. Tetapi dengan waktu evolusi yang semakin lama.

User manual dan javadoc untuk GeneThello dapat dilihat di:

http://genethello.sourceforge.net/manual/
http://genethello.sourceforge.net/javadoc/

Dan silakan download versi terbaru di..

http://sourceforge.net/projects/genethello/files

Kemudian coba lawan kromosom yang ditemukan 'Best so far'.. dengan limit waktu 1 menit (60 detik).. apakah cukup kuat?.. :)

Kamis, 17 Maret 2011

GeneThello went SourceForge

Rekan-rekan semua..

Kini GeneThello telah diupload di situs open source SourceForge.net. Silakan teman-teman yang tertarik bergabung dengan GeneThello untuk posisi-posisi berikut.. :)

1. Developer

Untuk berperan serta dalam pengembangan GeneThello, silakan download source code-nya dari repositori subversion di SourceForge berikut:

https://genethello.svn.sourceforge.net/svnroot/genethello

Silakan gunakan IDE Netbeans untuk pengembangan, karena saya menggunakan itu. Untuk petunjuk download kode GeneThello dengan subversion, silakan lihat situs di bawah..

http://sourceforge.net/projects/genethello/develop

2. Evolver

Evolver adalah program untuk melakukan evolusi terhadap populasi othello di server. Anda dapat berkontribusi untuk membantu mempercepat proses evolusi dengan menjalankan program evolver di komputer anda. Program ini akan otomatis menyimpan hasil evolusi di server dan digabung dengan hasil evolusi dari evolver lain. Dengan cara distributed genetic algorithm seperti ini, di mana evolver dapat dilakukan secara terpisah-pisah di banyak komputer klien kemudian digabungkan di server, maka proses evolusi diharapkan dapat berjalan lebih cepat.

Silakan download binary code-nya dari situs sourceforge berikut:

https://sourceforge.net/projects/genethello/

Selanjutnya anda tinggal menginstallnya, kemudian jalankan perintah berikut dari installation directory..

java -cp Genethello.jar net.sf.genethello.ga.Main (ver 0.2 below)
java -cp Genethello.jar net.sf.genethello.ga.Evolver (ver 0.3 above)

Program evolver ini memerlukan waktu cukup lama untuk menyelesaikan satu kali turnamen, sekitar 6 jam di laptop intel core 2 duo saya. Tetapi program ini saya desain untuk tidak banyak memakan resource CPU, sehingga anda dapat menjalankan program ini di background dengan nyaman tanpa mengganggu pekerjaan lain.. :)

Kalau anda ingin menggunakan full CPU power untuk evolver, gunakan perintah berikut..

java -cp Genethello.jar net.sf.genethello.ga.Main --nosleep (ver 0.2 below)
java -cp Genethello.jar net.sf.genethello.ga.Evolver --nosleep (ver 0.3 above)

3. Tester

Untuk menguji seberapa kuat GeneThello dapat bermain, silakan download binary code yang sama seperti di Evolver, kemudian jalankan perintah berikut dari installation directory..

java. -jar Genethello.jar

Ini adalah program GUI yang dapat digunakan untuk bermain othello melawan pemain-pemain terkuat hasil evolusi sejauh ini. Program ini memerlukan koneksi network untuk mendownload informasi pemain dari server.

4. Just for fun

Untuk rekan-rekan yang ingin mencoba-coba dulu kekuatan GeneThello, dapat coba melawan applet berikut.. :)

http://genethello.blogspot.com/2010/02/genethello-applet.html

Kamis, 25 Februari 2010

GeneThello Applet

Anda dapat mencoba GeneThello, dan juga kromosom-kromosom yang telah dicapai oleh algoritma genetika, dengan applet ini.

Untuk menjalankan applet ini anda perlu mengaktifkan Java applet di browser anda, dan menginstall Java plugin terbaru yang dapat didownload melalui:

http://www.java.com/en/download/manual.jsp

File size dari applet ini adalah sekitar 142.7 kB, dan memerlukan waktu sekitar 20 detik untuk loadingnya, menggunakan modem berkecepatan 56 kbps.


Cara penggunaan

Memilih pemain:

Edit -> Black/White -> Man/Machine

Pilih Man untuk pemain manusia atau Machine untuk pemain komputer.

Memilih (kromosom) pemain untuk Machine:

Edit -> Black/White -> Player -> ...

(Kromosom) pemain dituliskan dalam format TYPE_BIRTH_CHROMOSOME, yang menunjukkan tipe kromosom, pada generasi ke berapa kromosom itu lahir, dan nilai kromosom itu sendiri. Misalnya kromosom oe_fmc_1_14:49:3:2:2:3:3:9:1:10:3 berarti, pertama-tama tipenya adalah oe_fmc, yaitu mempunyai dua batas langkah, o yang membatasi opening-game dan mid-game, dan e yang membatasi mid-game dan end-game, serta mempertimbangkan tiga fitur yaitu: flips (jumlah keping yang dibalik), mobility (jumlah langkah lawan), dan corners (selisih jumlah sudut); kedua dia dilahirkan pada generasi pertama; terakhir nilai kromosomnya adalah 14:49:3:2:2:3:3:9:1:10:3.

Memilih kedalaman berpikir untuk Machine:

Edit -> Black/White -> Depth -> 1 ~ 15

Semakin dalam GeneThello diijinkan untuk berpikir, langkahnya akan semakin bagus tetapi waktunya juga semakin lama. Kedalaman 1 adalah yang paling cepat tetapi langkahnya tidak dipikirkan dengan baik. Kedalaman 15 menjadikan GeneThello berpikir sangat lama dalam melangkah dan tidak menyenangkan untuk lawan bermain. Kedalaman 9 adalah yang paling pas, langkahnya dipikirkan dengan cukup baik dan waktunya pun tidak terlalu lama.

Memulai permainan:

File -> New

Melihat transkrip permainan:

File -> Transcript


Applet

Sabtu, 13 Februari 2010

GeneThello: kembara panjang menuju batas intelijensia buatan



GeneThello (dibaca \jə-ˈne-ˈthe-lō\), kependekan dari genetic othello, adalah sebuah program bermain othello (reversi) [1] yang berbasis Algoritma Genetika (Genetic Algorithm, GA) [2].

Pada prinsipnya GeneThello terdiri dari sebuah program othello dengan fungsi evaluasi yang parameternya dapat diatur, dan sebuah sistem algoritma genetika untuk mencari parameter optimal dari fungsi evaluasi tersebut.

Program othello yang digunakan di sini saya buat menggunakan bahasa pemrograman Java dengan memanfaatkan Game Theory [3], yang sudah biasa digunakan orang untuk membuat program bermain game serupa, seperti tic-tac-toe, catur, shogi, igo dll. Sedangkan untuk sistem algoritma genetika, saya menggunakan sebuah framework java open source yang bernama JGAP [4].

Secara umum, fungsi evaluasi yang sering digunakan pada program othello, mempertimbangkan beberapa variabel utama, antara lain:

1. Flips: jumlah keping yang dibalik (flipped discs) pada sebuah langkah.

Permainan othello menghitung jumlah keping yang dimiliki oleh masing-masing pemain pada akhir permainan. Pemain dengan jumlah keping terbanyak akan menang. Sehingga pada umumnya semakin tinggi nilai Flips semakin baik langkah tersebut.

2. Discs: selisih jumlah keping yang dimiliki kawan dan yang dimiliki lawan setelah dilakukannya sebuah langkah.

Sama seperti Flips, pada umumnya semakin tinggi nilai Discs semakin baik langkah tersebut. Kemudian karena nilai Discs dapat dianggap sebagai akumulasi dari Flips sepanjang permainan, nilainya menjadi lebih stabil sehingga lebih sering digunakan.

3. Mobility: jumlah langkah yang dimiliki lawan, setelah dilakukannya sebuah langkah.

Ketika jumlah langkah yang dimiliki lawan adalah banyak, maka memungkinkan dia memilih langkah-langkah yang bagus. Sehingga perlu memperkecil nilai Mobility ini supaya lawan tidak mempunyai pilihan langkah yang bagus.

4. Corners: jumlah sudut yang ditempati kawan dikurangi jumlah sudut yang ditempati lawan, setelah dilakukannya sebuah langkah.

Posisi sudut pada permainan othello sangat penting, karena keping pada posisi ini bersifat permanen, yaitu tidak dapat dibalik lagi oleh lawan sampai permainan berakhir. Untuk itu perlu memperbesar nilai Corners ini, sehingga jumlah sudut yang kita tempati lebih banyak daripada yang ditempati lawan.

5. XSquares: selisih jumlah kotak berbahaya di samping diagonal sudut, yaitu kotak b2, b7, g2, g7, yang dimiliki oleh kawan dikurangi yang dimiliki oleh lawan.

Empat kotak xsquares ini dikenal sebagai kotak berbahaya, karena dapat menjadi jalan bagi lawan untuk mendapatkan kotak sudut. Sehingga di awal-awal permainan sedapat mungkin harus dihindari memasuki kotak xsquares ini.

6. Parity: kesempatan langkah terakhir di wilayah ruang kosong.

Pada satu wilayah ruang kosong yang bersambung, pihak yang melakukan langkah terakhir di wilayah tersebut akan mendapatkan kesempatan untuk membalik lebih banyak keping lawan. Dengan demikian parity sedapat mungkin harus direbut untuk setiap wilayah ruang kosong.

Advanced othello program seringkali menggunakan juga opening book sebagai pemandu di awal-awal permainan. Selain itu, pola tepi papan juga dapat menjadi salah satu faktor pertimbangan dalam fungsi evaluasi. Berbeda dengan faktor fungsi evaluasi lain yang berdasarkan heuristik, opening book dan pola tepi papan ini dibuat berdasarkan data statistika permainan othello yang penah dimainkan sebelumnya.

Dengan demikian perhitungan score sebuah langkah pada permainan othello, bentuknya yang umum akan mengikuti rumus berikut:

score = wf * Flips + wd * Discs - wm * Mobility + wc * Corners - wx * XSquares + wp * Parity

wf: bobot(weight) untuk Flips
wd: bobot untuk Discs
wm: bobot untuk Mobility
wc: bobot untuk Corners
wx: bobot untuk XSquares
wp: bobot untuk Parity

Permasalahan yang sering dijumpai adalah kesulitan untuk menentukan bobot-bobot ini secara tepat. Berdasarkan intuisi, Mobility sangat penting pada awal permainan, di mana pilihan langkah masih sangat banyak. Kemudian Corners dan XSquares menjadi semakin penting di permainan tengah, di mana posisi sudut mulai dapat dicapai. Dan akhirnya Flips, Discs dan Parity menjadi yang terpenting di permainan akhir, karena kemenangan ditentukan oleh banyaknya keping yang dimiliki.

Di sinilah algoritma genetika mengambil perannya dalam melakukan optimasi parameter, yaitu untuk menentukan bobot-bobot yang tepat. Sesuai namanya, algoritma ini memanfaatkan prinsip-prinsip genetika seperti yang berlaku pada teori seleksi alam. Di mana pada sebuah populasi makhluk hidup, hanya individu-individu terbaik saja yang dapat bertahan hidup dan menghasilkan keturunan untuk melanjutkan populasi tersebut. Proses ini juga dikenal sebagai evolusi.

Pertama-tama sistem GA akan membuat sebuah populasi dari program-program othello, misalnya berisi 300 program, yang kromosom awalnya dibangkitkan secara acak. Kromosom ini berisi kode-kode genetika yang mewakili parameter yang ingin dioptimasi, dalam hal ini bobot fungsi evaluasi.

Selanjutnya di antara program-program di dalam populasi ini diadakan turnamen untuk menentukan beberapa program terbaik. Setelah itu dilakukan kawin silang (crossover) di antara program-program terbaik untuk menghasilkan keturunan. Kemudian dengan kemungkinan tertentu, dilakukan juga mutasi terhadap kromosom dari program-program tersebut.

Beberapa program terbaik, keturunannya, dan program yang mengalami mutasi akan menjadi generasi berikutnya dari populasi tersebut menggantikan generasi sebelumnya. Di sini, jumlah program di dalam populasi dijaga tetap, yaitu dengan menghapus program-program terburuk dari generasi sebelumnya.

Setiap berganti generasi maka program-program di dalam populasi tersebut akan ber-evolusi menjadi semakin baik. Dan setelah beberapa generasi kita dapat berharap akan mendapatkan program terbaik yang benar-benar mampu bermain dengan kuat.

Skenario di atas adalah salah satu yang paling sederhana dari berbagai jenis optimasi yang dapat dilakukan oleh algoritma genetika terhadap permainan othello. Skenario lainnya ada banyak, misalnya fungsi evaluasi yang lebih rumit, fungsi evaluasi yang memanfaatkan logika fuzzy, fungsi evaluasi yang menggunakan neural network, dan yang paling canggih adalah fungsi evaluasi berupa "program yang ber-evolusi" menggunakan teknik Pemrograman Genetika (Genetic Programming, GP) [5].

Melalui blog ini saya akan mengajak anda semua, untuk berpetualang di dalam dunia algoritma genetika, dalam perjalanan mencari program othello terbaik yang mampu mengalahkan saya, mengalahkan anda, dan mengalahkan program othello lain yang pernah dibuat sebelumnya.. :)

Sampai kapankah perjalanan ini akan berlangsung? Mungkinkah kita akan bertemu dengan program othello terbaik itu? .. Satu yang jelas.. ini akan menjadi kembara panjang menuju batas intelijensia buatan..

References:

[1] http://en.wikipedia.org/wiki/Reversi
[2] John Holland, Adaptation in Natural and Artificial Systems, University of Michigan Press, 1975, http://en.wikipedia.org/wiki/Genetic_algorithm
[3] Neumann, John Von., Theory Of Games And Economic Behavior, Princeton University Press., 1944, http://www.archive.org/details/theoryofgamesand030098mbp
[4] http://jgap.sourceforge.net/
[5] Koza, J.R., Genetic Programming: A Paradigm for Genetically Breeding Populations of Computer Programs to Solve Problems, Stanford University Computer Science Department technical report STAN-CS-90-1314, 1990. http://en.wikipedia.org/wiki/Genetic_programming

.