Stygmergia v obrazovanii: различия между версиями

Материал из Поле цифровой дидактики
Строка 174: Строка 174:
Хотя основная гипотеза проверялась на доставленной еде, анализ выживаемости муравьёв дал интересные дополнительные результаты.
Хотя основная гипотеза проверялась на доставленной еде, анализ выживаемости муравьёв дал интересные дополнительные результаты.


'''Средняя выживаемость (count turtles) при 6 источниках еды:'''
Средняя выживаемость (`count turtles`) при 6 источниках еды:


| Стратегия | Средняя выживаемость |
{| class="wikitable"
|-----------|---------------------|
|-
| Только память | 41.2 |
! Стратегия !! Средняя выживаемость
| Феромон + память | 23.1 |
|-
| Только феромон | 8.1 |
| Только память || 41.2
|-
| Феромон + память || 23.1
|-
| Только феромон || 8.1
|}


'''ANOVA для выживаемости (3 источника):'''
'''ANOVA для выживаемости (3 источника):'''

Версия от 23:14, 10 июня 2026

Стигмергия в образовании

 Description
СтигмергияСтигмергия (от др.-греч. στίγμα — знак, метка, и ἔργον — действие, работа) — механизм спонтанного непрямого взаимодействия между индивидами, заключающийся в оставлении индивидами в окружающей среде меток, стимулирующих дальнейшую активность других индивидов. Стигмергия является одной из форм самоорганизации, создающая сложные, казалось бы, интеллектуальные структуры, но без какого-либо планирования, контроля, или даже прямой связи между индивидами. Как таковая, она поддерживает эффективное сотрудничество между чрезвычайно простыми индивидами, у которых нет памяти, интеллекта или даже осведомленности друг о друге. Предположительно, стигмергия является децентрализованным сетевым свойством коллективного взаимодействия термитов. Для эконометрики это означает, что у нас есть наблюдаемые микроданные о действиях агентов во времени, а также агрегированные показатели состояния артефакта (качество статьи, метрики студии, сетевые показатели), и мы можем строить модели «следы → дальнейшие действия/результаты

Аннотация

В данном проекте исследуется механизм стигмергии (коллективного взаимодействия через метки в среде) и его конкуренция/синергия с индивидуальной памятью агентов. На примере модифицированной агентной модели «Муравьи» (NetLogo) сравниваются три стратегии поиска ресурсов:

  • коллективный феромон
  • индивидуальная память
  • сочетание двух стратегий (феромон + память)

С помощью экспериментов в среде BehaviorSpace были собраны данные об эффективности колонии (по количеству доставленной еды и выживаемости муравьёв). Первый эксперимент (проверка Гипотезы 1) включал в себя 6 комбинаций параметров (3 стратегии × 2 уровня еды) с 20 повторениями (120 прогонов). Второй эксперимент (Гипотеза 2) был проведён при фиксированной стратегии «феромон + память» и двух уровнях еды (3 и 6 источников) с 30 повторениями (60 прогонов).


Цель работы

Оценить количественно, даёт ли совместное использование коллективного и индивидуального опыта статистически значимое преимущество по сравнению с каждым из механизмов по отдельности.

Рабочие гипотезы

Гипотеза 1. Сравнение механизмов: феромон, память и их сочетание

  • H₀: Не существует статистически значимой разницы в количестве доставленной еды `total-food-count` (эффективности) между тремя сценариями: использованием только коллективного феромона, индивидуальной памяти или их сочетания.
  • H₁: Сценарий, сочетающий коллективный феромон и индивидуальную память, обеспечивает статистически более высокую эффективность, чем каждый из механизмов по отдельности.

Гипотеза 2. Влияние количества источников еды

  • H₀: Увеличение количества источников еды с 3 до 6 не приводит к статистически значимому изменению эффективности колонии (`total-food-count`) и выживаемости муравьёв (`count turtles`).
  • H₁: Увеличение количества источников еды приводит к высокому росту эффективности колонии и выживаемости муравьёв, а также может влиять на величину преимущества от использования индивидуальной памяти.

Модель

Модель (.nlogox)

GitHub: Скачать модель по ссылке

Инструменты и параметры модели

Инструменты

  • Моделирование: NetLogo (модель Ants с добавленной памятью)
  • Анализ данных: R (библиотеки tidyverse, ggplot2, lmtest)
  • Среда реализации: Поле цифровой дидактики (SMW)

