Как предотвратить способность агентов «преодолевать» барьеры в NetLogo? - PullRequest
0 голосов
/ 24 апреля 2019

Я задаю этот вопрос со ссылкой на предыдущий вопрос, на который здесь дан ответ: Есть ли способ создать непроходимые барьеры в NetLogo?

Пользователь услужливо предложил способ создания закрытых патчей (то есть барьеров) в NetLogo. Однако, как он упомянул, агенты будут по-прежнему обладать способностью «перепрыгивать» через эти барьеры, если они приближаются с определенных углов. Это нежелательное поведение для моей модели, так как я моделирую заборы и движения, поэтому прыгать через барьеры нереально.

Я пытался изменить этот код:

ask patches in-radius 1
[if f = 1
[ask myself

  [set heading towards min-one-of patches [distance myself] + 180 - random 10 + random 10 ]

]
]

уменьшением «радиуса» до единицы, в надежде, что это помешает агенту видеть достаточно далеко, чтобы пересечь барьеры, но это не работает. «F = 1» - это просто переменная патча, используемая для обозначения того, какие патчи являются заборами.

Есть ли способ предотвратить это поведение?

Вот поведение, которое я хочу - навигация вокруг барьеров

Вот поведение, которое я не хочу - прыгать барьеры, если подойти с определенных углов

Фактическая процедура перемещения, которой следуют агенты, выглядит следующим образом:

ask turtles[
let moveset patches in-radius 30 with [f = 0 and n > 0]

 pen-down

 let target max-one-of moveset [n]

 ifelse patch-here != target
 [set heading towards target]
 []

 ask patches in-radius 1
 [if f = 1
 [ask myself
  [set heading towards min-one-of patches [distance myself] + 180 - random 10 + random 10]

 fd 1]
...