【问题标题】:Is there a established data structure for place/transition petri-nets?是否有用于位置/转换 petri 网的既定数据结构?
【发布时间】:2013-12-28 16:55:19
【问题描述】:

我正在尝试提出一个优雅的解决方案来表示位置/转换 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 现在引用哈希图。此外,edges_in 和 out 现在都是哈希图,因为每条边都是唯一的,具有其起点、终点和令牌编号。

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

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

【问题讨论】:

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

标签: clojure petri-net


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2010-10-04
    • 2019-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    相关资源
    最近更新 更多