Fur preview image

3 collaborators

Uri_dolphin3 Uri Wilensky (Author)
79107734_n00-1 Seth Tisue (Author)
Dor Abrahamson (Author)



Tagged by Reuven M. Lerner over 5 years ago

Model group CCL | Visible to everyone | Changeable by group members (CCL)
Model was written in NetLogo 5.0.4 • Viewed 252 times • Downloaded 25 times • Run 0 times
Download the 'Fur' modelDownload this modelEmbed this model

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


Does 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. It was first proposed by Alan Turing. 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 parameters (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'.


We model the animal skin by a square array of many melanocytes (pigment cells) that are each in either of two states: colorful ('D' for differentiated) or not-colorful ('U' for undifferentiated). The state of a cell can flip between D and U. The color cells (the D's) secrete two types of 'morphogens': activators (A) and inhibitors (I). Activators, on their own, cause a central cell to become colorful; inhibitors, on their own, cause the central cell to become not colorful. These competing morphogens are secreted in all directions so you can think of each color cell as creating a puddle that grows around it, spreading to other cells.

Each cell, whether or not it is colorful, is itself the center of its own neighborhood. For now, suppose the neighborhood is a circle. Say this circular neighborhood has a radius of 6 cells. This means that the cell in the center can be affected by other cells that are as far as 6 cells away from it in any direction. So if there is a D cell within this circle and it is secreting morphogens then these morphogens will diffuse as far as this central cell (but a D cell 7 cells away will not directly or immediately affect it). Also, each cells has an inner circle of radius, say, 3 cells.

D cells within the inner circle each contributes morphogens of type A (activator) to the central cell. Between the inner circle and the perimeter of the outer circle we have a ring of cells that are more than 3 cells away from the center but 6 or less cells away from the center. Every D cell in this outer ring contributes morphogens of type I (inhibitor) to the central cell. So at every moment each cell is affected both by activator and inhibitor cells in its circle and the question is will it ultimately be activated and become colorful or inhibited and lose its color (or just remain the way it was). The logic is that if the power of the activators is bigger than the power of the inhibitors then the cell will become colorful and vice versa (and if the power is balanced then nothing happens). The idea of "power" is that it's not enough to know how many morphogens there are of each type affecting a cell but one must multiply each cell by its "power" (or you can think of power in terms of the concentration of the morphogens in the inner and outer neighborhoods). Another idea is that since we'll be multiplying both types of morphogens by their power, we might as well just call the power of the activators "1" and the power of the inhibitors "w * 1" or just w. So w is the ratio between the power of the inhibitors and the activators. If w is bigger than 1 that means the power of the inhibitors is greater than that of the activators (for instance, if w = 2 then the inhibitors are each double as strong as each of the activators and if w = 0.5 then the inhibitors are half as strong as the activators). If w = 0.5 and if we have as many inhibitors as we have activators that are affecting the central cell, we would logically assume that the center cells would be more activated than inhibited and so would probably become (or remain) colorful on that step. (A tricky point to notice is that while a certain D-cell is activating a neighboring cell, this same D-cell can be inhibiting a different cell further away.)

Here are the rules that summarize what we've been discussing: count up all the D cells in the ring and call this number D*I (for instance 2 inhibitors), and count up all the D cells in the circle of radius three and call this number D*A (for instance, 5 activators). Then compute D*A - w*D*I, and:

* if it is > 0, set the central cell to D

* if it is < 0, set the central cell to U

* if it is = 0, leave the central cell unchanged

Note that this computation happens to all cells at the same time. After the first step and once the cells have been set accordingly, the entire business starts over at the next step. Once again, the cells are counted up according to the same rule. The rules have not changed but because some of the D cells are now U and vice versa we might get different counts and because of that -- different results of the "fight" between the A and I morphogens.

So what you see is that from step to step the individual cells often change from white (representing D or color cells) to black (representing U or no-color cells) and the overall impression is that the configuration of white and black changes as a whole. But these configurations are not random. You will see how these configurations often take form. Understanding how each cell behaves, as we have explained above, can help understanding how these global patterns take form.

All these explanations were for circular neighborhoods. In this model, the neighborhoods may be elliptical instead of circular. This is needed to produce stripes instead of spots.


In order that your first experiment will more-or-less match the explanations above, you should choose to set the initial-density slider to 50% (that gives each cell an equal chance of being white or black to start with and so the whole window will be roughly 50% white), set the INNER-RADIUS-X and INNER-RADIUS-Y sliders to 3 and the OUTER-RADIUS-X and OUTER-RADIUS-Y sliders to 6, and set RATIO to 0.35 (that means the I morphogens are 35% as powerful as the A morphogens). Now press SETUP. (In later experiments you are welcome to change those settings in various combinations.) It will take a while to complete. If you press STEP the model will advance a single step. If you press GO the model will keep stepping indefinitely.

It takes a while for the patches to determine their neighborhoods. Because of this, only press SETUP when you change the radius sliders. If you only change the INITIAL-DENSITY and RATIO sliders or if you'd like to run the model again with the same settings, press RESTART instead of SETUP. The RESTART button doesn't ask the patches to recalculate their neighborhoods.


As the model runs, patterns may begin to emerge. Eventually, they stabilize. (Well, sometimes the model will run into an endless flip-flop between two states, but we could call that dynamic stability.) Even when it seems to come to a halt, the model is still running and executing the commands and carrying out the computations, but nothing is changing visibly. This is because for each and every cell the power of activators is equal to that of the inhibitors, so nothing changes.


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?

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 RATIO, from trial to trial, you will note that for small ratios you will invariably get completely white fur and for high ratios you will invariably get completely black fur (why is that?). For ratios in between it fluctuates. That happens partially because the initial setting of black/white coloration has a random element to it (see the RESTART procedure in the code).

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


If you find a combination of slider and switch values that consistently give you the fur patterns of a favorite animal, you could create a button, for instance "Zebra," that sets the sliders to those values. That way, if you make several of these, you can go on a virtual safari tour by moving between your favorite animals. One such combination that you could set in a single button could be: INNER-RADIUS-X 3, INNER-RADIUS-Y 3, OUTER-RADIUS-X 6, OUTER-RADIUS-Y 6, INITIAL-DENSITY 50%, RATIO 0.35.

You could call this, perhaps, Fish.

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.


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


The mechanism of "diffusion-driven instability" was first proposed by Alan Turing in 1952. B.N. Nagorcka first proposed applying it to hair and fur. The particular variant presented in this model was proposed by David Young.

In building this model, we used information on this web site: http://classes.yale.edu/fractals/Panorama/Biology/Leopard/Leopard.html .

New research published in Nature Genetics (Economou et al, 2012) appears to confirm the mechanisms the model proposes.


A news article in IO9 by Alasdair Wilkins describing the research can be found here.


Here is a quote from the Wilkins article:

>Turing's idea was that biological patterns --- such as a tiger's stripes or a

>leopard's spots - are formed by the interactions of a pair of morphogens, which

>are the signaling molecules that govern tissue development. The particular pair

>that Turing proposed was an activator and an inhibitor. Turing proposed that the

>activator would form something like a tiger's stripe, but then interaction with

>the inhibitor would shut down its expression, creating a blank space. Then the

>process would reverse, and the next stripe would form. The interaction of these

>two morphogens would combine to create the full stripe pattern.


>This hypothesis has remained mostly just speculation until now, as researchers

>at King's College London have now tested the idea in the mouths of mice. The

>roofs of mice's mouths contain regularly spaced ridges, and the researchers

>discovered the precise two morphogens that were working as activator and

>inhibitor to create the pattern, just as Turing suggested. What's more, when the

>researchers tampered with one morphogen or the other to increase or decrease

>their activity,the pattern of the ridges changed just as Turing's initial

>equations predicted they would. Researcher Dr. Jeremy Green adds:


>"Regularly spaced structures, from vertebrae and hair follicles to the stripes on

>a tiger or zebrafish, are a fundamental motif in biology. There are several

>theories about how patterns in nature are formed, but until now there was only

>circumstantial evidence for Turing's mechanism. Our study provides the first

>experimental identification of an activator-inhibitor system at work in the

>generation of stripes – in this case, in the ridges of the mouth palate.

>Although important in feeling and tasting food, ridges in the mouth are not of

>great medical significance. However, they have proven extremely valuable here in

>validating an old theory of the activator-inhibitor model first put forward by

>Alan Turing in the 50s."

Other new research published in the Journal of Experimental Biology (Egri et al, 2011) proposes an evolutionary explanation for the advantage conferred by stripes. http://jeb.biologists.org/content/215/5/736.abstract

Thanks to Seth Tisue and Dor Abrahamson for their work on this model.


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

* Wilensky, U. (2003). NetLogo Fur model. http://ccl.northwestern.edu/netlogo/models/Fur. 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 2003 Uri Wilensky.

![CC BY-NC-SA 3.0](http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png)

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.

This model was created as part of the projects: PARTICIPATORY SIMULATIONS: NETWORK-BASED DESIGN FOR SYSTEMS LEARNING IN CLASSROOMS and/or INTEGRATED SIMULATION AND MODELING ENVIRONMENT. The project gratefully acknowledges the support of the National Science Foundation (REPP & ROLE programs) -- grant numbers REC #9814682 and REC-0126227.

Comments and Questions

Click to Run Model

  new-color       ;; currently, always either white or black
  inner-neighbors ;; other cells in a circle around the cell
  outer-neighbors ;; other cells in a ring around the cell (but usually not touching the cell)

to setup
  ;; computes inner and outer neighbors in an ellipse around each cell
  ask patches
    set inner-neighbors ellipse-in inner-radius-x inner-radius-y
    ;; outer-neighbors needs more computation because we want only the cells in the circular ring
    set outer-neighbors ellipse-ring outer-radius-x outer-radius-y inner-radius-x inner-radius-y

  ifelse any? patches with [ count outer-neighbors = 0 ]
    [ user-message word "It doesn't make sense that 'outer' is equal to or smaller than 'inner.' "
                        " Please reset the sliders and press Setup again."

;; this procedure sets approximately initial-density percent of the
;; cells white and the rest black; if initial-density is set at 50%
;; then about half the cells will be white and the rest black

to restart
  ask patches
    [ ifelse random-float 100.0 < initial-density
        [ set pcolor white ]
        [ set pcolor black ] ]

to go
  ask patches [ pick-new-color ]
  ask patches [ set pcolor new-color ]

to pick-new-color  ;; patch procedure
  let activator count inner-neighbors with [pcolor = white]
  let inhibitor count outer-neighbors with [pcolor = white]
  ;; we don't need to multiply 'activator' by a coefficient because
  ;; the ratio variable keeps the proportion intact
  let difference activator - ratio * inhibitor
  ifelse difference > 0
    [ set new-color white ]
    [ if difference < 0
        [ set new-color black ] ]
  ;; note that we did not deal with the case that difference = 0.
  ;; this is because we would then want cells not to change color.

;;; procedures for defining elliptical neighborhoods

to-report ellipse-in [x-radius y-radius]  ;; patch procedure
  report patches in-radius (max list x-radius y-radius)
           with [1.0 >= ((xdistance myself ^ 2) / (x-radius ^ 2)) +
                        ((ydistance myself ^ 2) / (y-radius ^ 2))]

to-report ellipse-ring [outx-radius outy-radius inx-radius iny-radius]  ;; patch procedure
  report patches in-radius (max list outx-radius outy-radius)
           with [1.0 >= ((xdistance myself ^ 2) / (outx-radius ^ 2)) +
                        ((ydistance myself ^ 2) / (outy-radius ^ 2))
             and 1.0 <  ((xdistance myself ^ 2) / (inx-radius ^ 2)) +
                        ((ydistance myself ^ 2) / (iny-radius ^ 2))

;; The following two reporter give us the x and y distance magnitude.
;; you can think of a point at the tip of a triangle determining how much
;; "to the left" it is from another point and how far "over" it is from
;; that same point. These two numbers are important for computing total distances
;; in elliptical "neighborhoods."

;; Note that it is important to use the DISTANCEXY primitive and not
;; just take the absolute value of the difference in coordinates,
;; because DISTANCEXY handles wrapping around world edges correctly,
;; if wrapping is enabled (which it is by default in this model)

to-report xdistance [other-patch]  ;; patch procedure
  report distancexy [pxcor] of other-patch

to-report ydistance [other-patch]  ;; patch procedure
  report distancexy pxcor
                    [pycor] of other-patch

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

There are 10 versions of this model.

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

Attached files

File Type Description Last updated
Fur.png preview Preview for 'Fur' over 5 years ago, by Uri Wilensky Download

This model does not have any ancestors.

This model does not have any descendants.