2016-01-14 31 views
2

我遇到了netlogo的问题:我想在网络中传播信息。一只乌龟拥有这些信息,并以不变的概率将其提供给其链接邻居。这是我的代码至今:信息扩散

to spread 
    if (count turtles with [informed? = true] > .7 * count turtles) [stop] 
    ask turtles with [ informed? = true ] 
    [ 
     ask link-neighbors 
     [ 
     if (random-float 1 <= 0.02) 
      [ 
      set informed? true 
      show-turtle 
      set color green 
      ] 
     ] 
     ] 

    set num-informed count turtles with [informed? = true] 
    tick 
end 

现在我想知道:如何确保,每龟只有一次所得到的信息,而不是告知两次?我试过“如果没有通知?”,但只给我错误信息。如果我想让信息以2%的常数概率传播,我是否得到了命令“if(random-float 1 < = 0.02)”?

+0

是的,随机浮动正确使用 – JenB

回答

1

这应该工作(未测试)。假设您在设置海龟时完成了set informed? FALSE

to spread 
    if (count turtles with [informed?] > .7 * count turtles) [stop] 
    ask turtles with [ informed? ] 
    [ ask link-neighbors with [ not informed? ] ; **<= my change** 
    [ if (random-float 1 <= 0.02) 
     [ set informed? true 
     show-turtle 
     set color green 
     ] 
    ] 
    ] 

    set num-informed count turtles with [informed?] 
    tick 
end 
+0

当一个变量X?是布尔值(只有TRUE或FALSE),你实际上不需要说'X? = TRUE',可以简单的说'X?',同样''不是X?'对于'X? = FALSE' – JenB

+0

我想我没有修好他的? –

+0

以及没有错误消息了,我认为它的工作到目前为止......非常感谢你的快速答案! – user5791200