要求品种代理人做某事

时间:2015-01-20 09:48:57

标签: 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 "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

但是,如果繁殖其他类型的代理,我只想把t-list,x-list和y-list放在turtle-person下不同的agent-id,这是行不通的!

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

问题来自于ask agent-id! 有人可以帮帮我吗?非常感谢你!非常感谢!

1 个答案:

答案 0 :(得分:3)

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

  1. 使用身份证号码创建海龟,这是他们的who号码,在所有海龟(不仅仅是一个品种)中是唯一的
  2. 当你问一只乌龟时,你必须使用单数(turtle而不是turtles,或person而不是persons
  3. 如果您以这种方式询问一只乌龟,您必须使用其who号码。您不能使用其他标识符(例如agent-id),除非您确定它对应于其who号码。
  4. 因此,如果您复制并粘贴了代码,ask persons agent-id会因各种原因失败:您正在努力尝试。 ask persons,这是所有人,b。通过单个号码agent-id询问,最多可以识别一只乌龟,以及c。使用agent-id的值,该值可能与who person的{​​{1}}对应,也可能不对应(取决于您是否在任何其他龟之前创建人员)。原则上,您可以通过确保在任何其他海龟之前创建persons并更改为ask person agent-id来解决所有这些问题。但同样,操纵who数字通常是不明智的。

    假设您没有杀死或创建更多的海龟,您可以在创建人员后立即引入全局sorted-persons并将其设置为列表sort persons。然后你可以ask item agent-id sorted-persons做任何你想做的事,如果你真的觉得你必须通过agent-id访问它们。