NetLogo-从代理集中选择代理



我有一个雄性和雌性动物互动的模型,雄性动物为了接近雌性动物而相互竞争。当一只分散的雄性挑战一只常驻雄性(即male-to-challenge)并输了时,我想让分散的雄性"记住"他输给了谁。我在程序结束时用set dominant-males (turtle-set dominant-males male-to-challenge)完成了这一点。然后在下一个时间步骤的程序开始时,分散的雄性不会再次挑战相同的dominant-male。我认为这很容易:

      ; identify those males owning nearby females:
      let owner-males-of-nearby-fem turtle-set [males-in-my-territory] of breeding-females with [member? self (owned-nearby-females)] 
      ; identify those males who have not been challenged before:
     let unchallenged-males owner-males-of-nearby-fem with [not member? self dominant-males]
      ; select one of the unchallenged males to challenge:
      let male-to-challenge one-of unchallenged-males

然而,我经常发现,unchallenged-males和之前受到挑战并获胜的是同一个(即dominant-males),尽管这些雄性本来就不应该被选中。我使用打印语句来验证这一点,并使用以下内容包含了一条简单的错误消息:

      if [self] of unchallenged-males = [self] of dominant-males
      [
       user-message "this is wrong!" 
      ]

我原以为这会很容易,但我一天中大部分时间都被这件事难住了。如有任何帮助,我们将不胜感激。

您测试的是owner-males-of-nearby-femdominant-males,而不是挑战者。尝试将dominant-males更改为[dominant-males] of myself

最新更新