04 June 2018

Merancang Agent-Based Model (ABM): Wolf Sheep Simple Model (Bag-3)

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


 Artikel terkait:



[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.

3 comments:

  1. Terimakasih banyak Mas Yanu atas tutorial Netlogo berbahasa Indonesia nya. Sangat membantu untuk tugas akhir saya :D

    ReplyDelete
    Replies
    1. terima kasih sudah berkunjung dan membaca! senang sekali jika bisa membantu :D

      Delete
  2. This comment has been removed by a blog administrator.

    ReplyDelete