Sustainable Village Group 7
Model was written in NetLogo 6.2.0
•
Viewed 57 times
•
Downloaded 3 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
;;INCLUDE FILES;; ;__includes["Agent_Script.nls" "Village_Script.nls"] breed [trees tree] breed [berries berry] breed [animals animal] breed[villagers villager] breed [houses house] turtles-own[ age energy tiredness base-berries-weight base-wood-weight base-hunt-weight desired-berries desired-animals desired-trees berries-weight wood-weight hunt-weight rest-weight my-house occupants house-meat house-berries ] globals [ berry-base-energy berry-bonus-energy meat-base-energy meat-bonus-energy n average-berry-weight average-wood-weight average-hunt-weight average-desired-berries average-desired-animals average-desired-trees village-wood village-berries village-meat empty-capacity ] ;;SETUP FUNCTION;; to setup clear-all setup-patches setup-village ;;setup village set-default-shape houses "house" create-houses 1 [ set color brown set size 2.5 set energy 0 house-position ] set-default-shape trees "tree" create-trees initial-number-trees [ set color green set size 1.5 ;;set energy 0 resource-position ] set-default-shape berries "circle" create-berries initial-number-berries [ set color red set size 0.5 set energy 0 resource-position ] set-default-shape animals "sheep" create-animals initial-number-animals [ set color white set size 1 set energy 100 resource-position ] setup-agents ;;setup agents ;;display-labels reset-ticks end to setup-trees ;;create-trees 50 [ setxy random-xcor random-ycor ] end to setup-patches if grass-background = true [ ask patches [ set pcolor 56 ] ] end ;;GO FUNCTION;; to go choose-action ;; have agents wander around the map set empty-capacity 0 ask houses[ set empty-capacity empty-capacity + house-capacity - count links build-house ] ask villagers [ villager-reproduce ] ask berries[ grow-berries ;; for now the berries only spawn if other berries are still on the scene ] ask trees[ grow-trees ] ask animals[ wander-sheep grow-animals eat-berries ifelse show-energy = true [ set label round energy set label-color [0 0 255] ] [ set label "" ] ] calculate-food tick end to grow-berries if random-float 100 < berries-spawn-rate and count (berries in-radius 1) < 2 [ hatch 1 [resource-position] ] end to grow-trees if random-float 200 < trees-spawn-rate and count (trees in-radius 2) < 2 [ hatch 1 [ resource-position ] ] end to grow-animals if random-float 200 < animals-spawn-rate [ hatch 1 [ rt random-float 360 fd 1 ] ] end to eat-berries if energy <= sheep-energy-to-eat ;;70 [ if any? berries in-radius 1 [ ask berries in-radius 2 [die] set energy energy + 20 ] ] end to house-position setxy (-5 + random-float 10) (-5 + random-float 10) end to resource-position let x random-float 32 let y random-float 32 if x > 7 or x < 25 [ set y random-float 32 setxy x y ]ifelse x < 7 or x > 25 [ set y (7 + random-float 19) setxy x y ][setxy x y] end to check-position end ;;TURTLE VARIABLES;; to setup-agents set-default-shape turtles "person" create-villagers population [ set-agent-stats if energy < 25 [set energy energy + 60] setxy random-xcor random-ycor set color pink ] end to gather-berries set color red set energy energy - 0.5 set tiredness tiredness + 0.05 if any? berries in-radius 1 [ ask one-of berries in-radius 1 [die] let my-berries 0 if my-house != nobody [ ask my-house [ set my-berries house-berries ] ] ifelse energy < 25 or my-berries >= max-berries-per-house or my-house = nobody ; only eat the food if hungry, else give to village [ set energy energy + base-berry-energy + random-float bonus-berry-energy ] [ ask my-house [ set house-berries house-berries + 1 ] ] ] end to hunt set color orange set energy energy - 1.5 set tiredness tiredness + 0.25 if any? animals in-radius 1 [ if random-float 100 < hunting-risk [set energy energy - 25] ask one-of animals in-radius 1 [die] let my-meat 0 if my-house != nobody [ ask my-house [ set my-meat house-meat ] ] ifelse energy < 25 or my-meat >= max-meat-per-house or my-house = nobody ; only eat the food if hungry, else give to village [ set energy energy + base-meat-energy + random-float bonus-meat-energy ] [ ask my-house [ set house-meat house-meat + 1 ] ] ] end to gather-wood set energy energy - 0.5 set tiredness tiredness + 0.1 set color brown if any? trees in-radius 1 [ ask one-of trees in-radius 1 [die] set village-wood village-wood + 2 set energy energy - 2 ] end to rest set color pink let house-x 0 let house-y 0 set energy energy - 0.2 while [tiredness > 0] [ if my-house != nobody [ face my-house fd 0.5 set energy energy + 0.5 ] set tiredness tiredness - 0.5 ] if tiredness < 0 [ set tiredness 0 ] end to wander fd 1 rt random 80 lt random 80 end to wander-sheep fd 0.5 rt random 40 lt random 40 set energy energy - 0.1 if energy > 100 [ set energy 100 ] if energy < 0 [ die ] end to choose-action let total-berry-weight 0 let total-wood-weight 0 let total-hunt-weight 0 let total-desired-berries 0 let total-desired-animals 0 let total-desired-trees 0 ask villagers[ ifelse show-energy = true [ set label round energy ] [ set label "" ] if energy > 200 [ set energy 200 ] if tiredness > 100 [ set tiredness 100 ] if my-house = nobody [ let possible-house nobody ask one-of houses [ if count links < house-capacity [ create-link-with myself set possible-house self ] ] set my-house possible-house ] wander calculate-weights let random-number random-float (berries-weight + wood-weight + hunt-weight + rest-weight) (ifelse ; if berry gathering selected random-number < berries-weight [ gather-berries ] ; if wood gathering selected random-number < wood-weight + berries-weight [ gather-wood ] ; if hunt selected random-number < hunt-weight + wood-weight + berries-weight [ hunt ] ; if resting selected, still uses a small amount of energy [ rest ] ) ; not using this - kept code just in case (ifelse energy < 40[gather-food]energy > 75[gather-wood][set color pink]) if energy <= 0 ; if out of energy, try and eat from the village food, or else die [ let my-berries 0 let my-meat 0 if my-house = nobody [ die ] ask my-house [ set my-berries house-berries set my-meat house-meat ] (ifelse my-meat > 0 [ set energy energy + base-meat-energy + random bonus-meat-energy ask my-house [ set house-meat house-meat - 1 ] ] my-berries > 0 [ set energy energy + base-berry-energy + random bonus-berry-energy ask my-house [ set house-berries house-berries - 1 ] ] [ die ] ) ] set total-berry-weight total-berry-weight + base-berries-weight set total-wood-weight total-wood-weight + base-wood-weight set total-hunt-weight total-hunt-weight + base-hunt-weight set total-desired-berries total-desired-berries + desired-berries set total-desired-animals total-desired-animals + desired-animals set total-desired-trees total-desired-trees + desired-trees set age age + 1 ] if count villagers > 1 [ set average-berry-weight total-berry-weight / count villagers set average-wood-weight total-wood-weight / count villagers set average-hunt-weight total-hunt-weight / count villagers set average-desired-berries total-desired-berries / count villagers set average-desired-animals total-desired-animals / count villagers set average-desired-trees total-desired-trees / count villagers ] end to calculate-weights ; check if the village is low on food set berries-weight base-berries-weight set wood-weight base-wood-weight set hunt-weight base-hunt-weight if count berries != 0 and count berries < desired-berries - 5 and count animals > desired-animals + 5 [ set hunt-weight 1 ] let my-berries max-berries-per-house let my-meat max-meat-per-house if my-house != nobody [ ask my-house [ set my-berries house-berries set my-meat house-meat ] ] ifelse my-berries < max-berries-per-house * 0.6 or my-meat < max-meat-per-house * 0.6 or energy < 50 [ ; check if villager is hungry, if it is there should be no particular emphasis on gathering wood if (energy < 50) [ set wood-weight 0.1 ] ifelse count berries > desired-berries + 5 [ set berries-weight 1 ] [ if count berries < desired-berries - 5 [ set berries-weight 0 ] ] ifelse count animals > desired-animals + 5 [ set hunt-weight 1 ] [ if count animals < desired-animals - 5 [ set hunt-weight 0 ] ] ] [ set berries-weight 0 set hunt-weight 0 if count trees > desired-trees + 5 [ set wood-weight 1 ] ] if count trees < desired-trees - 5 or (count houses * (house-capacity * 0.9)) >= count villagers [ set wood-weight 0 ] if tiredness > 60 [ set rest-weight 1 ] end to villager-reproduce let house-space 0 if my-house != nobody [ ask my-house [ set house-space house-capacity - count links ] ] if energy > 80 and random-float 100 < villager-reproduction-rate and my-house != nobody and age > reproductive-age [ set energy energy - 40 let newborn-berries-weight base-berries-weight - 0.025 + random-float 0.05 let newborn-wood-weight base-wood-weight - 0.025 + random-float 0.05 let newborn-hunt-weight base-hunt-weight - 0.025 + random-float 0.05 if newborn-berries-weight > 0.8 [set newborn-berries-weight 0.8] if newborn-wood-weight > 0.8 [set newborn-wood-weight 0.8] if newborn-hunt-weight > 0.8 [set newborn-hunt-weight 0.8] if newborn-berries-weight < 0.2 [set newborn-berries-weight 0.2] if newborn-wood-weight < 0.2 [set newborn-wood-weight 0.2] if newborn-hunt-weight < 0.2 [set newborn-hunt-weight 0.2] let newborn-desired-berries desired-berries - 0.5 + random-float 1 let newborn-desired-animals desired-animals - 0.5 + random-float 1 let newborn-desired-trees desired-trees - 0.5 + random-float 1 if newborn-desired-berries < 5 [set newborn-desired-berries 5] if newborn-desired-animals < 5 [set newborn-desired-animals 5] if newborn-desired-trees < 5 [set newborn-desired-trees 5] let newborn-house 0 if house-space > 0 [ set newborn-house my-house ] hatch 1 [ rt random-float 360 fd 1 set age 0 set energy 100 ifelse evolve-naturally = true [ set base-berries-weight newborn-berries-weight set base-wood-weight newborn-wood-weight set base-hunt-weight newborn-hunt-weight set desired-berries newborn-desired-berries set desired-animals newborn-desired-animals set desired-trees newborn-desired-trees ] [ set base-berries-weight initial-berries-weight set base-wood-weight initial-wood-weight set base-hunt-weight initial-hunt-weight set desired-berries initial-desired-berries set desired-animals initial-desired-animals set desired-trees initial-desired-trees ] ifelse my-house != nobody and house-space > 0 [ set my-house newborn-house ] [ set my-house nobody ] ask myself [ if house-space > 0 [ ask my-house [ create-link-with myself ] ] ] ] ] end ; set initial villagers stats to set-agent-stats set age 0 set size 1 set energy 100 set tiredness 0 set base-berries-weight initial-berries-weight set base-wood-weight initial-wood-weight set base-hunt-weight initial-hunt-weight set desired-berries initial-desired-berries set desired-animals initial-desired-animals set desired-trees initial-desired-trees set rest-weight 0 set my-house nobody end to setup-village set village-wood initial-village-wood end to calculate-food set village-meat 0 set village-berries 0 ask houses [ if house-meat > max-meat-per-house [ set house-meat max-meat-per-house ] if house-berries > max-berries-per-house [ set house-berries max-berries-per-house ] set village-meat village-meat + house-meat set village-berries village-berries + house-berries ] end to build-house if (village-wood >= wood-required-for-house) and (count houses * (house-capacity * 0.6) < count villagers) [ set village-wood village-wood - wood-required-for-house hatch 1 [ house-position ] ] end
There is only one version of this model, created about 3 years ago by Ryan Winton.
Attached files
File | Type | Description | Last updated | |
---|---|---|---|---|
Sustainable Village Group 7.png | preview | Preview for 'Sustainable Village Group 7' | about 3 years ago, by Ryan Winton | Download |
This model does not have any ancestors.
This model does not have any descendants.