在我的模型中,海龟有两种性别,并且有两种可能的策略“ 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)
答案 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
创建一个临时变量。我还注意到您将性作为乌龟变量,但是您实际上是在处理不同品种的性,但是我还是保留了它,以防其他目的。