2

У меня проблема с netlogo: я хочу распространять информацию в сети. У одной черепахи есть информация и дает ее своим соседям-связям с постоянной вероятностью. Это код, который я до сих пор:Информация Diffusion

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 

Теперь я хочу знать: Как я могу гарантировать, что каждая черепаха получает информацию только один раз и не сообщается дважды? Я попробовал «если не проинформирован?», Но это только достало мне сообщения об ошибках. И я получил команду «if (random-float 1 < = 0.02)», если я хочу, чтобы информация распространялась с постоянной вероятностью 2%?

+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? 'И аналогично' not X? 'Для' X? = FALSE' – JenB

+0

Думаю, я не исправил его? –

+0

ну нет сообщения об ошибке больше, и я думаю, что он работает до сих пор ... Большое вам спасибо за быстрые ответы! – user5791200