Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Netlogo 如何使用轮盘赌轮选择最多数量的海龟_Netlogo - Fatal编程技术网

Netlogo 如何使用轮盘赌轮选择最多数量的海龟

Netlogo 如何使用轮盘赌轮选择最多数量的海龟,netlogo,Netlogo,在我的模型中,海龟有两种性别,其中雄性有两种潜在的策略。雌性在设定的半径内计算雄性的数量 我想让女性根据两种男性策略的相对频率来衡量她们从男性群体中选择(不替换)的概率 我已经有了从雄性动物中选择概率的代码(matingpoolproband和matingPoolProbRes),但我不知道如何实现它,尽管rnd扩展似乎是一条路要走,特别是rnd:weighted-n-of-size-agentset[reporter] 这是复杂的三件事:(1)雄性可以与一个以上的雌性交配,(2)只与一个给定的

在我的模型中,海龟有两种性别,其中雄性有两种潜在的策略。雌性在设定的半径内计算雄性的数量

我想让女性根据两种男性策略的相对频率来衡量她们从男性群体中选择(不替换)的概率

我已经有了从雄性动物中选择概率的代码(
matingpoolproband
matingPoolProbRes
),但我不知道如何实现它,尽管
rnd
扩展似乎是一条路要走,特别是
rnd:weighted-n-of-size-agentset[reporter]

这是复杂的三件事:(1)雄性可以与一个以上的雌性交配,(2)只与一个给定的雌性交配一次,(3)雌性最多只能与五个雄性交配

to count-mates ; ask the females to count the number of males in a 10 patch radius & then 
                ; determine the frequency of the resident males in their patch

  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 FA count potentialMates with [anadromousM = 1] / count potentialMates ]
    [ set FA 0]
      ifelse any? potentialMates with [anadromousM = 0]
    [ set FR count potentialMates with [anadromousM = 0] / count potentialMates ]
    [ set FR 0]
    ]
    ]
end

to mating-pool-prob ; negative frequency dependency which is based on the number of male 
                    ; resident turtles 

  ask turtles with [sex = "female"]
  [
  ifelse (FA = 1) and (FR = 0)[
      set matingPoolProbAnad 1
      set matingPoolProbRes 0
  ]
  [ifelse (FA > 0) and (FR < 1)
    [
        set matingPoolProbRes exp(a - b * (FR - c ))/(1 + exp(a - b * (FR - c)))
        set matingPoolProbAnad 1 - matingPoolProbRes 

    ]
    [
        set matingPoolProbAnad 0
        set matingPoolProbRes  1
        ]
  ]
  ]
