This page was automatically generated by NetLogo 5.0.
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.
powered by NetLogo
view/download model file: dinos.nlogo
This model is an extension of the “split Newtonian” (formation_newton.nlogo) physics-based model of a swarm, for the book entitled “Physicomimetics: Physics-Based Swarm Intelligence.” We consider an application of autonomous surface vehicles (called “drones”) that float in the ocean and other bodies of water containing dinoflagellates. Dinoflagellates are single-celled organisms that are bioluminescent (i.e., they produce light when disturbed).
We focus on two real-world tasks. In the first task, a swarm of drones should move towards a goal location, while touching as few dinoflagellates as possible. This is useful for military applications where stealth is desired. A warship, submarine, or special forces team moving through a bioluminescent “hot spot” can easily generate enough light (by disturbing dinoflagellates) to be seen from high points on a nearby shoreline or via aircraft or satellite. The objective of the drones is to find a path through the dinoflagellates that a larger vehicle can follow, while minimally disturbing the organisms.
On the other hand, many dinoflagellate species are responsible for harmful algal blooms (HABs). HABs can produce neurotoxins that are dangerous to other marine organisms and to people swimming in the water. Hence, our second task is to find a path towards a goal that maximizes the collection of dinoflagellates along the way - for the sake of creating a dinoflagellate density map that can be used to forecast the movement of HABs and warn swimmers away from hazardous areas.
Multiple drones use F = ma and a “split Newtonian” force law to self-organize into a triangular lattice and move towards a goal. Depending on how the simulation is run, the drones can either seek to maximize or minimize their exposure to the dinoflagellates, while moving towards the goal.
There are two levels of “events” in the simulation. At the lower level are dinoflagellates that move and leave deposits of chemical toxins in the water. At the higher level there are aquatic drones that can detect, and track or avoid, the chemical traces.
This simulation allows you to control the random number “seed.” The seed uniquely determines the sequence of random events in the simulation. Hence, if you run the simulation twice with the same seed, the results will be identical. This is important when properly designing scientific experiments.
The code automatically computes the proper value for the gravitational constant G, using the theory established in Chapter 3. It also provides theoretical guidance for the magnitude of the force that pulls the swarm towards the goal.
Click SETUP to initialize the drones and the initial positions of the dinoflagellates. Then, click RUN DINOS to make the dinoflagellates move and produce a chemical toxin for 100 time steps. Finally, click MOVE DRONES to have them move through the environment towards the goal. The simulation ends when a drone makes it to the goal.
The NUMBER_OF_DRONES slider allows you to control the number of aquatic drones created at initialization. Changing this slider while the simulation is running will have no effect.
The RANDOM_SEED slider sets the random seed at the beginning of the simulation. If you always use the same random seed, the simulation will run the same way (assuming all other parameters are kept the same). Changing this slider while the simulation is running will have no effect.
The NUMBER_OF_DINOS slider allows you to control the number of dinoflagellates created at initialization. Changing this slider while the simulation is running will have no effect.
All other sliders will affect the simulation when it is running.
The TOGGLE GOAL button allows you to toggle the goal force on and off. The default is for it to be turned on.
The TOGGLE MIN/MAX button allows you to control whether the drones attempt to find a path to the goal that minimizes or maximizes exposure to the toxin. The default is to try to find the maximum path.
Drones are initialized in a cluster at the top right of the graphics pane, and self-organize into a triangular lattice. The goal is placed at the lower left, in order to make the drones move through as much of the environment as possible.
At each time step, the center of mass of the drones is computed and the location is shown as a red dot on the graphics pane. The sequence of red dots shows the trajectory of the center of mass of the drones.
The GOAL FORCE THEORY monitor provides an estimate of the strength of the goal force that is required to successfully pull the drones through the environment to the goal.
The AVERAGE CHEMICAL SEEN monitor reports the average amount of chemical toxin measured by the drones.
Run the simulation and note how much chemical was measured by the drones. Then, keeping the random seed the same, click the TOGGLE MIN/MAX button, and rerun the experiment. How much chemical is measured now?
Repeat the above experiment with different random seeds.
Try different values for the goal force. What happens?
Try different values for the DESIRED_SEPARATION.
Try different values for the NUMBER_OF_DRONES. Does varying the number of drones alter the robots’ effectiveness at the two tasks (i.e., maximization and minimization of chemical encountered on the way to the goal)?
Vary the NUMBER_OF_DINOS and determine how this affects performance on the two tasks.
What is the difference between the role played by virtual friction (which is set by the FRICTION slider) and real friction that would be encountered between a drone and the water?
How critical is virtual friction to mission success, and what level is needed for adequate performance?
In general, can you identify those parameter settings that result in (1) poor, (2) adequate, and (3) excellent performance at each of the two tasks? Explain why these parameter values lead to better/worse performance.
Try adding obstacles, such as buoys to avoid, including obstacles of different sizes and shapes. See how this increases the difficulty of the tasks.
Introduce currents into the water that affect both the dinoflagellates and the drones. Run experiments that measure the drones’ performance as a function of the spatial and temporal extent, as well as the strength, of the currents.
Increase the number of agents beyond seven, and then test some of the hypotheses in Chapter 6 on your own. Create and then experimentally test new hypotheses that you invent based on your experiences with the simulator.
Note, in order to change any NetLogo simulation, you must have the source code (i.e., “dinos.nlogo”) downloaded to your computer, as well as NetLogo itself. You can not change the code when you are running the simulation with your browser.
This is an extension of our generalized split Newtonian force law model, for real-world applications.
This model provides insight into how we might apply artificial physics for function optimization, which will be shown in “apo.nlogo.”
For a discussion of a more real-world faithful simulation of the dinoflagellates and drones (as well as a description of the physical drone), see:
Frey, C. Zarzhitsky, D., Spears, W. M., Spears, D. F., Karlsson, C., Ramos, B., Hamann, J., and Widder, E. (2008) A physicomimetics control framework for swarms of autonomous vehicles. In Proceedings of the Oceans’08 Conference.
The NetLogo slime mold model is at:
Wilensky, U. (1997). NetLogo Slime model. http://ccl.northwestern.edu/netlogo/models/Slime. Center for Connected Learning and Computer-Based Modeling, Northwestern University, Evanston, IL.
If you mention this model in an academic publication, we ask that you include these citations for the model itself and for the NetLogo software:
- Spears, W. M. and Spears, D. F. (eds.) Physicomimetics: Physics-Based Swarm Intelligence, Springer-Verlag, (2011).
- Wilensky, U. (1999). NetLogo. http://ccl.northwestern.edu/netlogo/. Center for Connected Learning and Computer-Based Modeling, Northwestern University, Evanston, IL.
Copyright 2011 William M. Spears. All rights reserved.
Permission to use, modify or redistribute this model is hereby granted, provided that both of the following requirements are followed:
a) this copyright notice is included, and
b) this model will not be redistributed for profit without permission from William M. Spears. Contact William M. Spears for appropriate licenses for redistribution for profit.
; William M. Spears and Christer Karlsson, September 2011
; Bioluminescence Tutorial Code
; The variable "dinos" refers to "dinoflagellates"
; For research and educational use only
; Version history
; Initial version of artificial physics by Brian Zuelke
; Extensive modifications by William M. Spears, September 2003
; Minor modifications to artificial physics by Christer Karlsson, February 2007
; Extensive modifications by Christer Karlsson, February - June 2007
breed [drones drone] ; Introduce the "drone" breed
breed [goals goal] ; Introduce the "goal" breed
breed [dinos dino] ; Introduce the "dinoflagellates" breed
globals [total_chemical G goal? goalF minimum? all_done? apoF
center_of_mass_x center_of_mass_y FR D FMAX DeltaT]
turtles-own [hood deltax deltay r F Fx Fy vx vy dvx dvy mass]
patches-own [chemical]
to setup
clear-all ; Clear everything
update-info
random-seed Random_Seed ; Initialize the random number seed
; Create and initialize drones
create-drones Number_of_Drones [setup-drones]
; Create the goal at lower left of graphics pane
create-goals 1 [set color sky set size 2 set shape "circle"
setxy (- world-width / 2.5) (- world-height / 2.5)]
; Create and initialize dinoflagellates
create-dinos Number_of_Dinos [set color yellow set shape "circle" set chemical 2
setxy (random world-height) (random world-width)]
ask patches [set chemical 0] ; Initialize with no toxin anywhere
set goal? true ; Goal force is on
set minimum? false ; Maximum or minumum chemical concentration?
set all_done? false ; Not done yet!
set total_chemical 0 ; Initialize total amount of chemical seen
set apoF 0.10 ; Set APO force to 0.1 (see Chapter 6)
; Compute and display the center of mass of the drones
set center_of_mass_x (sum [xcor * mass] of drones) / (sum [mass] of drones)
set center_of_mass_y (sum [ycor * mass] of drones) / (sum [mass] of drones)
ask patch (round center_of_mass_x) (round center_of_mass_y) [set pcolor red]
reset-ticks
end
to run-dinos ; Runs dinoflagellates
if (count turtles < 1) [user-message "Please click HALT and then SETUP first" stop]
repeat 100 [
diffuse chemical 1 ; For 100 steps, diffuse and evaporate the toxin
ask patches [set chemical (chemical * 0.995) set pcolor (scale-color green chemical 0 6)]
ask dinos [dino-life] ; Move the dinoflagellates
tick
]
end
to run-and-monitor ; Runs and monitors the drones
if (count turtles < 1) [user-message "Please click HALT and then SETUP, and then RUN DINOS" stop]
ifelse (not all_done?) [ ; Run until the goal is reached
update-info
set G (0.9 * FMAX * (D ^ 2) / (2 * (sqrt 3))) ; The gravitational constant is set according to theory
ask drones [ap-drones] ; All drones compute where to move
ask turtles [move] ; All drones move
; Compute and display the center of mass of the drones
set center_of_mass_x (sum [xcor * mass] of drones) / (sum [mass] of drones)
set center_of_mass_y (sum [ycor * mass] of drones) / (sum [mass] of drones)
ask patch (round center_of_mass_x) (round center_of_mass_y) [set pcolor red]
tick
]
[stop]
end
to setup-drones ; Setup the drones
setxy (world-width / 2.5) (world-height / 2.5) ; Place at upper right of graphics pane
set heading random 360 ; Everyone has a random heading
set vx 0 set vy 0 set mass 1 ; Start with no motion and mass = 1
set shape "circle" set color orange set size 2
ifelse (who = 0) [] [ ; Carefully initialize the placement of the drones
ifelse (who = 1) [setxy (xcor - 1) (ycor + 1)] [
ifelse (who = 2) [set xcor (xcor - 2)] [
ifelse (who = 3) [setxy (xcor + 1) (ycor + 1)] [
ifelse (who = 4) [setxy (xcor - 1) (ycor - 1)] [
ifelse (who = 5) [setxy (xcor + 1) (ycor - 1)] [
ifelse (who = 6) [set xcor (xcor + 2)] [
]]]]]]]
end
to ap-drones ; Run artificial physics on the drones
set Fx 0 set Fy 0 ; Initialize force components to zero
set vx (1 - FR) * vx ; Slow down according to friction
set vy (1 - FR) * vy
let ncount 0
set hood [who] of other drones ; Get the IDs of all other drones
foreach hood [
set deltax (([xcor] of drone ?) - xcor)
set deltay (([ycor] of drone ?) - ycor)
set r sqrt (deltax * deltax + deltay * deltay)
if (r < 1.5 * D) [ ; The generalized split Newtonian law
set ncount (ncount + 1)
set F (G * mass * ([mass] of turtle ?) / (r ^ 2))
if (F > FMAX) [set F FMAX] ; Bounds check on force magnitude
ifelse (r > D)
[set Fx (Fx + F * (deltax / r)) ; Attractive force, x-component
set Fy (Fy + F * (deltay / r))] ; Attractive force, y-component
[set Fx (Fx - F * (deltax / r)) ; Repulsive force, x-component
set Fy (Fy - F * (deltay / r))] ; Repulsive force, y-component
; Move towards chemical minimum or maximum
ifelse ((minimum? and (chemical < ([chemical] of drone ?))) or
((not minimum?) and (chemical > ([chemical] of drone ?))))
[set Fx (Fx - (apoF * (deltax / r)))
set Fy (Fy - (apoF * (deltay / r)))]
[set Fx (Fx + (apoF * (deltax / r)))
set Fy (Fy + (apoF * (deltay / r)))]
]
]
; Now include goal force, if toggled on and more than one particle
if (goal? and (ncount > 0)) [
set hood [who] of goals ; Get the IDs of the goal
foreach hood [
set deltax (([xcor] of goal ?) - xcor)
set deltay (([ycor] of goal ?) - ycor)
set r sqrt (deltax * deltax + deltay * deltay)
if (r < 2) [set all_done? true] ; Reached the goal
set Fx (Fx + (goalF * (deltax / r))) ; Attractive force, x-component
set Fy (Fy + (goalF * (deltay / r))) ; Attractive force, y-component
]
]
set total_chemical (total_chemical + chemical) ; Keep track of all chemical seen
set dvx DeltaT * (Fx / mass)
set dvy DeltaT * (Fy / mass)
set vx (vx + dvx) ; The x-component of velocity
set vy (vy + dvy) ; The y-component of velocity
set deltax DeltaT * vx
set deltay DeltaT * vy
if ((deltax != 0) or (deltay != 0))
[set heading (atan deltax deltay)]
end
to move
fd (sqrt (deltax * deltax + deltay * deltay)) ; Move the drone
end
to update-info ; Update information from the sliders
set FMAX Force_Maximum
set FR Friction
set DeltaT Time_Step
set D Desired_Separation
set goalF Goal_Force
end
; Moves dinoflagellates. Really, the same model as the original Starlogo slime mold at
; http://education.mit.edu/starlogo/samples/slime.htm, which suffices for dinoflagellates.
to dino-life
turn-toward-max-chemical ; Turn towards maximum chemical concentration
rt random 40 ; Make a random wiggle
lt random 40
fd 1 ; Forward one step
set chemical chemical + 2 ; Replenish chemical
end
; This portion of code is from the NetLogo code at http://ccl.northwestern.edu/netlogo/models/Slime
to turn-toward-max-chemical
let ahead [chemical] of patch-ahead 1
let myright [chemical] of patch-right-and-ahead 45 1
let myleft [chemical] of patch-left-and-ahead 45 1
ifelse ((myright >= ahead) and (myright >= myleft))
[rt 45]
[if (myleft >= ahead) [lt 45]]
end
; Turn the goal force on or off
to toggle-goal
if (goal? != 0) [set goal? not goal?]
end
; Are the drones searching for maximum or minimum toxin?
to toggle-minmax
if (minimum? != 0) [set minimum? not minimum?]
end