NetLogo — изменена ли одна переменная с определенной вероятностью для группы случайно выбранных черепах

#netlogo #probability

#netlogo #вероятность

Вопрос:

В NetLogo я хотел бы, чтобы в каждом раунде вероятность изменения переменной составляла от 0 до 10% черепах от всей популяции. Внутри выбранных черепашек их переменная может изменяться между 1 и 4 с определенной вероятностью.

 breed [ humans human ]

humans-own [ var ]

to setup
  create-humans(population) [ set var 0 ]
end

to go
  ask humans [ var_change ]
end

to var_change [
let %draw (random-float 100)
     let %strength 0  ;no eco loss
     if (%draw < 50) [ set %strength (%strength   1) ] ;1 little eco loss
     if (%draw < 10) [ set %strength (%strength   2) ] ;2 middle eco loss
     if (%draw < 5) [ set %strength (%strength   3) ] ;3 strong eco loss
     if (%draw < 1) [ set %strength (%strength   4) ] ;4 complete eco loss
[ ask one-of %strength patches [ set economic economic   3 ]]; here I do not know how to continue(*)
]
end
  

* Я не знаю, как закодировать, что от 0 до 10% черепашек могут с определенной вероятностью изменить свою переменную var . Как я могу этого добиться?

Ответ №1:

То, как вы это настроили, все черепашки отправляются в процедуру var_change. Было бы проще, если бы процедура var_change одновременно выбирала черепашки для изменения и назначала сумму изменения. Что-то вроде:

 to go
  var_change
end

to var_change
; choose proportion to change
let %draw-prop random-float 0.1
let n-changers round (%draw-prop * count turtles)   1 ;  1 so at least one changes
; change by some amount
ask n-of n-changers turtles
[ let %draw-change random 100
  set economic economic   1 ;all get some eco loss
  if (%draw-change < 10) [ set economic economic   1 ] ;2 middle eco loss
  if (%draw-change < 5) [ set economic economic   1] ;3 strong eco loss
  if (%draw-change < 1) [ set economic economic   1 ] ;4 complete eco loss
]
end
  

Обратите внимание, что я изменил все ваши суммы на 1. То, как вы это написали, рисование числа, подобного 3, добавило бы 1 (как <50), затем еще 2 (как <10), затем еще 3 (как <5) для общего увеличения на 6. if Предложение запускает код, если if условие выполнено, и пропускает его, если не выполнено. В любом случае, всегда выполняется следующий код.