NetLogo: использование собственной переменной patches выдает сообщение об ошибке - PullRequest
0 голосов
/ 31 октября 2018

У меня проблема с разницей между контекстом черепахи / патча и контекстом наблюдателя. Проблема возникает с последней строкой моего кода. Я хочу, чтобы определенное количество исправлений что-то делало, и это количество определяется переменной, которую я определил выше. Когда я использую патчи ask n-of 5, он работает нормально, но когда я заменяю 5 на переменную, он выдает сообщение об ошибке (вы не можете использовать tick в контексте turtle / patch, потому что TICK только для наблюдателей). Кто-нибудь знает, почему это не работает?

patches-own [kans-op-ontbossing]


to setup
  clear-all
  ask patches [if (random 100) < bosdensiteit [set pcolor green]]
  ask n-of world-height patches with [pxcor = pycor][set pcolor blue]
  ask n-of world-height patches with [pxcor = max-pxcor / 2] [set pcolor grey]
  ask n-of aantal-nederzettingen patches with [pcolor != blue and pcolor != grey] [set pcolor white]
  reset-ticks
end

to go
  if ticks = 75 [stop]
  ask patches [set kans-op-ontbossing ontbossingsgevoeligheid + houtprijs + vraag-naar-landbouwgrond]
  ontbos
  tick
end

to ontbos
  ask patches with [pcolor = green and (pxcor > 30 or pycor > 30)]
      [if count (neighbors4 with [pcolor = grey]) >= 1 or count (neighbors4 with [pcolor = blue]) >= 1 or count (neighbors with [pcolor = white]) >= 1
      [if random 300 < kans-op-ontbossing [set pcolor brown]]]


  ask n-of (kans-op-ontbossing / 10) patches with [pcolor = grey and pxcor = ((max-pxcor / 2) + ticks)][ask patch-at 1 0 [set pcolor grey]]

end

Спасибо!

1 Ответ

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

kans-op-ontbossing является переменной patches-own. Итак, вы просите NetLogo запросить некоторое количество исправлений на основе переменной, которая может отличаться для всех исправлений. Это то же самое, что сказать ask n-of ( pcolor / 10 ) patches - это не имеет смысла в этом контексте. n-of требует, чтобы аргумент был единственным числовым значением, поэтому 5 работает. Насколько я могу судить, причина этой конкретной ошибки заключается в том, что, с точки зрения NetLogo, вы пытаетесь получить доступ к переменной patches-own и затем перейти прямо к вызову tick. Замените kans-op-ontbossing значением, к которому имеет доступ наблюдатель, и вам следует идти вперед.

...