NetLogo 狼吃羊模型:模拟性别与繁殖
globals [grass t beta] ;; keep track of how much grass there is ;; 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 gender] ;; both wolves and sheep have energy and gender 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) set gender one-of ['male' 'female'] 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 2 ;; easier to see set energy random (2 * wolf-gain-from-food) set gender one-of ['male' 'female'] setxy random-xcor random-ycor ] 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 gender = 'female' and random-float 100 < sheep-reproduce [ ;; throw "dice" to see if you will reproduce let potential-partners other sheep-here in-radius t with [gender = 'male'] if any? potential-partners and random-float 100 < beta [ set energy (energy / 2) ;; divide energy between parent and offspring hatch 1 [ set gender one-of ['male' 'female'] rt random-float 360 fd 1 ] ;; hatch an offspring and move it forward 1 step ] ] end
to reproduce-wolves ;; wolf procedure if gender = 'female' and random-float 100 < wolf-reproduce [ ;; throw "dice" to see if you will reproduce let potential-partners other wolves-here in-radius t with [gender = 'male'] if any? potential-partners and random-float 100 < beta [ set energy (energy / 2) ;; divide energy between parent and offspring hatch 1 [ set gender one-of ['male' 'female'] 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
原文地址: http://www.cveoy.top/t/topic/nOgr 著作权归作者所有。请勿转载和采集!