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被更改。我该如何实现?

解决方法

按照设置方式,所有乌龟都发送到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子句运行代码,如果不满足,则跳过该代码。无论哪种方式,下一个代码始终会运行。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...