Netlogo: mengukur jarak rata-rata antara patch awal dan akhir

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

person AnnK    schedule 18.10.2016    source sumber


Jawaban (1)


Apa yang terjadi jika jarak rata-rata adalah 0?

let mean-distance mean [distance start-patch] of turtles

Pada dasarnya, dalam pengaturan Anda, Anda mengatur semua patch awal turtle ke patch mereka saat ini. Jadi, jika Anda bertanya kepada semua turtle seberapa jauh jarak mereka dari tempat awalnya, mereka semua akan memberi tahu Anda 0 unit jauhnya.

Jadi, [distance start-patch] of turtles diisi dengan daftar semua angka 0.

Jadi, rata-rata daftar semua 0 adalah 0 yang menyebabkan kesalahan pembagian dengan 0.

Mungkin dalam situasi ini, Anda ingin melaporkan 0...jadi

ifelse mean-distance = 0 
[ report 0]
[report patches-visited / mean-distance]
person mattsap    schedule 19.10.2016
comment
@matttsap terima kasih telah menjelaskan apa kesalahan saya. Kura-kura saya sebenarnya sedang bergerak sehingga tidak boleh ada jarak 0 antara titik awal dan akhir. Apa yang saya coba kodekan adalah untuk mendapatkan jarak rata-rata antara bagian awal dan akhir kura-kura saya setelah setiap kali dijalankan. Bisakah Anda memberi saran kepada saya tentang bagaimana cara mengubah kode saya untuk tujuan ini? - person AnnK; 20.10.2016
comment
Intinya adalah Anda menghitung jarak rata-rata di setiap centang (termasuk awal terjadinya masalah Anda). Jika Anda hanya menginginkan satu titik, Anda tidak akan memplot jarak rata-rata setelah setiap centang, sebaliknya, dalam perjalanan Anda, Anda akan menentukan kriteria pemberhentian untuk simulasi Anda dan mengatakan apakah kriteria pemberhentian [tunjukkan lebar koridor] atau sesuatu mirip dengan ini. - person mattsap; 20.10.2016