Ada masalah yang sangat penting dalam automata seluler yang disebut masalah Mayoritas :
Masalah mayoritas, atau tugas klasifikasi kerapatan adalah masalah menemukan aturan otomat seluler satu dimensi yang secara akurat melakukan pemungutan suara mayoritas.
...
Diberikan konfigurasi automata seluler dua-negara dengan total sel i + j, i di antaranya berada dalam keadaan nol dan j di antaranya berada dalam satu keadaan, solusi yang tepat untuk masalah pemilihan akhirnya harus mengatur semua sel menjadi nol jika i> j dan akhirnya harus mengatur semua sel menjadi satu jika saya <j. Status akhir yang diinginkan tidak ditentukan jika i = j.
Meskipun telah terbukti bahwa tidak ada automata seluler yang dapat memecahkan masalah mayoritas dalam semua kasus, ada banyak aturan yang dapat menyelesaikannya dalam sebagian besar kasus. Otomat Gacs-Kurdyumov-Levin memiliki akurasi sekitar 78% dengan kondisi awal acak. Aturan GKL tidak rumit:
- Radius 3, artinya keadaan baru sel tergantung pada 7 sel sebelumnya: itu sendiri, 3 sel ke kanan, dan 3 sel ke kiri.
- Jika sel saat ini
O
, keadaan barunya adalah mayoritas dari dirinya sendiri, sel di sebelah kirinya, dan sel 3 melangkah ke kiri. - Jika sebuah sel saat ini
1
, keadaan barunya adalah mayoritas dari dirinya sendiri, sel di sebelah kanannya, dan sel 3 melangkah ke kanan.
Berikut ini sebuah contoh:
0 1 0 1 1 1 0 1 1 0 1 0 0 1
0 1 1 1 1 1 1 1 0 0 1 1 0 0
0 1 1 1 1 1 1 1 1 0 1 0 0 0
0 1 1 1 1 1 1 1 0 1 0 1 0 0
0 1 1 1 1 1 1 0 1 0 1 0 1 0
0 1 1 1 1 1 0 1 0 1 0 1 1 1
1 1 1 1 1 0 1 0 1 1 1 1 1 1
1 1 1 1 0 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1
Dalam contoh ini, otomat seluler menghitung dengan benar bahwa 8> 6. Contoh lain membutuhkan waktu yang lebih lama, dan menghasilkan beberapa pola yang keren untuk sementara waktu. Di bawah ini adalah dua contoh yang saya temukan secara acak.
0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 0 1 1 1 1 0 1 0 0 1 1 1
1 0 0 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 1 0 0 1 1
Membawanya ke tingkat berikutnya
Sejauh penelitian internet saya telah menunjukkan, hampir semua penelitian akademik tentang masalah mayoritas telah dilakukan dengan 2-negara CA. Dalam tantangan ini, kita akan memperluas masalah mayoritas menjadi CA 3-negara . Saya akan menyebutnya masalah pluralitas . Pluralitas , atau mayoritas relatif, merujuk pada kondisi di mana salah satu opsi memiliki lebih banyak suara daripada masing-masing alternatif, tetapi tidak harus mayoritas dari semua suara.
Pernyataan masalah
- Ada 3-state 1D seluler otomat dengan jari-jari 3.
- Ada 151 sel dengan kondisi batas melingkar.
- Sel-sel ini diberi keadaan awal yang acak, dengan syarat bahwa 1 dari 3 keadaan memiliki pluralitas yang ketat. "Acak" berarti distribusi seragam yang independen untuk setiap sel.
- Keakuratan aturan adalah persentase dari kondisi awal acak (valid) di mana semua sel disinkronkan ke keadaan yang benar (satu dengan pluralitas) dalam 10.000 generasi .
- Tujuannya adalah untuk menemukan aturan dengan akurasi tinggi,
Kasus tepi pluralitas: Konfigurasi apa pun dengan 50/50/51 adalah konfigurasi awal yang valid (karena ada pluralitas yang ketat), sedangkan konfigurasi dengan 51/51/49 tidak valid (karena tidak ada pluralitas yang ketat).
Ruang pencarian adalah 3 ^ 3 ^ 7 (~ 3e1043), jauh di luar jangkauan pencarian lengkap. Ini berarti Anda harus menggunakan teknik lain, seperti algoritma genetika, untuk menyelesaikan masalah ini. Ini juga akan membutuhkan rekayasa manusia.
Aturan generasi 10.000 dapat berubah, tergantung pada runtimes / keakuratan aturan yang ditemukan orang. Jika terlalu rendah untuk memungkinkan tingkat konvergensi yang masuk akal, maka saya bisa menaikkannya. Atau, saya bisa menurunkannya untuk berfungsi sebagai tie-breaker.
Kemenangan
Pemenangnya adalah orang yang menyerahkan aturan radius-3 CA dengan akurasi tertinggi dari semua kontestan.
Kiriman Anda harus mencakup ...
- Deskripsi aturan (menggunakan kode Wolfram jika perlu)
- Tingkat akurasi dan ukuran sampel
- Sebuah berukuran cukup penjelasan tentang bagaimana Anda menemukan aturan, termasuk program-program yang Anda tulis untuk menyelesaikannya, atau "manual" rekayasa. (Ini menjadi bagian yang paling menarik, karena yang lainnya hanyalah angka mentah.)
Pekerjaan Sebelumnya
- Sebuah makalah oleh Juille dan Pollack , menggambarkan bagaimana mereka mengembangkan aturan 2-negara dengan akurasi 86%.
- Makalah ini menggunakan r = 3, 149-sel, 2-CA CAs. Itu tidak berusaha untuk memecahkan masalah mayoritas, namun, tetapi untuk menemukan aturan yang dengan cepat menghasilkan pola semua-bolak-
1
balik0
. Terlepas dari perbedaan ini, saya menduga banyak teknik akan serupa. - Kertas (tidak terlalu membantu karena ada di balik paywall) karya Wolz dan de Oliviera yang saat ini memegang rekor 2-negara bagian
Jawaban:
Jenis GKL plus pendakian bukit, 61.498%
Jika sel adalah 0, lihat sel 3 di sebelah kiri, 1 di sebelah kiri dan di sel itu sendiri. Tetapkan nilai ke mayoritas. Jika ini seri, tetaplah seperti sekarang.
Jika sebuah sel adalah 1, lihat sel 3 di sebelah kanan, 1 di sebelah kanan dan dengan sendirinya. Tetapkan nilai ke mayoritas. Jika ini seri, tetaplah seperti sekarang.
Jika sebuah sel adalah 2, lihat sel 2 di sebelah kiri, 2 di sebelah kanan dan 3 di sebelah kanan. Tetapkan nilai ke mayoritas. Jika ini seri, tetaplah seperti sekarang.
Saya mendapatkan 59453 dari total 100000, 59,453%
Beberapa mutasi dan mendaki bukit menghasilkan 61498/100000 = 61,498%.
Saya mungkin akan menguji lebih sedikit dan akan memposting beberapa informasi lebih lanjut nanti.
sumber
"Hanya membuang 2s dan lakukan GKL" - 55,7%
Tidak mudah menebak apa aturan yang baik, jadi saya mencoba untuk setidaknya menghasilkan sesuatu yang mendapat skor di atas 1/3. Strateginya adalah mencoba untuk mendapatkan jawaban yang benar ketika negara bagian mayoritas adalah 0 atau 1, dan menerima kerugian jika 2. Ini mencetak 56,5% dari 100.000 percobaan, yang entah bagaimana sedikit lebih baik daripada apa yang diharapkan dari mengalikan 78% ( skor GKL) * 2/3 (fraksi waktu ketika jawaban adalah 0 atau 1) = 52%.
Lebih konkretnya, strateginya adalah sebagai berikut:
Saya menggunakan kode ini untuk menguji:
sumber
"Curi apa saja yang terbaik dan kembangkanlah", bleh
Sunting: dalam keadaan saat ini, jawaban ini, alih-alih menemukan pola yang lebih baik, menemukan sampel acak yang lebih baik.
Jawaban ini menyandikan / mendekodekan solusi dengan menghitung semua status sebagai angka ternary (digit paling signifikan pertama). Solusi untuk 59,2%:
Jawaban ini berevolusi dari 55,7% feersum, menggunakan kode berikut. Kode ini memerlukan libop , yang merupakan perpustakaan khusus header C ++ saya. Ini sangat mudah dipasang, cukup lakukan
git clone https://github.com/orlp/libop
di direktori yang sama dengan tempat Anda menyimpan program. Saya sarankan kompilasi dengang++ -O2 -m64 -march=native -std=c++11 -g
. Untuk pengembangan cepat saya juga menyarankan libop prakompilasi dengan menjalankan perintah di ataslibop/op.h
.sumber
Kode Tangan, 57.541%
Ini sebenarnya hanya terlihat pada 5 sel di atasnya. Mungkin bisa ditingkatkan dengan meningkatkan rentang yang terlihat. Berlari dengan 100.000 test case.
Algoritma:
Gene:
Kode pengujian:
Contoh
sumber