Automata Reversibel Satu Dimensi

Saya membuat sebuah demo untuk GFXPrim perpustakaan. Ini mengimplementasikan dan menampilkan automata sel biner satu dimensi tetangga terdekat. Selain itu ia mengimplementasikan automata yang dapat dibalik, yang hampir sama kecuali ada sedikit perubahan untuk membuatnya dapat dibalik. Automata ditampilkan dari waktu ke waktu dalam dua dimensi, perjalanan waktu dari atas ke bawah. Meskipun dalam kasus yang dapat dibalik, waktu dapat diputar mundur.

Automata bekerja sebagai berikut:

  • Setiap sel memiliki status, yaitu aktif atau nonaktif, hitam atau putih, boolean, dll.
  • Pada setiap langkah waktu, keadaan sel pada langkah berikutnya dipilih oleh suatu aturan.
  • Aturannya melihat nilai sel saat ini dan nilai tetangga kiri dan kanannya.
  • Ada 23= 8
    kemungkinan kombinasi keadaan (pola) untuk 3 sel biner.
  • Aturan menyatakan pola mana yang menghasilkan sel hitam pada langkah waktu berikutnya.
  • Ada 28= 256
    aturan yang mungkin. Artinya, 256 kombinasi pola unik.
Aturan 105

Jadi polanya adalah bilangan biner 3 digit, yang setiap digitnya berhubungan dengan sebuah sel. Digit tengah adalah sel tengah, digit tertinggi di sel kiri, digit rendah di sel kanan. Suatu aturan dapat ditampilkan dengan memperlihatkan deretan pola dan deretan status berikutnya.

Di atas adalah aturan 110, 0x6e atau
01101110. Ini pada dasarnya mengatakan untuk mencocokkan pola
110, 101, 011,
010, 001. Dimana kecocokan pola mengakibatkan sel disetel ke 1 pada langkah waktu berikutnya. Jika tidak ada pola yang cocok atau setara, pola tidak aktif yang cocok, maka sel akan disetel ke 0.

Sekali lagi perhatikan bahwa setiap pola menyerupai bilangan biner 3bit. Juga nilai pola aktif menyerupai bilangan biner 8bit. Kita dapat menggunakan ini untuk melakukan pencocokan pola secara efisien menggunakan operasi biner.

Mari kita asumsikan CPU kita beroperasi secara asli pada bilangan bulat 64bit (disebut
kata-kata). Kita dapat mengemas automata 64 sel menjadi satu bilangan bulat 64bit. Setiap bit berhubungan dengan sebuah sel. Jika sedikit 1
maka itu adalah sel hitam dan 0 untuk putih. Dalam hal ini kami menggunakan bilangan bulat sebagai bidang bit. Kami tidak peduli dengan bilangan bulat yang dapat diwakili oleh bit.

Aturan 94 Dapat Dibalik

CPU dapat melakukan operasi bitwise pada semua 64bit secara paralel dan tanpa percabangan. Artinya kita dapat melakukan satu operasi sebanyak 64 kali secara paralel.

jika kita memutar (dibungkus >>) semua bit ke kanan satu per satu, maka kita mendapatkan bilangan bulat baru dimana tetangga kiri bit sekarang berada pada posisinya. Begitu juga jika kita menggeser semua bit ke kiri, maka kita mendapatkan bilangan bulat yang mewakili tetangga kanannya. Ini memberi kita 3 bilangan bulat dimana bit kiri, tengah dan kanan berada pada posisi yang sama. Misalnya, hanya menggunakan 8bit:

kiri: 0100 1011 >>
tengah: 1001 0110
Kanan: 0010 1101 <<

Setiap pola dapat direpresentasikan sebagai angka 3bit, ditambah bit ke-4 untuk menyatakan apakah pola tersebut aktif dalam aturan tertentu. Karena kami ingin mengoperasikan semua 64bit sekaligus di bidang bit kiri, kanan, dan tengah. Kita dapat menghasilkan panjang 64bit masker dari nilai setiap bit dalam pola tertentu.

Jadi jika kita memiliki pola dimana sel kiri seharusnya menjadi satu, maka kita dapat membuat topeng 64bit semua yang. Jika seharusnya nol, maka semuanya nol. Begitu pula untuk sel tengah dan kanan. Maskernya bisa di-xor (^) dengan kolom sel terkait untuk menunjukkan jika tidak terjadi kecocokan. Artinya, jika polanya satu dan selnya nol atau selnya satu dan polanya nol. Kita dapat membalikkannya (~) untuk memberikannya ketika terjadi kecocokan.

Untuk melihat apakah semua komponen (kiri, kanan, tengah) suatu pola cocok kita dapat melakukannya secara bitwise Dan (&) mereka bersama-sama. Kami kemudian dapat melakukan bitwise atau
(|) hasil pola dicocokkan untuk menghasilkan nilai akhir.

Aturan 193, aturan terbalik 110

Jika kita ingin mengoperasikan automata yang lebih besar dari 64 sel, maka kita dapat menggabungkan beberapa bilangan bulat ke dalam sebuah array. Setelah melakukan pergeseran ke kiri dan kanan, kita mendapatkan bit tinggi atau rendah dari bilangan bulat berikutnya atau sebelumnya dalam array. Kemudian atur bit rendah dan tinggi pada kolom bit kanan dan kiri. Dengan kata lain kita merangkainya bersama-sama menggunakan bit akhir dari bidang bit kiri dan kanan.

Untuk tujuan ilustrasi, di bawah ini adalah inti dari algoritma automata.

Sumber

Krystian Wiśniewski
Krystian Wiśniewski is a dedicated Sports Reporter and Editor with a degree in Sports Journalism from He graduated with a degree in Journalism from the University of Warsaw. Bringing over 14 years of international reporting experience, Krystian has covered major sports events across Europe, Asia, and the United States of America. Known for his dynamic storytelling and in-depth analysis, he is passionate about capturing the excitement of sports for global audiences and currently leads sports coverage and editorial projects at Agen BRILink dan BRI.