Netlogo 请代理id做点什么

Netlogo 请代理id做点什么,netlogo,Netlogo,问题就在这里。有许多种类的海龟、人、楼梯、电梯和自动扶梯 我也有数据,数据是人们在不同时间的追踪位置。我想通过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 "

问题就在这里。有许多种类的海龟、人、楼梯、电梯和自动扶梯

我也有数据,数据是人们在不同时间的追踪位置。我想通过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
但是,如果繁殖其他类型的代理,我只想通过不同的代理id将t-list、x-list和y-list放在海龟人下面,这是行不通的

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
问题来自询问人员代理id!
有人能帮我吗?非常感谢你!非常感谢

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

  • 海龟是用一个id号创造出来的,这是他们的
    who
    号,这在所有海龟中是独一无二的(不仅仅是在一个品种中)
  • 当你问一只海龟时,你必须使用单数(
    turtle
    not
    turtles
    ,或者这里的
    person
    not
    persons
  • 如果你这样问一只海龟,你必须使用它的
    who
    号码。你不能使用其他标识符(如
    agent id
    ),除非你确定它的
    who
    号码对应
  • 因此,如果您复制并粘贴了代码,
    询问人员代理id
    失败的原因有多种:您试图a.
    询问人员
    ,这是所有人;b.通过单个数字询问,
    代理id
    ,这最多可以识别一只海龟;c.使用
    代理id
    的值,这可能对应于也可能不对应于to一个
    人的
    编号(取决于你是否在其他海龟之前创造人).原则上,你可以通过确保
    都是在其他海龟之前创建的,并更改为
    询问人员代理id
    ,来解决所有这些问题。但同样,操纵
    号码通常是不明智的


    假设您从未杀死或创建过更多海龟,您可以引入一个全局
    排序人员
    ,并在创建人员后立即将其设置到列表
    排序人员
    。然后,如果您确实觉得必须通过
    代理id访问他们,您可以
    要求物品代理id排序人员
    做任何您想做的事情

    非常感谢!您确实帮助了我,并给了我解决问题的提示。我确实需要代理id来说明代理是否仍在环境中。谢谢!!