| 编辑推荐: |
本文译自 Applied Sciences 2021 年论文,介绍如何把 ISO 19450
对象—过程方法论(OPM)概念模型映射为图数据库,并用 Cypher 实现路径、邻域与
PageRank 中心性三类查询,从而在复杂系统模型中发现因果链、优化业务流程并评估要素重要性,希望对你的学习有帮助。
本文来自于微信公众号象生OPM,由火龙果软件Alice编辑、推荐。 |
|
摘要
现代复杂系统涵盖由大量互联软硬件组成、面向人类用户的产品与服务。随着技术进步,人们越来越期待系统平稳无瑕地运行。基于模型的系统工程(MBSE)以概念模型应对这一挑战:模型能够建立系统的形式化表示,支持可视化、设计理解、仿真,并帮助及早发现设计缺陷。若建模工具具备查询能力,便能揭示直接观察模型难以发现的深层信息,例如解释因果现象、识别关键组件,以及估计变更带来的影响和风险。模型本身是系统元素组成的互联网络,因此适合表示为图并接受查询。成熟的图论算法能解决众多问题,但要发挥其能力,必须先在不显著丢失信息的条件下把模型转换为图并存入图数据库,再把查询结果转回清晰、可理解的原始图形与文本表示。本文提出并演示一种查询方法:将符合
ISO 19450 的对象—过程方法论(OPM)模型转换为图,存入 Neo4j 图数据库,并执行能够回答复杂系统问题的查询,从而洞察被建模的系统或现象,改进系统设计。
关键词:对象—过程方法论(OPM);OPM
ISO 19450;基于模型的系统工程(MBSE);概念建模;图数据库;查询语言
特色应用:在 OPCloud 中查询基于
OPM ISO 19450 的复杂概念模型,回答“如果……会怎样”、因果关系和差距分析等问题。
1. 引言
系统工程、业务流程和工作流等领域都能从形式化且可视化的概念建模中受益。系统复杂性不断增加,模型中的组件及其相互依赖也随之增多,仅凭浏览模型已不足以回答组件关系、“如果……会怎样”、因果解释和差距分析等问题。密集的元素和连接使人难以整体把握系统;模型所表达的动态运行也更难追踪和预测。因此,即使已有某种模型,遗留系统也常常保持原状,因为重构风险可能超过收益。对于不断演进的系统,影响分析是决策和控制流变更的关键。组织需要把新系统和现有系统建成可有效查询的模型,以支持审慎决策与风险评估。作者称,虽经广泛检索,尚未找到系统查询概念系统模型以获得技术、科学或商业洞见的相关文献。
本文提出一种查询概念模型的方法,用于回答系统对象之间的结构关系、可能的执行场景、因果关系及系统行为的“如果……会怎样”等问题。第
2 节介绍 OPM;第 3 节综述数据库与查询方法;第 4 节讨论如何把 OPM 模型转换为图并存储;第
5 节通过系统工程和业务流程案例展示查询价值;第 6 节说明查询实现;第 7 节总结并展望未来工作。
2. OPM——对象—过程方法论
OPM 是一种概念建模语言 [1,2],已被确认为 ISO 19450
标准 [3]。它建立在“有状态的对象”和“改变对象的过程”这一简洁、通用的本体之上,可用于系统工程、业务流程、生物过程等领域。每个
OPM 模型包含一张或多张按层级组织的对象—过程图(OPD)。每张 OPD 包含 OPM 事物——过程和对象——以及具有特定类型与语义的连接。任何
OPM 事物都可以通过向内缩放或展开得到子 OPD,描述更低层的过程与相关对象。
连接可分为过程连接和结构连接。过程连接在持存性质相反的事物之间,即矩形对象与椭圆过程之间建立关系(图
1);它表达生成、消耗或状态变化等随时间发生的动态信息。结构连接则表达不随时间变化的信息,例如两个对象或两个过程之间的聚合—参与关系(图
2)。OPM 有图文双模态:图形由 OPD 集合组成,文本由自然语言子集对象—过程语言(OPL)组成。建模者在
OPCloud [4,5] 中操作图形时,系统会即时生成相应 OPL 语句。本文的图查询扩展也在 OPCloud
中实现。
OPM 的多层结构允许建模者先查看高层视图,再逐级细化。每张 OPD 不必过于复杂;父子
OPD 通过细化—抽象关系相连,整棵 OPD 树表达模型的全部事实。为了加强理解,本文把查询结果同时融入图形和文本两种模态,让两者在认知上相互补充。
图
1 带有过程性“施动者”连接的 OPM 模型。
图
2 带有结构性“聚合—参与”连接的 OPM 模型。
3. 查询与数据库
3.1 概念模型查询
概念建模为某个领域中的系统建立表示。详细模型有助于改进和开发系统、发现缺口并进行优化
[6]。概念建模旨在提供理解问题空间、综合候选方案和分析建模方案的框架。查询能聚合和筛选信息,促进模型理解与缺陷检测;自动化分析系统同样需要有效查询。
统一建模语言(UML)支持面向对象建模,但单一图种不足以表达规范的全部方面,因此
UML 包含 14 类图。对象约束语言(OCL)[7] 最初用于描述 UML 模型的约束;由于它能够遍历模型并构造对象集合,也被尝试作为查询语言,并成为查询/视图/转换(QVT)标准
[8] 的基础之一。结构化查询语言(SQL)常与关系数据库管理系统(RDBMS)的查询等同。对象查询语言(OQL)[9]
过于复杂,妨碍了其语义的完整实现,因此尚无与 SQL 地位相当且被普遍接受的对象模型查询语言。
Prolog [10] 是基于逻辑编程范式的声明式语言。其规则机制已用于实现多种数据模型的查询引擎,例如以
SPARQL [12] 查询 RDF [11]。它也可为 UML、事件驱动过程链(EPC)等建模语言提供独立于元模型的查询能力。OMG
的系统建模语言 SysML [13] 能构建易理解的工程模型,但其形式基础不足以直接执行兼容性检查。Web
本体语言(OWL)擅长形式化知识表示,却缺乏建模能力。Feldmann 等人 [14] 因而提出结合 SysML
与 OWL:前者建立跨学科系统模型,后者完成形式兼容性检查。
3.2 NoSQL 数据库
NoSQL [15] 通常被理解为“不只有 SQL”,是对关系数据库的补充。它着重应对海量数据下的扩展与性能问题。论文概括称
NoSQL 数据模型一般不保证关系数据库常用的 ACID(原子性、一致性、隔离性、持久性),而常采用 BASE(基本可用、软状态、最终一致性)思路;具体产品的事务能力仍须分别判断。CAP
定理 [16] 说明,在分布式服务发生网络分区时,一致性与可用性无法同时完全保证。这里的一致性指所有副本对外呈现同一数据;可用性指节点故障时服务仍能响应;分区容忍性指路由器故障或链路中断造成节点组间失联时系统仍能运行
[17]。
- 键值存储:用键索引对应的值,类似散列表。受限的 API 通常只允许按插入时的主键取回对象,以换取性能和扩展优势
[18]。
- 列存储:BigTable、Cassandra、Amazon DynamoDB
和 RIAK 等将数据按列分别存放,使查询只读取所需属性,而不必加载完整行 [19]。
- 文档存储:MongoDB、CouchDB 等用于存储文本、XML、JSON
等非结构或半结构化文档,文档内部通常呈层级形式 [20]。
- 面向对象数据库:如 db4o,按面向对象编程范式把待存信息表示为对象
[21]。
- 图数据库:如 Neo4j,以图为基础,是本文的重点。
3.3 图与图数据库
图由节点(顶点)与连接(边)构成 [22],可记为 G=(V,E)。节点和边带有类型与可选属性;节点可表示对象,边可表示对象之间的关系
[23]。图广泛用于通信、计算流程与数据组织等领域。图数据库(GDB)针对图结构数据的存储和查询而设计,强调数据之间的关系,适合半结构化数据。在社交网络、推荐、生物信息、内容管理、安全和访问控制、网络与云管理中都有应用。
图数据库以图遍历表达查询,通常可借助相邻节点之间的直接连接高效检索关联数据。它允许先画出节点与关系,再补充元数据,具有灵活的数据建模能力
[24]。图数据库可支持 ACID 事务与回滚;获取关联数据往往只需一次查询,而关系数据库可能需要跨表连接。图查询语言不同于
SQL;截至论文所述的 2018 年,尚无统一标准,Gremlin [26]、SPARQL [12]、Cypher
[27] 等较流行。
本文选用 Neo4j [28]。它是原生属性图数据库,数据按图结构存储并通过指针遍历
[29]。论文引用的 2020 年 12 月 DB-Engines 排名 [30] 中,Neo4j 居图数据库榜首(表
1);以下为论文发表时的历史数据,并非当前排名。研究所用 Neo4j
3.5.14 使用 Cypher,采用声明式、受 SQL 启发的 ASCII 图案语法描述图模式。Neo4j
提供 ACID 模型 [31]、REST 接口 [32] 和 Java API;本文以 Neo4j 存储图,以
Cypher 创建、修改和读取数据 [34]。
表
1 2020 年 12 月图数据库排名(原论文数据)[30]
| 名次 |
数据库 |
模型 |
得分 |
| 1 |
Neo4j |
图 |
54.64 |
| 2 |
Microsoft Azure Cosmos DB |
多模型 |
33.54 |
| 3 |
ArangoDB |
多模型 |
5.51 |
| 4 |
OrientDB |
多模型 |
5.29 |
| 5 |
JanusGraph |
图 |
2.65 |
| 6 |
Virtuoso |
多模型 |
2.58 |
| 7 |
Amazon Neptune |
多模型 |
2.51 |
| 8 |
GraphDB |
多模型 |
2.05 |
| 9 |
FaunaDB |
多模型 |
2.01 |
| 10 |
Dgraph |
图 |
1.69 |
4. 将 OPM 模型映射为图
OPM 模型有多类节点与连接;普通图可用一种节点和一种边,再通过元数据区分类型。把图
1 和图 2 的模型合并,可得到图 3 左侧的 OPM 图,其右侧图表示含五个节点和四条边。OPM 中的过程可以细化为更详细的子
OPD,包含嵌套子过程和其他对象。这种分层对人类理解至关重要,却也使图生成需要预处理和后处理。
图
3 合并图 1、图 2 后的 OPM 模型(左)及其图表示(右)。
4.1 嵌套 OPM 事物的扁平化
作者用单一图存储完整模型,因此先把 OPD 树中的多层图合并为一张“扁平”OPD。本文开发的扁平化算法旨在保留模型信息。与嵌套过程无关的元素可直接复制;与嵌套过程直接或间接相关的元素则需重新处理,有时删除旧连接,有时新增元素。作者也提及,未来可考虑免于扁平化的替代方案。
4.1.1 有状态对象的去状态化
有状态对象在生命周期中可处于两个或更多状态。算法 1 将一个含 n 个状态的对象转换成
n 个无状态特化对象:每个新对象以“状态名+原对象名”命名;原状态上的连接迁移到新对象;原对象的状态被移除;最后用泛化—特化结构连接把原对象与这些新对象相连。
算法 1 有状态对象去状态化
- 遍历所有拥有至少两个状态的对象。
- 对每个状态创建一个以状态名和原对象名组合命名的无状态对象;迁移该状态的连接;移除原状态。
- 为每个新对象建立到原对象的泛化—特化结构连接。
从模型复杂度看,一个对象及其 n 个状态变为 n+1 个无状态对象,逻辑关系数不变,过程连接增加
n 条。图 4 的“乘客”对象有“未系好”和“已系好”两个状态,并通过输入—输出连接对接“乘客系安全带”过程。算法生成“未系好乘客”和“已系好乘客”,分别连接消耗关系和结果关系;原“乘客”变为无状态对象,通过空心三角符号所示的泛化—特化连接关联两个新对象。
图
4 有状态对象去状态化示例:左为原模型,右为两个特化对象及迁移后的连接。
4.1.2 处理嵌套 OPM 事物的连接
连接到细化事物的 OPM 连接可以是直接的,也可以接到外层过程的边界。图
5 中,“未系好”和“已系好”状态分别直接关联“拉安全带”和“扣合搭扣”子过程;“乘客安全带”是工具型使能对象,“乘客”是施动者型使能对象,二者的连接落在“乘客系安全带”过程边界。对出现在多张
OPD、不同细节层次的同一事物,也需特别处理。
图
5 向内缩放的“乘客系安全带”过程:连接既可指向嵌套过程,也可指向外层边界。
算法 2 OPM 模型扁平化
- 将全部 OPM 元素复制到新扁平 OPD,并执行算法 1。
- 对父 OPD 中连接细化事物的每个事物:若它未在任何子 OPD 中连接嵌套事物,则把原连接复制到各嵌套事物,再删除通向细化事物的旧连接;否则移除重复的事物及其旧连接。
- 对每个子 OPD 中的嵌套事物:若为对象,按展开图中的位置在嵌套对象间建立单向标记连接;若为过程,按图形位置在嵌套过程间建立调用连接,并在外层过程与子过程间建立聚合—参与连接。
算法复杂度按 n 个事物和连接计为 O(n)。去状态化最多增加 m 条连接,嵌套图处理增加
k 条连接;由于 m<n、k<n,总复杂度 O(n+m+k)=O(n)。图 6 是将算法应用于图
4、图 5 所描述模型的结果。算法为“乘客”向两个子过程增加施动者连接,为“乘客安全带”增加工具连接,并用聚合—参与连接保留外层过程与子过程的组成关系。OPM
的时间线原则规定,向内缩放过程中位置较高的子过程先执行;因此算法又用“拉安全带”到“扣合搭扣”的调用连接保存顺序。
图
6 “乘客系安全带”系统扁平化后的结果。
4.2 从 OPM 模型到 Cypher 查询
作者在云端 OPM 建模环境 OPCloud [4,5] 中实现表示和查询。OPCloud
是 Angular 应用,使用 Rappid [35] 呈现模型;图数据库为 Neo4j,查询语言为 Cypher。流程是先将
OPM 模型转换为 Cypher,再在图数据库中生成图。
4.2.1 Neo4j 的 Cypher 查询语言
Cypher 是面向图模式匹配的声明式语言,既能查询,也能构造、修改图及指定模式。语句常从
MATCH、CREATE 或 MERGE 开始,之后可有类似 SQL 的处理短语,最后以 RETURN
返回结果。2015 年的 openCypher 项目 [36] 将其推广到 Neo4j 之外。Cypher
用三元组表示两个节点间的一条连接,例如 (node1:TypeA {propertyKey:'Value'})-[rel1:RelTypeA]->(node2:TypeB);圆括号表示节点,方括号表示连接,箭头表示方向。变量名供后续语句引用,类型与属性则用于分类和匹配。论文的代码以
$OPM_THING_TYPE 等宏式占位符指代 OPCloud 中的模型值。
4.2.2 在 OPM 模型上应用 Cypher
先运行扁平化算法(论文此处把算法编号写为“算法 1”,按前文应为算法 2),形成与原
OPD 树等价的单层 OPD。每个 OPM 事物成为图节点;原连接的语义由图边承载。节点创建示例如下,表
2 显示对象和过程的对应写法。
MERGE
(:$OPM_THING_TYPE {name:'$OPM_THING_TEXT', opm_id:'$OPM_THING_ID'})
MERGE (:object {name:'Passenger', opm_id:'10'})
MERGE (:process {name:'Passenger Securing', opm_id:'20'})
|
每条 OPM 连接都要识别其源和目标;“源—连接—目标”三元组保留类型、文本、ID
等元数据。这种表示还可转换为 RDF [11,37] 等形式。为在图库中生成一组三元组,需要先分别找到或创建源节点、目标节点,再建立边。代码
2 的基本模式如下;论文表 3 的例子是在“乘客”和“乘客系安全带”之间建立 Agent(施动者)边。
MATCH
(n1:Object {name:'Passenger', opm_id:'1'})
MERGE (:process {name:'Passenger Securing', opm_id:'20'})
|
表
2 OPM 事物转换为 Cypher 节点的图形示例:对象“乘客”与过程“乘客系安全带”。
每条 OPM 连接都要识别其源和目标;“源—连接—目标”三元组保留类型、文本、ID
等元数据。这种表示还可转换为 RDF [11,37] 等形式。为在图库中生成一组三元组,需要先分别找到或创建源节点、目标节点,再建立边。代码
2 的基本模式如下;论文表 3 的例子是在“乘客”和“乘客系安全带”之间建立 Agent(施动者)边。
MATCH
(n1:Object {name:'Passenger', opm_id:'1'})
MERGE (:process {name:'Passenger Securing', opm_id:'20'})
|
表
3 OPM 中“乘客”与“乘客系安全带”的施动者连接示意。
注:以上代码按论文示意保留其版本和命名;若直接用于当前 Neo4j,应按所用版本核对关系类型、引号与参数语法。
5. OPM 查询的用例
本节通过基于模型的系统工程中的因果分析、利用路径查找优化业务流程,以及借助
PageRank 评估产品质量中的关键事物,展示模型查询的价值。
5.1 基于模型的系统工程中的因果关系
复杂工程系统由相互依赖的子系统、过程和组件构成。微小变更也可能让其他组件出现意外行为;影响既可能有害,也可能有利,因此实施前须做风险与影响分析。把系统的
OPM 模型转换为图,可追踪执行路径上的过程消耗、创建或影响了哪些对象,以及这些过程需要哪些施动者或工具作为使能条件,进而解释已发生或可能发生的故障并寻找规避方法。
5.1.1 正向链推理的影响分析:飞机防撞系统
系统工程师常问:“这个变更会有什么影响?”或“某元素故障会怎样妨碍系统运行?”从被改变的
OPM 事物出发,沿有向图向下游追踪所得子图,能揭示受影响的事物,帮助评估计划内和计划外变更对系统健康及性能的风险。
图 7 展示三级细节的飞机防撞系统。过程“飞机避撞”把“飞机 1”从“靠近障碍物”状态变为“已避免碰撞”,其子过程有“碰撞探测”“航线变更计算”“避撞”。进一步展开的“碰撞探测”依赖“邻近区域扫描子系统”这一工具。
图
7 飞机防撞系统。上:系统图 SD;左下:第一细节层 SD1;右下:第二细节层 SD1.1。
设该扫描子系统计划升级。只看 SD1.1,维护团队可能以为移除它只影响“邻近区域扫描”和“障碍物探测”。若把扫描子系统设为根节点,运行“邻域
OPM 查询”中的有向查询并只取出边,就能得到更完整的影响范围。论文给出的查询模式是 MATCH
p=(source:$START_NODE_TYPE {name:'$START_NODE_TEXT'})-[*1..$MAX_DEPTH]->(child)
RETURN p。
图 8 的结果跨越模型各层,显示该故障可能使系统无法避障。图中的“探测到碰撞的飞机
1”“航线变更中的飞机 1”“已避撞的飞机 1”三个对象,是从含五个状态的“飞机 1”去状态化得到的。持续监测和控制对系统稳定性很重要;在网络物理系统中,传感器与指示器构成“网络”部分,监控物理子系统。Mordecai
与 Dori [38] 曾用 OPM 分析 1979 年三里岛 2 号反应堆事故。其模型图及 OPL 文本能够逐步说明事故因果链,并识别网络现实与物理现实之间的差距。
图
8 飞机防撞模型的邻域查询结果,展示扫描子系统影响的下游事物。
5.1.2 反向链推理寻找可能原因:三里岛核事故
三里岛 2 号反应堆事故在堆芯熔化前约 11 小时就已开始。论文聚焦蒸汽生成子系统中的先导式泄压阀(PORV)。当时操作员与控制室仪表只考虑了“开”和“关”两个状态;事后发现阀门实际上“卡在开启位置”。操作员未意识到冷却水从该阀流失,因此没有识别冷却剂丧失事故。堆芯随后过热、核燃料芯块包壳破裂,最终熔化。文献
[38] 的“故障感知”模型把潜在部件故障纳入原模型;论文讨论的第二个版本仅描述物理故障及其系统识别。此类包含失效状态的建模常被设计者回避,而原方案也未考虑堆芯的“熔化”状态。
图 9 展开了“蒸汽生成”过程及相关对象,其中“熔毁”过程把“反应堆堆芯”从“已冷却”变为“已熔化”。在图
10 的查询中,作者以“堆芯已熔化”为根节点,取所有入边并逆向追踪。结果列出导致熔毁的元素;“阀门卡开”和“堆芯水位过低”是触发后续事故过程的故障状态。由于该模型是事后建立,重点在于物理失效。若预先纳入更多故障模式、不良状态及规避措施(例如在关键状态处增加传感器和轮询),模型会更复杂,此时查询能力对聚焦失效分析和评估缓解措施尤为重要。
图
9 故障感知的“蒸汽生成”过程向内缩放后的 OPD。
图
10 故障感知“蒸汽生成”模型的邻域查询结果,逆向呈现堆芯熔化的成因。
经典最短路径算法 [39] 及旅行商类问题是具有挑战性的组合优化问题 [40,41],常用于网络路由。对概念模型执行最短路径查询,也可在赋权边的条件下寻找总成本或努力最小的路径。然而传统概念建模多用于沟通、记录与可视化,很少专为洞察分析而建。
5.2 以路径查找优化业务流程:IT 支持工作流
作者建立大型企业内部 IT 支持的 OPM 工作流模型。支持组织有多个专业单元,例如高性能计算、办公与数据中心网络、笔记本和企业应用。员工须提交服务工单,由具备相应技能者处理。一级、二级支持承担基础事务,三级通常是与客户相邻的工程团队。为减少三级团队的额外负担和任务切换,客户应先经过前两级支持。
用户却往往不清楚问题所需的技能,倾向于用邮件或即时消息直接联系熟悉的三级人员,而不提交工单。组织因此创建“IT
门户” Web 应用,按问题或请求判定支持类别并路由到相应团队,例如将 Wi-Fi 问题交给办公网络团队。图
11 的系统图中,“终端用户”拥有初始为“未解决”的“事件”;借助“事件解决系统”,“事件解决”过程将其变为“已解决”。
图
11 事件解决系统的 OPM 系统图。
图 12 展开的“事件解决”包含“联系 IT”。“联系方法”可能是“IT
门户”或“IT 人员”:前者通过系统自动分类所需 IT 技能;后者执行人工分类。图 13 进一步把人工分类展开为“联系
IT 人员”“审查问题”“分类所需 IT 技能”。终端用户先让三级人员从“不知晓问题”变为“知晓问题”,再经审查变为“理解问题”,最后完成技能分类。两条路线都把信息对象“所需
IT 技能”从“未分类”变为“已分类”,继而触发创建工单。系统生成初始为“开启”的工单,一级和二级支持人员处理后将工单“关闭”,事件也变为“已解决”。
图
12 事件解决系统的 SD1:“事件解决”过程向内缩放。
图
13 事件解决系统的 SD1.1:“人工 IT 技能分类”过程向内缩放。
作者以“未解决事件”为源、“已解决事件”为目标,寻找经过最少边和最少 OPM
事物的最短路径。图 14 表明它经过“IT 门户联系方法”,说明在模型所表达的流程步骤数意义上,门户路线优于直接联系
IT 人员;这一结果有别于许多用户的直觉。图 15 的最长路径包含“联系 IT 人员”等最短路径没有的过程和对象。两种查询结合表明,门户既减少用户所经步骤,也降低三级工程团队用于问题分类和任务切换的开销。
图
14 事件解决模型的最短路径查询结果。
图
15 事件解决模型的最长路径查询结果。
6. OPM 查询的实现
本节介绍 OPCloud 中的图数据库更新、Web 服务,以及路径、邻域和中心性三类查询的界面与实现。
6.1 路径查找查询
图中的路径查找是经典问题,早在 19 世纪已有研究 [42];20 世纪
50 年代,“最短路径受阻时的备选路由”等问题使其受到更多关注。
6.1.1 路径查询界面
用户进入 OPCloud 的“OPM Insights → Path Finding
Queries”后,会选择具体查询并填写参数。图 16 的最短路径对话框要求指定显示方式、源节点和目标节点。点击“Run
Query”后,图数据库 Angular 服务按参数执行;进度动态显示,完成后窗口自动关闭,出错则以红色粗体提示。
图
16 最短路径查询对话框。
由于扁平化会将状态变为独立对象,若用户选择原 OPM 状态作为源或目标,服务须改用对应的去状态化对象。界面还可选择是否显示灰色的完整扁平模型。图
17 展示从特拉维夫到旧金山的航程模型:可直飞,也可经纽约转机。显示完整模型时,查询命中的事物和连接突出显示,源与目标分别以不同颜色标示;隐藏完整模型时,只呈现相关结果并按路径蛇形排布。两种视图中的
OPL 段落都只保留查询结果所对应的语句,并按路径顺序排列,使用户能读出路径“故事”。
图
17 最长路径结果的显示选项:(a)原模型;(b)显示扁平背景模型;(c)隐藏扁平背景模型。
6.1.2 最短路径实现
Dijkstra 于 1956 年提出其最短路径算法 [39]。Neo4j
可用原生 Cypher [43] 或 Neo4j Labs 图算法库 [44] 执行最短路径;本文选择原生
Cypher。代码 3 的核心如下:
MATCH
(source:$S_OPM_THING_TYPE {name:'$S_OPM_THING_TEXT'}),
(target:$T_OPM_THING_TYPE {name:'$T_OPM_THING_TEXT'}),
p = shortestPath((source)-[*]->(target))
RETURN p |
该查询按事物类型(对象或过程)与名称匹配源和目标,前提是模型内的事物名称唯一。
6.1.3 最长路径实现
Cypher 没有现成的最长路径子程序。本文枚举选定源到目标的可能路径,按长度降序排序,取第一条。由于
OPM 模型不一定无环,代码 4 通过 WHERE 条件阻止路径重新经过源节点:
MATCH
p = (source:$S_OPM_THING_TYPE {name:'$S_OPM_THING_TEXT'})-[*]->
(target:$T_OPM_THING_TYPE {name:'$T_OPM_THING_TEXT'})
WITH p, range(1,length(p)) AS z
WHERE ALL (i IN z WHERE nodes(p)[i] <> source)
WITH p ORDER BY length(p) DESC
RETURN p LIMIT 1 |
6.2 邻域查询
“邻域”是从一个根节点出发、在指定最大跳数(半径或深度)内可到达的节点和连接所构成的子图。本文以原生
Cypher 实现,可按连接类型筛选并限制深度。
6.2.1 邻域查询界面
在“OPM Insights → Neighborhood Queries”中,用户可选择无向或有向查询(图
18)。有向查询还需选择“出边”或“入边”;“最大深度”决定搜索跳数;“仅过程连接”决定是否筛掉结构连接;“根节点”可从模型现有过程、对象或状态中选择。论文的深度示例排版有明显异常,因此此处按参数定义说明。
图
18 有向邻域查询对话框。
OPM 过程连接有三类 [3]:变换连接把被变换的对象或状态与过程相连,表达生成、消耗、状态改变;使能连接把施动者、工具或其状态与过程相连,表达执行所需的存在条件;控制连接是在变换或使能连接上添加事件(e)或条件(c)修饰,表达触发或执行条件。
图 19 的“钢琴音乐演奏”由“钢琴演奏者”执行,产生“钢琴音乐”;“听众”执行“聆听音乐”,其条件连接表示有音乐时才会消耗它。“钢琴”是演奏工具,由键盘、击弦机、制音器与琴弦组构成;这些组成连接属于结构连接。以“钢琴音乐演奏”为根、最大深度为
3、仅保留过程连接的无向查询得到图 20。钢琴的组成部件因筛选条件而不出现;听众则因处于指定跳数内而出现。根节点在图与
OPL 文本中均被强调。
图
19 钢琴音乐演奏 OPM 模型。
图
20 钢琴音乐演奏模型的邻域查询结果(仅过程连接)。
6.2.2 邻域查询实现
三类查询的主要区别是连接方向;最大深度由用户提供。代码 5—7 的核心模式如下:
无向:MATCH
p=(source:$ROOT_NODE_TYPE {name:'$ROOT_NODE_TEXT'})-[*1..$MAX_DEPTH]-(child)
RETURN p
出边:MATCH p=(source:$ROOT_NODE_TYPE {name:'$ROOT_NODE_TEXT'})-[*1..$MAX_DEPTH]->(child)
RETURN p
入边:MATCH p=(child)-[*1..$MAX_DEPTH]->(source:$ROOT_NODE_TYPE
{name:'$ROOT_NODE_TEXT'}) RETURN p |
若只需过程连接,可在 RETURN 前加入代码 8 的过滤条件:WHERE
ALL (r IN relationships(p) WHERE type(r)='OpmProceduralRelation')。
6.3 中心性查询
完整 OPM 模型的每个对象和过程对其他事物都有不同程度的影响。识别影响最大的事物,有助于理解系统行为、预测子系统行为,并发现信息流中的关键点。本文的中心性查询基于
PageRank [45,46],衡量节点的传递性影响或连接性;PageRank 属于特征向量中心性算法的一种变体
[47]。
6.3.1 中心性查询界面
图 21 的 PageRank 对话框提供以下设置:是否显示灰色完整扁平模型;按“仅过程连接”“仅基本结构连接”或“任意连接”计分;返回多少个得分最高的事物;只考虑过程、只考虑对象和状态,或不筛选事物类型。
图
21 PageRank 查询对话框。
图 22 中,“咖啡师”执行“制作咖啡”,生成“咖啡”;咖啡可被打包带走,也可由“服务员”提供给“顾客”。图
23a 的图表示中,“提供咖啡”和“顾客”都各有两条入边,但 PageRank 还考虑来源节点的影响力,因此不能只数入边。图
23b 的结果显示,该系统中影响力最高的 OPM 事物是“顾客”。
图
22 制作咖啡 OPM 模型。
图
23 咖啡提供模型:(a)图表示;(b)在 OPM 模型中显示的 PageRank 查询结果。
6.3.2 PageRank 查询实现
PageRank 最初用于网页排序,依据指向网页的链接数量及其来源质量估计重要性:重要页面通常得到更多链接。它不仅考虑节点的直接邻居,也考虑邻居的邻居。论文给出的公式为
PR(A)=(1−d)+d·Σ[PR(Tᵢ)/C(Tᵢ)],其中 d 为 0
到 1 的阻尼系数,通常取 0.85;Tᵢ 是指向 A 的节点,C(Tᵢ) 是 Tᵢ 的出边数。原 PDF
的公式说明处有排版重复,此处按公式语义整理。
与仅在已生成图上检索的查询不同,PageRank 需要按事物和连接类型调整图的表示。OPM
有对象、过程两类事物,也有过程连接、基本结构连接等类型;若用户要求“任意事物”或“任意连接”,转换过程把类型临时统一为
THING 或 LINK。查询结果包含原始 ID,因此显示时仍能恢复原
OPM 类型。代码 9 的核心为:
CALL
algo.pageRank.stream('$OPM_THING_TYPE','$OPM_LINK_TYPE',{iterations:20})
YIELD nodeId, score
MATCH (node) WHERE id(node)=nodeId
RETURN algo.getNodeById(nodeId), score
ORDER BY score DESC
LIMIT $NUMBER_OF_ITEMS |
7. 结论与未来工作
概念建模是基于模型的系统工程(MBSE)的核心,旨在建立有助于理解问题空间、综合可能方案并分析已识别方案的框架。它一致地表示系统及其运行领域,包括与其他系统和环境的交互
[48]。MBSE 尤其有利于系统生命周期早期阶段,但面对依赖模型数学表示的深入分析时,仍缺少足够严谨、有效的方法。本文展示如何利用图模型
[49] 增强 MBSE。图能够表示电路、道路、有机分子等物理网络,也能够表示生态系统、数据库和程序控制流中的交互。
图论应用、图查询优化以及概念建模各自已有丰富研究,但将二者结合的工作较少。作者把
OPM 概念模型与 Neo4j 图数据库整合:OPM 提供图形与文本双模态的形式知识表示,Neo4j 提供图论基础上的分析能力。一个查询或少量组合查询,就能从非平凡概念模型中取得仅靠目视难以甚至无法得到的结论。核电、家用场景、IT
服务和航空安全等案例显示,这一方法既可帮助理解新系统,也可对三里岛等既有事故作事后分析,以增强系统稳健性并避免类似事件。
本文将图数据库能力融入 OPCloud,让建模者继续使用熟悉的 OPM
图及互补的 OPL 语句。图文双通道符合多媒体学习的双通道处理观点 [50],有助于提升使用体验。未来,作者计划把模型图与通用或领域知识库连接,使查询超出单个模型的概念边界,并将此方法用于人工智能应用。所设想的
UniKOM(通用知识管理)系统将结合深度学习和语言模型,把自由自然语言文本转换为 OPM 模型。
|