1

我正在尝试提出一个优雅的解决方案来表示位置/过渡 petri 网。到目前为止,我将它们保存如下:

{:netname {:places      {:name tokens, ...}
           :transitions #{:t1, :t2, :t3, ...}
           :edges_in    #{[:from :to tokens], ...}
           :edges_out   #{[:from :to tokens], ...}}}

tokens是一个数字,一切都以具有相应名称的符号开头。

//edit - 更多说明: :netname 和 :name 是唯一的,因为必须可以合并 2 个网络,而这些地方又必须具有唯一的名称。数字标记由 Petri 网的用户在创建地点或边缘期间确定。

对于我的问题,我会感谢一些指向更精细/更好的数据结构的指针或链接。

//edit 2 - 由于地名的独特性,我重新设计了我的第一个数据结构。:places 现在引用哈希图。edge_in 和 out 现在也是 hashmaps,因为每条边都是唯一的,有它的起点、终点和令牌编号。

//edit 3 - 结构的使用:我会说它以相同的数量被读取和写入。使用培养网的方式,在修改网络和阅读网络之间有一个来回的过程,可能会在最后阅读更多内容。

我还稍微修改了上面的结构,所以 :edges_in 和 :edges_out 现在将三元组保存为向量而不是列表。这简化了将 hashmap 保存到文件并从中读取它,因为load-string将列表计算为表达式。

4

1 回答 1

0

您可以查看称为 PNML 的 HLPN 的 ISO 15909 交换格式。这至少会为您提供数据结构标准接口的基础。

于 2019-05-09T18:29:10.353 回答