在netlogo中,我根据随机数选择特定的旅行距离分布。然后,基于所选择的分布,我计算到达特定距离处的多个特定补丁的概率。对于其中一个分布,概率接近0的无穷大。当选择此特定分布并且其中一个补丁是乌龟已经存在的位置(距离= 0)时,这会产生错误。 Netlogo将给出错误"数学运算产生的数字对于NetLogo而言太大了#34;。有没有办法解决这个错误,比如当这个错误弹出时netlogo使用尽可能大的数字?
代码如下所示:
to create-window
get_state
get_parms
set i 0
set j 0
while [i < windowsize]
[
set j 0
while [j < windowsize]
[
let dist (sqrt (((item j xlist) - xcor) ^ 2 + ((item i ylist) - ycor) ^ 2))
matrix:set window i j ((wshape / wscale) * ((dist / wscale) ^ (wshape - 1)) * exp (-((dist / wscale) ^ wshape)))
set j j + 1
]
set i i + 1
]
end
to get_state
set state random 3 + 1
end
to get_parms
if state = 1 [
set wscale 0.01856659
set wshape 1.43983152]
if state = 2 [
set wscale 0.18418573
set wshape 0.92631983]
if state = 3 [
set wscale 1.07631234
set wshape 1.78987126]
end
状态2是有问题的(如果距离为0),但我希望能够轻松更改此参数,因此我不希望使用基于状态编号的if函数或参数值..
答案 0 :(得分:1)
您有两种选择:
1)通过检测零情况并做一些特殊事情,修改计算首先不产生错误的概率的代码。 (在不知道代码是什么的情况下,我可以更具体。)
2)使用carefully
原语(dictionary entry)包装概率的计算,捕获错误并防止它停止模型。
此外,概率如何接近无穷大?它不应该接近1.0吗?