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

Материал из Поле цифровой дидактики
Строка 244: Строка 244:


----
----
=== Анализ в 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. Скачайте нужный R-скрипт (`hypothesis1_analysis.R` или `hypothesis2_analysis.R`).
2. Откройте его в RStudio.
3. Убедитесь, что установлены пакеты `ggplot2` и `dplyr` (скрипт установит их автоматически при необходимости).
4. Запустите код (Ctrl+A, затем Ctrl+Enter).
5. При появлении диалогового окна выберите соответствующий CSV-файл с данными.
6. Результаты (графики, таблицы, тесты) появятся в консоли и окне графиков.
**Примечание:** Графики автоматически сохраняются в рабочую папку в формате PNG при использовании команд `ggsave()` (раскомментируйте соответствующие строки в скрипте).


=== Общий вывод ===
=== Общий вывод ===

Версия от 22:31, 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: [1]

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

Инструменты

  • Моделирование: 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

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

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

- GitHub:[2]

Результаты

Гипотеза 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. Скачайте нужный R-скрипт (`hypothesis1_analysis.R` или `hypothesis2_analysis.R`). 2. Откройте его в RStudio. 3. Убедитесь, что установлены пакеты `ggplot2` и `dplyr` (скрипт установит их автоматически при необходимости). 4. Запустите код (Ctrl+A, затем Ctrl+Enter). 5. При появлении диалогового окна выберите соответствующий CSV-файл с данными. 6. Результаты (графики, таблицы, тесты) появятся в консоли и окне графиков.

    • Примечание:** Графики автоматически сохраняются в рабочую папку в формате PNG при использовании команд `ggsave()` (раскомментируйте соответствующие строки в скрипте).

Общий вывод

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

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, визуализация результатов, интерпретация выводов, частичное оформление