在 netlogo 中为海龟分配排名数字
Assigning turtles a ranked number in netlogo
我正在尝试为海龟分配一个数字,我可以告诉它们按顺序移动。使用以前的帖子和一些一般的玩耍,我已经成功地创建了海龟的排名顺序列表,但现在我想根据海龟在该列表中的相对位置为海龟分配一个数字。
示例:
当前列表:[(turtle 8) (turtle 1) (turtle 9) (turtle 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
非常感谢任何有关根据列表中的排名顺序分配值的提示!
您可以使用 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 只海龟并且每个 tick 只这样做一次,你永远不会注意到差异。
使用上面 Nicolas 的回答,我已经实现了目标或排名移动。对于我正在使用的 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
我正在尝试为海龟分配一个数字,我可以告诉它们按顺序移动。使用以前的帖子和一些一般的玩耍,我已经成功地创建了海龟的排名顺序列表,但现在我想根据海龟在该列表中的相对位置为海龟分配一个数字。
示例: 当前列表:[(turtle 8) (turtle 1) (turtle 9) (turtle 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
非常感谢任何有关根据列表中的排名顺序分配值的提示!
您可以使用 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 只海龟并且每个 tick 只这样做一次,你永远不会注意到差异。
使用上面 Nicolas 的回答,我已经实现了目标或排名移动。对于我正在使用的 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