如何在Netlogo模型中添加幂律似然

如何在Netlogo模型中添加幂律似然,netlogo,stochastic,Netlogo,Stochastic,我想在我的环境ABM中添加一个自然灾害的可能性,即在以下情况下(通常很少发生破坏,较少发生中等破坏,很少发生强烈破坏,很少发生完全破坏) 到目前为止,我编写了以下代码: to environment ;environmental hits create-hits 1 [ ; I do not know if it makes sense to do that? set shape "circle" set color white set size 0.05

我想在我的环境ABM中添加一个自然灾害的可能性,即在以下情况下(通常很少发生破坏,较少发生中等破坏,很少发生强烈破坏,很少发生完全破坏)

到目前为止,我编写了以下代码:

to environment ;environmental hits
   create-hits 1 [ ; I do not know if it makes sense to do that?
     set shape "circle"
     set color white
     set size 0.05
     setxy random-xcor random-ycor
   ]
   ask hits [
     ifelse pcolor = red [die] ;if already red, then stop
     [ ask n-of random (count patches) patches [ set pcolor red ]]  ;otherwise turn red on an random amount of patches
   ]
end
现在,我不知道如何添加随机元素,即“命中”有多强(因此,有多少补丁会受到影响)以及每个滴答声发生(或不发生)的可能性(根据幂律)。有人能帮我吗

这是最后的代码(由Alan回答):

to environment 
   create-hits 1 [
     set shape "circle"
     set color white
     set size 0.05
     setxy random-xcor random-ycor
   ]
   ask hits [
     let %draw (random-float 100)
     let %strength 0  ;; no damage
     if (%draw < 50) [set %strength (%strength + 1)]  ;;1 for little damage
     if (%draw < 10) [set %strength (%strength + 1)]  ;;2 for middle damage
     if (%draw < 5) [set %strength (%strength + 1)]  ;;3 for strong damage
     if (%draw < 1) [set %strength (%strength + 1)]  ;;4 for complete destruction

     ifelse pcolor = red [die]
     [ ask n-of %strength patches [ set pcolor red ]]
   ]
end
到环境
创造命中率1[
设置形状“圆”
将颜色设置为白色
设置大小为0.05
setxy随机xcor随机ycor
]
询问命中率[
让%抽签(随机浮动100)
让%强度为0;;无损坏
如果(%draw<50)[设置%strength(%strength+1)];;1为小损伤
如果(%draw<10)[设置%strength(%strength+1)];;2表示中等伤害
如果(%draw<5)[设置%strength(%strength+1)];;3表示强损伤
如果(%draw<1)[设置%strength(%strength+1)];;4表示完全销毁
ifelse pcolor=红色[模具]
[询问n%强度贴片[设置颜色为红色]]
]
结束

这只是@Mars评论的精化

to-report hit-strength
  let %draw (random-float 100)
  let %strength 0  ;; no damage
  if (%draw < 50) [set %strength (%strength + 1)]  ;;1 for little damage
  if (%draw < 10) [set %strength (%strength + 1)]  ;;2 for middle damage
  if (%draw < 5) [set %strength (%strength + 1)]  ;;3 for strong damage
  if (%draw < 1) [set %strength (%strength + 1)]  ;;4 for complete destruction
  report %strength
end
报告命中强度
让%抽签(随机浮动100)
设%强度为0;;没有损坏
如果(%draw<50)[设置%strength(%strength+1)];;一个小的损坏
如果(%draw<10)[设置%strength(%strength+1)];;2.中等损伤
如果(%draw<5)[设置%strength(%strength+1)];;3.对于严重损坏
如果(%draw<1)[设置%strength(%strength+1)];;4.彻底销毁
报告%强度
结束

目前尚不清楚打击的力度。但是,NetLogo中有几个随机数生成函数,它们分别命名为
random
random-
某物。举一个最简单的例子,如果你想让某件事情发生的概率为0.73,你可以说
if random float 1<0.73[…]
random float
返回的数字遵循统一分布,但还有其他函数提供其他分布。然后算出数学,从NetLogo的一个随机函数中构造您想要的概率分布。(这其实不是一个NetLogo问题。)哇,太简单了,太好了!谢谢你,艾伦!我将您的代码集成到我现有的代码中(见上文)。