如何更新用于循环选择海龟的比例?

时间:2019-01-25 11:07:39

标签: netlogo

在我的模型中,海龟有两种性别,并且有两种可能的策略“ 0”和“ 1”。雌性对设定半径内的雄性数量进行计数,然后根据其策略在该池中进行选择。

雌性的潜在配偶池有一定的限制,他们会通过这个池循环以根据其策略选择雄性。这一切都在<div *ngFor="let book of books | categoryFilter : cat"> <h3>{{book.title}}</h3> <h4>{{book.author}}</h4> </div> 过程中进行。

同事发现的一个问题是,每次女性选择另一对伴侣时,都应更新以下代码行,以使比例反映剩余的潜在伴侣,而不是设置在to-choose之外的循环。

n-max

以另一种方式阐明问题,如果set prop_B ( count availa-males with [ strategy = 0 ] ) / n-max为5,并且雌性使用该值为第一个伴侣设置n-max,然后在循环prop_B的下一次迭代中使用应该弃用1,因为剩下的男性只有4个。

因此它应该类似于:n-max

请参见下面的模型工作示例。希望能对您有所帮助。

set prop_B ( count availa-males with [ strategy = 0 ] ) / (n-max - count mates-already-chosen)

1 个答案:

答案 0 :(得分:2)

由于不需要按顺序选择它们,因此您应该考虑的一个选项是来自n-of扩展名的rnd的加权等效项。以下代码是使用加权选择的完整模型,以向您展示其工作方式。但这不会产生与您的方法完全相同的结果。您的数学基本上根据一种选择的比例来强制选择一种或另一种。我认为无论如何这都可能对您有用,因为权重只是不成比例的证明。

extensions [rnd]

turtles-own
[ sex
  mates
  strategy
] 
breed [males male]
breed [females female]

to setup
  clear-all
  create-males 50 [set color red set sex "M"]
  create-females 1 [set color blue set sex "F"]
  ask turtles
  [ setxy random-xcor random-ycor
    set strategy one-of [1 0]
    set mates nobody
  ]
  reset-ticks 
end 

to go 
  ask males
  [ ; fd 1
  ]
  ask females [choose]
  tick
end 

to choose
  let availa-males males in-radius 5
  let max-mate-count min (list 5 count availa-males)
  if max-mate-count < 5 [ print  "Fewer available males than mates" ]
  let new-mates rnd:weighted-n-of max-mate-count availa-males [ strategy-weight strategy ]
  set mates (turtle-set mates new-mates)
  ask new-mates
  [ set mates (turtle-set mates myself)
  ]
end

to-report strategy-weight [ #strategy ]
  if #strategy = 1 [ report 0.2 ]
  if #strategy = 0 [ report 0.8 ]
  report 0
end

您会注意到,我还删除了一堆turtle变量。您不需要永久变量,只需使用let创建一个临时变量。我还注意到您将性作为乌龟变量,但是您实际上是在处理不同品种的性,但是我还是保留了它,以防其他目的。