Как выбрать из набора агентов, который зависит от атрибута? - PullRequest
0 голосов
/ 30 мая 2018

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

    ifelse(condition > threshold)  [set status 0 ] [set status 1] 

Я хочу подсчитать потенциальных партнеров мужского пола каждой из самок в популяции, которые соответствуют этому порогу.Я закодировал это так, что женщины ограничены радиусом обнаружения в 10 пятен.Если нет мужчин, которые соответствуют этому порогу, тогда FR должно быть 0, в противном случае это должна быть пропорция.

      ask turtles with [sex = "female"] [if any? turtles with [sex = "male"] 
      in-radius 10 [ set potentialMates turtles with [sex = "male"] in-radius 10]
        ifelse any?  potentialMates with [anadromousM = 1] 
        [set FR count potentialMates with [anadromousM = 1] / count potentialMates ]
        [set FR 0]]

Когда я запускаю это, я получаю ошибку для второго any?

ЛЮБОЙ?ожидается, что входные данные будут представлять собой набор агентов, но вместо этого получен номер 0.

Где я ошибаюсь?Надеюсь, вы можете помочь.

1 Ответ

0 голосов
/ 30 мая 2018

Это легче увидеть с другим отступом.Ниже приведен ваш код (завернутый в название процедуры).

to find-mate
  ask turtles with [sex = "female"]
  [ if any? turtles with [sex = "male"] in-radius 10
    [ set potentialMates turtles with [sex = "male"] in-radius 10
    ]
    ifelse any? potentialMates with [anadromousM = 1] 
    [ set FR count potentialMates with [anadromousM = 1] / count potentialMates ]
    [ set FR 0]
  ]
end

Как видите, ifelse проверяется (для каждой женской черепахи) независимо от результата if any? turtles with [sex = "male"] in-radius 10.Представьте, что сначала if - это false, а затем потенциальные помощники agentset никогда не создаются с мужскими черепахами.Отсюда и ошибка.Вы не показали нам код, в котором сначала создается экземпляр pontentialMates - при условии, что это глобальная переменная, тогда она будет иметь значение 0.

Я думаю, вы хотите, чтобы FR был 0 в случае, когда нетсамцы в радиусе вообще.В этом случае попробуйте следующее.

to find-mate
  ask turtles with [sex = "female"]
  [ ifelse any? turtles with [sex = "male"] in-radius 10
    [ set potentialMates turtles with [sex = "male"] in-radius 10
      set FR count potentialMates with [anadromousM = 1] / count potentialMates
    ]
    [ set FR 0]
  ]
end

Если нет потенциальныхMate с anadromousM = 1, тогда числитель в любом случае равен 0, а 0 / N равен 0.

...