在netlogo

时间:2016-07-07 15:58:00

标签: netlogo

我试图给海龟分配一个我可以告诉他们按顺序移动的数字。使用以前的帖子和一些常规游戏,我设法创建了海龟的排名顺序列表,但现在我想根据他们在该列表中的相对位置为海龟分配一个数字。

实施例: 当前列表:[(龟8)(龟1)(龟9)(龟0)] 所需的海龟名称:乌龟8 = 1,乌龟1 = 2,乌龟9 = 3等

到目前为止,我已经达成了:

globals [rank_list]
turtles-own [var.
            rank]
set rank_list sort-on [var.] turtles

create-turtles (50)
 [setxy (random-float max-pxcor) (random-float max-pycor)
 set var. random-normal 0.5 0.175
  if var. > 1 [set sociability 0.99999999]
  if var. < 0 [set sociability 0.00000001]
foreach rank_list ask ? [set rank ...     ;this is where I get stumped 

to go 
ask turtles [foreach rank [ask ? [move]]]
end

根据列表中的排名顺序分配值的任何提示都将非常感谢!

2 个答案:

答案 0 :(得分:2)

您可以使用n-values生成排名和foreach的可变版本,以同时遍历rank-list和排名:

turtles-own [ var rank ]

to setup
  clear-all
  create-turtles 50 [
    setxy random-pxcor random-pycor
    set var random-normal 0.5 0.175
  ]
  let rank-list sort-on [ var ] turtles
  let ranks n-values length rank-list [ ? ]
  (foreach rank-list ranks [ ask ?1 [ set rank ?2 ] ])
end

但问题是:你真的需要rank变量吗?为什么不直接使用rank-list

foreach rank-lisk [ ask ? [ move ] ]

或者甚至只是每次var对你的海龟进行分类:

foreach (sort-on [ var ] turtles) [ ask ? [ move ] ]

后者不是最有效的,但是如果你只有50只海龟,每蜱只做一次,你就永远不会注意到它们之间的区别。

答案 1 :(得分:0)

使用Nicolas&#39;回答上面我实现了目标或排序顺序运动。对于我工作的2000只海龟来说,它仍然有点处理能力,但至少它会运行!

turtles-own [var]

to ranking
let rank-list sort-on [var] turtles
let ranks n-values length rank-list [ ? ]
    (foreach rank-list ranks [ask ?1 [set var ?2] ] )
end

to make_turtles
    create-turtles (5)
    [set var random-normal 0.5 0.2
      set color scale-color blue var 0 1
      set size 3]
     ranking
     ask turtles [set label var]

     end

to move
 let rank-list sort-on [var] turtles
ask turtles [foreach rank-list [ask ? [ forward random 9]]]
end

to setup
  clear-all
  make_turtles

end
to go
  move
end