`
saybody
  • 浏览: 911383 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论
阅读更多

令我郁闷的是,PNML Framework 几 乎是一套静态的库——这个其实可以从它的架构设计思想上就可以看出来:它的接口就是以一个假想的Petri Net Tool A为使用环境设计的,它在主页上说的必须实现的feature就包括import、load、export等,完全是针对某个Petri Net工具的一个转换器角色。在对源代码的暴力阅读(RTFC )和暴力逆向(eUML2 )时,我找不到类似add()这样用于动态创建模型对象的接口和ArcFactory、ArcFactoryImpl这样ecore风格的生产类。

相反,当我无奈的转向Petri Net Kernel (PNK) 时,却发现了简单方便的模型,它内核包含6个类,网的基本类是一个二元有向图。基类叫做extendable,没什么内容,连Petri Net的本性的Graph都是它的子类,Graph有Node和Edge。在Graph类以下是Net,再往下就跟PNML framework有些类似了,包括Node和Arc,Node又分两类:Place和Transition。

  • Net

  • Arc

  • Place

  • Transition

  • Extension

  • Specification

A petrinet is a bipartitioned, directed graph with nodes called places and transitions.

For the beginning I list the methods of these classes and try to explain their meaning. Then I will discuss their use by an example.

The Net class describes a petrinet. It has methods to access their arcs, places and transitions. Or you may ask a net for it's FiringRule object that describes when a transition is concessioned and how you does it fire. How do you may profite from these methods you will see in the Example Simulator chapter.


public final class Net extends Graph {

public Vector getArcs()

public Vector getPlaces()

public Vector getTransitions()

public FiringRule getFiringRule()

} // class Net

The Place class describes a place of a petrinet. You create a place using the class constructor. The place registers itself in the net which must be passed as a constructor's parameter. You can remove a place by calling it's delete() method. You may request the current marking and so on ...

public final class Place extends Node

public Place(Net net, String name, Object initiator)

public void delete(Object initiator)

public Marking getMarking()

public void setMarkingAsInitial()

} // class Place

The Transition class describes a transition of a petrinet. You create a transition using the class constructor. The transition registers itself in the net which must be passed as a constructor's parameter. You delete it using it's delete() method. You can also request the mode of a transition.

public final class Transition extends Node {

public Transition(Net net, String name, Object initiator)

public void delete(Object initiator)

public Mode getMode()

} // class Transition

The Arc class describes an arc of a petrinet. You create a new arc using the class constructor. The arc registers itself in the net passed as constructor parameter. You may ask an arc for it's initialnode, it's targetnode, it's inscription and so on ...

public class Arc extends Edge {

public Arc(Net net, Node source, Node target, Object initiator)

public Inscription getInscription()

public Place getPlace()

public Transition getTransition()

/// METHODS INHERITED FROM class Edge:

public Node getSource()

public Node getTarget()

} // class Arc

在PNK的QuickStart 上有关于这一套库的简介,没有太多废话;PNK的界面也是相当的简单,这对后人实在是一个好消息~





PNK没有丰富多彩的图形说明其内部架构,因为其架构足够自然、简单。这里画蛇添足给出一个逆向分析的类之间继承关系:


、关联关系(没什么意义)
依赖关系(没什么意义)

包之间的依赖关系:



PNK 动态性 的支持主要体现在以base结尾的包中

  • de.huberlin.informatik.pnk.kernel

  • de.huberlin.informatik.pnk.kernel.base

  • de.huberlin.informatik.pnk.app

  • de.huberlin.informatik.pnk.app.base

  • de.huberlin.informatik.pnk.appControl

  • de.huberlin.informatik.pnk.appControl.base

  • de.huberlin.informatik.pnk.netElementExtensions

  • de.huberlin.informatik.pnk.netElementExtensions.base

  • de.huberlin.informatik.pnk.editor

  • de.huberlin.informatik.pnk.exceptions

例如,de.huberlin.informatik.pnk.kernel.base 提供了对kernel的基本操作接口,继承关系 如下:


依赖关系如下:



PNK还提供丰富的对网的操作功能(由The ApplicationControl 提供)

As you already notice the ApplicationControl in the de.huberlin.informatik.pnk.appControl package plays an very important role. This class manages all nets and applications of the Petrinet Kernel. The ApplicationControl parses some XML files for configuration. These are for example the specification of all nettypes in the netTypeSpecification directory or a list of valid applications to each nettype in toolSpecification .xml file. Furthermore it is responsible for loading and writing nets as PNML files . It also offers useful interfaces that lets different applications cooperate with each other. Using the main main() method of the ApplicationControl you launch the Petrinet Kernel on commandline.

java -classpath .:crimson.jar:jaxp.jar
de.huberlin.informatik.pnk.appControl.ApplicationControl
toolSpecifications/toolSpecification.xml


toolSpecification .xml定义了网的类型、对于每一类网有效支持的工具以及这类工具提供的对外协作的接口,示例如下:
< ?xml version="1.0" encoding="UTF-8"? >
< !DOCTYPE toolSpecification SYSTEM "toolSpecification.dtd" >
< toolSpecification >
< !-- Nettypes -- >
< nettype id="n1" typeSpecification="file:netTypeSpecifications/simpleHLNet.xml"/ >
< nettype id="n2" typeSpecification="file:netTypeSpecifications/dawnNet.xml"/ >
< nettype id="n3" typeSpecification="file:netTypeSpecifications/Echo.xml"/ >
< !-- Applications -- >
< application id="a1" mainClass="de.huberlin.informatik.pnk.editor.Editor" maxinstances="inf" >
< allowedNettypes >
< ntref ref="n1"/ >
< ntref ref="n2"/ >
< ntref ref="n3"/ >
< /allowedNettypes >
< /application >
< !-- Input / Output -- >
< format id="pnml" ioClass="de.huberlin.informatik.pnk.appControl.PnmlInOut" >
< allowedNettypes >
< ntref ref="n1"/ >
< ntref ref="n2"/ >
< /allowedNettypes >
< /format >
< format id="io" ioClass="de.huberlin.informatik.pnk.appControl.InOut" >
< /format >
< !-- default settings -- >
< standardNettype ref="n1"/ >
< standardApplication ref="a1"/ >
< standardFormat ref="pnml"/ >
< /toolSpecification >
可见它主要
包含三个部分:Nettypes 网的类型、 Applications 支持的工具Input / Output 工具协作的接口。


一个基于PNK的应用开发示例

Example Simulator

Now let's take a look at the Simulator application in the de.huberlin.informatik.pnk.app package. This example should show how easy it is to write an application.


略,见
QuickStart , Alexander Gruenewald


总的来说,

Petri Net Kernel 没与PNML Framework 相比,它没有采用先进的EMF建模技术,因此不便于与eclipse集成;但是它在向上层应用提供服务上较为完善,便于在应用程序中调用。另外,由于没有利用EMF框架,Petri Net Kernel 完全是自己实现的UI和上层管理,因此代码量大很多。

所以,从集成的角度看,还是应当吃透EMF基本知识,改良PNML Framework ,考虑如何在PNML Framework 上实现Petri Net Kernel 类似的功能。

分享到:
评论

相关推荐

    关于图Pnk和图B(3, 2, k), B(4, 3, k)的强协调性 (2005年)

    研究的对象是图Pnk和B(3, 2, k),B(4, 3, k)。这些图的结构特性和标记方式在图论中有着重要的意义,尤其在组合数学领域内。文中不仅证明了这些图是强协调图,还给出了具体的强协调标号。同时,文章也对k值大于等于3...

    道路交通安全执法取证规范.pdf

    道路交通安全执法取证规范.pdf 道路交通安全执法取证规范.pdf

    图Pkn的着色 (2008年)

    设k是一个正整数,在含有n个顶点的路Pnk=v1v2…vn上,当且仅当两点的距离为k(k≥2)时增加一条边,这样所得到的图叫做Pnk(v1,vn),有时Pkn(v1,vn)也简记为Pnk,论文研究图Pnk的点着色、边着色和点、边全着色,得到图Pkn的点...

    zank.apk

    zank.apk

    图Cmk(P2,…,P2,Pι)的最大特征值 (2009年)

    在圈C的顶点Vil,Vi2,… Vik上分别悬挂k条路Pn1,Pn2,…Pnk的图记为Ci1,i2…ik(Pn1,pn2,…Pnk),其中l≤ij≤m,1≤j≤k.在顶点vm上悬挂k条路Pn1,pn2,… Pnk的图简记为Cmk(Pn1,Pn2,… Pnk)·利用图Cmk (P2,…P2, Pι)的...

    物联网-智慧传输-基于聚多巴胺纳米材料和酶促循环放大策略的荧光生物传感新方法研究.pdf

    1. 针对T4多核苷酸激酶(T4 PNK)的检测:利用PDANTs和λ核酸外切酶(λ exo)的协同作用,当T4 PNK存在时,它会使双链DNA (dsDNA) 5'-末端磷酸化,引发λ exo的水解反应,释放出单链DNA(ssDNA)。ssDNA与PDANTs之间的...

    220V输入DC5V输出LNK304电源板+原理图

    220V输入DC5V输出LNK304电源板+完整的原理图文件,可以直接制版。参考LNK系列IC资料可以修改采样电阻的比值来确定输出电压高低。该电路可以用在一些直接从市电来去电给小控制板的系统应用场合。

    概率与数理统计71

    当n趋向无穷大,最大概率pnk趋于0,且这些事件的总期望值之和λ趋于某个固定值时,总事件数Sn = Xn1 + ... + Xnn的概率分布将趋近于泊松分布,即P(Sn = m) -&gt; λ^m/m! * e^(-λ)。通过特征函数的计算,可以证明这一...

    粒子群优化算法介绍及matlab程序.pdf

    在局部版本的PSO中,粒子的速度更新不再只依赖于全局最优位置,而是增加了对邻域内其他粒子最优位置(pnk)的考虑,增强了算法的局部搜索能力。这种方法允许粒子更加关注其邻域内的优秀解,从而在某些情况下提高算法...

    论文研究 - NK细胞表达与HBV晚期慢性肝功能衰竭患者预后的关系

    慢性肝功能衰竭(ACLF)是基于慢性肝病的急性肝功能失代偿。 ACLF的发展从晚期,高原期到缓解期。... ALCF的高短期死亡率与NK细胞有关,尤其与KIR3DL1和FASL有关(PNK = 0.036,PKIR3DL1 = 0.0265,PFasL = 0.0008)。

    三菱PLC FX3系列 模拟量ADP适配器视频教程.zip

    FX3U-3A-ADP模块视频教程 FX3U-4AD(4DA)-ADP模块视频教程 FX3U-4AD-PT(PTW PNK 热电阻模块视频教程 FX2N BD板视频教程 FX3U-4AD-TC-ADP 热电偶模块应用

    粒子群算法详解 附详细实现代码

    在CAS中,个体(如鸟群中的鸟)能够与环境和其他个体进行交互,通过这些交互来学习并调整自己的行为。这一理论为PSO算法提供了基础。 - **起源**:PSO算法最初是受到鸟群觅食行为的启发而提出的。设想一群鸟在随机...

    OCV-chacracter modelling_matlab_Batterymodel_

    电池模型可以分为多种类型,如简化模型(如等效电路模型ECM)、中间复杂模型(如普朗特-诺伊曼-克拉克PNK模型)和详细热力学模型(如多体动力学模型)。根据项目需求,我们可能选择一种或几种模型来模拟电池的行为,...

    nokia5110液晶显示程序与说明书

    配合文档“nokia5110_nokia3310-�pnK�.pdf”,这份说明书可能提供了更深入的技术细节,如LCD的电气特性、引脚定义、工作模式以及错误处理等。通过阅读说明书,开发者能够了解硬件的工作原理,这对于解决实际问题和...

    JavaScript 基础表单验证示例(纯Js实现)

    验证思路 监听每个input控件的焦点离开(onblue),当... &lt;pnk rel=stylesheet href=css.css rel=external&gt; &lt;/head&gt; &lt;body&gt; &lt;form id=form action= method=post onsubmit=return vipdate()&gt; &lt;

    FX3S·FX3G·FX3GC·FX3U·FX3UC系列微型可编程控制器 用户手册 模拟量控制篇

    FX3U系列提供了FX3U-4AD-PT-ADP、FX3U-4AD-PTW-ADP、FX3U-4AD-PNK-ADP和FX3U-4AD-TC-ADP等型号。 - **FX3U-4AD-PT-ADP**: 支持4通道温度传感器输入,适用于铂电阻等热电阻传感器。 - **FX3U-4AD-PTW-ADP** 和 **FX3...

    和P3n的D(3)-点可区别全染色 (2013年)

    图的染色问题是图论研究的经典领域,在网络结构和实际生活中都有着广泛的应用,...讨论了幂图Pkn(k=2,3)的点可区别全染色,使得距离不大于3(D(3))的任意2点都有不同的色集合,得到幂图Pnk(k=2,3)的D(3)-点可区别全染色数。

    Onvista-Share-Price-API:通过JSON从onvista获取股价的API

    家 郎 页脚 真的 ...ETF:LSE,GER,AMS,GAT,LSE,STU,PNK,LSX,QUO,SWX,FRA,MUN,HAM,BER,DUS,TRO,WM,WM,BBF,LUSG 股票:Tradegate,斯图加特,法兰克福,LS Exchange,慕尼黑,伦

    铁路液压减震器,全球生产商排名及市场份额.docx

    全球范围内的铁路液压减震器生产商主要包括ITT KONI、Alstom Dispen、ZF Friedrichshafen、KYB、Dellner Dampers、CRRC、Escorts、PNK、Weforma、Suomen Vaimennin等。其中,2023年的数据显示,全球前五大厂商占据了...

    全千兆无盘站组建

    - **学校无盘网络教室**:适用于计算机教学,方便统一管理学生的学习资料和软件环境。 - **公司办公网络**:适合于需要频繁更新软件的企业,简化了软件部署流程。 - **网吧**:可以快速地为大量客户提供一致的游戏和...

Global site tag (gtag.js) - Google Analytics