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