CS 420/527 — Biologically Inspired Computation
NetLogo Simulation

Pattern


This page was automatically generated by NetLogo 4.1. Questions, problems? Contact feedback@ccl.northwestern.edu.

The applet requires Java 5 or higher. Java must be enabled in your browser settings. Mac users must have Mac OS X 10.4 or higher. Windows and Linux users may obtain the latest Java from Sun's Java site. If the display appear cut off with Firefox, then try another browser (Safari works).



powered by NetLogo

view/download model file: Pattern.nlogo

WHAT IS IT?

Could it be that a single mechanism underlies such diverse patterns such as the stripes on a zebra, the spots on a leopard, and the blobs on a giraffe? This model is a possible explanation of how the patterns on animals' skin self-organize. If the model is right, then even though the animals may appear to have altogether different patterns, the rules underlying the formation of these patterns are the same and only some of the values (the numbers that the rules work on) are slightly different.

Thinking of the formation of fur in terms of rules also helps us understand how offspring of animals may have the same type of pattern, but not the same exact pattern. This is because what they have inherited is the rules and the values rather than a fixed picture. The process by which the rules and values generate a pattern is affected by chance factors, so each individual's pattern is different, but as long as the offspring receive the same rules and values, their own fur will self organize into the same type of pattern as their parents'.


HOW IT WORKS

This program simulates vertebrate skin patterns by use of a short-range activator and a long-range inhibitor. Each pigmented cell that is "turned on" (the white cells in the
program) produces 100 units of an activating morphogen and 100 units of an inhibiting morphogen. Both chemicals diffuse a specified number of times in the X and Y directions, and then each patch is evaluated. Patches with more activator than inhibitor turn white, and patches with more inhibitor than activator turn black. The process is then repeated; a steady-state pattern is usually quick to emerge.


HOW TO USE IT

The SETUP button randomly colors each patch and deposits the morphogens on patches that are white.

The GO button executes the model according to the rules above.

The GO ONCE button executes a single cycle of the simulation, sp that the changes are easier to see.

The DRAW WHITE and DRAW BLACK buttons allow the user to use the mouse to draw white and black patches, respectively.

The X_ACTIVE, Y_ACTIVE, X_INHIBIT, and Y_INHIBIT sliders control the diffusion of the activator and inhibitor morphogens in each direction. More specifically, the slider
variables control the number of times that each patch shares its contents with its two neighbors (in the given direction), such that each patch is left with an equal share of the patch's original morphogens.

INITIAL_DENSITY controls the initial density of activated cells (white patches).

The FIELD DISPLAY chooser controls the information displayed. In its default position (NONE) is shows the color (white or black) of the cells. If ACTIVATOR is chosen, then the concentration of the activator morphogen is displayed as a shade of red. If INHIBITOR is chosen, then the concentration of the inhibitor morphogen is displayed as a shade of blue. In either case the concentration is displayed after the morphogen has diffused, but before an activated cell secretes more of the morphogens.


THINGS TO NOTICE

Modification of the absolute and relative sizes of the slider variables can cause a variety of patterns to emerge, resembling everything from zebras to vermiculated rabbit fish.

The display shows the number and percentage of cells (patches) that change color on each time step, and plots this as a function of time. Notice how quickly the pattern stabilizes, but some of the cells (typically less than 1%) are always changing, showing that the pattern is not static but rather is a "stationary state." You can see this by changing some of the parameters (diffusion rates and bias), which may destabilize the pattern and cause it to converge to a new stationary state.


THINGS TO TRY

Run the model with different INITIAL_DENSITY settings. How, if at all, does the value of the INITIAL_DENSITY affect the emergent pattern? Do you get the same pattern? Do you get a different pattern? Does it take longer? Try very large and very small values (e.g., 99%, 1%).

Note how fragile the self organization of the cells is to slight changes in parameters. If you hold all other factors and slightly change just the BIAS , from trial to trial, you will note that for large positive numbers you will invariably get completely white fur and for large negative numbers you will invariably get completely black fur (why is that?). For values in between it fluctuates. That happens partially because the initial setting of black/white coloration has a random element to it.

Try changing the sliders to have different values in the X and Y directions.

Once the pattern has stabilized, use the DRAW WHITE and DRAW BLACK controls to damage the pattern. Then use GO or GO ONCE to see whether the pattern will heal and how quickly. Does healing always restore the original pattern?


EXTENDING THE MODEL

