Sebuah program sederhana untuk mensimulasikan Kehidupan Buatan primitif menggunakan aturan sederhana tarik-menarik atau tolak-menolak di antara partikel-partikel mirip atom, menghasilkan pola-pola mirip kehidupan yang terorganisir sendiri dan kompleks. Tidak termasuk elemen GUI, kodenya kurang dari satu halaman. Video tutorial dan panduannya tersedia di bawah.
https://youtu.be/0Kx4Y9TVMGg
Klik di sini untuk demo langsung (JavaScript):
Anda tidak perlu menentukan parameter secara tepat untuk mereproduksi pola-pola ini. Cara terbaik untuk mendapatkan pola yang menarik adalah dengan terlebih dahulu mencoba eksplorasi parameter acak, setelah Anda menemukan pola yang menarik, cobalah menyempurnakannya secara bertahap. Untuk menghindari terjebak pada maksimum lokal, Anda dapat melakukan beberapa lompatan parameter besar sesekali. Dengan cara ini pola-pola yang menarik dan berbeda akan terus bermunculan.
Unduh repo ini. unzip file lalu buka folder /particle_life/bin/ dan klik pada partikel_life.exe
Kode sumber tersedia dalam C++, JavaScript, dan Python. Tonton video YouTube ini untuk tutorial panduannya: https://youtu.be/0Kx4Y9TVMGg
Jika Anda ingin berkontribusi pada program C++, algoritma intinya adalah 100 baris kode pertama di: "/particle_life/src/ofApp.cpp". Sisanya adalah komponen GUI dan kontrol rendering yang disediakan oleh perpustakaan openFrameworks, perpustakaan rendering gambar sumber terbuka dan mudah digunakan.
Untuk memulai, unduh repositori ini lalu unduh pustaka openFrameworks dari sini: https://openframeworks.cc/. Gunakan projectGenerator openFramework dan impor folder /particle_life/ ke proyek.
Alternatifnya, buat proyek openFramework baru dan tambahkan ofxGui. Setelah file proyek dibuat, ganti folder /src/ dengan yang disediakan di sini.
Anda sekarang dapat mengkompilasi kode C++ di mesin Anda.
Lihat juga file partikel_life.html untuk versi yang lebih optimal - terima kasih kepada mereka yang telah berkontribusi.
< canvas id =" life " width =" 500 " height =" 500 " > </ canvas >
< script >
//Hunar Ahmad @ brainxyz
m = document . getElementById ( "life" ) . getContext ( "2d" ) ;
draw = ( x , y , c , s ) => {
m . fillStyle = c ;
m . fillRect ( x , y , s , s ) ;
} ;
atoms = [ ] ;
atom = ( x , y , c ) => {
return { x : x , y : y , vx : 0 , vy : 0 , color : c } ;
} ;
random = ( ) => {
return Math . random ( ) * 400 + 50 ;
} ;
create = ( number , color ) => {
group = [ ] ;
for ( let i = 0 ; i < number ; i ++ ) {
group . push ( atom ( random ( ) , random ( ) , color ) ) ;
atoms . push ( group [ i ] ) ;
}
return group ;
} ;
rule = ( atoms1 , atoms2 , g ) => {
for ( let i = 0 ; i < atoms1 . length ; i ++ ) {
fx = 0 ;
fy = 0 ;
for ( let j = 0 ; j < atoms2 . length ; j ++ ) {
a = atoms1 [ i ] ;
b = atoms2 [ j ] ;
dx = a . x - b . x ;
dy = a . y - b . y ;
d = Math . sqrt ( dx * dx + dy * dy ) ;
if ( d > 0 && d < 80 ) {
F = ( g * 1 ) / d ;
fx += F * dx ;
fy += F * dy ;
}
}
a . vx = ( a . vx + fx ) * 0.5 ;
a . vy = ( a . vy + fy ) * 0.5 ;
a . x += a . vx ;
a . y += a . vy ;
if ( a . x <= 0 || a . x >= 500 ) { a . vx *= - 1 ; }
if ( a . y <= 0 || a . y >= 500 ) { a . vy *= - 1 ; }
}
} ;
yellow = create ( 200 , "yellow" ) ;
red = create ( 200 , "red" ) ;
green = create ( 200 , "green" ) ;
update = ( ) => {
rule ( green , green , - 0.32 ) ;
rule ( green , red , - 0.17 ) ;
rule ( green , yellow , 0.34 ) ;
rule ( red , red , - 0.1 ) ;
rule ( red , green , - 0.34 ) ;
rule ( yellow , yellow , 0.15 ) ;
rule ( yellow , green , - 0.2 ) ;
m . clearRect ( 0 , 0 , 500 , 500 ) ;
draw ( 0 , 0 , "black" , 500 ) ;
for ( i = 0 ; i < atoms . length ; i ++ ) {
draw ( atoms [ i ] . x , atoms [ i ] . y , atoms [ i ] . color , 5 ) ;
}
requestAnimationFrame ( update ) ;
} ;
update ( ) ;
</ script >
Simulasi Kehidupan Partikel, Sup Primordial - Evolusi, Permainan kehidupan Conway, Automata seluler, Pola pengorganisasian mandiri,
Proyek ini terinspirasi oleh: Clusters Jeffery Ventrella http://www.ventrella.com/Clusters/. Saya tidak memiliki akses ke kode Ventrella tetapi saya rasa perbedaan utama proyek ini dari proyek kehidupan partikel lainnya adalah saya tidak menerapkan deteksi tabrakan dan ini memungkinkan simulasi ribuan partikel secara real-time. Selain itu, saya menambahkan kontrol GUI untuk mengubah parameter secara real-time sehingga memudahkan penyesuaian dan eksplorasi, oleh karena itu, saya dapat menemukan beberapa pola yang belum pernah dilihat sebelumnya muncul dari beberapa model hubungan yang sangat sederhana. Kode di sini mungkin jauh lebih sederhana daripada kode Kehidupan Buatan lainnya karena saya memulai kode ini semata-mata sebagai materi pendidikan bagi non-programmer dan khalayak umum untuk membuktikan bahwa kompleksitas dapat muncul dari kesederhanaan.