问题描述
在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
被更改。我该如何实现?
解决方法
按照设置方式,所有乌龟都发送到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(如if的条件,则if
子句运行代码,如果不满足,则跳过该代码。无论哪种方式,下一个代码始终会运行。