4 Blocks

4 Blocks preview image

2 collaborators

Uri_dolphin3 Uri Wilensky (Author)
Dor Abrahamson (Author)



"It's part of the ProbLab model suite"

Tagged by Uri Wilensky over 10 years ago

Model group CCL | Visible to everyone | Changeable by group members (CCL)
Model was written in NetLogo 5.0.4 • Viewed 591 times • Downloaded 37 times • Run 10 times
Download the '4 Blocks' modelDownload this modelEmbed this model

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


4-Blocks simulates an empirical probability experiment in which the randomness generator is a compound of 4 squares that each can independently be either green or blue. The model helps us conceptualize relations between theoretical and empirical aspects of the binomial function: combinatorial analysis (what we can get) and experimentation (what we actually get).

This model is a part of the ProbLab curriculum. The ProbLab Curriculum is currently under development at the CCL. For more information about the ProbLab Curriculum please refer to http://ccl.northwestern.edu/curriculum/ProbLab/ and http://edrl.berkeley.edu/design.shtml.


The model operates all four squares simultaneously, just like flipping four coins at once. At every Go, each square "flips a coin" to decide whether it should be green or blue at a probability you have set. The number of green squares in the block is counted up and added to a list that is plotted as a histogram. Over many runs, the histogram begins to "take shape." When the 'stratified?' switch is set to 'On,' each of the five columns will be parsed into one, four, six, four, or one sub-groups that record the within-column distribution of the five aggregate events.


In this probability experiment, there are five possible compound events: no-green, one-green, two-green, three-green, or four-green. These aggregate events (combinations) expand into a total of 16 elemental events (permutations) that collectively comprise the sample space: 1 no-green, 4 one-green, 6 two-green, 4 three-green, and 1 four-green. These values, 1-4-6-4-1, are the n-choose-k coefficients of the binomial function, where n is 4 and 'green' is the favorable event. A histogram tracks the accumulation of these compound outcomes. When the probability of getting green is set at 50%, the emergent empirical distribution will dynamically converge on a 1:4:6:4:1 distribution, and when we offset the p value of 50%, the distribution is accordingly offset.

A "stratification" feature allows us to monitor within-column accumulation corresponding with the 16 unique elemental events. The pedagogical objective of this stratification, which parses the distribution into the 16 chunks of elemental events, is to support learners in teasing out two complementary aspects of the distribution: whereas within-column elemental events all share the same chance, the fact that they are stacked together is an arbitrary decision of the experimenter. For example, we could have, hypothetically, sorted the 16 unique types of experimental outcomes into two groups - those that have a green cell in the bottom left corner and those that do not. In sum, the stratification feature was designed as one step toward demystifying for students the apparent ineluctability of the experiment's convergence on the anticipated distribution.


Buttons: SETUP initializes the variables and erases the plot. GO ONCE activates the procedures just once. So you will get a single 4-block in the view and the corresponding column in the histogram will rise by one "notch." GO activates the procedures repeatedly until you press it again.

Sliders: PROBABILITY-TO-BE-TARGET-COLOR sets the chance for each of the independent squares to be green.

Switches: ONE-BY-ONE-CHOICES? Helps users see the 4-Block as a set of four independent randomness generators (like four flipping coins). When On, each square will settle on its color at a different moment. Also, when Go is pressed, there will be a pause between 4-blocks. You'll want to set this switch to Off once the nature of the experiment is clear. STRATIFIED? Makes the histogram columns be partitioned to reflect accumulation by unique elemental event. As more samples are taken, you will see the 1-4-6-4-1 structure emerge; the within-column blocks will equalize, but the between-column blocks will be equal only for a probability of 50%.


Using the default model settings, press GO ONCE. See how each of the four squares takes time to decide whether it is green or blue. This is like four coins that are spinning on the table until they each settle either on Head or Tail.


Run the model with the probability-to-be-target-color set at 50%. As the model runs, the histogram grows. Pretty soon, the central column grows taller than other columns. This demonstrates that there is a higher chance of getting 4-blocks that have exactly two green squares as compared to 4-blocks that have either zero, one, three, or four green squares. But there is more structure to interpret. The lowest chance is to get a 4-block with no green squares or with four green squares. The chance of getting a 4-block with either exactly one green or three green squares is in between.

Now change the value of the probability slider, press Setup, and run again. What do you see?

Set the Stratified? switch to On, the model speed to slow, and the probability value to 50% Run the model. See in the histogram how new blocks pop up. Eventually, the number of blocks in the columns will be 1, 4, 6, 4, and 1, respectively.


Auto-Plot: Look at the histogram as it grows. What happens when it reaches the top? The simulation is generating more and more samples, but there is no room to count them. Instead of leaping up out of the box, the number at the top-left corner of the plot -- the value of the y-axis - updates, and the histogram is redrawn to fit. Stratification: The partitioning of the histogram columns by unique elemental events was created especially for this model. See the procedures to learn how this was accomplished. Essentially, a nested structure was used to create within each column as many sub-columns as necessary. For example, the one-green columns (second from the left) is comprised of four stacked columns.