Параметры среды

  • Размер мира: от -40 до 40 (80×80)
  • Гнездо: центр (0,0), радиус 5
  • Еда: на радиусе 30 от центра, 3 или 6 кучек
  • Феромон: диффузия и испарение управляются ползунками `diffusion-rate` и `evaporation-rate`

Управляющие параметры (настройки модели)

Переменная Тип Диапазон Описание
`population` Slider 0–100 Количество муравьёв
`diffusion-rate` Slider 0–50 Скорость распространения феромона
`evaporation-rate` Slider 0–20 Скорость испарения феромона
`use-memory?` Switch On/Off Включение/выключение памяти
`more-food?` Switch On/Off Дополнительные источники еды (3 → 6)
`memory-threshold` Slider 50–200 Порог энергии для использования памяти

Цветовая индикация муравьёв

Цвет Состояние
Зелёный Ищет еду, память пуста
Синий Идёт по памяти к ранее обнаруженному источнику еды
Фиолетовый Несёт добытую еду в гнездо
Жёлтый Имеет в памяти 1 слот для местонахождения источника еды, но не использует его в данный момент
Красный Имеет 2 и более слотов в памяти

Собираемые для анализа данные

Переменная Откуда Описание
`total-food-count` Глобальная Общее количество доставленной еды
`count turtles` Встроенная Количество живых муравьёв

Как это работает

  1. Муравьи начинают движение из гнезда с нулевой памятью (зелёные)
  2. Найдя источник еды, запоминают координаты патча и несут ее в точку отправления, становясь по пути к ней фиолетовыми
  3. После доставки еды в гнездо цвет муравьёв меняется на жёлтый (= 1 слот в памяти) или красный (= 2+ слотов в памяти) в зависимости от количества зафиксированных в памяти локаций с источниками еды
  4. Когда энергия объекта падает ниже порога (`memory-threshold`), муравей с памятью становится синим и направляется к месту, отмеченному в памяти как знакомый источник еды
  5. Если в данном месте пусто, муравей ищет еду в радиусе 8 патчей вокруг; если не находит — забывает местонахождение источника еды

План экспериментов

Все исследования были проведены в среде BehaviorSpace (NetLogo). Реализованы два независимых эксперимента для проверки гипотез.


Эксперимент 1 (Гипотеза 1): Сравнение трёх стратегий

  • Независимые переменные:
    • use-memory? — три сценария: феромон, память, феромон + память
    • more-food? — два уровня: 3 источника, 6 источников
  • Фиксированные параметры:
    • population = 50
    • memory-threshold = 100
    • время прогона = 1000 тиков
  • Повторений: 20
  • Всего прогонов: 6 комбинаций × 20 = 120

Эксперимент 2 (Гипотеза 2): Влияние количества еды

  • Фиксированная стратегия: феромон + память (use-memory? = true, evaporation-rate = 10, diffusion-rate = 50)
  • Независимая переменная: more-food? — два уровня: 3 источника, 6 источников
  • Фиксированные параметры: те же (population = 50, memory-threshold = 100, 1000 тиков)
  • Повторений: 30
  • Всего прогонов: 2 комбинации × 30 = 60

Исходные данные экспериментов

GitHub: Эксперимент и CSV-файлы с результатами всех прогонов в BehaviorSpace

Результаты

Гипотеза 1: Сравнение трёх стратегий

Участниками проекта был проведён полный факторный эксперимент (6 комбинаций, 20 повторений, 120 прогонов). Для каждой стратегии было измерено количество доставленной еды (`total-food-count`) и выживаемость муравьёв (`count turtles`). Анализ проведён в R.

Рисунок 1. Доставленная еда по трём стратегиям (3 источника)

Доставленная еда

ANOVA (3 источника еды):

             Df  Sum Sq Mean Sq F value Pr(>F)    

strategy 2 3885725 1942863 3797 <2e-16 *** Residuals 1137 581745 512

Различия между стратегиями статистически значимы (p < 0.001).

t-тест: феромон+память vs только феромон (3 источника)

t = -80.886, df = 774.9, p-value < 2.2e-16

Средняя доставленная еда: - Только феромон: 88.3 - Феромон + память: 204.1

Разница: 115.8 единиц еды (95% доверительный интервал: от 112.9 до 118.6).

Вывод по Гипотезе 1: комбинация феромона и памяти обеспечивает статистически более высокую эффективность поиска еды по сравнению с использованием только феромона (p < 0.001).

Выживаемость

Рисунок 2. Выживаемость муравьёв по трём стратегиям (6 источников)

Хотя основная гипотеза проверялась на доставленной еде, анализ выживаемости муравьёв дал интересные дополнительные результаты.

