netlogo中两组海龟的不同组合

netlogo中两组海龟的不同组合,netlogo,Netlogo,我正在努力在netlogo中制作程序,该程序将海龟的不同组合制作成两组。 例如;在一个系统中总共有10只海龟[01123456789],我想把这些海龟分成两组。{[0 6 7 8] [1 2 3 4 5 9]}, {[2 3 6 8 9] [0 1 4 5 7]}....... 等等 任何帮助都将不胜感激 这可能就是你想要的。下面的代码通过对列表进行排序并删除重复项来删除重复项(即它将删除[[1 2][3]]和[[2 1][3]],因为它将对第一个列表进行排序,该列表将是[1 2],这将导致匹

我正在努力在netlogo中制作程序,该程序将海龟的不同组合制作成两组。 例如;在一个系统中总共有10只海龟[01123456789],我想把这些海龟分成两组。{[0 6 7 8] [1 2 3 4 5 9]}, {[2 3 6 8 9] [0 1 4 5 7]}....... 等等


任何帮助都将不胜感激

这可能就是你想要的。下面的代码通过对列表进行排序并删除重复项来删除重复项(即它将删除[[1 2][3]]和[[2 1][3]],因为它将对第一个列表进行排序,该列表将是[1 2],这将导致匹配)。切掉一个元素并将其插入左子列表并递归

你可以想象列表中的每个数字都对应一个who。所以你可以

let alist [who] of turtles
如果你有任何问题,请告诉我

to-report permutate-sublist [added-whos remaining-whos]
  ifelse length remaining-whos = 1
  [
   report (list (list (sort added-whos) (sort remaining-whos)))
  ]
  [
    let result (list)
    foreach (sort remaining-whos)
    [
      let x ?
      let new-whos (sentence added-whos x)
      let new-remaining-whos (remove x remaining-whos)
      set result (sentence (list (list (sort new-whos) (sort new-remaining-whos))) result)
      set result (remove-duplicates (sentence (permutate-sublist new-whos new-remaining-whos) result))   
    ]
     report result
  ]
end
这就是当您打印结果时发生的情况

let alist (list 1 2 3 )
show permutate-sublist (list) alist

[[[2 3] [1]] 
 [[1 3] [2]] 
 [[3] [1 2]] 
 [[1 2] [3]] 
 [[2] [1 3]] 
 [[1] [2 3]]]

@amaretto i一直在尝试修改现有netlogo代码的代码,以便进行组合和排列。但是运气不好,这还不清楚。如果只有3个海龟,是否希望所有可能的组合:{[01][2]}和{[02][1]}和{[0][12]}?这将是一个奇怪的事情要NetLogo做。或者您只是想让它随机生成其中一个集合?以下是其他语言的一些实现:Netlogo可能很难实现这一点。你用这个干什么?如果将其用作模拟的输入,则可以使用现有代码以另一种语言将解决方案写入文件,并在模拟中读取。否则,只需为三只海龟编写一个netlogo改编,它在子集中可能是一个或两个。正如你上面提到的那样,塔克斯。如果我有任何与之相关的问题,我会告诉你。当系统中有15只或超过15只海龟时,上述方法看起来很好。程序停止或计算不易处理。正确。你不能用15只或更多的海龟来解决你的问题,因为你要解决的问题需要一个组合答案。如果您约束您的问题,您可能能够创建一个计算更友好的解决方案。请注意存储所有分区所需的内存量。。。如果它使用大量内存,您的程序将运行缓慢。此限制是因为netlogo架构/内部工作,还是其他语言也适用?这是一个计算限制。它适用于当前的计算机。