Отчёт
This commit is contained in:
124
REPORT.md
Normal file
124
REPORT.md
Normal 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
|
||||||
|

|
||||||
|
#### Rule 90
|
||||||
|

|
||||||
|
#### Rule 110
|
||||||
|

|
||||||
|
|
||||||
|
### Game of Life (Двумерный клеточный автомат)
|
||||||
|
|
||||||
|
Начальное заполнение: случайное (p = 0.3), поле 50x50, 100 поколений.
|
||||||
|

|
||||||
|
#### Стабилизация за 429 поколений
|
||||||
|

|
||||||
|
**Выявленные паттерны:**
|
||||||
|
|
||||||
|
| Тип | Название | Классификация |
|
||||||
|
|-----|----------|---------------|
|
||||||
|
| 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`.
|
||||||
|
|
||||||
|
## Анализ результатов
|
||||||
|
|
||||||
|
При низкой плотности (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
|
||||||
BIN
gameoflifeend.png
Executable file
BIN
gameoflifeend.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 19 KiB |
BIN
img_3.png
Executable file
BIN
img_3.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 34 KiB |
BIN
stabilization_graph.png
Normal file
BIN
stabilization_graph.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 36 KiB |
Reference in New Issue
Block a user