Отчёт

This commit is contained in:
2026-05-15 03:29:20 +03:00
parent 5f4443b96d
commit 914fd9ee29
7 changed files with 124 additions and 0 deletions

124
REPORT.md Normal file
View File

@@ -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<Array<Boolean>>
|-- getLiveCellCount(): Int
|-- toggleCell(x, y): void
OneDimensionalCA
|-- width: Int
|-- rule: OneDimensionalRule
|-- initialize(centerPosition): void
|-- initializeRandom(probability): void
|-- step(): BooleanArray
|-- getGenerations(count): List<BooleanArray>
PatternClassifier
|-- classifyPatterns(Array<Array<Boolean>>): List<PatternInfo>
ExperimentRunner
|-- runExperiments(width, height): List<ExperimentResult>
|-- 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