Wolf Sheep Predation - GoGo Plotter
No preview image
Model was written in NetLogo 5.0RC7
•
Viewed 955 times
•
Downloaded 31 times
•
Run 0 times
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
Comments and Questions
Please start the discussion about this model!
(You'll first need to log in.)
Click to Run Model
extensions [gogo] globals [ ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;; @FIrat, all new global parameters for our go go board version ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; grass? grass-regrowth-time penmovetimer ;; timer for moving pen plotting? ;; have we started plotting yet lastdsheeppos? ;; was the last change in sheep population positive? lastsheepcount grass ;; keep track of how much grass there is serial-port ;; different on different operating systems paperstarted? ;; boolean for whether paper has been started ] ;; Sheep and wolves are both breeds of turtle. breed [sheep a-sheep] ;; sheep is its own plural, so we use "a-sheep" as the singular. breed [wolves wolf] turtles-own [energy] ;; both wolves and sheep have energy patches-own [countdown] to setup clear-all ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;; @Firat, our new setup procedures ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; setup-gogo ;; set last dsheep to positive set lastdsheeppos? true ;; sets lastsheepcount to 155 because that is just about the mean sheep count with the currently setup parameters ;; and so that therefore works as the starting point for the pen set lastsheepcount 155 set grass? true set grass-regrowth-time 30 set paperstarted? false set plotting? false ;; set the penmovetimer to silly high number so it does not start at first set penmovetimer -1 ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;; @Firat, this is the old code ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;; "old" predation model code ask patches [ set pcolor green ] ;; check GRASS? switch. ;; if it is true, then grass grows and the sheep eat it ;; if it false, then the sheep don't need to eat if grass? [ ask patches [ set countdown random grass-regrowth-time ;; initialize grass grow clocks randomly set pcolor one-of [green brown] ] ] set-default-shape sheep "sheep" create-sheep initial-number-sheep ;; create the sheep, then initialize their variables [ set color white set size 1.5 ;; easier to see set label-color blue - 2 set energy random (2 * sheep-gain-from-food) setxy random-xcor random-ycor ] set-default-shape wolves "wolf" create-wolves initial-number-wolves ;; create the wolves, then initialize their variables [ set color black set size 1.5 ;; easier to see set energy random (2 * wolf-gain-from-food) setxy random-xcor random-ycor ] display-labels set grass count patches with [pcolor = green] reset-ticks end to go ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;; @Firat: These are our new procedures ;; we start plotting when there are exactly 155 sheep ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; if(plotting?) [ pauseanddraw ] if(count sheep = 155) [ set plotting? true ask sheep [set color red] if (not paperstarted?) [runpaper] ] ; if(count sheep = 155) ; [ ; runpaper ; movepen ; set plotting? true ; ask sheep [set color red] ; ; ] ;; if we have started plotting, we check if the pen move timer is up ;; the pen move timer is a set amount of time from the last time we started the motors ;; and is calculated in move-pen-for-time ;; if we are plotting and the pen move timer is up, we move the pen again ; if (plotting?) ; [ ; if timer > penmovetimer ; [ ; movepen ; ] ; ] ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;; @Firat OLD CODE ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; if not any? turtles [ stop ] ask sheep [ move if grass? [ set energy energy - 1 ;; deduct energy for sheep only if grass? switch is on eat-grass ] death reproduce-sheep ] ask wolves [ move set energy energy - 1 ;; wolves lose energy as they move catch-sheep death reproduce-wolves ] if grass? [ ask patches [ grow-grass ] ] set grass count patches with [pcolor = green] tick display-labels if (stop?) [stoppaper] if (not stop?) [go] end to move ;; turtle procedure rt random 50 lt random 50 fd 1 end to eat-grass ;; sheep procedure ;; sheep eat grass, turn the patch brown if pcolor = green [ set pcolor brown set energy energy + sheep-gain-from-food ;; sheep gain energy by eating ] end to reproduce-sheep ;; sheep procedure if random-float 100 < sheep-reproduce [ ;; throw "dice" to see if you will reproduce set energy (energy / 2) ;; divide energy between parent and offspring hatch 1 [ rt random-float 360 fd 1 ] ;; hatch an offspring and move it forward 1 step ] end to reproduce-wolves ;; wolf procedure if random-float 100 < wolf-reproduce [ ;; throw "dice" to see if you will reproduce set energy (energy / 2) ;; divide energy between parent and offspring hatch 1 [ rt random-float 360 fd 1 ] ;; hatch an offspring and move it forward 1 step ] end to catch-sheep ;; wolf procedure let prey one-of sheep-here ;; grab a random sheep if prey != nobody ;; did we get one? if so, [ ask prey [ die ] ;; kill it set energy energy + wolf-gain-from-food ] ;; get energy from eating end to death ;; turtle procedure ;; when energy dips below zero, die if energy < 0 [ die ] end to grow-grass ;; patch procedure ;; countdown on brown patches: if reach 0, grow some grass if pcolor = brown [ ifelse countdown <= 0 [ set pcolor green set countdown grass-regrowth-time ] [ set countdown countdown - 1 ] ] end to display-labels ask turtles [ set label "" ] if show-energy? [ ask wolves [ set label round energy ] if grass? [ ask sheep [ set label round energy ] ] ] end ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;; Go go specific code ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;; setup go go board to setup-gogo set serial-port user-one-of "Select a port:" gogo:ports gogo:open serial-port repeat 5 [ if not gogo:ping [ user-message "The GoGo Board is not responding." ] ] gogo:talk-to-output-ports [ "a" "b" "b" "d" ] ;; sets the speed of both pen and paper to 1 gogo:talk-to-output-ports [ "a" ] gogo:set-output-port-power 1 gogo:talk-to-output-ports [ "b" ] gogo:set-output-port-power 1 end to movepen ;; find out the change in number of sheep ;; if there are more than 200 sheep or less than 110, the graph flatlines at min or max (which is why we ;; use a fake sheep count temp var) let fakesheepcount 0 if count sheep > 200 [set fakesheepcount 200] if count sheep < 110 [set fakesheepcount 110] if fakesheepcount = 0 [set fakesheepcount count sheep] ;; find change in sheep let dsheep fakesheepcount - lastsheepcount ; if abs dsheep < 30 [stop] ;; swap out lastsheepcount for current sheep count set lastsheepcount count sheep ;; reverse if last change was positive and it is now negative or vice versa if ((lastdsheeppos? and dsheep < 0) or (not lastdsheeppos? and dsheep > 0)) [ show "reverse" ;; print debug show dsheep ;; print debug ;; "reverse" last change positive bool set lastdsheeppos? not lastdsheeppos? ;; reverse pen stoppen reversepen ] ;; move the pen for 10 ms per sheep. Abs because otherwise we will set it to negative time and it will not work. move-pen-for-time abs dsheep * .5 end ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;; @Firat new code, our go go related stuff ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; to gogo-ping carefully [ if not gogo:ping [ user-message "Unable to ping GoGo Board." ] ] [ user-message error-message ] end to move-pen-for-time [time] gogo:talk-to-output-ports [ "a" ] gogo:output-port-on ;; set the timer set penmovetimer time reset-timer end to runpen gogo:talk-to-output-ports [ "a" ] gogo:output-port-on end to stoppen gogo:talk-to-output-ports [ "a" ] gogo:output-port-off end to runpaper gogo:talk-to-output-ports [ "b" ] gogo:output-port-on end to stoppaper gogo:talk-to-output-ports [ "b" ] gogo:output-port-off end to reversepen gogo:talk-to-output-ports [ "a" ] gogo:output-port-reverse end to reversepaper gogo:talk-to-output-ports [ "b" ] gogo:output-port-reverse end to pauseanddraw ;; find out the change in number of sheep ;; if there are more than 200 sheep or less than 110, the graph flatlines at min or max ;; so we either kill extra sheep or make some if there are too few let fakesheepcount 0 if count sheep > 200 [ask n-of (count sheep - 200) sheep [die]] if count sheep < 110 [ create-sheep (110 - count sheep) ;; create the sheep, then initialize their variables [ set color white set size 1.5 ;; easier to see set label-color blue - 2 set energy random (2 * sheep-gain-from-food) setxy random-xcor random-ycor ] ] if fakesheepcount = 0 [set fakesheepcount count sheep] ;; find change in sheep let dsheep fakesheepcount - lastsheepcount set lastsheepcount fakesheepcount ;; reverse if last change was positive and it is now negative or vice versa if ((lastdsheeppos? and dsheep < 0) or (not lastdsheeppos? and dsheep > 0)) [ ;; wait a second so that go go board does not get confused wait 1 show "reverse" ;; print debug ;; "reverse" last change positive bool set lastdsheeppos? not lastdsheeppos? ;; reverse pen reversepen ] show dsheep ;; print debug ; runpaper if dsheep != 0 [ runpen wait abs (dsheep * .01) ] ; stoppaper stoppen end ; Copyright 1997 Uri Wilensky. ; See Info tab for full copyright and license.
There is only one version of this model, created almost 13 years ago by Arthur Hjorth.
Attached files
No files
Parent: Wolf Sheep Predation
This model does not have any descendants.