Kehidupan di partikel

Halo semuanya! Hari ini saya akan berbicara tentang percobaan saya dengan sistem partikel. Tujuan utamanya adalah untuk menemukan aturan sederhana yang akan menghasilkan perilaku yang menarik.

Contoh klasik dari sistem dengan aturan sederhana dan perilaku kompleks adalah automata seluler, yang saya fokuskan, mencoba menemukan aturannya. Tentu saja, untuk automata seluler, aturan dalam kebanyakan kasus akan lebih sederhana. Tetapi partikel bisa lebih cantik!

Di bawah memotong banyak megabita gif.


Sup sel


Pertama, saya mengikuti jejak permainan "hidup": setiap partikel memiliki penghitung "overpopulasi", yang sama dengan jumlah kuadrat terbalik dari jarak ke partikel lain. Jika penghitung ini kurang dari batas tertentu, yaitu, ada beberapa tetangga, maka partikel tertarik ke partikel lain, dan jika ada banyak tetangga, ia ditolak. Jika partikel berpotongan, maka mereka ditolak dalam hal apa pun, agar tidak saling melewati.

Kami secara acak menyebarkan partikel di sekitar lapangan dan melihat apa yang terjadi.



Menariknya, ternyata sesuatu yang mirip dengan sel dan terlihat sudah cukup semarak. Anda dapat, misalnya, menambahkan lebih banyak jenis partikel. Biarkan partikel yang berbeda meningkatkan jumlah tetangga dengan cara yang berbeda, dan beberapa bahkan dapat menguranginya.



Sekarang "sel" kita telah menjadi berlapis-lapis.

Kerugian dari aturan tersebut adalah bahwa mereka menghasilkan struktur yang agak kacau, tidak terlalu stabil.

Karena itu, kami pindah.

Game mengejar ketinggalan


Kami mengubah aturan permainan. Kami tidak akan lagi menghitung tetangga. Biarkan partikel hanya menarik atau menolak tergantung pada jenisnya. Jika semua partikel dari jenis yang sama, maka hanya ada 2 pilihan: mereka semua menolak, atau semua menarik.



Jika ada lebih banyak jenis partikel, maka di sini Anda dapat menggabungkan mana yang akan tertarik dan mana yang akan ditolak.

Teks tersembunyi
Selain tarikan / penolakan, seseorang dapat menambahkan opsi lain, misalnya, sehingga partikel tidak bereaksi satu sama lain dengan cara apa pun, atau menambahkan koefisien pada kekuatan pengaruh, tetapi saya tidak dapat menemukan perilaku yang menarik dalam hal ini.

Setiap aturan seperti itu dapat direpresentasikan dalam bentuk matriks N * N, di mana N adalah jumlah jenis partikel, dan di setiap sel ada tarikan atau tolakan. Daya tarik dilambangkan dengan 0, dan tolakan dilambangkan dengan 1. Kemudian setiap matriks sesuai dengan angka tertentu, misalnya, matriks \ begin {bmatrix} 1 & 0 \\ 1 & 0 \ end {bmatrix} akan berarti 0101, yaitu 5 (digit terakhir dalam bentuk biner adalah yang pertama dalam matriks). Jumlah matriks yang berbeda untuk aturan adalah 2N2. Misalnya, untuk dua jenis partikel Anda mendapatkan 16 aturan.



Tampaknya aturan 3 sama dengan aturan 7, tetapi jika Anda menerjemahkannya ke dalam matriks, Anda dapat \ begin {bmatrix} 1 & 1 \\ 0 & 0 \ end {bmatrix} dan \ begin {bmatrix} 1 & 1 \\ 1 & 0 \ end {bmatrix} , yang berarti bahwa dalam aturan 7 hanya krem โ€‹โ€‹saling tertarik. Sementara pada aturan 3, krem โ€‹โ€‹juga tertarik ke merah. Tetapi karena rendahnya kepadatan merah, ini memiliki efek halus. Bahkan, aturan yang sama dapat disebut, misalnya, 3 dan 12, karena semua perilaku partikel identik, hanya warna yang berubah tempat. Jika kita hanya meninggalkan aturan dengan perilaku unik, maka dari 16 aturan kita akan memiliki 10. Untuk tiga jenis partikel dari 512 kemungkinan kombinasi, 104 yang unik tetap, dan untuk empat - 3044 dari 65536 Urutan 2, 10, 104, 3044 diperoleh.

