Netlogo: использование собственной переменной патчей выдает сообщение об ошибке

У меня проблема с различием между контекстом черепахи / патча и контекстом наблюдателя. Проблема возникает с последней строкой моего кода. Я хочу, чтобы определенное количество патчей что-то делало, и это количество определяется переменной, которую я определил выше. Когда я использую запрос n-of 5 патчей, он работает нормально, но когда я заменяю 5 на переменную, появляется сообщение об ошибке (вы не можете использовать галочку в контексте черепахи / патча, потому что 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
193
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Другие вопросы по теме