end
计算配偶数;让雌性动物数一数10个斑块半径内的雄性数量&然后
; 确定其斑块中常住雄性的频率
用[sex=“femal”询问海龟
[
如果有?半径为10的[sex=”male“]海龟
[将海龟与半径为10的[sex=“male”]进行潜在交配
如果还有?可能与[溯河产卵=1]
[使用[anadromousM=1]设置FA计数潜在配偶数/计数潜在配偶数]
[设定fa0]
如果还有?可能与[溯河产卵=0]
[使用[anadromousM=0]设置FR count potentialMates/count potentialMates]
[设置FR 0]
]
]
结束
交配池探针;基于男性人数的负频率依赖性
; 常驻海龟
用[sex=“femal”询问海龟
[
ifelse(FA=1)和(FR=0)[
设置MatingPoolProband 1
设置matingPoolProbRes 0
]
[ifelse(FA>0)和(FR<1)
[
集合matingPoolProbRes exp(a-b*(FR-c))/(1+exp(a-b*(FR-c)))
设置MatingPoolProbNAD 1-matingPoolProbRes
]
[
将MatingPoolProband设置为0
设置matingPoolProbRes 1
]
]
]
结束

本例可能接近您的理解,但显然需要根据本玩具版本进行改编。这一设置使75%的雄性海龟采用策略A发芽,其余的雄性海龟采用策略B发芽,并给所有海龟提供一组空的配偶开始交配:

breed [ males male ]
breed [ females female ]
turtles-own [ mates ]
males-own [ strategy ]
females-own [ max-mate-count mate-count ]

to setup
  ca
  ask n-of 200 patches [
    sprout-males 1 [
      ifelse random-float 1 < 0.75 [
        set strategy "A"
        set color orange
      ] [
        set strategy "B"
        set color violet
      ]
    ]
  ]
  ask n-of 50 patches with [ not any? turtles-here ] [
    sprout-females 1 [
      set color green
    ]
  ]
  ask turtles [
    set mates ( turtle-set )
  ]
  reset-ticks
end
我不能100%确定这就是你想要的-也许你可以使用
rnd
包来清理循环

根据评论进行编辑

如果修改“选择配偶”的结尾,请如下所示:

    ...
    ...
    ; have the female's males add her to their own mates agentset
    ask mates [
      set mates ( turtle-set mates myself )
    ]
    if n-max < count mates [
      print "Fewer available males than mates"
    ]
  ]
end
您可以随意多次运行
setup
go
,您永远不会看到打印输出“可用雄性比配偶少”:

我跑了几次,没有一只雄性的数量少于配偶的数量。但是,如果您在不允许女性重置其
配偶的情况下添加移动,您确实会开始看到它-例如,尝试运行几次:

to go
  choose-mates  
  ask turtles [ fd 1 ]
end
现在,因为海龟在四处移动,所以在某些情况下,
雌海龟
从上一个函数调用中抓住它们的配偶,然后移动到一个
可用雄海龟较少的空间
。快速而简单的解决方法是让雌性每次都清理它们的配偶。你在哪里做这取决于你的模特目标(女性选择伴侣的频率有多高?她们只会忘记以前的一些吗?等等),但这里有一个非常简单的方法:

to go
  ask turtles [ set mates ( turtle-set ) ]
  choose-mates  
  ask turtles [ fd 1 ]
end

现在,您可以随意多次运行该程序,并且不应该看到“可用雄性数量少于配偶数量”打印输出。

交配池prob块返回2个值(加1)。我认为每只雌海龟都是根据自己交配池中的值来计算这些值的,对吗?在这种情况下,我认为你不需要加权随机选择-加权随机选择是根据海龟的某些属性值在海龟之间进行选择(例如,越富有的海龟有更多的机会)。我想你所要做的就是说“给我20%的机会选择一种a类型”,还有,你的约束是否会改变选择a或R的概率,或者你想计算所有海龟离开的概率,然后在选择时应用约束?谢谢你的评论。你说得对,雌性在10个补丁半径内观察,并计算每种雄性策略类型的频率。我用它来计算交配池prob中的值。所以你会建议用随机浮动或类似的方法让雌性选择雄性?关于第二点,你是说一旦女性开始选择,概率是否应该改变?那太好了。谢谢你的回复,我想这是我的出发点。有一件事我不明白,Avila males代理集怎么会比mates代理集小,mates肯定是Avila mates的子集吗?@ManassaMauler-对不起,我不太清楚你的意思-
Avila males
只是雌性可以使用的雄性代理集,而mates是一个代理集,开始时是一个空海龟集(计数0)迭代增加,直到它等于
最大交配数
,即5或
可用雄性
,以较小者为准。如果我误解了你的意思,请告诉我!如果我正确理解了您的代码,
mates
变量会从
availa males
中迭代选择,因为
availa males
是雌性可以使用的所有雄性。当我将模拟空间的大小增加到100 x 100面片时,就会出现问题。这可能会导致一些女性的雄性比配偶小。@ManassaMauler-我做了一些编辑来更好地解释我的意思!希望这有帮助你的答案真的有助于理清模型,所以我把它标记为正确的。我又来了,如果你不介意我当你的奴隶,也许你可以去上厕所
to go
  choose-mates  
end
to repeat-1000
  repeat 1000 [ 
    setup
    go
  ]
end
to go
  choose-mates  
  ask turtles [ fd 1 ]
end
to go
  ask turtles [ set mates ( turtle-set ) ]
  choose-mates  
  ask turtles [ fd 1 ]
end