Clojure 是否有已建立的位置/转换petri网数据结构?

Clojure 是否有已建立的位置/转换petri网数据结构?,clojure,petri-net,Clojure,Petri Net,我试图提出一个优雅的解决方案来表示位置/转换petri网。 到目前为止,我将其保存如下: {:netname {:places {:name tokens, ...} :transitions #{:t1, :t2, :t3, ...} :edges_in #{[:from :to tokens], ...} :edges_out #{[:from :to tokens], ...}}} tokens是一个数

我试图提出一个优雅的解决方案来表示位置/转换petri网。 到目前为止,我将其保存如下:

{:netname {:places      {:name tokens, ...}
           :transitions #{:t1, :t2, :t3, ...}
           :edges_in    #{[:from :to tokens], ...}
           :edges_out   #{[:from :to tokens], ...}}}
tokens
是一个数字,所有内容都以带有相应名称的符号开头

//编辑-更多说明: :netname和:name是唯一的,因为必须能够合并两个网络,其中位置必须具有唯一的名称。数字标记由petri网的用户在创建位置或边的过程中确定

如果能为我的问题提供一些指向更复杂/更好的数据结构的指针或链接,我将不胜感激

//编辑2-由于地名的唯一性,我对数据结构进行了第一次修改:places现在引用hashmap。此外,输入和输出的边现在是散列映射,因为每个边的原点、目的地和标记号都是唯一的

//编辑3-结构的使用:它的读写量与我想说的相同。按照petri网的使用方式,在修改和读取petri网之间会有一个来回的过程,最后可能会有更多的读取


我还稍微修改了上面的结构,因此:edges\u in和:edges\u out现在将三元组保存为向量,而不是列表。这简化了将hashmap保存到文件并从中读取的过程,因为
load string
将列表作为表达式进行计算。

您可以查看称为PNML的HLPNs的iso15909交换格式。这至少为您的数据结构提供了一个标准接口的基础。

您能详细介绍一下更大的结构吗?网络名是唯一的吗?它会在给定网络或其他网络中的任何位置重复吗?如何查找数字标记以及数据结构是什么样子的?我认为这篇文章中的一些编辑可能没有阐明你在这里的意思。我现在已经解释了一些澄清的细节。通常,“最佳”数据结构取决于你需要做什么操作,以及你需要多久做一次。作为一个简单的例子,用于(99.9%读取,0.01%写入)的“最佳”结构可能与(50%读取,50%写入)非常不同。当您开始考虑需要执行哪些类型的读/写操作时,情况会变得更加复杂。也许你可以用这个数据结构来更新你的问题?我添加了你要求的信息。这是一个关于以人类可读的文件格式存储网络结构的问题吗?如果是这样,我想知道为什么PNML的首字母缩写词还没有出现。