3

べき乗則に従う環境 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
4

1 に答える 1

2

これは、@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
于 2015-01-30T15:48:06.397 に答える