Ants/Kolokoltseva: различия между версиями
Материал из Поле цифровой дидактики
Нет описания правки |
Нет описания правки |
||
| Строка 1: | Строка 1: | ||
Remix [[Ants]] | |||
<netlogo model="Ants" /> | |||
---- | |||
--- | |||
patches-own [ | patches-own [ | ||
chemical ;; amount of chemical on this patch | chemical ;; amount of chemical on this patch | ||
| Строка 39: | Строка 38: | ||
;; spread a nest-scent over the whole world -- stronger near the nest | ;; spread a nest-scent over the whole world -- stronger near the nest | ||
set nest-scent 200 - distancexy 0 0 | 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 | end | ||
Версия от 09:49, 23 апреля 2026
Remix Ants
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" create-turtles 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
