Уважаемые, помогите пожалуйста разобраться в сети Петри. Объясните как осуществляется движение по фишкам и какое значение появляется на каждой из них. (Условно возьмем значение N=3)
Задание было следующее: Создать сеть Петри, реализующую следующий функционал: уменьшение двоично-десятичного пятиразрядного счетчика на число в диапазоне от 1 до 19, введенное пользователем. Начальное значение счетчика – 11001.
Код на С++ <----- Ссылка на код
Продравшись через странную логику реализации классов TPetry и TCounterPetry, попробую ответить.
(Хочу заметить, что сеть, задаваемая в программе, отличается от сети на рисунке.)
Места p1 – p5 представляют собой пять разрядов двоично-десятичного числа (p1 – p4 — цифра единиц, p5 — цифра десятков). Максимальное число, представимое таким образом (места p1 – p5 являются 1-ограниченными, то есть безопасными), равно 19 (10 + 8 + 1). И именно это максимальное число задано в качестве начальной маркировки для p1 – p5.
В программе применяется последовательностная интерпретация работы сети Петри.
За один шаг сеть производит уменьшение числа в p1 – p5 на 1 следующим образом*:
1. Если можно вычесть 1 из p1 (переход t1 разрешён), то p1-1 (число ....1 → ....0), p0-1.
2. Иначе если можно вычесть 1 из p2 (переход t2 разрешён), то p2-1, p1+1 (число ...10 → ...01), p0-1.
3. Иначе если можно вычесть 1 из p3 (переход t3 разрешён), то p3-1, p2+1, p1+1 (число ..100 → ..011), p0-1.
4. Иначе если можно вычесть 1 из p4 (переход t4 разрешён), то p4-1, p3+1, p2+1, p1+1 (число .1000 → .0111), p0-1.
5. Иначе если можно вычесть 1 из p5 (переход t5 разрешён), то p5-1, p4+1, p1+1 (число 10000 → 01001, то есть десять в девять), p0-1.
* pn-1 означает дугу из pn в соответствующий переход, то есть уход фишки из pn при срабатывании перехода.
pn+1 означает дугу из соответствующего перехода в pn, то есть приход фишки в pn при срабатывании перехода.
Шаги повторяются, пока в p0 есть фишки.