NetLogo: работа с бесконечной вероятностью в распределении

в netlogo я выбираю конкретное распределение расстояния проезда на основе случайного числа. Затем, основываясь на выбранном распределении, я вычисляю вероятность добраться до ряда определенных участков на определенном расстоянии. Для одного из распределений вероятность приближается к бесконечности около 0. Это создает ошибку, когда выбрано это конкретное распределение, и один из участков находится там, где черепаха уже находится (расстояние = 0). Netlogo выдаст ошибку «математическая операция произвела слишком большое число для NetLogo». Есть ли способ обойти эту ошибку, например, чтобы 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 на основе номера состояния или значений параметров.


person Madelon    schedule 18.03.2014    source источник


Ответы (1)


У вас есть два варианта:

1) Измените код, который вычисляет вероятность не произвести ошибку, в первую очередь, обнаружив нулевой случай и сделав что-нибудь особенное. (Я не могу быть более конкретным, не зная, как выглядит код.)

2) Оберните расчет вероятности с помощью примитива carefully (словарной статьи ), улавливая ошибку и не позволяя ей останавливать вашу модель.

Кроме того, как вероятность приблизиться к бесконечности? Разве это не должно приближаться к 1.0?

person Seth Tisue    schedule 18.03.2014
comment
Спасибо, я думал о варианте 1 раньше, но проблема в том, что ошибка возникает только для некоторых из общего количества дистрибутивов. (в этом случае мне пришлось бы использовать довольно сложную функцию if, которую было бы утомительно настраивать, если я обновляю параметры). Я имел в виду, что использую функцию плотности вероятности. - person Madelon; 18.03.2014
comment
Добавить if dist = 0 [ stop ]? Это то, что вы ищете? Не совсем уверен, какой у вас оставшийся вопрос на данный момент, если таковой имеется. - person Seth Tisue; 21.03.2014