我正在努力想出一个代表地点/过渡Petri网的优雅解决方案。 到目前为止,我将它们保存如下:
{:netname {:places {:name tokens, ...}
:transitions #{:t1, :t2, :t3, ...}
:edges_in #{[:from :to tokens], ...}
:edges_out #{[:from :to tokens], ...}}}
tokens
是一个数字,一切都以带有相应名称的符号开头。
//编辑 - 更多说明: :netname和:name是唯一的,因为它必须能够合并2个网络,其中这些地方必须具有唯一的名称。数字标记由创建地点或边缘期间的Petri网的用户确定。
我会感谢一些指针或指向更复杂/更好的数据结构的链接。
//编辑2 - 由于地名的独特性,我重写了我对数据结构的第一次看法。 :places现在引用一个hashmap。此外,edges_in和out现在是散列图,因为每条边的原点,目的地和标记号都是唯一的。
//编辑3 - 结构的使用:它的读取和写入量与我说的相同。使用petri网的方式,在修改网络和阅读网络之间来回,可能会有更多的阅读结束。
我还稍微修改了我的结构,所以:edges_in和:edges_out现在将三元组保存为向量而不是列表。这简单地将散列映射保存到文件并从中读取它,因为load-string
将列表评估为表达式。
答案 0 :(得分:0)
您可以查看称为PNML的HLPN的ISO 15909交换格式。这至少将为您提供数据结构的标准接口的基础。