决策知识建模与应用的模型生成接口
立即解锁
发布时间: 2025-08-21 02:00:52 阅读量: 1 订阅数: 9 


网络数字技术前沿与发展
# 决策知识建模与应用的模型生成接口
## 1. 推理规则
在法律程序的建模与推理技术选择上,我们采用了图 - 程序建模方法。对法律条文的推理,是依据满足的程序和条件(标注在边上)从一个状态转移到另一个状态。为确保法律涵盖的所有情况都被考虑到,必须对所有路径和状态进行有效检查。基于此,我们选择了基于规则的并行前向链推理系统,这与Prolog的深度优先反向解析方案不同。
Cadral的解析内核基于Soar IA架构开发。Soar是一种通用规则语言,其推理引擎基于Rete算法,采用前向跟踪方式工作。规则(也称为产生式)是“如果A则B”的语句,即“如果情况A满足,则创建(或产生)情况B”。Soar旨在提出统一认知理论,并且被认为是智能代理编程的合适语言。它的优点是可以通过多种方式(如套接字或程序例程)进行通信,还允许在规则中放置关于津贴需求或索赔人数据的信息请求。
然而,由于Soar的通用性,编写规则可能会变得复杂,包括语法和推理算法的管理。而且,对规则库的微小修改可能会导致整个规则库的行为发生巨大变化,难以直观理解。因此,Cadral的核心是一种中间语言,其语法经过简化,并编译成真正的Soar形式。这个上层语言为用户提供了针对特定程序主题的有用或必要的子程序,所有子程序都有稳定且经过验证的行为,对应于预期的程序建模。特别是,中间语言对Soar解析引擎实施了必要的控制,以管理程序中使用的状态概念和实时通信。
这种高级语言还支持运行图形编辑器,在其中可以直接以图形形式对程序进行建模。该编辑器基于Jgraphpad工具,它基于Java核心图形可视化库Jgraph开发,具有强大的图形功能,可轻松绘制图形并导出为各种格式。在Cadral中,用Jgraphpad绘制的图形被导出为基于XML标准的GXL(图形交换语言)。我们已成功使用Cadral套件编写了有关教育津贴立法的规则并进行了测试,该立法占相关部门使用的家庭津贴整个法律框架的不到10%。程序记录在一个包含50个状态的图中,生成约300行中间代码和1500行真正的Soar代码。
### 1.1 示例建模
下面通过一个包含3个状态的简化示例详细展示建模过程:
1. 起始状态“test - age”:检查孩子的年龄(以发放教育津贴)。
2. 状态“limit - age - ok”:孩子未超过发放津贴的标准年龄限制。
3. 状态“test - etude”:孩子超过年龄限制,检查其是否正在接受大学教育(在某些情况下可延长津贴发放期限)。
连接到状态(2)的边上的条件表示已在数据库中检查孩子年龄小于18岁,另一条边表示逻辑相反情况。
由图直接生成的中间代码如下:
```plaintext
/* (A) left edge */
RULE age - ok /* rule name */
IN enfant.age <= 18 /* input to be tested */
THEN
POST age - ok oui /* virtual state */
END
/* (B) right edge */
RULE age - nok
IN enfant.age > 18
THEN
POST age - nok oui
END
/* (C) left final state */
RULE limite - age - ok
PRE age - ok oui /* precedent state */
THEN
FINAL limite - age - ok oui /* resulting state */
END
/* (D) right final state */
RULE test - etudes
PRE age - nok oui
THEN
FINAL test - etudes oui
END
```
对应的Soar代码如下:
```plaintext
sp { A - 1 - propose*age - ok /* rule name */
(state <s> ^io.input - link <il> - ^age - ok)
(<il> ^enfant.age <= 18 ) /* if part */
-->
(<s> ^operator <o> + = ) /* then part */
(<o> ^name age - ok )
}
sp { A - 2 - apply*age - ok
(state <s> ^operator.name age - ok
^io.output - link <ol>)
-->
(<s> ^age - ok oui)
}
sp { B - 1 - propose*age - nok
(state <s> ^io.input - link <il> - ^age - nok)
(<il> ^enfant.age > 18 )
-->
(<s> ^operator <o> + = )
(<o> ^name age - nok )
}
sp { B - 2 - apply*age - nok
(state <s> ^operator.name age - nok
^io.output - link <ol>)
-->
(<s> ^age - nok oui )
}
sp { C - 1 - propose*limite - age - ok
(state <s> - ^limite - age - ok)
(<s> ^age - ok oui )
-->
(<s> ^operator <o> + = )
(<o> ^name limite - age - ok )
}
sp { C - 2 - apply*limite - age - ok
(state <s> ^operator.name limite - age - ok
^io.output - link <ol>)
-->
(<ol> ^limite - age - ok <accept>)
(<accept> ^value oui)
}
sp { D - 1 - propose*test - etudes
(state <s> - ^test - etudes)
(<s> ^age - nok oui )
-->
(<s> ^operator <o> + = )
(<o> ^name test - etudes )
}
sp { D - 2 - apply*test - etudes
(state <s> ^operator.name test - etudes
^io.output - link <ol>)
-->
(<ol> ^test - etudes <accept>)
(<accept> ^value oui)
}
```
### 1.2 Cadral实现概述
Cadral的所有模块都可以在Windows工作站上运行,也可移植到Unix或Mac OS。编辑规则库时,用户在Jgraphpad编辑器中绘制程序图并保存为GXL文件。从GXL到中间语言,再从
0
0
复制全文
相关推荐










