询问 breed agent id 做某事
ask breed agent id to do something
问题来了。有许多类型的乌龟、人、楼梯、电梯和自动扶梯。
我也有数据,数据是在不同的tick时间追踪到的人的位置。我想通过 agent-id 变量将 t-list、x-list 和 y-list 放在不同的人之下。问题是,如果只有一只乌龟,也就是人,下面的代码就可以了。
globals [ num-agent t-list x-list y-list agent-id ]
to-report read-trace[ file ]
.....
end
to setup
let listInput read-trace "filename.csv"
let param item 0 listInput
set num-agent item 0 param
set listInput but-first listInput
create-turtles num-agent [
set t-list []
set x-list []
set y-list []
set size 2
set shape "person"
set speed random-float (1)
]
foreach listInput [
let t item 0 ?
set agent-id item 1 ? - 1
let locationid item 2 ?
let x item 3 ?
let y item 4 ?
ask turtles agent-id [
set t-list sentence t-list t
; scale x-y to fit in the world size (100 x 100)
set x-list sentence x-list x
set y-list sentence y-list y
]
]
end
但是,如果繁殖其他类型的agent,我只想将t-list,x-list和y-list按不同的agent-id放在turtle-person下,这是行不通的!
globals [ num-agent t-list x-list y-list agent-id ]
breed [ persons person ]
breed [ stairs stair ]
breed [ elevators elevator]
breed [ escalators escalator ]
breed [ nextlocations nextlocation ]
to-report read-trace[ file ]
.....
end
to setup
let listInput read-trace "filename.csv"
let param item 0 listInput
set num-agent item 0 param
set listInput but-first listInput
create-persons num-agent [
set t-list []
set x-list []
set y-list []
set size 2
set shape "person"
set speed random-float (1)
]
foreach listInput [
let t item 0 ?
set agent-id item 1 ? - 1
let locationid item 2 ?
let x item 3 ?
let y item 4 ?
ask persons agent-id [
set t-list sentence t-list t
; scale x-y to fit in the world size (100 x 100)
set x-list sentence x-list x
set y-list sentence y-list y
]
]
end
问题出在问人agent-id!
任何人都可以帮助我吗?非常感谢!非常感谢!
可以通过号码访问代理,但一般来说,您不应该这样做。这里出现问题的原因有以下三个。
- 海龟是用一个 ID 编号创建的,这是它们的
who
编号,这在 所有 海龟中是唯一的(不仅在一个品种内)
- 问单龟的时候一定要用单数(
turtle
不是turtles
,或者这里person
不是persons
。
- 当你以这种方式询问一只乌龟时,你必须使用它的
who
号码。您不能使用其他标识符(例如 agent-id
),除非您确定它对应于它的 who
编号。
因此,如果您复制并粘贴您的代码,ask persons agent-id
会因多种原因而失败:您正在尝试 a. ask persons
,这是所有人,b。通过一个数字询问,agent-id
,最多只能识别一只乌龟,和 c。使用 agent-id
的值,它可能对应于也可能不对应于 person
的 who
数(取决于您是否在任何其他海龟之前创建人)。原则上,您可以通过确保 persons
全部在任何其他海龟之前创建并更改为 ask person agent-id
来解决所有这些问题。但同样,操纵 who
个数字通常是不明智的。
假设你永远不会杀死或创造更多的海龟,你可以引入一个全局 sorted-persons
并在你创建你的人后立即将它设置到列表 sort persons
中。然后你可以ask item agent-id sorted-persons
做任何你想做的事,如果你真的觉得你必须通过agent-id
访问它们。
问题来了。有许多类型的乌龟、人、楼梯、电梯和自动扶梯。
我也有数据,数据是在不同的tick时间追踪到的人的位置。我想通过 agent-id 变量将 t-list、x-list 和 y-list 放在不同的人之下。问题是,如果只有一只乌龟,也就是人,下面的代码就可以了。
globals [ num-agent t-list x-list y-list agent-id ]
to-report read-trace[ file ]
.....
end
to setup
let listInput read-trace "filename.csv"
let param item 0 listInput
set num-agent item 0 param
set listInput but-first listInput
create-turtles num-agent [
set t-list []
set x-list []
set y-list []
set size 2
set shape "person"
set speed random-float (1)
]
foreach listInput [
let t item 0 ?
set agent-id item 1 ? - 1
let locationid item 2 ?
let x item 3 ?
let y item 4 ?
ask turtles agent-id [
set t-list sentence t-list t
; scale x-y to fit in the world size (100 x 100)
set x-list sentence x-list x
set y-list sentence y-list y
]
]
end
但是,如果繁殖其他类型的agent,我只想将t-list,x-list和y-list按不同的agent-id放在turtle-person下,这是行不通的!
globals [ num-agent t-list x-list y-list agent-id ]
breed [ persons person ]
breed [ stairs stair ]
breed [ elevators elevator]
breed [ escalators escalator ]
breed [ nextlocations nextlocation ]
to-report read-trace[ file ]
.....
end
to setup
let listInput read-trace "filename.csv"
let param item 0 listInput
set num-agent item 0 param
set listInput but-first listInput
create-persons num-agent [
set t-list []
set x-list []
set y-list []
set size 2
set shape "person"
set speed random-float (1)
]
foreach listInput [
let t item 0 ?
set agent-id item 1 ? - 1
let locationid item 2 ?
let x item 3 ?
let y item 4 ?
ask persons agent-id [
set t-list sentence t-list t
; scale x-y to fit in the world size (100 x 100)
set x-list sentence x-list x
set y-list sentence y-list y
]
]
end
问题出在问人agent-id! 任何人都可以帮助我吗?非常感谢!非常感谢!
可以通过号码访问代理,但一般来说,您不应该这样做。这里出现问题的原因有以下三个。
- 海龟是用一个 ID 编号创建的,这是它们的
who
编号,这在 所有 海龟中是唯一的(不仅在一个品种内) - 问单龟的时候一定要用单数(
turtle
不是turtles
,或者这里person
不是persons
。 - 当你以这种方式询问一只乌龟时,你必须使用它的
who
号码。您不能使用其他标识符(例如agent-id
),除非您确定它对应于它的who
编号。
因此,如果您复制并粘贴您的代码,ask persons agent-id
会因多种原因而失败:您正在尝试 a. ask persons
,这是所有人,b。通过一个数字询问,agent-id
,最多只能识别一只乌龟,和 c。使用 agent-id
的值,它可能对应于也可能不对应于 person
的 who
数(取决于您是否在任何其他海龟之前创建人)。原则上,您可以通过确保 persons
全部在任何其他海龟之前创建并更改为 ask person agent-id
来解决所有这些问题。但同样,操纵 who
个数字通常是不明智的。
假设你永远不会杀死或创造更多的海龟,你可以引入一个全局 sorted-persons
并在你创建你的人后立即将它设置到列表 sort persons
中。然后你可以ask item agent-id sorted-persons
做任何你想做的事,如果你真的觉得你必须通过agent-id
访问它们。