NetLogo:将海龟随机分配给不同的组
NetLogo: Assign Turtles Randomly but Equally to Different Groups
我使用下面的代码创建了 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
]
]
感谢您的帮助。
一般来说,您不应该在 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
我使用下面的代码创建了 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
]
]
感谢您的帮助。
一般来说,您不应该在 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