Tapi kembali ke sepuluh aturan kita.



Aturan 9, yang merupakan matriks, menarik perhatian Anda \ begin {bmatrix} 1 & 0 \\ 0 & 1 \ end {bmatrix} , di mana sama saling tolak dan menarik satu sama lain. Partikel-partikel yang tersebar secara acak dengan cepat membentuk "benang" dan membeku di sini.

Aturan 1 dan 15 juga membeku: mereka setara dengan dua aturan tunggal untuk satu jenis partikel (GIF animasi sebelumnya). Biasanya semua aturan diperbaiki, matriksnya simetris. Ada juga aturan 2, 3, 5, dan 11 dengan matriks asimetris. Ini berarti bahwa satu jenis partikel tertarik ke yang kedua, dan yang kedua ditolak dari yang pertama. Pengejaran dimulai.



Aturan 3 terlalu stabil, di dalamnya "catch-up" di beberapa titik berhenti, dan jika mereka melanjutkan, maka jarang dan tidak lama. Aturan 11 terlalu kacau. Tetap 2 dan 5.

Entah bagaimana Anda bisa menggabungkannya untuk membuatnya lebih menarik. Saya mengambil aturan 105 untuk tiga warna, yaitu matriks \ begin {bmatrix} 1 & 0 & 0 \\ 1 & 0 & 1 \\ 1 & 0 & 0 \ end {bmatrix} , dan ini adalah perilaku:



Semuanya terlihat hidup, tetapi tidak stabil. Tetapi bagaimana dengan makhluk "hidup" berulang tertentu? Bagaimana cara mencari osilator dan glider? Kita harus mengubah peraturan lagi!

Kehidupan mengambang


Kami tidak akan banyak mengubah aturan. Sebagai gantinya, tambahkan fitur baru. Sekarang partikel akan membentuk ikatan pada jarak pendek. Jika partikel-partikel itu terikat, maka mereka akan saling tertarik secara konstan. Daya tarik ini tidak melemah dengan jarak. Tapi, jika jaraknya di atas ambang tertentu, maka koneksi terputus.

Saya mencoba berbagai opsi dengan tiga warna dan menentukan di mana merah dapat membentuk hanya satu koneksi, krem โ€‹โ€‹- tiga, dan biru - dua, yaitu, Anda dapat menetapkan koneksi maksimum dalam bentuk  beginbmatrix132 endbmatrix.

Pada saat yang sama, merah tidak dapat mengikat ke merah lainnya, krem โ€‹โ€‹dan biru tidak dapat memiliki lebih dari dua ikatan dengan partikel warna mereka sendiri dan tidak lebih dari satu dengan partikel dari setiap warna lainnya. Ini semua dalam bentuk matriks: \ begin {bmatrix} 0 & 1 & 1 \\ 1 & 2 & 1 \\ 1 & 1 & 2 \ end {bmatrix}



Saya bermain-main dengan aturan tarik / dorong yang berbeda dan saya menyukainya \ begin {bmatrix} 1 & 1 & 0 \\ 1 & 1 & 1 \\ 1 & 1 & 1 \ end {bmatrix} , yaitu, yang merah tertarik ke yang biru, dan dalam semua kasus lainnya semua ditolak.



Sepertinya makhluk-makhluk ini mengambang dalam cairan atau mengepakkan sayapnya.





Sepasang osilator dan sepasang glider.

Angka tetap mudah diperoleh: Anda tidak perlu menggunakan warna merah dan biru secara bersamaan, karena dalam aturan ini ini adalah satu-satunya kombinasi dengan daya tarik.





Namun terkadang gerakan terjadi dengan warna-warna seperti itu. Beberapa angka mulai berputar, mulai dari yang lain, "gigi" diperoleh.



Kesimpulan


Di masa depan, akan menarik untuk membandingkan angka-angka yang diperoleh, untuk mengumpulkan statistik tentang frekuensi penampilan mereka.

Anda juga dapat menggunakan aturan ini sebagai dasar untuk menciptakan makhluk yang lebih kompleks dengan makanan, reproduksi, evolusi.

Anda dapat membangun sirkuit logis dari ini, membangun kalkulator, prosesor lebih baik tidak perlu.

Untuk bermain


Implementasi JS dari v1vendi

Kode sumber


Kode Java

Hal-hal keren yang serupa


Kosmos
Kehidupan partikel
Cluster

Source: https://habr.com/ru/post/id442128/


All Articles