在Netlogo中处于共同范围内的代理之间传递数据

时间:2014-03-28 08:12:11

标签: netlogo

我正在Netlogo中开发一个模型。我的模型中有很多代理商。每个代理商必须拥有无线电范围。当两个代理放置在一个共同的范围区域时,它们可以相互通信并传输一些关键数据。

想象一下,我有100个具有5px范围的代理和200个具有3px范围的代理。我还有一个主要代理人在这个词中移动。此主代理也具有范围(例如7px)。当代理放置在共同的范围区域时,代理可以相互通信。当他们沟通时,他们可以传输他们的一些数据。起初只有主代理有这个关键数据,只有主代理可以传输这些重要数据。但是,在将数据传输到其他代理之后,具有此数据的其他代理也可以传输此数据。重要的条件是共同的范围。

我该怎么做?

谢谢

1 个答案:

答案 0 :(得分:3)

您刚刚对您的问题做了一般性陈述。如果您努力实际开始实施某些事情并询问您面临的更具体的困难,您将得到更好的答案。

话虽这么说,我制作了一个或多或少符合你描述的小模型。也许它可能对你有用,作为一个起点,你可以提出单独的(更精确的)跟进问题,如果你有一些。

turtles-own [ scope data ]

to setup
  clear-all
  ; make a big world so agents don't
  ; bump into one another right away:
  resize-world -100 100 -100 100
  set-patch-size 3
  ; create turtles and distribute them around:
  crt 100 [ set scope 5 set data "" ]
  crt 200 [ set scope 3 set data "" ]
  crt   1 [ set scope 7 set data "important data" ]
  ask turtles [
    set size 3
    setxy random-xcor random-ycor
    recolor
  ]
end

to go
  ask turtles [ travel ]
  ask turtles with [ not empty? data ] [ share-info ]
  ask turtles [ recolor ]
end

to travel
  ; you haven't specified how turtles should move
  ; so here's a classic "wiggle":
  rt random 30
  lt random 30
  fd 1
end

to share-info
  ask other turtles in-radius scope with [ empty? data and distance myself < scope ] [
    set data [ data ] of myself
  ]
end

to recolor
  set color ifelse-value empty? data [ grey ] [ red ]
end

修改

根据Seth的评论,我的第一个版本可能没有捕捉到常见范围的想法,我添加了and distance myself < scope。这样,只有能够看到彼此的海龟才能共享信息。

我在要求海龟分享信息时也添加了with [ not empty? data ]子句,因为没有使用空数据的海龟分享它。