Heatbugs Model - BehaviorSearch

Heatbugs Model - BehaviorSearch preview image

1 collaborator

20160405_001940000_ios Hendra Kusumah (Author)

Tags

(This model has yet to be categorized with any tags)
Visible to everyone | Changeable by everyone
Model was written in NetLogo 6.3.0 • Viewed 52 times • Downloaded 6 times • Run 0 times
Download the 'Heatbugs Model - BehaviorSearch' modelDownload this modelEmbed this model

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


NOTE

This is the BehaviorSearch benchmarking version of the classic NetLogo Heatbugs model.

Reference: Stonedahl, F. Doctoral Thesis. [Genetic Algorithms for the Exploration of Parameter Spaces in Agent Based Models] (http://forrest.stonedahl.com/thesis/forreststonedahlthesis.pdf). Northwestern University.

MODIFICATIONS

December 2022: Converted to NetLogo 6.3.0 format.

March 2011:

  1. Uses smaller world-size than original, for increased speed.
  2. Added "visuals?" on-off switch, for increased speed.
  3. Created "avg-distance-to-others" reporter to measure closeness.

WHAT IS IT?

Heatbugs is an abstract model of the behavior of biologically-inspired agents that attempt to maintain an optimum temperature around themselves. It demonstrates how simple rules defining the behavior of agents can produce several different kinds of emergent behavior.

Heatbugs has been used as a demonstration model for many agent-based modeling toolkits. We provide a NetLogo version to assist users in learning and comparing different toolkits. It demonstrates coding techniques in NetLogo and may be useful as a starting point for building other models.

While this NetLogo model attempts to match the Repast and Swarm versions (see "Credits" below), we haven't done a rigorous comparative analysis of the different versions, so it is possible that there are small inadvertent differences in the underlying rules and behavior.

HOW IT WORKS

The bugs move around on a grid of square "patches". A bug may not move to a patch that already has another bug on it.

Each bug radiates a small amount of heat. Heat gradually diffuses through the world; some heat is lost to cooling.

Each bug has an "ideal" temperature it wants to be. The bigger the difference between the temperature of the patch where the bug is and the bug's ideal temperature, the more "unhappy" the bug is. When a bug is unhappy, it moves. If it is too hot, it moves to the coolest adjacent empty patch. Conversely, if a bug is too cold, it moves to the warmest adjacent empty patch. (Note that these bugs aren't smart enough to always move to the best available patch.)

HOW TO USE IT

After choosing the number of bugs to create, and setting the model variables, press the GO button to set the heatbugs into motion.

BUG-COUNT: The number of bugs that will inhabit the model

EVAPORATION-RATE: The percentage of the world's heat that evaporates each cycle. A lower number means a world which cools slowly, a higher number is a world which cools quickly.

DIFFUSION-RATE: How much heat a patch (a spot in the world) diffuses to its neighbors. A higher number means that heat diffuses through the world quickly. A lower number means that patches retain more of their heat.

MIN/MAX-IDEAL-TEMP: The minimum and maximum ideal temperatures for heatbugs. Each bug is given an ideal temperature between the min and max ideal temperature.

MIN/MAX-OUTPUT-HEAT: The minimum and maximum heat that heatbugs generate each cycle. Each bug is given a output-heat value between the min and max output heat.

RANDOM-MOVE-CHANCE: The chance that a bug will make a random move even if it would prefer to stay where it is (because no more ideal patch is available).

DEEP-FREEZE: This button removes all heat from the world.

HEAT-UP: This button adds MAX-OUTPUT-HEAT to every patch in the world.

Beneath the view are two "Color By:" buttons. The IDEAL-TEMP button colors the bugs according to their IDEAL-TEMP value. Bugs with higher IDEAL-TEMP values will be brighter. The HAPPINESS button does the same, but is based upon the HAPPINESS value of each agent, with happier bugs being brighter.

The WATCH-HAPPIEST and WATCH-SADDEST buttons will highlight the happiest or saddest bug at the time the button is pressed.

THINGS TO NOTICE

Depending on their ideal temperatures, some bugs will tend to clump together, while others will tend to avoid all other bugs, and others still flutter around the edges of clumps. All of these behaviors are affected as well by the evaporation rate.

The diffusion rate affects the cohesiveness of clumps. If diffusion-rate is slow, many tiny clumps form. Why?

Most interesting behaviors occur when the number of bugs, how much heat they generate, and how quickly the world cools are balanced such that excessive heat does not build up.

THINGS TO TRY

Vary DIFFUSION-RATE.

Vary EVAPORATION-RATE in relation to the output-heat range of the bugs.

Use the HEAT-UP button to scramble clumped heatbugs and watch as they re-assemble into new clumps.

EXTENDING THE MODEL

Randomize the amount of heat bugs generate each cycle.

Allow users to introduce heat into the system with the mouse.

NETLOGO FEATURES

n-of and sprout together let us initially place each bug on its own patch with a minimum of code.

Notice how the code does not make any use of X and Y coordinates. The neighbors and move-to primitives take care of sensing and motion on a toroidal grid without the need for any explicit coordinate math.

The diffuse command is used to diffuse the heat around the patch grid.

RELATED MODELS

Slime

CREDITS AND REFERENCES

Swarm version of Heatbugs -- https://web.archive.org/web/20130211011213/http://www.swarm.org/wiki/ExamplesofSwarm_applications

RePast version of Heatbugs -- http://repast.sourceforge.net/repast_3/examples/

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:

Please cite the NetLogo software as:

COPYRIGHT AND LICENSE

Copyright 2004 Uri Wilensky.

CC BY-NC-SA 3.0

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 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