Средняя выживаемость (`count turtles`) при 6 источниках еды:

Стратегия Средняя выживаемость
Только память 41.2
Феромон + память 23.1
Только феромон 8.1

ANOVA для выживаемости (3 источника):

             Df Sum Sq Mean Sq F value Pr(>F)    

strategy 2 18721 9360 627.6 <2e-16 *** Residuals 1137 16957 15

Данные различия также статистически значимы. Наибольшая выживаемость наблюдается при стратегии «память» с 6 источниками еды, что может объясняться более эффективным использованием энергии благодаря зафиксированным в памяти координатам источника еды.

Гипотеза 2: Влияние количества источников еды

Для проверки влияния количества еды проведён отдельный эксперимент при фиксированной стратегии «Феромон + память» (30 повторений, 2 комбинации: 3 и 6 источников, всего 60 прогонов).

Рисунок 3. Доставленная еда при 3 и 6 источниках

Доставленная еда

Средняя доставленная еда: - 3 источника: 204.5 - 6 источников: 308.9

t-тест: t = -17.59, df = 41.46, p < 0.001

Разница: 104.4 единицы еды (95% доверительный интервал: от 92.4 до 116.4)

Вывод по Гипотезе 2: Увеличение количества источников еды с 3 до 6 приводит к статистически значимому росту доставленной еды (p < 0.001).

Выживаемость

Рисунок 4. Выживаемость при 3 и 6 источниках

Средняя выживаемость: - 3 источника: 7.2 муравья - 6 источников: 23.4 муравья

t-тест: t = -11.73, df = 57.57, p < 0.001

Разница: 16.2 муравья (95% доверительный интервал: от 13.4 до 18.9)

Увеличение количества еды также значимо повышает выживаемость колонии.

Демонстрация работы стратегий

Для наглядной демонстрации различий в поведении муравьёв были записаны анимации (GIF) для каждого сценария. Ниже представлены выбранные прогоны, результаты которых близки к средним значениям по соответствующей стратегии.

Гипотеза 1: Сравнение трёх стратегий (3 источника еды)

Гипотеза 2: Влияние количества еды (стратегия «феромон + память»)


Анализ в R

Все статистические расчёты и визуализации выполнены в среде R (версия 4.4.1) с использованием пакетов `ggplot2` и `dplyr`. Код полностью воспроизводим и доступен в репозитории проекта на GitHub.

    • Ссылка на репозиторий:**

[Файлы для проекта здесь](https://github.com/SofronovaKA/econometrics)

    • Содержимое репозитория:**

| Файл | Описание | |------|----------| | `hypothesis1_analysis.R` | R-скрипт для анализа Гипотезы 1 (сравнение трёх стратегий). Загружает CSV, строит графики, проводит ANOVA и t-тесты. | | `hypothesis2_analysis.R` | R-скрипт для анализа Гипотезы 2 (влияние количества еды). Загружает CSV, строит графики, проводит t-тесты. | | `Гипотеза_1(table_output).csv` | Сырые данные эксперимента для Гипотезы 1 (120 прогонов). | | `Гипотеза_2(table_output).csv` | Сырые данные эксперимента для Гипотезы 2 (60 прогонов). |

Общий вывод

Обе гипотезы подтверждены:

1. **Гипотеза 1:** Комбинация феромона и индивидуальной памяти даёт статистически значимо более высокую эффективность доставки еды (204.1 против 88.3, p < 0.001).

2. **Гипотеза 2:** Увеличение количества источников еды с 3 до 6 значимо повышает как доставленную еду (308.9 против 204.5, p < 0.001), так и выживаемость (23.4 против 7.2, p < 0.001).

    • Дополнительный вывод:** Наибольшая выживаемость наблюдается при стратегии «Только память» с 6 источниками еды (41.2 муравья). Память важна для выживания при обилии ресурсов, но для максимизации доставки еды необходимо сочетание с феромоном.

Просмотр кода с пояснениями

Полный код (.nlogo)

;; 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.

Ссылки

Участники

  • Анастасия Юдаева — создание и оформление страницы, разработка и модификация кода модели NetLogo, выгрузка модели на GitHub, описание кода
  • Маргарита Еськова — аннотация, формирование гипотез, проведение экспериментов в BehaviorSpace, сбор и выгрузка данных на GitHub, частичное оформление
  • Кира Софронова — формулировка статистических гипотез, анализ данных в R, визуализация результатов, интерпретация выводов, частичное оформление