Переместите черепаху к ближайшему незанятому участку в Нетлого - PullRequest
0 голосов
/ 12 декабря 2018

В настоящее время у меня есть модель со многими параметрами, и один из них - разведение оленей однолетних оленей по определенным критериям.Расстояние, которое рассеивает каждый самец, определяется по логарифмически нормальному распределению.Вот что у меня есть:

to move-dispersing-maleyearlings
 ask maleyearlings [
 let chance-disperse random-float 1.001
 if chance-disperse < .62 [  ;;average dispersal rates in Long et. al paper
 let mu 7.5
 let sigma 6.1
 let beta ln (1 + (sigma * sigma) / (mu * mu))
 let S (sqrt beta)
 let M (ln mu) - (beta / 2)
 let new-distance exp (random-normal M S)
 while [any? other turtles-here and dispersal-distance < new-distance]
 [right random 360
   fd 1
    set dispersal-distance dispersal-distance + 1]]]
end

Так что в этом коде должно быть рассеяно 62% оленя-годовалого оленя, и они разойдутся на расстоянии «нового расстояния».Если я правильно понимаю цикл «пока», они будут двигаться, пока не достигнут своего «нового расстояния» и не приземлятся на незанятом участке.

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

Есть идеи, как это сделать?Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 13 декабря 2018

Если я правильно понимаю ваш запрос, вы хотите заменить:

while [any? other turtles-here and dispersal-distance < new-distance]
 [right random 360
   fd 1
    set dispersal-distance dispersal-distance + 1]]]

кодом, который перемещается в ближайший пустой патч.Попробуйте что-то вроде этого (не проверено):

if any? other turtles-here
[ move-to min-one-of (patches with [not any? turtles-here]) [distance myself]
...