diff --git a/REPORT.md b/REPORT.md new file mode 100644 index 0000000..45e384d --- /dev/null +++ b/REPORT.md @@ -0,0 +1,124 @@ +# Лабораторная работа: Клеточные автоматы + +# Университет ИТМО +**Студент:** Владимиров Владислав Александрович +**Группа:** P3322\ +**Дата:** 15.05.2026 + +## Цель работы + +Изучение принципов функционирования и приобретение навыков программной реализации клеточных автоматов как дискретных вычислительных моделей. + +## Диаграмма классов + +``` +AppState + |-- config: AppConfig + |-- action: UiAction? + +AppConfig (serializable) + |-- mode: AutomatonMode + |-- gridWidth: Int + |-- gridHeight: Int + |-- simulationSpeed: Int + |-- probability: Double + |-- oneDimensionalRule: OneDimensionalRule + |-- killAtBoundary: Boolean + +AutomatonMode: GAME_OF_LIFE | ONE_DIMENSIONAL +OneDimensionalRule: RULE_30 | RULE_90 | RULE_110 | RULE_184 + +GameOfLife + |-- width: Int + |-- height: Int + |-- killAtBoundary: Boolean + |-- initialize(probability): void + |-- step(): Int + |-- getGrid(): Array> + |-- getLiveCellCount(): Int + |-- toggleCell(x, y): void + +OneDimensionalCA + |-- width: Int + |-- rule: OneDimensionalRule + |-- initialize(centerPosition): void + |-- initializeRandom(probability): void + |-- step(): BooleanArray + |-- getGenerations(count): List + +PatternClassifier + |-- classifyPatterns(Array>): List + +ExperimentRunner + |-- runExperiments(width, height): List + |-- generateGraph(results, outputPath): void +``` + +Взаимодействие: `Main.kt` -> `MainScreen` -> `Sidebar` + `GameOfLifeView` | `OneDimensionalView`. Конфигурация сохраняется в `config.json` через `ConfigRepository`. + +## Визуализация эволюции автоматов + +### Одномерный клеточный автомат (Rule 30, 90, 110) + +Правило 30 генерирует хаотичный паттерн. Правило 90 создаёт фрактальный треугольник Серпинского. Правило 110 демонстрирует универсальные вычислительные свойства. + +#### Rule 30 +![img.png](img.png) +#### Rule 90 +![img_1.png](img_1.png) +#### Rule 110 +![img_2.png](img_2.png) + +### Game of Life (Двумерный клеточный автомат) + +Начальное заполнение: случайное (p = 0.3), поле 50x50, 100 поколений. +![img_3.png](img_3.png) +#### Стабилизация за 429 поколений +![gameoflifeend.png](gameoflifeend.png) +**Выявленные паттерны:** + +| Тип | Название | Классификация | +|-----|----------|---------------| +| Block (2x2) | Блок | Устойчивая фигура | +| Beehive (3x3, 6 клеток) | Улей | Устойчивая фигура | +| Loaf (3x3, 5 клеток) | Буханка | Устойчивая фигура | +| Boat (3x2, 5 клеток) | Лодка | Устойчивая фигура | +| Glider (5 клеток) | Глайдер | Движущаяся фигура | + +Глайдер перемещается по диагонали со скоростью c/4 (один шаг по диагонали каждые 4 поколения). Блок, улей, буханка и лодка остаются неизменными во всех поколениях. Бликер (3 клетки в линию, периодичность 2) — пример периодической фигуры. + +## Результаты экспериментов + +### Таблица времени стабилизации + +| Плотность (p) | Среднее время стабилизации (поколений) | +|---------------|----------------------------------------| +| 0.10 | 460 | +| 0.15 | 580 | +| 0.20 | 618 | +| 0.25 | 634 | +| 0.30 | 621 | +| 0.35 | 642 | +| 0.40 | 622 | +| 0.45 | 632 | +| 0.50 | 639 | + +Количество запусков на каждую плотность: 100. Размер поля: 50x50. Условие стабилизации: 10 поколений без изменения популяции (или циклические изменения между двумя значениями). + +### График + +![stabilization_graph.png](stabilization_graph.png) + +График сохранён в файл `stabilization_graph.png`. + +## Анализ результатов + +При низкой плотности (p = 0.10) система стабилизируется быстро (460 поколений) из-за вымирания изолированных клеток. Большинство конфигураций умирает в первые 100-200 поколений. + +Хаотическая фаза наблюдается при плотности p = 0.25-0.35, где время стабилизации достигает 620-640 поколений. При этих плотностях образуется максимальное количество взаимодействующих структур (глайдеры, ружья, блоки), что затягивает стабилизацию. + +При высокой плотности (p = 0.45-0.50) время стабилизации остаётся высоким (630-640), однако причина отличается: образуются крупные устойчивые и периодические структуры (улей, блоки), которые переходят в стабильную фазу без вымирания. Система не "вымирает", а кристаллизуется в насыщенный паттерн. + +Максимальное время стабилизации: p = 0.35 (642 поколения) и 0.5. Минимальное: p = 0.10 (460 поколений). + +Исходный код доступен тут вот -> https://git.illegalfiles.icu/vlad.os/systems-lab2 \ No newline at end of file diff --git a/gameoflifeend.png b/gameoflifeend.png new file mode 100755 index 0000000..664f639 Binary files /dev/null and b/gameoflifeend.png differ diff --git a/img.png b/img.png new file mode 100644 index 0000000..cde2c8e Binary files /dev/null and b/img.png differ diff --git a/img_1.png b/img_1.png new file mode 100644 index 0000000..f224b8a Binary files /dev/null and b/img_1.png differ diff --git a/img_2.png b/img_2.png new file mode 100644 index 0000000..1c88e85 Binary files /dev/null and b/img_2.png differ diff --git a/img_3.png b/img_3.png new file mode 100755 index 0000000..f53b517 Binary files /dev/null and b/img_3.png differ diff --git a/stabilization_graph.png b/stabilization_graph.png new file mode 100644 index 0000000..47d6901 Binary files /dev/null and b/stabilization_graph.png differ