Создание патча стока в Netlogo 6.0.4 - PullRequest
0 голосов
/ 26 ноября 2018

Я хочу создать 2 патча (или области в сетке, которые не следует путать с обычными патчами Netlogo) в Netlogo, которые представляют области «приемника» и «источника».«Раковина» - это слайдер, размер которого можно регулировать и который должен создавать круглую область.«Исходный» патч - это область вне патча-приемника.Ниже приведен код, который я использовал, чтобы попытаться реализовать это, он был взят из аналогичной модели, используемой в Netlogo 5.3.1:

to setup
clear-all

crt sink-patch-radius

;; create the 'sink'
set sk1x random-pxcor
set sk1y random-pycor
while [abs(sk1x - min-pxcor) < (sink-patch-radius - 1)
or abs(max-pxcor - sk1x) < (sink-patch-radius - 1)
or abs(sk1y - min-pycor) < (sink-patch-radius - 1)
or abs(max-pycor - sk1y) < (sink-patch-radius - 1) ]
[ set sk1y random-pycor
set sk1x random-pxcor ]


set sink-patches patches with
[(round(distancexy sk1x sk1y)) < sink-patch-radius ]
ask sink-patches [ set pcolor brown + 2 ]


;; create the 'source'
ask patches [
set source-patches patches with [pcolor != brown + 2]]
ask source-patches [ set pcolor green ]

Когда я это делаю, кнопка установки застревает.Это не настроит модель.Странно, но этот код работает в Netlogo 5.3.1.Любое понимание будет полезно.Спасибо!

1 Ответ

0 голосов
/ 27 ноября 2018

Не уверен, почему застревает кнопка настройки.Но есть проблема с вашим кодом.У вас есть ask patches [ set source-patches ...], и каждый патч получит это.Это должно быть довольно быстро, но может объяснить вашу проблему с липкостью.

Эта исправленная версия вашего кода работает

to setup
  clear-all
  let sink-patch-radius 3
  crt sink-patch-radius

  ;; create the 'sink'
  let sk1x random-pxcor
  let sk1y random-pycor
  while [ abs(sk1x - min-pxcor) < (sink-patch-radius - 1)
          or abs(max-pxcor - sk1x) < (sink-patch-radius - 1)
          or abs(sk1y - min-pycor) < (sink-patch-radius - 1)
          or abs(max-pycor - sk1y) < (sink-patch-radius - 1) ]
  [ set sk1y random-pycor
    set sk1x random-pxcor ]
  let sink-patches patches with [(round(distancexy sk1x sk1y)) < sink-patch-radius ]
  ask sink-patches [ set pcolor brown + 2 ]

  ;; create the 'source'
  let source-patches patches with [pcolor != brown + 2]
  ask source-patches [ set pcolor green ]  
end

Но я не уверен, почему вы бродите с whileзаявление вместо того, чтобы просто определить патчи, которые находятся рядом.Попробуйте это для более удобочитаемой версии (обратите внимание, что черепах нет, поэтому вам нужно изменить их, чтобы вернуть обратно)

globals [ sink-patches source-patches]

to setup
  clear-all
  ;; create the 'sink'
  let sink-patch-radius 3
  let sink-centre one-of patches
  set sink-patches [patches in-radius sink-patch-radius] of sink-centre
  ask sink-patches [ set pcolor brown + 2 ]
  ;; create the 'source'
  set source-patches patches with [pcolor != brown + 2]
  ask source-patches [ set pcolor green ]
end
...