Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- patches-own [
- chemical ;; amount of chemical on this patch
- food ;; amount of food on this patch (0, 1, or 2)
- nest? ;; true on nest patches, false elsewhere
- nest-scent ;; number that is higher closer to the nest
- food-source-number ;; number (1, 2, or 3) to identify the food sources
- ]
- ;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; Setup procedures ;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;
- to setup
- clear-all
- set-default-shape turtles "bug"
- crt population
- [ set size 2 ;; easier to see
- set color red ] ;; red = not carrying food
- setup-patches
- reset-ticks
- end
- to setup-patches
- ask patches
- [ setup-nest
- setup-food
- recolor-patch ]
- end
- to setup-nest ;; patch procedure
- ;; set nest? variable to true inside the nest, false elsewhere
- set nest? (distancexy 0 0) < 5
- ;; spread a nest-scent over the whole world -- stronger near the nest
- set nest-scent 200 - distancexy 0 0
- end
- to setup-food ;; patch procedure
- ;; setup food source one on the right
- if (distancexy (0.6 * max-pxcor) 0) < 5
- [ set food-source-number 1 ]
- ;; setup food source two on the lower-left
- if (distancexy (-0.6 * max-pxcor) (-0.6 * max-pycor)) < 5
- [ set food-source-number 2 ]
- ;; setup food source three on the upper-left
- if (distancexy (-0.8 * max-pxcor) (0.8 * max-pycor)) < 5
- [ set food-source-number 3 ]
- ;; set "food" at sources to either 1 or 2, randomly
- if food-source-number > 0
- [ set food one-of [1 2] ]
- end
- to recolor-patch ;; patch procedure
- ;; give color to nest and food sources
- ifelse nest?
- [ set pcolor violet ]
- [ ifelse food > 0
- [ if food-source-number = 1 [ set pcolor cyan ]
- if food-source-number = 2 [ set pcolor sky ]
- if food-source-number = 3 [ set pcolor blue ] ]
- ;; scale color to show chemical concentration
- [ set pcolor scale-color green chemical 0.1 5 ] ]
- end
- ;;;;;;;;;;;;;;;;;;;;;
- ;;; Go procedures ;;;
- ;;;;;;;;;;;;;;;;;;;;;
- to go ;; forever button
- ask turtles
- [ if who >= ticks [ stop ] ;; delay initial departure
- ifelse color = red
- [ look-for-food ] ;; not carrying food? look for it
- [ return-to-nest ] ;; carrying food? take it back to nest
- wiggle
- fd 1 ]
- diffuse chemical (diffusion-rate / 100)
- ask patches
- [ set chemical chemical * (100 - evaporation-rate) / 100 ;; slowly evaporate chemical
- recolor-patch ]
- tick
- end
- to return-to-nest ;; turtle procedure
- ifelse nest?
- [ ;; drop food and head out again
- set color red
- rt 180 ]
- [ set chemical chemical + 60 ;; drop some chemical
- uphill-nest-scent ] ;; head toward the greatest value of nest-scent
- end
- to look-for-food ;; turtle procedure
- if food > 0
- [ set color orange + 1 ;; pick up food
- set food food - 1 ;; and reduce the food source
- rt 180 ;; and turn around
- stop ]
- ;; go in the direction where the chemical smell is strongest
- if (chemical >= 0.05) and (chemical < 2)
- [ uphill-chemical ]
- end
- ;; sniff left and right, and go where the strongest smell is
- to uphill-chemical ;; turtle procedure
- let scent-ahead chemical-scent-at-angle 0
- let scent-right chemical-scent-at-angle 45
- let scent-left chemical-scent-at-angle -45
- if (scent-right > scent-ahead) or (scent-left > scent-ahead)
- [ ifelse scent-right > scent-left
- [ rt 45 ]
- [ lt 45 ] ]
- end
- ;; sniff left and right, and go where the strongest smell is
- to uphill-nest-scent ;; turtle procedure
- let scent-ahead nest-scent-at-angle 0
- let scent-right nest-scent-at-angle 45
- let scent-left nest-scent-at-angle -45
- if (scent-right > scent-ahead) or (scent-left > scent-ahead)
- [ ifelse scent-right > scent-left
- [ rt 45 ]
- [ lt 45 ] ]
- end
- to wiggle ;; turtle procedure
- rt random 40
- lt random 40
- if not can-move? 1 [ rt 180 ]
- end
- to-report nest-scent-at-angle [angle]
- let p patch-right-and-ahead angle 1
- if p = nobody [ report 0 ]
- report [nest-scent] of p
- end
- to-report chemical-scent-at-angle [angle]
- let p patch-right-and-ahead angle 1
- if p = nobody [ report 0 ]
- report [chemical] of p
- end
- ; Copyright 1997 Uri Wilensky.
- ; See Info tab for full copyright and license.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement