Я развиваю y_petri
в Ruby. В настоящее время YPetri может обрабатывать визуализацию (класс YPetri::Net
имеет метод #visualize
, использующий Graphviz для рисования сети), но не редактирование графического интерфейса, которое вы, вероятно, имеете в виду. К вашему сведению, во-первых, редактирование GUI в сетях Петри менее важно, чем кажется.
Используемый язык данных - это сам Ruby (точнее, внутренний DSL, написанный на Ruby).
Главная проблема сетей Петри заключается в том, что их существует слишком много. YPetri
пытается быть универсальной структурой сети Петри с 1 типом мест (произвольного типа маркировки) и 4 базовыми типами переходов (временной / нестационарный х стехиометрический / нестехиометрический). Кроме того, существует пятый тип перехода, переход присвоения, который заменяет разметку целевых мест возвращаемым значением его функции. Я полагаю, что это может быть использовано для описания любой динамической системы, будучи настолько же экономным, насколько я смог это сделать.
Дуги сети Петри понимаются как отношения между переходами и местами (они принадлежат переходам в y_petri
. Я обнаружил, что полезно иметь способ выражения также отношений между узлами сети Петри (местами / переходами), а не просто дугами Для этой цели Я использую Zed-структуру Теда Нельсона (ZigZag) в основном в качестве замены реляционной базы данных .
Что касается моделирования (выполнение сети Петри), то у общих гибридных сетей Петри нет более быстрого метода моделирования, чем неявный метод Эйлера (который я называю псевдо-Эйлером). Это связано с тем, что сеть Петри можно использовать для реализации машины Тьюринга, для которой невозможно общее ускорение.
Если вы хотите работать в Ruby, вы можете описать сеть Петри в y_petri
или y_nelson
коде DSL. Я не предоставляю преобразование в XML, так как не считаю его превосходящим исходный DSL. Можно было бы написать такую процедуру экспорта, но я рекомендую вам использовать DSL.