我使用下面的代码创建50只海龟并随机将它们分配给四种不同的策略之一(即a,b,c和d):
问题在于,当我减少创建的海龟的数量或增加策略的数量时,我面临的情况是,任何海龟都不会采取至少一种策略。
turtles-own [ my_strategy ]
to setup
;; create 50 turtles and assign them randomly
;; to one of four different strategies
create-turtles 50 [
set my_strategy one-of [ "a" "b" "c" "d" ]
]
end
我需要你的帮助: 1.确保我没有面临任何乌龟没有采取一种或多种策略的情况。 2.确保分配给每个策略的海龟数量大致相等。
我尝试使用下面的代码来解决问题,但它不起作用:
turtles-own [ my_strategy ]
to setup
let strategies [ "a" "b" "c" "d" ]
let turtles-num 51
let i 0
create-turtles turtles-num
while [ not any? turtles with [ my_strategy = 0 ] ] [
ifelse i < length strategies - 1 [ set i i + 1 ] [ set i 0 ]
ask n-of ceiling ( turtles-num / length strategies ) turtles with [ my_strategy = 0 ] [
set my_strategy item i strategies
]
]
感谢您的帮助。
答案 0 :(得分:3)
通常,您不应该在NetLogo中使用who
个数字。但是,这是适合的极少数情况之一。
根据评论,您实际上希望每组中的数字相等(或尽可能接近相等),因此您不需要计算每组中的数字。创建turtles
时,会使用连续的who
数字创建它们。因此,您可以使用mod
运算符依次将它们分配给每个策略。
turtles-own [ my_strategy ]
to setup
;; create 50 turtles and assign them equally
;; to one of four different strategies
create-turtles 50 [
set my_strategy item (who mod 4) [ "a" "b" "c" "d" ]
]
end