Yanu E. Prasetyo
email:yepw33@mail.missouri.edu
Setelah perencanaan model dilakukan dengan cukup matang, maka
kita bisa mulai untuk menerapkan model kita tersebut ke dalam program NetLogo.
Meskipun contoh model kita (wolf sheep
simple model) terbilang sangat sederhana, namun dalam prosesnya sebaiknya
tetap dijalankan secara bertahap untuk melihat apakah model koseptual yang kita
rancang dapat berjalan dengan baik atau tidak. Langkah pertama adalah dengan
membuat versi awal (first version) dari
model tersebut. Versi awal ini kita mulai dengan hanya melihat perilaku salah
satu agen, misalnya domba, dan mengabaikan untuk sementara agen lainnya
(Serigala) dan lingkungan. Kenapa kita mulai dengan memodelkan satu agen? Agar
kita yakin bahwa perilaku setiap agen berjalan sesuai dengan yang semestinya.
Jika kita masukkan semua agen secara bersamaan, pergerakan agen akan terlihat
kompleks dan sulit untuk mengetahui apakah setiap agen sudah berperilaku dengan
semestinya atau belum.
1. Model Versi 0.1
Menciptakan domba
Tuliskan perintah berikut di laman code Netlogo untuk memulai wolf sheep model. Kita akan memulai
dengan merancang model untuk domba terlebih dahulu:
breed [ sheep a-sheep ]
Ini artinya bahwa kita menunjukkan ada agen berupa domba di
model kita. Domba dalam bentuk jamak dituliskan di depan (sheep) kemudian
diikuti dengan domba dalam bentuk tunggal (a sheep). Demikian juga untuk
serigala, akan ditulis dengan wolves di depan, diikuti dengan wolf di belakang.
Menuliskan sheep dan wolf ini penting untuk membedakan ketika kita memerintah
agen turtles. Sebab, jika kita ingin memerintahkan seluruh agen, baik wolf
maupun sheep, kita bisa menuliskan “ask turtles”, tetapi jika kita hanya ingin
domba yang bergerak, maka kita bisa menulis “ask sheep” atau “ask wolves”, jika
kita ingin hanya serigala yang bergerak mengikuti perintah.
Menuliskan prosedur untuk domba (to setup)
Untuk menuliskan prosedur setup, selalu awali dengan kata
“to”, menjadi “to setup”. Clear-all berarti menghilangkan semua variable yang
ada atau istilah lainnya adalah clears the world. “world” di dalam Netlogo
bermakna representasi dari semua agen dan entitas di dalam model artifisial
yang kita bangun. Kemudian kita membuat patches berwarna hijau (ask patches) sebagai representasi dari ruput.
Meskipun, pada tahan pertama ini kita belum menentukan berapa jumlah rumput
untuk setiap petaknya. Kemudian kita membuat domba (create-sheep)
sebanyak 100 ekor. Dalam membuat domba sebagai agen, kita masukkan beberapa
properti, yaitu posisi koordinat (setxy,
random), wana (set color, putih), dan bentuknya
(set shape, domba). Perintah reset-ticks berarti mengondisikan model pada posisi
awal dan model siap untuk dijalankan. Diakhiri dengan end
menunjukkan satu buah prosedur selesai dibuat. Lihat gambar di bawah ini:
Gambar
3.1.
Setelah dipastikan tidak ada yang terlewat dalam penulisan
perintah di laman code, kita tekan tombol interface untuk melihat hasilnya.
Buat tombol setup terlebih dahulu dengan menekan “buttons” dan meletakkannya
pada posisi yang diinginkan. Setelah memberi nama tombol baru tersebut dengan
setup, maka kita bisa tekan tombol dan akan keluar 100 ekor agen domba dengan
posisi koordinat acak seperti gambar di bawah ini:
Gambar
3.2.
Menuliskan prosedur untuk perilaku domba (to go)
Langkah selanjutnya setelah berhasil membuat sejumlah agen
(domba) adalah dengan membuat perintah untuk perilaku domba. Kita akan mencoba memerintahkan domba untuk
bergoyang (wiggle) dan bergerak (move). Domba akan bergoyang dan bergerak
dengan arah yang acak. Untuk itu, kita juga akan mendefinisikan apa itu
bergoyang dan apa itu bergerak dalam kode perintah kita.
Gambar 3.3.
Membuat perintah wiggle
ini untuk mengurangi bias dalam gerakan domba, misal terlalu banyak ke kiri
atau ke kanan. Oleh karena itu, setiap domba diberi pilihan untuk bergerak
secara acak kearah kanan (0 sd 90 derajat) dan Kearah kiri (0 sd 90 derajat)
sebelum mereka bergerak maju. Metode seperti ini dikenal dengan sebutan “idiom”
dalam ABM. Setelah itu, domba akan bergerak satu unit (one patch) untuk setiap satu waktunya (tick). Seperti halnya
prosedur “to setup”, kita juga bisa membuat tombol di halaman interface untuk
prosedur “to go” dan centang pada pilhan “forever” untuk bergerak
otomatis/terus menerus. Jika tidak mencentang forever, maka untuk menggerakkan
domba kita harus menekan tombol go secara manual. Proses dan hasilnya dapat
dilihat pada gambar dibawah ini (tombol go, centang forever, dan posisi domba
pada 1.303 tick).
Gambar 3.4.
Gambar 3.5.
2.
Model Versi 0.2 (Modifikasi Versi Pertama)
Menambahkan
Energi yang dikeluarkan untuk bergerak
Setelah berhasil
membuat model versi pertama, kini kita dapat menggerakkan agen domba secara
acak pada simulasi yang kita buat karena mereka memiliki heading (arah) dan lokasi (koordinat). Akan tetapi, pergerakan domba
pada model kita tersebut tidak memiliki konsekuensi atau biaya apapun yang
dikeluarkan. Padahal, dalam dunia nyata, setiap domba bergerak ia membutuhkan
energi. Tanpa energi, domba tidak mampu bergerak. Oleh karena itu, pada
pengembangan model selanjutnya, kita perlu menambahkan energi sebagai “biaya”
yang harus dikeluarkan oleh domba-domba tersebut. Kini kita akan menambahkan
energi sebagai properti baru pada agen kita. Langkah pertama adalah menyatakan
bahwa setiap domba memiliki energi. Tuliskan pernyataan ini di halaman code:
Sheep-own [energy]
Setelah membuat
pernyataan bahwa setiap domba memiliki energi, maka perlu kita modifikasi
perintah setup dengan menambahkan energi tersebut seperti pada gambar di bawah
ini. Tidak hanya menambahkan satuan energi untuk setiap domba, kita juga bisa
mengatur jumlah domba yang ingin kita simulasikan (number-of-sheep), caranya
adalah dengan menambahkan tombol “slider” dari halaman interface.
Gambar
3.6.
Menambahkan
Tombol Slider untuk mengatur jumlah domba
Di dalam kolom
slider, kita masukkan variable “number-of-sheep”
dengan jumlah minimum domba 1 (karena tidak mungkin kita mulai dari 0).
Kemudian kita bisa atur jumlah maksimum domba sesuai dengan keinginan kita.
Misalnya, kita buat maksimum 1000 dan increment 1 (karena jumlah domba pasti
bulat, tidak mungkin angka desimal). Setelah klik Ok, maka hasilnya akan nampak
sebagai berikut:
Gambar
3.7.
Gambar
3.8.
Perintah untuk mengontrol domba yang mati
Secara logika
empiris, ketika domba bergerak maka ia mengeluarkan energi. Ketika energi itu habis,
maka dapat dikatakan domba tidak lagi mampu bergerak atau mati. Oleh karena
itu, perlu kita masukkan perintah “to check-if-dead”
sebagai kontrol untuk domba yang mati tersebut. Kita masukkan kriteria domba
mati apabila energinya kurang dari 0 (if energy < 0).
Kita akan masukkan prosedur kematian itu ke dalam perintah “to go” yang sudah
kita buat sebelumnya dengan menambahkan perintah sebagai berikut:
Gambar 3.9.
Selain menambahkan to check-if-dead,
kita juga menambahkan prosedur ketika semua domba mati, maka simulasi akan
otomatis ikut berhenti (if not any? sheep [stop]).
Kembali ke halaman interface, atur jumlah domba, tekan setup, tekan go, maka
simulasi akan berjalan dan berhenti ketika semua domba kehabisan energi atau
mati. Tahap selanjutnya tentu kita ingin mengetahui berapa jumlah domba pada
setiap satuan waktu. Kita bisa menambahkan plot untuk menghitung jumlah
populasi domba (my-update-plots)
pada prosedur “to go” setelah
sebelumnya mendefinisikan plot tersebut (plot count sheep). Kita juga perlu menambahkan
slider lain untuk mengontrol pergerakan domba (movement-cost) dengan cara yang sama
seperti pada saat kita membuat slider untuk jumlah domba.
Gambar 3.10. Modifikasi prosedur pada halaman code
Menambahkan
Plot untuk melihat grafik jumlah populasi sepanjang waktu
Gambar 3.11. Tambahkan Plot untuk menunjukkan jumlah populasi
setiap waktu pada model dari halaman interface
Gambar 3.12. Atur slider untuk movement-cost dari halaman interface.
Min = 0, Increment = 0.1, Max=2.0, dan value=1
Gambar 3.13. Tampilan versi kedua
dari model, dimana agen memiliki posisi, arah, dan energi
Gambar 3.14.
Pada model versi kedua ini, maka dapat kita lihat dengan
simulai 100 ekor domba, maka kita dapat melihat hasil prediksi jumlah populasi
tersebut sepanjang waktu dimana setiap 100 domba dibagi movement-cost, maka pada time steps (ticks) ke 101 seluruh domba akan hilang/mati. Sebab, kita hanya
mengatur energi yang dimiliki sejumlah 100 dan domba tidak memiliki mekanisme
untuk menambah energi pada model versi kedua ini. Agen-agen hanya bergerak dan
menghabiskan stok energi yang dimiliki. Oleh karena itu, untuk menyempurnakan
model ini, maka kita perlu menambahkan kemampuan agen atau domba untuk
mengisi/menambahkan energi untuk dirinya, dalam hal ini melalui konsumsi rumput
sebagai makanan utama penghasil energi untuk domba.
3.
Model Versi 0.3 (Modifikasi versi kedua)
Menambahkan jumlah rumput,
prosedur makan, dan pertumbuhan rumput
Untuk melengkapi model versi kedua, kita akan menambahkan
kemampuan memasukkan energi (makan) pada domba. Makanan yang dimakan adalah
rumput (grass) yang juga akan memiliki kemampuan untuk tumbuh (regrowth).
Dengan menambahkan berbagai properti ini, maka model simulasi kita akan semakin
mendekati dunia nyata. Langkah pertama adalah dengan menambahkan jumlah rumput
pada setiap patches:
Patches-own [grass amount]
Kita akan mengatur jumlah rumput secara acak (random) dengan menggunakan
floating-point (antara 0.0 and 10.0). Setiap patch mengandung satu rumpun (clump) rumput (bukan satu buah rumput,
tapi satu rumpun). Metode ini akan menhasilkan variasi dari jumlah rumput di
setiap patches. Wilayah yang memiliki jumlah rumput jarang akan berwarna hijau
gelap, sedangkan yang memiliki rumpun rumput banyak akan berwarna hijau terang.
Berikut adalah perintah yang harus ditambahkan di halaman code, tepatnya pada
prosedur “to setup”:
Gambar 3.15.
Kemudian kita dapat memodifikasi prosedur “to go” yang berisi perintah agar domba dapat memakan
rumput. Kita letakkan prosedur ini setelah “check-if-dead”:
Gambar 3.16.
Prosedur di atas telah memungkinkan domba-domba dalam simulasi
kita untuk bergerak secara acak ke segala arah, kemudian memakan rumput yang
tersedia secara acak pula. Jika ada cukup rumput di bawah kaki domba, maka ia
akan memakannya, lalu akan mengubahnya menjadi tambahan energi. Karena domba
bergerak dan makan secara acak, maka ada kemungkinan beberapa wilayah (patches) yang habis dimakan rumputnya,
ada pula yang jarang dimakan. Untuk memubuat model semakin mendekati kenyataan,
kita akan memasukkan prosedur agar rumput dapat tumbuh sehingga mampu menjaga
keberlangsungan populasi domba sepanjang waktu. Berikut ini adalah prosedur
yang harus ditambahkan pada halaman code:
Gambar 3.17.
Perintah dan dan prosedur di atas dimaksudkan agar setiap unit
rumput yang tinggal sepersepuluh (0.1) akan kembali tumbuh menjadi utuh (10)
dan pertumbuhan itu tidak boleh lebih dari 10 (sebagai jumlah maksimum rumput
pada setiap blok/rumpun/sel). Nah, sekarang kita memiliki tiga perintah atau
kode pemberian warna yang berbeda (cek dalam prosedur to setup, to eat, and to regrow-grass). Supaya tidak membingungkan,
maka kita dapat memisahkan perintah perubahan warna ini menjadi satu prosedur
yang sama. Berikut ini adalah prosedur untuk menguabah warna rumput menjadi
satu perintah terpisah:
Gambar 3.18.
Kita juga dapat memasukkan parameter penting lainnya yaitu
tingkat pertumbuhan rumput itu sendiri. Pada model yang ada saat ini, kita
hanya memerikan prosedur untuk tumbuh, namun dengan menambahkan slider, kita
bisa mengatur persentase pertumbuhan rumput tersebut (grass-regrowth-rate). Kembali ke prosedur to regrow-grass yang sudah kita tulis sebelumnya di halaman code,
lalu masukkan tambahan perintah sebagai berikut:
Gambar 3. 19
Gambar 3.20
Selain parameter tingkat pertumbuhan rumput, kita juga dapat
memasukkan parameter energi yang diperoleh dari rumput (energy-gain-from-grass) yang akan menunjukkan dan mengontrol energi
yang diperoleh oleh domba dari setiap satuan rumput yang dimakannya. Masukkan
slider baru dan ubah perintah pada prosedur to eat sebagai
berikut:
Gambar 3.21
Gambar 3.22
Gambar 3.23
Sebagai hasil akhir pada model versi ketiga ini, dapat kita
lihat pada gambar di atas. Dimana kita mulai dengan 700 ekor domba. Setelah
klik setup dan go, pada step atau ticks ke 400, terjadi penurunan jumlah
populasi domba secara drastic akibat dari kelaparan, namun setelah ticks ke
660, populasi domba kembali stabil (dengan jumlah domba 370[1]
ekor). Kondisi ini menunjukkan keseimbangan setelah 330 domba lainnya mati dan
ketersediaan rumput mampu mendukung keseimbangan populasi domba dari waktu ke
waktu. Menarik bukan? Pada tahap ini, kita bisa mencoba melakukan beberapa kali
ulangan dengan jumlah domba, tingkat pertumbuhan rumput, tingkat energi masuk
dan tingkat energi keluar yang berbeda-beda. Lihat bagaimana hasilnya!
4. Model Versi 0.4
Menambahkan fungsi reproduksi pada domba
Pada model versi 0.3, kita sudah membangun sebuah model yang
dapat mensimulasikan domba bergerak dan mengeluarkan energi, lalu mendapatkan
energinya kembali melalui makanan, dan domba mati ketika kehabisan energi.
Namun demikian, model ini hanya dapat mensimulasikan penurunan domba, tapi
tidak dapat mensimulasikan pertumbuhan jumlah domba. Oleh karena itu, kita akan
membuat prosedur yang memungkinkan domba untuk melahirkan anak (bereproduksi).
Dalam model dasar ini, agak kompleks untuk membuat model berdasarkan perbedaan
seksual (jantan dan betina), oleh karena itu dipilih dua pendekatan paling
sederhana yang sebenarnya jauh dari kenyataan. Seperti kata pepatah, “all models are wrong, but some are useful”.
Dalam simulasi ini kita tidak menggunakan model perkawinan pasangan, akan
tetapi menggunakan simulai melalui jumlah energi yang dimiliki domba. Jika
domba mencapai titik energi tertentu, maka domba akan melahirkan domba baru.
Asumsi ini tentu berbeda dengan kenyataan, namun penyederhanaan ini akan
membantu dalam mempercepat penyusunan model. Pengembangan yang lebih kompleks
(menggunakan pasangan lawan jenis) dapat dikembangkan kemudian.
Untuk menambahkan fungsi reproduksi kita akan menambahkan
perintah pada prosedur “to go” sebagai berikut:
Gambar 3.24
Prosedur ini menunjukkan apabila domba memiliki energi yang
cukup untuk melakukan reproduksi (>200, dua kali dari energi aslinya), maka
ia akan otomatis melakukan kloning (kode hatch
berarti agen akan melakukan cloning pada patch yang sama, dan hasil
kloningannya akan otomatis memiliki energi sejumlah 100). Sekarang, ketika kita
jalankan lagi model versi 0.4 ini, maka hasilnya akan berbeda dengan model
sebelumnya:
Gambar 3.25. Model versi 0.3. Jumlah domba
awal 700, movement cost 1.0, grass-regrowth-rate 0.4, dan
energy-gain-from-grass 1.1. Hasilnya, populasi domba menurun dan stabil pada
jumlah 370 ekor.
Gambar 3.26. Model versi 0.4. Jumlah domba
awal 700, movement cost 1.0, grass-regrowth-rate 1.0, dan
energy-gain-from-grass 2.0. Hasilnya, populasi domba mengalami peningkatan dan
stabil hingga mencapai 1270 ekor.
Model Versi 0.5
Pada model verso 0.4 kita telah memiliki prosedur lengkap
untuk satu agen (domba) dan lingkungan (rumput). Untuk membuat model ini cocok
dengan teori pemangsa dan yang dimangsa dalam rantai makanan (predator-prey), maka kita perlu
menambahkan satu spesies lagi yaitu serigala (wolves) sebagai pemangsa domba. Kita akan menambahkan prosedur yang
hampir sama dengan prosedur untuk domba di halaman code:
Pertama adalah membuat pernyataan wolves-own
di bawah sheep-own statement. Karena
model kita sekarnag terdiri dari dua spesies, maka kita bias mengubah atau
menghilangkan sheep-own energy menjadi turtles-own energy untuk mengontrol keduanya. Setelah
itu, kita bias menambahkan slider untuk mengatur jumlah serigala [create-wolves number-of-wolves]. Perubahan prosedur di
atas dapat dilihat sebagai berikut:
Gambar 3.27.
Gambar 3.28. Buat slider
untuk menambahkan jumlah serigala di halaman interface.
Prosedur
selanjutnya adalah dengan menambahkan perilaku untuk serigala. Pada dasarnya,
perilaku serigala mirip sama dengan domba, yaitu bergerak, makan, mati, dan
bereproduksi. Meskipun apa yang dimakan serigala dan domba berbeda, namun
prinsip perilakunya tetap sama: makan (eat).
Oleh karena itu, kita akan mengubah perintah dalam prosedur “to go” dari perintah yang hanya spesifik untuk domba (ask sheep) menjadi perintah yang bias berlaku untuk
domba dan serigala (ask turtles). Kita juga akan
menambahkan perintah serigala untuk memakan domba (bukan rumput dengan menambahkan
perintah pada prosedur “to eat”.
Gambar 3.29. Kiri: Edit prosedur “to
go”. Kanan: Edit dan penambahan perintah “to eat”
Gambar 3.30. Buat slider untuk menambahkan
energi yang diperoleh serigala setelah memakan domba
Setelah memiliki prosedur yang lengkap untuk perilaku domba
dan serigala, satu lagi yang perlu kita ubah adalah tampilan plot atau grafik
yang akan menunjukkan jumlah domba dan serigala sepanjang waktu. Pada plot
inilah kita akan mampu membaca jumlah populasi kedua spesies pada saat model
atau simulai dijalankan. Oleh karena itu, kita perlu menambahkan dua tambahan
informasi pada grafik (plot-pen) dengan mengubah prosedur to-my-update-plots sebagai berikut:
Gambar 3.31.
Tanda “* 10 “, dan “/50” adalah scaling factors yang berfungsi agar plot dapat dibaca dengan baik.
Perlu dicatat bahwa ketika membaca
jumlah angka dari populasi serigala, angka sebenarnya dari populasi itu adalah
10 kali lebih kecil dari jumlah yang tertera pada model! Kini, kita sudah
mampu mengubah dan mengatur parameter untuk menguji bagaimana kedua spesies ini
dapat bertahan di lingkungan artifisial yang kita buat. Kita bias mengubah
setiap parameter seperti jumlah domba, jumlah serigala, tingkat pertumbuhan
rumput, hingga energi yang diperoleh oleh domba maupun serigala. Dengan
demikian, model simulasi sederhana ini sudah dapat dioperasikan dan dianalisis.
Berikut adalah contoh hasil simulasi dari model very 0.5 ini:
Kita set parameter sebagai berikut:
·
jumlah populasi awal domba= 500
·
jumlah populasi awal serigala= 10
·
movement cost= 0.4
·
grass-regrowth-rate= 0.3
·
energy-gain-from-grass=1.7
·
energy-gain-from-sheep=3.5
Gambar 3.32.
Hasil simulasi di atas menunjukkan keseimbangan ekosistem
dimana jumlah populasi domba, serigala, dan rumput menunjukkan pola yang berkelanjutan.
Gambar 3.33.
Box 2. Ringkasan Prosedur Simulasi
Model Versi 0.5
Breed [ sheep a-sheep ]
breed [ wolves wolf ]
turtles-own [ energy ]
patches-own [ grass-amount ]
to setup
clear-all
ask patches [
set grass-amount random-float 10.0
set pcolor scale-color green grass-amount 0 20
]
create-sheep number-of-sheep [
setxy random-xcor random-ycor
set color white
set shape "sheep"
set energy 100
]
create-wolves number-of-wolves [
setxy random-xcor random-ycor
set color brown
set shape "wolf"
set size 1.5
set energy 100
]
reset-ticks
end
to go
if not any? sheep [ stop ]
ask turtles [
wiggle
move
check-if-dead
eat
reproduce
]
regrow-grass
tick
my-update-plots
end
to wiggle
right random 90
left random 90
end
to move
forward 1
set energy energy - movement-cost
end
to reproduce
if energy > 200 [
set energy energy - 100
hatch 1 [set energy 100]
]
end
to regrow-grass
ask patches [
set grass-amount grass-amount + grass-regrowth-rate
if grass-amount > 10 [
set grass-amount 10
]
recolor-grass
]
end
to recolor-grass
set pcolor scale-color green grass-amount 0 20
end
to check-if-dead
if energy < 0 [
die
]
end
to eat
ifelse breed = sheep [
eat-grass
]
[
eat-sheep
]
end
to eat-grass
if ( grass-amount >= energy-gain-from-grass ) [
set energy energy + energy-gain-from-grass
set grass-amount grass-amount - energy-gain-from-grass
recolor-grass
]
end
to eat-sheep
if any? sheep-here [
let target one-of sheep-here
ask target [
die
]
set energy energy + energy-gain-from-sheep
]
end
to my-update-plots
set-current-plot-pen "sheep"
plot count sheep
set-current-plot-pen "wolves"
plot count wolves * 10
set-current-plot-pen "grass"
plot sum [ grass-amount ] of patches / 50
end
|
[1]
Angka-angka ini dapat dilihat dengan meletakkan cursor pada software netlogo
yang sedang dijalankan. Letakkan cursor pada kotak plot yang menunjukkan jumlah
populasi domba sepanjang waktu.
Terimakasih banyak Mas Yanu atas tutorial Netlogo berbahasa Indonesia nya. Sangat membantu untuk tugas akhir saya :D
ReplyDeleteterima kasih sudah berkunjung dan membaca! senang sekali jika bisa membantu :D
DeleteThis comment has been removed by a blog administrator.
ReplyDelete