Random Basic

Random Basic preview image

2 collaborators

Uri_dolphin3 Uri Wilensky (Author)
Dor Abrahamson (Author)

Tags

probability 

Tagged by Reuven M. Lerner over 11 years ago

problab 

Tagged by Reuven M. Lerner over 11 years ago

Model group CCL | Visible to everyone | Changeable by group members (CCL)
Model was written in NetLogo 5.0.4 • Viewed 505 times • Downloaded 95 times • Run 1 time
Download the 'Random Basic' modelDownload this modelEmbed this model

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)


Info tab cannot be displayed because of an encoding error

Comments and Questions

Please start the discussion about this model! (You'll first need to log in.)

Click to Run Model

globals
[
  time-to-stop?   ;; boolean that discontinues run when columns reach to top
  the-messenger       ;; holds identity of the single turtle of breed 'messengers'
                  ;; (see EXTENDING THE MODEL)
  max-y-histogram ;; how high the columns can rise (or how far up the yellow goes)
]

breed [ column-counters column-counter ] ;; they keep track of their respective histogram columns
breed [ frames frame ]    ;; square frames that indicate events in histogram columns
breed [ messengers messenger  ]  ;; carry the random value to its column
                  ;; (currently just one single messenger implemented)


column-counters-own
[
  ;; if you choose a sample-space 7 then you get 7 column-counters
  ;; and their respective my-columns will be 1 thru 7
  my-column
  ;; each column-counter holds all patches that are in its column as an agentset
  my-column-patches
]

to setup
  clear-all
  ;; computes the height the user has requested so as to get the value that makes sense
  ;; in this model because the histogram grows from the negative-y values and not from 0
  set max-y-histogram (min-pycor + height)
  create-histogram-width
  setup-column-counters
  set time-to-stop? false
  reset-ticks
end 

to create-histogram-width
  ask patches
  [
    ;; deals with both even and odd sample-spaces
    ;; this is one way of centering the histogram.
    ;; that means that the '50' of the red-green slider
    ;; will always be aligned with the middle of the histogram
    ifelse (pxcor >= (- sample-space) / 2) and (pxcor < sample-space / 2)
            and (pycor < max-y-histogram) ;; this shapes the top of the yellow zone
    [ set pcolor yellow ]
    [ set pcolor brown ]
  ]
end 

    ;; column-counters are turtles who form "place-holders" so that
    ;; the messenger will "know" where to take its value.
    ;; they are like the values on the x-axis of your sample space.

to setup-column-counters
  ask patches with [(pycor = min-pycor) ;; bottom of the view
                       and pcolor = yellow]      ;; and in the histogram band width
  [
    sprout-column-counters 1
    [
      ht  ;; it is nice to see them but probably visually redundant
      set heading 0
      ;; this assigns a column name to column-counters that
      ;; corresponds with the parameter setting of sample-space
      set my-column floor (pxcor + sample-space / 2 + 1)
      set my-column-patches patches with [ pxcor = [pxcor] of myself ]
    ]
  ]
end 

to go ;; forever button
  if time-to-stop? [ stop ]
  select-random-value
  send-messenger-to-its-column
  ifelse colors?
    [ paint ]
    [ ask patches with [pcolor != brown] [ set pcolor yellow ]]
  tick
end 

    ;; 'messenger' is a turtle who carries the random value
    ;; on its back as a label

to select-random-value
  ask patch 0 (max-y-histogram + 4)
  [
    sprout-messengers 1
    [
      set shape "default"
      set color black
      set heading 180
      set size 12
      set label 1 + random sample-space
      ;; currently there is just one messenger, so we assign it to a 'messenger'
      ;; variable. this will save time when the model run. if the user chooses
      ;; to add more messengers then this shortcut may have to be done away with
      set the-messenger self
    ]
  ]
end 

    ;; messenger is the dart-shaped large turtle that carries the random value
    ;; on its back. it takes this value directly to the appropriate column

to send-messenger-to-its-column
                ;; 'it' holds the column-counter who is master of the
                ;; column towards which the messenger orients and advances
                ;; to dispatch its event
  let it one-of column-counters with [ my-column = [label] of the-messenger ]

  ask the-messenger
  [
    face it
    ;; keep advancing until you're all but covering your destination
    while [ distance it > 3 ]
    [
      fd 1 ;; to the patch above you to prepare for next event
      display
    ]
    die
  ]
  ask it
  [ create-frame
    fd 1
    ;; if the histogram has become too high, we just stop.
    ;; this could be extended so as to have the whole population
    ;; of events collapse down one patch, as in Galton Box
    if ycor = max-y-histogram [ set time-to-stop? true ]
  ]
end 

;; make the square frames that look like accumulating cubes

to create-frame ;; turtle procedure
  ask patch-here
  [
    sprout-frames 1
    [
      set shape "frame"
      set color black
    ]
  ]
end 

    ;; patches are red if they are as far to the right within the sample-space
    ;; as indexed by the red-green slider; otherwise, the are green
    ;; Note that currently there is no rounding -- just a cut-off contour.

to paint
  ask column-counters
  [
    ifelse my-column <= (red-green * sample-space / 100)
    [ ask my-column-patches with [ pycor < [pycor] of myself ] [ set pcolor red ] ]
    [ ask my-column-patches with [ pycor < [pycor] of myself ] [ set pcolor green ] ]
  ]
end 

;; reports the percentage of red patches out of all patches that have frames
;; so we know what percent of events are to the left of the cut off line

to-report %-red
  report precision (100 * count patches with [pcolor = red] / count frames) 2
end 

to-report %-full
  report precision ( 100 * (count frames ) / ( height * sample-space ) ) 2
end 

;; biggest-gap is the greatest difference in height between all columns

to-report biggest-gap
  let max-column max [count my-column-patches with [pycor < [pycor] of myself] ] of column-counters

  let min-column min [count my-column-patches with [pycor < [pycor] of myself] ] of column-counters

  report max-column - min-column
end 


; Copyright 2004 Uri Wilensky.
; See Info tab for full copyright and license.

There are 15 versions of this model.

Uploaded by When Description Download
Uri Wilensky over 11 years ago Updated to NetLogo 5.0.4 Download this version
Uri Wilensky about 12 years ago Updated version tag Download this version
Uri Wilensky about 12 years ago Updated to version from NetLogo 5.0.3 distribution Download this version
Uri Wilensky almost 13 years ago Updated to NetLogo 5.0 Download this version
Uri Wilensky over 14 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky over 14 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky over 14 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky over 14 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky over 14 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky over 14 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky over 14 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky over 14 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky over 14 years ago Model from NetLogo distribution Download this version
Uri Wilensky over 14 years ago Model from NetLogo distribution Download this version
Uri Wilensky over 14 years ago Random Basic Download this version

Attached files

File Type Description Last updated
Random Basic.png preview Preview for 'Random Basic' over 11 years ago, by Uri Wilensky Download

This model does not have any ancestors.

This model does not have any descendants.