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