NetLogo3D: обнаружение черепахи между двумя радиусами - PullRequest
1 голос
/ 02 ноября 2019

В настоящее время я моделирую несколько простых boids с использованием Netlogo3d, и у меня возникла проблема с функциями in-cone и in-radius.

(я заново реализую статью «Коллективная память иПространственная сортировка в группах животных (Кузин, Краузе, Джеймс, Ракстон и Фрэнкс)

Я использую три различных области вокруг моих боксов для определения его поведения: одну для отталкивания, одну для притяжения и одну для ориентации. Три из них - это сфера вокруг буда Эти области выглядят так Я обнаруживаю черепах в этой области вот так:

to find-flockmates-repulsion  ;; turtle procedure
  set flockmatesRepulsion other turtles in-cone (visionRepulsion * scale) fov
end
to find-flockmates-orientation  ;; turtle procedure
  set flockmatesOrientation other turtles in-cone ((visionOrientation + visionRepulsion) * scale) fov
end
to find-flockmates-attraction  ;; turtle procedure a modifier pour enlever les turtles dans le radius visionOrientation
  set flockmatesAttraction other turtles in-cone ((visionAttraction + visionOrientation + visionRepulsion) * scale) fov
end

Но эти три области перекрываются, и я не хочуони перекрываются.

Есть ли способ уменьшить выбор функции внутри конуса и радиуса, например:

set flockmatesAttraction other turtles [ (in-cone ((visionAttraction + visionOrientation + visionRepulsion) * scale) fov) and not (in-cone ((visionOrientation + visionRepulsion) * scale) fov) ]

И, если возможно, без цикла в 2 списках,Я пытаюсь сделать мои боиды эффективными. Спасибо!

(PS: извините за ломаный английский)

1 Ответ

1 голос
/ 02 ноября 2019

Вместо того, чтобы находить модификацию in-cone, которая, как я думаю, написана как эффективная, вы можете просто вычислить свои три набора агентов, как вы делали в вопросе, и затем удалить меньший набор агентов из большегоодин, чтобы получить набор разностных агентов, который вам нужен.

Итак, вы бы сделали это:

to find-flockmates-repulsion  ;; turtle procedure
  set flockmatesRepulsion other turtles in-cone (visionRepulsion * scale) fov
end
to find-flockmates-orientation  ;; turtle procedure
  set flockmatesOrientation other turtles in-cone ((visionOrientation + visionRepulsion) * scale) fov
end
to find-flockmates-attraction  ;; turtle procedure a modifier pour enlever les turtles dans le radius visionOrientation
  set flockmatesAttraction other turtles in-cone ((visionAttraction + visionOrientation + visionRepulsion) * scale) fov
end

;; and then remove the overlap using the member? reporter
set flockmatesAttraction flockmatesAttraction with [not member? self flockmatesOrientation ]

Кстати, я использовал ответ, который Чарльз написал о том, каквычесть один набор операторов из другого Удаление набора агентов из другого набора агентов (агентов из первого набора, которые также присутствуют во втором наборе) , в котором он сказал:

Iдумаю, что вы хотите, это член? примитивный. Если D и B - наборы агентов, следующее должно дать вам членов D, которые не являются членами B.

пусть DminusB D с [not member? Я B]

...