How about adding more colors? What could be the logic here? If you introduced, say, red, you would have to decide on specific conditions under which that color would appear. Also, you'd have to decide how that color influences other cells.


RELATED MODELS

The Voting model, in the Social Science section of the NetLogo model library, is based on simpler rules but generates patterns that are similar in some respects.


CREDITS AND REFERENCES

Modified by B. J. MacLennan Sep. 7, 2003 for Java StarLogo 2.0.2, Sep. 15, 2007 for NetLogo 3.2.4, and Sep. 12, 2008 for NetLogo 4.0.3 from original version by William Thies on Scott Camazine's website. Modifications included monitoring of changed cells, field displays, and documentation.

Some of the above documentation is from the Fur model in the NetLogo model library (which is programmed differently, however):

Wilensky, U. (2003). NetLogo Fur model. http://ccl.northwestern.edu/netlogo/models/Fur. Center for Connected Learning and Computer-Based Modeling, Northwestern University, Evanston, IL.

In other publications, please use: Copyright 2003 Uri Wilensky. All rights reserved. See http://ccl.northwestern.edu/netlogo/models/Fur for terms of use.


PROCEDURES

globals [ 
changes
updates
time
showing_inhibitor?
]

patches-own [ activator
inhibitor
hold_activator
hold_inhibitor
new_pcolor
old_pcolor ]

TO SETUP ;-----------------------------------------------------------------------------------------
ca ; clears display, patches, and turtles
set updates 0
set time 0
ask patches [
ifelse random-float 100.0 < initial_density
[
set activator 100
set inhibitor 100
set pcolor white
set new_pcolor white]
[
set activator 0
set inhibitor 0
set pcolor black
set new_pcolor black]
]
end
TO DRAW_WHITE ;--------------------------------------------------------------------------------------
if mouse-down?
[
ask patches
[
if ((abs (pxcor - mouse-xcor)) < 2) and ((abs (pycor - mouse-ycor)) < 2)
[
set pcolor white
set activator 100 ; creates live white cells where mouse button is depressed
set inhibitor 100]]
]
end
TO DRAW_BLACK ;--------------------------------------------------------------------------------------
if mouse-down?
[
ask patches
[
if ((abs (pxcor - mouse-xcor)) < 2) and ((abs (pycor - mouse-ycor)) < 2)
[
set pcolor black
set activator 0 ; creates dead cells where mouse button is depressed
set inhibitor 0]]
]
end
TO GO ;--------------------------------------------------------------------------------------------
set changes 0
ask-concurrent patches [
repeat x_active ; diffuses activator chemical in x direction
[
set activator ((activator + ([activator] of patch-at 1 0) + ([activator] of patch-at (-1) 0)) / 3)]
repeat y_active ; diffuses activator chemical in y direction
[
set activator ((activator + ([activator] of patch-at 0 1) + ([activator] of patch-at 0 (-1))) / 3)]

repeat x_inhibit ; diffuses inhibitor chemical in x direction
[
set inhibitor ((inhibitor + ([inhibitor] of patch-at 1 0) + ([inhibitor] of patch-at (-1) 0)) / 3)]
repeat y_inhibit ; diffuses inhibitor chemical in y direction
[
set inhibitor ((inhibitor + ([inhibitor] of patch-at 0 1) + ([inhibitor] of patch-at 0 (-1))) / 3)]

set hold_activator activator
set hold_inhibitor inhibitor
set old_pcolor new_pcolor

ifelse (bias + activator - inhibitor + (random (2 * noise)) - noise) > 0
[
set activator 100 ; turned on
set inhibitor 100]
[
set activator 0 ; turned off
set inhibitor 0]

; set_color
ifelse activator = 100
[
set new_pcolor white ]
[
set new_pcolor black ]

ifelse field_display = "none"
[
set pcolor new_pcolor ]
[
ifelse field_display = "activator"
[
set pcolor scale-color red hold_activator 0 100 ]
[
set pcolor scale-color blue hold_inhibitor 0 100 ]
]

if new_pcolor != old_pcolor [ set changes changes + 1 ]
]

set updates changes
set time time + 1
plot updates

display
end
to set-random-seed
random-seed read-from-string user-input "Random seed?"
end

Return to CS 420/527 home page

Return to MacLennan's home page

Send mail to Bruce MacLennan / MacLennan@utk.edu

Valid HTML 4.01!This page is www.cs.utk.edu/~mclennan/Classes/420/NetLogo/Pattern.html
Last updated: 2010-09-07.