询问 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! 任何人都可以帮助我吗?非常感谢!非常感谢!

可以通过号码访问代理,但一般来说,您不应该这样做。这里出现问题的原因有以下三个。

  1. 海龟是用一个 ID 编号创建的,这是它们的 who 编号,这在 所有 海龟中是唯一的(不仅在一个品种内)
  2. 问单龟的时候一定要用单数(turtle不是turtles,或者这里person不是persons
  3. 当你以这种方式询问一只乌龟时,你必须使用它的 who 号码。您不能使用其他标识符(例如 agent-id),除非您确定它对应于它的 who 编号。

因此,如果您复制并粘贴您的代码,ask persons agent-id 会因多种原因而失败:您正在尝试 a. ask persons,这是所有人,b。通过一个数字询问,agent-id,最多只能识别一只乌龟,和 c。使用 agent-id 的值,它可能对应于也可能不对应于 personwho 数(取决于您是否在任何其他海龟之前创建人)。原则上,您可以通过确保 persons 全部在任何其他海龟之前创建并更改为 ask person agent-id 来解决所有这些问题。但同样,操纵 who 个数字通常是不明智的。

假设你永远不会杀死或创造更多的海龟,你可以引入一个全局 sorted-persons 并在你创建你的人后立即将它设置到列表 sort persons 中。然后你可以ask item agent-id sorted-persons做任何你想做的事,如果你真的觉得你必须通过agent-id访问它们。