2015-01-29 1 views
1

Я хотел бы добавить вероятность стихийного бедствия в моей окружающей среде ABM, которая следует за power law (часто несколько повреждений, реже промежуточных повреждений, редко сильных повреждений, очень редко полного повреждения).Как добавить правдолюбие власти к модели Netlogo

Я закодированы до сих пор следующие:

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 

Теперь, я не знаю, как добавить стохастический элемент, как сильный «удар» может быть (таким образом, насколько патчи могут быть затронуты) и насколько вероятным (согласно силовому закону) должно случиться (или не происходить) каждый тик. Может кто-нибудь мне помочь?

Это окончательный код (ответил Алан):

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

Непонятно, какова сила удара. Однако в NetLogo существует несколько функций генерации случайных чисел, которые называются «случайными» и «случайными». Чтобы взять самый простой случай, если вы хотите, чтобы вероятность того, что что-то случилось, была 0,73, вы можете сказать «если random-float 1 <0.73 [...]». Цифры, возвращаемые 'random-float', следуют равномерному распределению, но есть и другие функции, которые предоставляют другие дистрибутивы. Затем вычислите математику, чтобы построить распределение вероятности, которое вы хотите от одной из случайных функций NetLogo. (Это не проблема NetLogo.) – Mars

ответ

1

Это просто разработка замечанием @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 
+0

Ничего себе, так просто, так хорошо! Спасибо, Алан! Я включил ваш код в свой существующий (см. Выше). –