MIHSLP.LD.HW.Period5
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
WHAT IS IT?
This model is an attempt to mimic the flocking of birds. (The resulting motion also resembles schools of fish.) The flocks that appear in this model are not created or led in any way by special leader birds. Rather, each bird is following exactly the same set of rules, from which flocks emerge.
HOW IT WORKS
The birds follow three rules: "alignment", "separation", and "cohesion".
"Alignment" means that a bird tends to turn so that it is moving in the same direction that nearby birds are moving.
"Separation" means that a bird will turn to avoid another bird which gets too close.
"Cohesion" means that a bird will move towards other nearby birds (unless another bird is too close).
When two birds are too close, the "separation" rule overrides the other two, which are deactivated until the minimum separation is achieved.
The three rules affect only the bird's heading. Each bird always moves forward at the same constant speed.
HOW TO USE IT
First, determine the number of birds you want in the simulation and set the POPULATION slider to that value. Press SETUP to create the birds, and press GO to have them start flying around.
The default settings for the sliders will produce reasonably good flocking behavior. However, you can play with them to get variations:
Three TURN-ANGLE sliders control the maximum angle a bird can turn as a result of each rule.
VISION is the distance that each bird can see 360 degrees around it.
THINGS TO NOTICE
Central to the model is the observation that flocks form without a leader.
There are no random numbers used in this model, except to position the birds initially. The fluid, lifelike behavior of the birds is produced entirely by deterministic rules.
Also, notice that each flock is dynamic. A flock, once together, is not guaranteed to keep all of its members. Why do you think this is?
After running the model for a while, all of the birds have approximately the same heading. Why?
Sometimes a bird breaks away from its flock. How does this happen? You may need to slow down the model or run it step by step in order to observe this phenomenon.
THINGS TO TRY
Play with the sliders to see if you can get tighter flocks, looser flocks, fewer flocks, more flocks, more or less splitting and joining of flocks, more or less rearranging of birds within flocks, etc.
You can turn off a rule entirely by setting that rule's angle slider to zero. Is one rule by itself enough to produce at least some flocking? What about two rules? What's missing from the resulting behavior when you leave out each rule?
Will running the model for a long time produce a static flock? Or will the birds never settle down to an unchanging formation? Remember, there are no random numbers used in this model.
EXTENDING THE MODEL
Currently the birds can "see" all around them. What happens if birds can only see in front of them? The in-cone
primitive can be used for this.
Is there some way to get V-shaped flocks, like migrating geese?
What happens if you put walls around the edges of the world that the birds can't fly into?
Can you get the birds to fly around obstacles in the middle of the world?
What would happen if you gave the birds different velocities? For example, you could make birds that are not near other birds fly faster to catch up to the flock. Or, you could simulate the diminished air resistance that birds experience when flying together by making them fly faster when in a group.
Are there other interesting ways you can make the birds different from each other? There could be random variation in the population, or you could have distinct "species" of bird.
NETLOGO FEATURES
Notice the need for the subtract-headings
primitive and special procedure for averaging groups of headings. Just subtracting the numbers, or averaging the numbers, doesn't give you the results you'd expect, because of the discontinuity where headings wrap back to 0 once they reach 360.
RELATED MODELS
- Moths
- Flocking Vee Formation
- Flocking - Alternative Visualizations
CREDITS AND REFERENCES
This model is inspired by the Boids simulation invented by Craig Reynolds. The algorithm we use here is roughly similar to the original Boids algorithm, but it is not the same. The exact details of the algorithm tend not to matter very much -- as long as you have alignment, separation, and cohesion, you will usually get flocking behavior resembling that produced by Reynolds' original model. Information on Boids is available at http://www.red3d.com/cwr/boids/.
HOW TO CITE
If you mention this model or the NetLogo software in a publication, we ask that you include the citations below.
For the model itself:
- Wilensky, U. (1998). NetLogo Flocking model. http://ccl.northwestern.edu/netlogo/models/Flocking. Center for Connected Learning and Computer-Based Modeling, Northwestern University, Evanston, IL.
Please cite the NetLogo software as:
- Wilensky, U. (1999). NetLogo. http://ccl.northwestern.edu/netlogo/. Center for Connected Learning and Computer-Based Modeling, Northwestern University, Evanston, IL.
COPYRIGHT AND LICENSE
Copyright 1998 Uri Wilensky.
This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. To view a copy of this license, visit https://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 project: CONNECTED MATHEMATICS: MAKING SENSE OF COMPLEX PHENOMENA THROUGH BUILDING OBJECT-BASED PARALLEL MODELS (OBPML). The project gratefully acknowledges the support of the National Science Foundation (Applications of Advanced Technologies Program) -- grant numbers RED #9552950 and REC #9632612.
This model was converted to NetLogo 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. Converted from StarLogoT to NetLogo, 2002.
Lauren Pirak, Liam Dammeier, and Henry Weiker Period 5
Comments and Questions
breed [sharks shark] breed [fish a-fish] fish-own [ flockmates ;; agentset of nearby fish nearest-neighbor ;; closest one of our flockmates ] to setup clear-all set-default-shape fish "fish" create-fish population ask fish [ set color yellow - 2 + random 7 ;; random shades look nice set size 2 ;; easier to see setxy random-xcor random-ycor set flockmates no-turtles ] ; set-default-shape fish "fish" create-sharks 1 [ set color blue - 2 ;; random shades look nice set size 5 setxy random-xcor random-ycor];; easier to see reset-ticks end to go ask fish [ flock ] ;; the following line is used to make the fish ;; animate more smoothly. repeat 5 [ ask fish [ fd 0.2 ] display ] ;; for greater efficiency, at the expense of smooth ;; animation, substitute the following line instead: ;; ask fish [ fd 1 ] tick ask fish [move-fish] tick ask sharks [ setxy mouse-xcor mouse-ycor] ;; the following line is used to make the fish ;; animate more smoothly. tick end to flock ;; fish procedure find-flockmates if any? flockmates [ find-nearest-neighbor ifelse distance nearest-neighbor < minimum-separation [ separate ] [ align cohere ] ] end ;to swim ;; fish procedure ; find-flockmates ; if any? flockmates ; [ find-nearest-neighbor ; ifelse distance nearest-neighbor < minimum-separation ; [ separate ] ; [ align ; cohere ] ] ;end to find-flockmates ;; fish procedure set flockmates other fish in-radius vision end to find-nearest-neighbor ;; fish procedure set nearest-neighbor min-one-of flockmates [distance myself] end ;;; SEPARATE to separate ;; fish procedure turn-away ([heading] of nearest-neighbor) max-separate-turn end ;;; ALIGN to align ;; fish procedure turn-towards average-flockmate-heading max-align-turn end to-report average-flockmate-heading ;; fish procedure ;; We can't just average the heading variables here. ;; For example, the average of 1 and 359 should be 0, ;; not 180. So we have to use trigonometry. let x-component sum [dx] of flockmates let y-component sum [dy] of flockmates ifelse x-component = 0 and y-component = 0 [ report heading ] [ report atan x-component y-component ] end ;;; COHERE to cohere ;; turtle procedure turn-towards average-heading-towards-flockmates max-cohere-turn end to-report average-heading-towards-flockmates ;; fish procedure ;; "towards myself" gives us the heading from the other fish ;; to me, but we want the heading from me to the other fish, ;; so we add 180 let x-component mean [sin (towards myself + 180)] of flockmates let y-component mean [cos (towards myself + 180)] of flockmates ifelse x-component = 0 and y-component = 0 [ report heading ] [ report atan x-component y-component ] end ;;; HELPER PROCEDURES to turn-towards [new-heading max-turn] ;; fish procedure turn-at-most (subtract-headings new-heading heading) max-turn end to turn-away [new-heading max-turn] ;; fish procedure turn-at-most (subtract-headings heading new-heading) max-turn end ;; turn right by "turn" degrees (or left if "turn" is negative), ;; but never turn more than "max-turn" degrees to turn-at-most [turn max-turn] ;; turtle procedure ifelse abs turn > max-turn [ ifelse turn > 0 [ rt max-turn ] [ lt max-turn ] ] [ rt turn ] end ;to move-predator ; setxy mouse-xcor mouse-ycor ; ;; only show the predator if the mouse pointer is ; ;; actually inside the view ; set hidden? not mouse-inside? ;end to move-fish let candidate-shark nobody let target-heading 0 fd 1 if any? sharks in-cone 2 120 [ set candidate-shark one-of sharks in-cone 2 120 set target-heading 180 + towards candidate-shark set heading target-heading set label "!" ] end ; Copyright 1998 Uri Wilensky. ; See Info tab for full copyright and license.
There is only one version of this model, created over 7 years ago by Lauren Pirak.
Attached files
No files
This model does not have any ancestors.
This model does not have any descendants.