#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
условие выполнено, и пропускает его, если не выполнено. В любом случае, всегда выполняется следующий код.