globals [grass] ;; keep track of how much grass there is ;; Sheep and wolves are both breeds of turtle. breed [sheep a-sheep] breed [wolves wolf]

turtles-own [energy sex] patches-own [countdown]

to setup clear-all 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 pcolor one-of [green brown] if-else pcolor = green [ set countdown grass-regrowth-time ] [ set countdown random grass-regrowth-time ] ;; initialize grass grow clocks randomly for brown patches ] ] 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 sex one-of ["male" "female"] ] set-default-shape wolves "wolf" create-wolves initial-number-wolves ;; create the wolves, then initialize their variables [ set color black set size 2 ;; easier to see set energy random (2 * wolf-gain-from-food) setxy random-xcor random-ycor set sex one-of ["male" "female"] ] display-labels set grass count patches with [pcolor = green] reset-ticks end

to go 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 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 set sex one-of ["male" "female"]] ;; hatch an offspring and move it forward 1 step ] if sex = "male" [ let potential-mates sheep with [sex = "female" and distance myself < t] if any? potential-mates and random-float 100 < beta [ ;; throw "dice" to see if you will reproduce let mate one-of potential-mates hatch 1 [ set energy (energy / 2) set sex one-of ["male" "female"] ] ask mate [hatch 1 [ set energy (energy / 2) set sex one-of ["male" "female"]]] ] ] 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 set sex one-of ["male" "female"]] ;; hatch an offspring and move it forward 1 step ] if sex = "male" [ let potential-mates wolves with [sex = "female" and distance myself < t] if any? potential-mates and random-float 100 < beta [ ;; throw "dice" to see if you will reproduce let mate one-of potential-mates hatch 1 [ set energy (energy / 2) set sex one-of ["male" "female"] ] ask mate [hatch 1 [ set energy (energy / 2) set sex one-of ["male" "female"]]] ] ] 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

to-report total-grass report count patches with [pcolor = green] end

to-report total-sheep report count sheep end

to-report total-wolves report count wolves end

to experiment clear-all set grass? true set initial-number-sheep 50 set initial-number-wolves 10 set sheep-gain-from-food 4 set wolf-gain-from-food 20 set sheep-reproduce 8 set wolf-reproduce 5 set grass-regrowth-time 30 set beta 50 set t 5 setup repeat 500 [ go ] print (word "Beta: " beta " t: " t " Grass: " total-grass " Sheep: " total-sheep " Wolves: " total-wolves) end

experiment ;run experiment to see the result

以下为netlogo的狼吃羊代码globals grass ;; keep track of how much grass there is;; Sheep and wolves are both breeds of turtlebreed sheep a-sheep ;; sheep is its own plural so we use a-sheep as the singularbre

原文地址: http://www.cveoy.top/t/topic/ebBX 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录