NetLogo:在已经选择的列表中排除项目

时间:2015-06-23 18:19:51

标签: list random netlogo

我正在使用setxy函数来设置我的海龟所在的区域。我列出了x值和y值。但我不想在同一点上超过1只乌龟。我不知道如何阻止这种情况发生。这是我正在使用的代码:

create-vcells 20
   [ setxy one-of [0 0.6 1.2 1.8 2.4 3]
           one-of [0 0.6 1.2 1.8 2.4] ]

有没有人有任何见解?谢谢!

2 个答案:

答案 0 :(得分:1)

我认为vcells是一个品种。我将使用常规turtle命令,但您将能够弄清楚如何使我的示例适应您的代码。

你可以使用双循环来查看x和y坐标的每个可能组合,将create-命令放在循环中:

let xs [1 2 3 4]
let ys [10 15 20 25]

foreach xs [
  let x ?
  foreach ys [
    let y ?
    create-turtles 1 [setxy x y]
  ]
]

foreach遍历列表中的项目(xs外部的foreach,内部的ys)。在foreach块内,?引用列表中的当前项,并依次引用每个项。我在外部?块中将foreach的值分配给变量,以便我可以从内部xs块中的foreach引用其值,其中{{1而是指代?的一个元素。 (然后我将内部ys分配给变量也是为了清楚起见。)

如果不是每个坐标组合,你只想按顺序配对x坐标和y坐标,你可以将?用于多个列表:

foreach

此处(foreach xs ys [ create-turtles 1 [setxy ?1 ?2] ]) 引用第一个列表中的当前元素(?1),xs引用第二个列表中的当前元素(?2)。请注意,在这种情况下,您必须将整个表达式包装在括号中。

答案 1 :(得分:0)

您可以生成n个唯一的坐标对(包含在两个列表中),如下所示:

to-report n-pairs [#n #lst01 #lst02]
  let _n1 length #lst01
  let _n2 length #lst02
  let _nmax (_n1 * _n2) ;possible pairs
  if (#n > _n1 * _n2) [error "#n is too big"]
  let _idxs n-of #n n-values _nmax  [?]
  report map [(list 
      item int (? / _n2) #lst01
      item (? mod _n2) #lst02)
    ] _idxs
end