Ants/Clone01
Материал из Поле цифровой дидактики
turtles-own [
has-food ; 0 = нет еды, 1 = несёт еду memory ; список запомненных патчей (где была еда) energy ; энергия муравья
]
globals [
total-food ; сколько еды доставлено в гнездо
]
- НАСТРОЙКА МИРА ;;
to setup
clear-all set-default-shape turtles "bug" ; гнездо в центре (0,0) ask patch 0 0 [ set pcolor violet ] ; 8 источников еды по кругу (для мира от -16 до 16) ask patch 16 0 [ set pcolor green set plabel "E" ] ; право ask patch -16 0 [ set pcolor green set plabel "E" ] ; лево ask patch 0 16 [ set pcolor green set plabel "E" ] ; верх ask patch 0 -16 [ set pcolor green set plabel "E" ] ; низ ask patch 16 16 [ set pcolor green set plabel "E" ] ; верх-право ask patch -16 16 [ set pcolor green set plabel "E" ] ; верх-лево ask patch 16 -16 [ set pcolor green set plabel "E" ] ; низ-право ask patch -16 -16 [ set pcolor green set plabel "E" ] ; низ-лево ; создаём муравьёв (40 штук) create-turtles 40 [ setxy 0 0 set color red set has-food 0 set memory [] set energy 200 ] set total-food 0 reset-ticks
end
- ОСНОВНОЙ ЦИКЛ ;;
to go
ask turtles [
; тратим энергию
set energy energy - 1
if energy <= 0 [ die ]
; поведение в зависимости от того, несёт ли еду
ifelse color = red
[ look-for-food ]
[ return-to-nest ]
; движение
fd 1
right random 30
left random 30
]
tick
end
- ПОВЕДЕНИЕ ;;
to look-for-food
; если на патче есть еда (зелёный цвет)
if pcolor = green [
set has-food 1
set color orange
set pcolor black ; еда исчезает
set plabel "" ; убираем метку
; ЗАПОМИНАЕМ МЕСТО (если память включена)
if use-memory? [
set memory lput patch-here memory
; ограничиваем память 15 местами
if length memory > 15 [ set memory but-last memory ]
]
right 180 ; разворачиваемся к гнезду
stop
]
; ЕСЛИ ЭНЕРГИЯ МАЛА И ЕСТЬ ПАМЯТЬ — ИДЁМ К ЗАПОМНЕННОМУ МЕСТУ
if use-memory? and energy < memory-threshold and length memory > 0 [
let target-patch min-one-of memory [distance myself]
if target-patch != nobody [
face target-patch
stop
]
]
end
to return-to-nest
; если в гнезде (фиолетовый патч) if pcolor = violet [ set has-food 0 set color red set energy energy + 100 ; награда за еду set total-food total-food + 1 right 180 stop ]
end
- ============================================
- ЗАБЫВАНИЕ УСТАРЕВШЕЙ ПАМЯТИ
- ============================================
to forget-stale-memory
if length memory > 0 [
let to-forget []
foreach memory [ mem-patch ->
; если на запомненном патче больше нет еды (не зелёный)
if [pcolor] of mem-patch != green [
set to-forget lput mem-patch to-forget
]
]
foreach to-forget [ forget-patch ->
set memory remove forget-patch memory
]
]
end