Please start the discussion about this model! (You'll first need to log in.)

Click to Run Model

globals [ color-by-unhappiness? ]

turtles-own
[
  ideal-temp       ;; The temperature I want to be at
  output-heat      ;; How much heat I emit per time step
  unhappiness      ;; The magnitude of the difference between my ideal
                   ;;   temperature and the actual current temperature here
]

patches-own
[
  temp             ;; short for "temperature"
]

to-report avg-distance-to-others
  report mean [mean [distance myself] of other turtles] of turtles
end 

to setup
  clear-all
  set color-by-unhappiness? false

  ;; creating the bugs the following way ensures that we won't
  ;; wind up with more than one bug on a patch
  ask n-of bug-count patches [
    sprout 1 [
      set ideal-temp  min-ideal-temp  + random ideal-temp-range
      set output-heat min-output-heat + random output-heat-range
      set unhappiness abs (ideal-temp - temp)
      color-by-ideal-temp
      face one-of neighbors
      set size 2  ;; easier to see
    ]
  ]
  reset-ticks
end 

to color-by-ideal-temp
  ;; when scaling the color of turtles, adjust the value
  ;; range by this amount to avoid turtles being too dark or too light.
  let range-adjustment ideal-temp-range / 2 + 0.00001
  set color scale-color lime ideal-temp ( min-ideal-temp - range-adjustment )
                                        ( min-ideal-temp + ideal-temp-range + range-adjustment )
end 

to color-by-unhappiness [ max-unhappiness ]
  set color scale-color blue unhappiness  max-unhappiness 0
end 

to go
  if not any? turtles [ stop ]
  ;; diffuse heat through world
  diffuse temp diffusion-rate
  ;; The world retains a percentage of its heat each cycle.
  ;; (The Swarm and Repast versions have 1.0 meaning no
  ;; evaporation and 0.0 meaning complete evaporation;
  ;; we reverse the scale to better match the name.)
  ask patches [ set temp temp * (1 - evaporation-rate) ]
  ;; agentsets in NetLogo are always in random order, so
  ;; "ask turtles" automatically shuffles the order of execution
  ;; each time.
  ask turtles [ step ]
  if visuals? [
    recolor-turtles
    recolor-patches
  ]
  tick
end 

to recolor-turtles
  if color-by-unhappiness?
  [
    let max-unhappiness max [unhappiness] of turtles
    ask turtles [ color-by-unhappiness max-unhappiness ]
  ]
end 

to recolor-patches
  ;; hotter patches will be red verging on white;
  ;; cooler patches will be black
  ask patches [ set pcolor scale-color red temp 0 150 ]
end 

to step  ;; turtle procedure
  ;; my unhappiness is the magnitude or absolute value of the difference
  ;; between by ideal temperature and the temperature of this patch
  set unhappiness abs (ideal-temp - temp)
  ;; if unhappy and not at the hottest neighbor,
  ;; then move to an open neighbor
  if unhappiness > 0
    [ ifelse random-float 100 < random-move-chance
        [ bug-move one-of neighbors ]
        [ bug-move best-patch ] ]
  set temp temp + output-heat
end 

;; find the hottest or coolest location next to me; also
;; take my current patch into consideration

to-report best-patch  ;; turtle procedure
  ifelse temp < ideal-temp
    [ let winner max-one-of neighbors [temp]
      ifelse [temp] of winner > temp
        [ report winner ]
        [ report patch-here ] ]
    [ let winner min-one-of neighbors [temp]
      ifelse [temp] of winner < temp
        [ report winner ]
        [ report patch-here ] ]
end 

to bug-move [target]  ;; turtle procedure
  ;; if we're already there, there's nothing to do
  if target = patch-here [ stop ]
  ;; move to the target patch (if it is not already occupied)
  if not any? turtles-on target [
    face target
    move-to target
    stop
  ]
  set target one-of neighbors with [not any? turtles-here]
  if target != nobody [ move-to target ]
  ;; The code above is a bit different from the original Heatbugs
  ;; model in Swarm.  In the NetLogo version, the bug will always
  ;; find an empty patch if one is available.
  ;; In the Swarm version, the bug picks a random
  ;; nearby patch, checks to see if it is occupied, and if it is,
  ;; picks again.  If after 10 tries it hasn't found an empty
  ;; patch, it gives up and stays where it is.  Since each try
  ;; is random and independent, even if there is an available
  ;; empty patch the bug will not always find it.  Presumably
  ;; the Swarm version is coded that way because there is no
  ;; concise equivalent in Swarm/Objective C to NetLogo's
  ;; 'one-of neighbors with [not any? turtles-here]'.
  ;; If you want to match the Swarm version exactly, remove the
  ;; last two lines of code above and replace them with this:
  ; let tries 0
  ; while [tries <= 9]
  ;   [ set tries tries + 1
  ;     set target one-of neighbors
  ;     if not any? turtles-on target [
  ;       move-to target
  ;       stop
  ;     ]
  ;   ]
end 

;;; the following procedures support the two extra buttons
;;; in the interface

;; remove all heat from the world

to deep-freeze
  ask patches [ set temp 0 ]
end 

;; add max-output-heat to all locations in the world, heating it evenly

to heat-up
  ask patches [ set temp temp + min-output-heat + output-heat-range ]
end 



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

There is only one version of this model, created over 1 year ago by Hendra Kusumah.

Attached files

File Type Description Last updated
Heatbugs Model - BehaviorSearch.png preview Preview for 'Heatbugs Model - BehaviorSearch' over 1 year ago, by Hendra Kusumah Download

This model does not have any ancestors.

This model does not have any descendants.