ТЗ проекта «Универсальные клеточные автоматы»
Клеточный автомат (КА) — набор клеток, образующих некоторую периодическую решетку с заданными правилами перехода, определяющими состояние клетки в следующий момент времени через состояние этой клетки и окружающих её клеток в текущий момент времени.
Синхронный КА - такой КА, в котором все клетки переходят в новое состояние одновременно, используя при этом старые состояния соседних клеток для определения своего нового состояния.
Детерминированный КА - КА, в котором состояние любой клетки в последующий момент однозначно определяется её состоянием и состоянием её соседей в данный момент времени.
Программа - редактор синхронных детерминированных клеточных автоматов. Есть набор состояний и для каждого состояния есть набор переходов, описанных правилами перехода для конкретного состояния. Правила переходов задаются через указание состояний клеток ближайшего окружения (8 шт).
У пользователя будет возможность запускать и приостанавливать автомат, а так же менять:
- набор состояний, их свойства;
- набор переходов для каждого состояния и их правила;
- скорость перерисовки;
- размер поля и размер клетки.
Обмен информацией с пользователем будет осуществляться через графический интерфейс. Это окно, которое включает область рисования состояния клеточного автомата, строку меню, строку инструментов и строку состояния.
Меню включает следующие пункты:
- File - работа с файлами:
- содержащими информацию о состоянии всех клеток, описание автомата и способа его отображения (особый формат .uaf, не гарантируется совместимость с другими программами)
описания КА на языке КА (http://catseye.tc/projects/alpaca/)
- Actions - старт, стоп, следующий шаг, очистить поле, заполнить поле рандомно
- View - изменение скорости перерисовки поля и его маштаба
- Automaton - открытие окна редактирования автомата (набора состояний, их параметров, набора переходов и их правил)
- Help - открытие окна, содержащего описание способов изменения состояния клеток на поле и самого автомата (набора состояний, переходов между ними и правил этих переходов).
Строка инструментов содержит:
- кнопки упревления состоянием автомата: "run", "stop", "next step";
- кнопки переключения состояния мыши:
- "draw" - изменение состояния отдельных клеток поля,
- "move" - перемещение по полю и и изменение его маштаба;
- кнопки работы с файлами:
- "open" - загрузка .uaf файла,
- "load automaton" - загрузка файла на языке КА,
- "save" - сохранение в файл .uaf,
- "unload automaton" - сохранить КА в файл на языке КА.
Строка состояния
Строка состояния будет содержать информацию о состоянии автромата, скорости перерисовки, размере поля, а также, возможно, координаты клетки под курсором мыши.
Управление мышью и клавиатурой:
- в состоянии "draw":
- при нажатии и(или) удержании пользователем левой кнопки мыши состояние клетки будет меняться по одному из существующих переходов,
- при нажатии и(или) удержании пользователем левой кнопки и клавиши на клавиатуре состояние будет меняться на то, которое соответствует данной клавише;
- в состоянии "move":
- при перемещении мыши с зажатой левой кнопкой поле будет происходить перемещение по полю, если оно не убирается на экране,
- при перемещении мыши с зажатой правой кнопкой вверх, маштаб будет увеличиваться, вниз - уменьшаться.
Окно программы
Диалог изменения автомата
Несколько комментариев:
в переходах после to может стоять символ состояния или ID класса, а также указание на соседа (NW, N, W, S, ... см. описание правил перехода в ALPACA http://catseye.tc/projects/alpaca/doc/ebnf.txt)
- для того, чтобы поменять состояние на карте условия перехода надо кликнуть на соответствующей клетке и выбрать состояние по символу, класс по ID или пустой элемент списка, если предполагается, что в у этой клетки может быть любое состояние;
правило - это набор выражение (цифры), разделенных логическими операндами И(&), ИЛИ(|);
- при нажатии на кнопку edit classes list появляется окошко, где можно отредактировать существующие классы и/или создать новые (очень похоже на то, что было для состояний в CCA, но правила могут задаваться и через карты, как для состояний в UCA);
- диалог изменения размеров поля остается прежним.
Документация на языке интерфейса. Вызов через меню Help. Будет описано только, как пользоваться программой и что она делает. Программа должна будет работать при условии установленного Python v2.7 + pyGTK (желательно запускать на суперкомпьютере, иначе приемлимая скорость не гарантируется для поля, размером больше 30*30 ).
Программа будет написана на Python, оформление кода по правилам PEP-8, требования к качеству кода:
- ни одна функция не должна быть длиннее 10-15 содержательных строк кода (возможны исключения, но только когда это сильно улучшит читаемость кода);
- функции, у которых названия функции и списка её аргументов недостаточно для понимания назначения, будут содержать самодокументацию согласно PEP-257;
- вспомогательные функции также возможно будут содержать самодокументацию;
- алгоритмические функций будут содержать тесты, проверяющие работоспособность основных штатных случаев и основных краевых случаев.