Stygmergia v obrazovanii
Материал из Поле цифровой дидактики
Стигмергия в образовании
| Description | |
|---|---|
| Стигмергия | Стигмергия (от др.-греч. στίγμα — знак, метка, и ἔργον — действие, работа) — механизм спонтанного непрямого взаимодействия между индивидами, заключающийся в оставлении индивидами в окружающей среде меток, стимулирующих дальнейшую активность других индивидов. Стигмергия является одной из форм самоорганизации, создающая сложные, казалось бы, интеллектуальные структуры, но без какого-либо планирования, контроля, или даже прямой связи между индивидами. Как таковая, она поддерживает эффективное сотрудничество между чрезвычайно простыми индивидами, у которых нет памяти, интеллекта или даже осведомленности друг о друге. Предположительно, стигмергия является децентрализованным сетевым свойством коллективного взаимодействия термитов. Для эконометрики это означает, что у нас есть наблюдаемые микроданные о действиях агентов во времени, а также агрегированные показатели состояния артефакта (качество статьи, метрики студии, сетевые показатели), и мы можем строить модели «следы → дальнейшие действия/результаты |
Аннотация
Рабочие гипотезы
Инструменты
(Оставить 1 модееееель)
- Анализ данных и программирование: R (tidyverse, ggplot2, lmtest)
- Среда реализации: Поле цифровой дидактики (SMW)
Участники
Распределение работы
- Кира Софронова - сделать З̸̧͖̫̫҇̀̇̑а҈̧̞̟̽͡д҉̨̜̒̽̕а̷͚̲̗҇̎̅̓͢ч̷̡̲̂̑͠а҈̨̱͎́̂͞
- Маргарита Еськова - сделать З̸̧͖̫̫҇̀̇̑а҈̧̞̟̽͡д҉̨̜̒̽̕а̷͚̲̗҇̎̅̓͢ч̷̡̲̂̑͠а҈̨̱͎́̂͞
- Анастасия Юдаева - сделать З̸̧͖̫̫҇̀̇̑а҈̧̞̟̽͡д҉̨̜̒̽̕а̷͚̲̗҇̎̅̓͢ч̷̡̲̂̑͠а҈̨̱͎́̂͞
План работы
- Настройка экспериментов в BehaviorSpace.
- Генерация и выгрузка данных.
- Регрессионный анализ и проверка гипотез в R.
- Оформление выводов и визуализация (RAWGraphs).
Результаты
(Графики, таблицы и т.д.)
Ссылки
(Всё что использовали и что помогло при изучении - сюда)
Модель
Просмотр кода с пояснениями(.nlogo)
Модель реализована в NetLogo. Ниже представлен полный код с подробными комментариями, объясняющими логику памяти муравьёв и визуализацию их состояний.
=== Параметры среды ===
* '''Размер мира:''' от -40 до 40 (80×80)
* '''Еда:''' на радиусе 30 от центра (3 или 6 кучек)
* '''Феромон:''' диффузия и испарение управляются ползунками `diffusion-rate` и `evaporation-rate`
=== Цветовая индикация муравьёв ===
{| class="wikitable"
! Цвет !! Состояние
|-
| '''Зелёный''' || Ищет еду, память пуста
|-
| '''Синий''' || Идёт по памяти к запомненной еде
|-
| '''Фиолетовый''' || Несёт еду в гнездо
|-
| '''Жёлтый''' || Имеет 1 место в памяти (но не использует его в данный момент)
|-
| '''Красный''' || Имеет 2 и более мест в памяти
|}
=== Полный код ===
<syntaxhighlight lang="netlogo" line>
;; ANTS WITH MEMORY - ФИНАЛ
;; ============================================
;; РАЗМЕР МИРА: от -40 до 40 (80×80)
;; ЕДА: на радиусе 30 от центра
;; ============================================
;; ЦВЕТА МУРАВЬЁВ:
;; ЗЕЛЁНЫЙ - ищет еду (память пуста)
;; СИНИЙ - идёт по памяти к еде
;; ФИОЛЕТОВЫЙ - несёт еду в гнездо
;; ЖЁЛТЫЙ - 1 место в памяти (не использует)
;; КРАСНЫЙ - 2+ места в памяти (не использует)
;; ============================================
globals [
total-food-count ; общее количество еды, доставленной в гнездо
]
patches-own [
chemical ; феромон на патче (коллективный след)
food-here ; наличие еды на патче (0 или 1)
is-nest ; является ли патч гнездом (1 да, 0 нет)
]
turtles-own [
my-food ; есть ли у муравья еда (0 или 1)
my-energy ; текущий запас энергии муравья
my-memory ; список запомненных патчей (места, где была еда)
]
;;;;;;;;;;;;;;;;;;;;;;;;
;;; НАСТРОЙКА МИРА
;;;;;;;;;;;;;;;;;;;;;;;;
to setup
clear-all
set-default-shape turtles "bug"
; ===== СОЗДАЁМ ГНЕЗДО =====
; Все патчи в радиусе 5 от центра становятся гнездом
ask patches [
ifelse (distancexy 0 0) < 5 [
set is-nest 1
set pcolor violet
] [
set is-nest 0
set food-here 0
set chemical 0
]
]
; ===== СОЗДАЁМ ИСТОЧНИКИ ЕДЫ =====
let radius 30 ; расстояние от центра до еды
let sources 3 ; базовое количество источников
if more-food? = true [ set sources 6 ] ; если включён переключатель
; Равномерно распределяем источники по кругу
let angles [] ; список углов
let step 360 / sources ; шаг между источниками
let current 0
repeat sources [
set angles lput current angles
set current current + step
]
; Для каждого угла создаём пятно еды радиусом 5
foreach angles [ angle ->
let xc radius * cos angle
let yc radius * sin angle
ask patches with [ distancexy xc yc < 5 ] [
set food-here 1
; Разные цвета для разных источников
if angle = 0 [ set pcolor cyan ]
if angle = 60 [ set pcolor sky ]
if angle = 120 [ set pcolor blue ]
if angle = 180 [ set pcolor cyan ]
if angle = 240 [ set pcolor sky ]
if angle = 300 [ set pcolor blue ]
]
]
; ===== СОЗДАЁМ МУРАВЬЁВ =====
create-turtles population [
setxy 0 0 ; все муравьи начинают из гнезда
set size 2
set color green ; ЗЕЛЁНЫЙ - ищет еду, память пуста
set my-food 0
set my-energy 200
set my-memory [] ; память пуста
]
set total-food-count 0
reset-ticks
end
;;;;;;;;;;;;;;;;;;;;;
;;; ОСНОВНОЙ ЦИКЛ
;;;;;;;;;;;;;;;;;;;;;
to go
ask turtles [
if who >= ticks [ stop ]
; ===== ТРАТИМ ЭНЕРГИЮ =====
; Каждый шаг отнимает 1 единицу энергии
set my-energy my-energy - 1
if my-energy <= 0 [ die ] ; энергия кончилась - муравей умирает
; ===== СБРОС ЕДЫ В ГНЕЗДЕ =====
; Если муравей в гнезде и несёт еду - выгружает её
if is-nest = 1 and my-food = 1 [
set my-food 0
set my-energy my-energy + 100 ; награда за доставленную еду
set total-food-count total-food-count + 1 ; увеличиваем счётчик
update-color-by-memory ; обновляем цвет в зависимости от памяти
rt 180 ; разворачиваемся
]
; ===== ВОЗВРАЩЕНИЕ С ЕДОЙ =====
; Если муравей несёт еду - идёт прямо в гнездо
if my-food = 1 [
set color violet ; ФИОЛЕТОВЫЙ - несёт еду
set chemical chemical + 60 ; оставляет феромон
facexy 0 0 ; поворачивается к центру (гнезду)
wiggle
fd 1
stop
]
; ===== ПОИСК ЕДЫ =====
; Если муравей не несёт еду - ищет её
look-for-food
wiggle
fd 1
]
; ===== ОБРАБОТКА ФЕРОМОНА =====
; Диффузия: феромон распространяется на соседние патчи
diffuse chemical (diffusion-rate / 100)
ask patches [
; Испарение: феромон постепенно исчезает
set chemical chemical * (100 - evaporation-rate) / 100
if chemical < 0.01 [ set chemical 0 ]
; Визуализация феромона (чем больше феромона, тем ярче зелёный)
if food-here = 0 and is-nest = 0 [
set pcolor scale-color green chemical 0 5
]
]
tick
end
;;;;;;;;;;;;;;;;;;;;;
;;; ПОИСК ЕДЫ С ПАМЯТЬЮ
;;;;;;;;;;;;;;;;;;;;;
to look-for-food
; ===== ПОДБОР ЕДЫ =====
; Если на текущем патче есть еда - подбираем её
if food-here > 0 [
set my-food 1
set food-here food-here - 1 ; еда исчезает с патча
; ЗАПОМИНАЕМ МЕСТО
if use-memory? [
set my-memory lput patch-here my-memory ; добавляем патч в список
if length my-memory > 15 [ set my-memory but-last my-memory ] ; ограничиваем размер
]
rt 180 ; разворачиваемся к гнезду
stop
]
; ===== ИСПОЛЬЗОВАНИЕ ПАМЯТИ =====
; Если память включена, энергии мало и есть запомненные места
if use-memory? and my-energy < memory-threshold and length my-memory > 0 [
let target nobody
let best-dist 999999
; Находим ближайшее запомненное место
foreach my-memory [ mem-patch ->
let d distance mem-patch
if d < best-dist [
set best-dist d
set target mem-patch
]
]
if target != nobody [
; ПРОВЕРЯЕМ, ЕСТЬ ЛИ ЕЩЁ ЕДА НА ЗАПОМНЕННОМ МЕСТЕ
ifelse [food-here] of target > 0 [
set color blue ; СИНИЙ - идёт по памяти к еде
face target
stop
] [
; ЕСЛИ ЕДЫ НЕТ - ИЩЕМ В РАДИУСЕ 8 ПАТЧЕЙ ВОКРУГ
let nearby-food patches with [food-here > 0 and distance target <= 8]
ifelse any? nearby-food [
; нашли еду рядом - идём к ближайшей
let closest-nearby min-one-of nearby-food [distance myself]
; добавляем новое место в память
set my-memory lput closest-nearby my-memory
if length my-memory > 15 [ set my-memory but-last my-memory ]
set color blue ; СИНИЙ - идёт по памяти к еде
face closest-nearby
stop
] [
; НЕТ ЕДЫ В РАДИУСЕ - УДАЛЯЕМ ЭТО МЕСТО ИЗ ПАМЯТИ
set my-memory remove target my-memory
]
]
]
]
; ===== ОБНОВЛЕНИЕ ЦВЕТА =====
update-color-by-memory
; ===== ДВИЖЕНИЕ ПО ФЕРОМОНУ =====
; Если есть феромон - идём по нему
if (chemical >= 0.05) and (chemical < 2) [
uphill-chemical
]
end
;;;;;;;;;;;;;;;;;;;;;
;;; ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ
;;;;;;;;;;;;;;;;;;;;;
to update-color-by-memory
; Обновляет цвет муравья в зависимости от размера его памяти
; (только если муравей не несёт еду и не в режиме синего)
if my-food = 0 and color != blue [
let mem-count length my-memory
if mem-count = 0 [ set color green ] ; ЗЕЛЁНЫЙ - память пуста
if mem-count = 1 [ set color yellow ] ; ЖЁЛТЫЙ - 1 место
if mem-count >= 2 [ set color red ] ; КРАСНЫЙ - 2+ мест
]
end
to uphill-chemical
; Движение вверх по градиенту феромона
; Сравнивает концентрацию феромона спереди, справа и слева
let scent-ahead chemical-scent 0
let scent-right chemical-scent 45
let scent-left chemical-scent -45
if (scent-right > scent-ahead) or (scent-left > scent-ahead) [
ifelse scent-right > scent-left [ rt 45 ] [ lt 45 ]
]
end
to wiggle
; Лёгкое случайное покачивание, чтобы муравьи не застревали
rt random 30
lt random 30
if not can-move? 1 [ rt 180 ]
end
to-report chemical-scent [angle]
; Возвращает количество феромона на патче под указанным углом
let p patch-right-and-ahead angle 1
if p = nobody [ report 0 ]
report [chemical] of p
end
; Copyright 1997 Uri Wilensky.Элементы управления на Interface
Для работы модели добавьте на вкладку Interface следующие элементы:
| Элемент | Переменная | Диапазон / Значения | Описание |
|---|---|---|---|
| Button | `setup` | — | Инициализация модели |
| Button | `go` | флаг "Forever" | Запуск симуляции |
| Slider | `population` | 0–100 | Количество муравьёв |
| Slider | `diffusion-rate` | 0–50 | Скорость распространения феромона |
| Slider | `evaporation-rate` | 0–20 | Скорость исчезновения феромона |
| Switch | `use-memory?` | On/Off | Включение/выключение памяти |
| Switch | `more-food?` | On/Off | Включение/выключение дополнительных источников еды |
| Slider | `memory-threshold` | 50–200 | Порог энергии для использования памяти |
Как это работает
- Муравьи начинают с пустой памятью (зелёные)
- Найдя еду, запоминают координаты патча и становятся фиолетовыми (несут еду)
- После доставки еды в гнездо цвет меняется в зависимости от количества запомненных мест (жёлтый = 1 место, красный = 2+)
- Когда энергия падает ниже порога (`memory-threshold`), муравей с памятью становится синим и идёт к ближайшему запомненному месту
- Если запомненное место опустело, муравей ищет еду в радиусе 8 патчей вокруг; если не находит — забывает это место
</syntaxhighlight>
Скачать модель с репозитория(.nlogox)
GitHub: [1]