You may want to monitor different aspects of the probabilistic experiment, to answer such questions as:

  • how often do we get the same combinations twice one after the other?
  • is there particular permutations you like? You could add code to see how long it takes the model to find this permutation.
  • what is the dynamic ratio between the number of one-green and three-green outcomes?


If you mention this model in a publication, we ask that you include these citations for the model itself and for the NetLogo software:

  • Abrahamson, D. and Wilensky, U. (2006). NetLogo 4 Blocks model. http://ccl.northwestern.edu/netlogo/models/4Blocks. Center for Connected Learning and Computer-Based Modeling, Northwestern Institute on Complex Systems, Northwestern University, Evanston, IL.
  • Wilensky, U. (1999). NetLogo. http://ccl.northwestern.edu/netlogo/. Center for Connected Learning and Computer-Based Modeling, Northwestern Institute on Complex Systems, Northwestern University, Evanston, IL.


Copyright 2006 Uri Wilensky.


This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

Commercial licenses are also available. To inquire about commercial licenses, please contact Uri Wilensky at uri@northwestern.edu.

Comments and Questions

Early Version

I think this is an early version of teh model "1764 Blocks", which happens to be 42^2.

Posted about 10 years ago

Click to Run Model

breed [ frames frame ]
;; frames are black frames around each patch; they help count the colored patches

globals [
  target-color other-color ;; colors of patches before and during the runs
  target-color-list ;; accumulates values from repeated runs, these are histogrammed

;;; Setup Procedures

to setup

to initialize
  set target-color-list []
  ask patches [ set pcolor white - 1]
  set stratified-list n-values 16 [0] ;; counts the frequency of each of the 16 permutations.
  ;; This list indexes the positions of the 16 permutations in the CT by the bitmask of the four patches.
  set stratified-indices (list 0 1 2 5 3 6 7 11 4 8 9 12 10 13 14 15)

;; We used color variables and not just colors so that you could change the color values
;; to suit you. For instance, perhaps you would want to change the green to cyan

to set-colors
  set target-color green
  set other-color blue

to create-the-frames ;; each individual patch in the block is framed, creating an overall effect
                     ;; of a grid that helps distinguish individual patches in the block
  set-default-shape frames "frame"
  ask patches [
    sprout 1 [
      set breed frames
      set color black

;;; Go Procedures

to go
  if one-by-one-choices? [ask patches [set pcolor white - 1 ] display wait .3]
  ask patches
    ifelse random-float 100 < probability-to-be-target-color [
      set pcolor target-color
      ;set flag 1
    ] [
      set pcolor other-color
      ;set flag 0

    if one-by-one-choices? [ display wait 0.1 ]

  if one-by-one-choices? [ wait 0.5 ]

;;; Utilities

to-report choose [n c]
  report ((factorial n)/((factorial c) * (factorial (n - c))))

to-report factorial [n]
  report ifelse-value (n = 0) [
  ] [
    n * factorial (n - 1)

;;; Plotting

to make-histogram
  set target-color-list fput count patches with [pcolor = target-color] target-color-list
  ;; i is the bitmask of the patches
  let i sum [ 2 ^ ( pxcor + 2 * pycor ) ] of patches with [pcolor = target-color]
  set i item i stratified-indices
  set stratified-list replace-item i stratified-list (item i stratified-list + 1)

  set-current-plot "Distribution by Target Color"

  ifelse stratified? [
    plotxy 0 0
    plotxy 4 0
    let range 0 ;; keeps track of the highest column
    let col-height 0 ;; keeps track of total height of a given histogram column
    let perm-category 0 ;; keeps track of which segment of a given histogram column
                        ;; corresponds to a specific block permutation
    foreach [0 1 2 3 4] [ ;; foreach histogram column, which represents the number
                          ;; of blocks that are the target-color
      let column ?
      set col-height 0 ; since it's a new column, start at the bottom
      foreach n-values (choose 4 column) [?] [ ;; foreach possible permutation
                                               ;; of blocks in this column, add
                                               ;; a piece of the histogram
        set col-height col-height + item perm-category stratified-list
        plotxy column col-height
        set perm-category perm-category + 1
        set range max list range col-height
    if range > 9 [set-plot-y-range 0 range + 1]
  ] [
    histogram target-color-list
    let maxbar modes target-color-list
    let maxrange filter [ ? = item 0 maxbar ] target-color-list
    set-plot-y-range 0 length maxrange

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

There are 10 versions of this model.

Uploaded by When Description Download
Uri Wilensky almost 6 years ago Updated to NetLogo 5.0.4 Download this version
Uri Wilensky over 6 years ago Updated version tag Download this version
Uri Wilensky over 6 years ago Updated to version from NetLogo 5.0.3 distribution Download this version
Uri Wilensky about 7 years ago Updated to NetLogo 5.0 Download this version
Uri Wilensky almost 9 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky almost 9 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky almost 9 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky almost 9 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky almost 9 years ago Model from NetLogo distribution Download this version
Uri Wilensky almost 9 years ago 4 Blocks Download this version

Attached files

File Type Description Last updated
4 Blocks.png preview Preview for '4 Blocks' almost 6 years ago, by Uri Wilensky Download

This model does not have any ancestors.

This model does not have any descendants.