Saya belajar sendiri cara membuat ABM di Netlogo menggunakan buku Railsback & Grimm 2012. Saya mengalami masalah dengan salah satu buku latihan tentang kupu-kupu yang mengikuti koridor "virtual". Ide dasarnya adalah kupu-kupu naik ke atas untuk kawin dengan menggunakan perbedaan ketinggian sebagai panduan. Saya perlu menghitung lebar koridor dengan membagi jumlah petak yang digunakan kupu-kupu dengan jarak rata-rata kupu-kupu terbang dari petak awal hingga petak akhir. Saya kesulitan merencanakan lebar koridor ini, yang saya kodekan seperti ini:
to-report corridor-width
let patches-visited count patches with [used?]
let mean-distance mean [distance start-patch] of turtles
report patches-visited / mean-distance
Saya kemudian membuat plot di antarmuka dengan perintah:
plot corridor-width
Pesan kesalahan yang saya terima berbunyi:
Pembagian dengan nol. kesalahan saat pengamat berjalan / dipanggil dengan prosedur LEBAR KORIDOR dipanggil dengan plot 'Lebar koridor' pena 'default' kode pembaruan dipanggil dengan prosedur SETUP dipanggil dengan Tombol 'setup'
Saya yakin ada yang salah dengan cara saya mengkode distance start-patch
tetapi saya telah menjelajahi web dan melihat beberapa kode dan saya tidak dapat menemukan kesalahan saya. Seluruh kode saya terlihat seperti ini:
globals [ q ] ;; q is the probability that butterfly moves directly to highest patch
turtles-own [ start-patch ]
patches-own [ elevation used? ] ;; patches property of elevation and whether the patch has been used by butterfly or not.
to setup
ca
;; Let's create patches and asign them an elevation and color by using ask patches statement
ask patches
[
;; Elevation decreases linearly with distance from the center of hills. Hills are at (30,30) and
;; (120,120) coordinates. The first hill is 100 units high whereas the second one is 50
let elev1 100 - distancexy 30 30
let elev2 50 - distancexy 120 100
ifelse elev1 > elev2
[ set elevation elev1 ]
[ set elevation elev2 ]
set pcolor scale-color green elevation 0 100
set used? false
]
;; Create 50 butterflies
crt 50
ask turtles [
set size 6
;; set their initial location as their initial patch
setxy random-pxcor random-pycor
set start-patch patch-here
;; have the butterfly draw its path with the pen-down statement
pen-down
]
reset-ticks
;; Initialize the q parameter
set q 0.4
end
;; The master schedule
to go
ask turtles [ move ]
plot corridor-width
tick
if ticks >= 1000
[
let final-corridor-width corridor-width
write "Corridor width: " print final-corridor-width
;export-plot "Corridor width" (word "Corridor-width-output-for-q-" q ".csv")
stop
]
end
;; let's code the butterfly procedure of movement
to move
if elevation >=
[ elevation ] of max-one-of neighbors [ elevation ]
[ stop ]
ifelse random-float 1 < q ;; Decide whether to move to the highest sorrounding
;; patch with p=q
[ uphill elevation ] ;; move deterministically uphill
[ move-to one-of neighbors ] ;; or move randomly
set used? true
end
to-report corridor-width
let patches-visited count patches with [used?]
let mean-distance mean [distance start-patch] of turtles
report patches-visited / mean-distance
end