agentzh さんのプロフィールHuman & Machineフォトブログリストその他 ![]() | ヘルプ |
|
|
2月6日 KB - VRG 知识库简介NAMEKB - VRG 知识库简介 AUTHORAgent Zhang (章亦春) <agentzh at gmail dot com> VERSIONMaintainer: Agent Zhang <agentzh at gmail dot com> DESCRIPTION这篇文档将简要地介绍一下 VRG 立体几何定性证明系统的知识库。如果您对 VRG 项目还不熟悉,请先阅读该项目的 Overview 文档。:) 记法约定VRG 知识库使用 XClips 语言进行描述。为方便起见,在本文档中的规则和事实示例亦使用 XClips 记法。VRG 定义了如下的特有运算符:
特别地,以问号 ( 变量一般用于规则,而常量一般出现在事实中。 这些其实都是 XClips 语言的语法。有关 XClips 语言的更多信息,请参见我的``Introduction to XClips''讲座的幻灯片: http://perlcabal.org/~agentzh/slides/xclips/xclips.pdf 知识库的建模对象VRG 知识库大体上可以分为三个部分,一是在立体几何空间中的推理,二是向量空间中的推理,三是在这两个空间之间的关系映射。 立体几何空间在立体几何空间中,基本的研究对象是空间直线和平面这两种立体几何元素以及它们之间的关系。这些关系包括 二元关系
三元关系
VRG 在立几空间中的推理任务主要是将复杂的关系分解为基本关系,或者将基本关系合成为复杂关系。 向量空间向量是立体几何元素的抽象表示。从数学语义上讲,立几空间中的平面在向量空间中对应其“法向量”,而立几空间中的直线在向量空间中对应其“方向向量”。 向量空间中的关系演绎是整个证明系统的核心。VRG 正是通过从已有的向量关系推出新的向量关系,来间接地从已有的几何关系推出新的几何关系的。 在向量空间中仅讨论下列关系: 基本假设条件目前,知识库使用了下列假设条件:
取消这两条基本假设虽然从逻辑上更加完整,但从实用性的角度上讲,将不可避免地使知识库中到处充斥着“a 与 b 不重合”这样的断言,同时也会增加了用户输入已知条件的负担,增加了因人为的已知条件不充足而无法求证的可能性。 知识库的推理流程知识库从物理上分为 4 个 CLIPS 模块(module),亦对应推理流程的 4 大阶段:
当推理机的焦点处于某个模块时,只有属于该模块的规则和事实才能被参与推理。 有关立几空间的事实由 Vectorize 模块,AntiVectorize,和 GoalMatch 模块共享;有关向量空间的事实由 Vectorize 模块,Eval 模块,和 AntiVectorize 模块共享。 推理机运行的具体流程如下
知识库的内部结构知识库由下列 XClips 源文件构成: vrg-sugar.xclp该文件定义了知识库中所使用的特殊的运算符,例如前缀 例如前缀 prefix:<\> line 而中缀 infix:<//> parallel preprocess.xclp该文件定义了 VRG 的“预处理规则”。这些规则的主要工作是在立几空间内部进行关系演算,其目的在于将 project(投影)和 meet(相交)这样的复杂关系转换为平行、垂直之类的简单关系,同时为某些基本关系生成“同构异形体”,以简化后续的匹配工作。 具体说来,此文件包含下列几条规则:
vectorize.xclp本文件包含了执行“向量化”步骤的所有规则。 线线关系的向量化若直线 \?l, \?m, ?l [?R] ?m => ?l <?R> ?m. 线面关系的向量化
面面关系的向量化若平面 #?alpha, #?beta, ?alpha [?R] ?beta => ?alpha <?R> ?beta.vector-eval.xclp此文件中的规则都是向量空间内的“求解规则”,用于从已知的向量关系推出全新的向量关系。这些规则是整个 VRG 系统知识的核心。
我们看到,一条向量化规则对应到如此之多的立几定理和公理。从这个意义上讲,向量化方法有效地揭示出立体关系的本质。 已知 ?a <T> ?b; ?a <X> ?b => ?a <~//> ?b. 本规则其实揭示的其实就是“不平行”的定义。之所以专门编写一条规则来产生“不平行”关系,是因为“不平行”在下面这条规则中扮演着关键性的角色。 已知 ?a <T> ?b, ?b <T> ?c, ?c <T> ?d, ?d <T> ?a, ?a <~//> ?c, ?b \= ?d 在高中数学课本中有如下定理是该向量规则的“特殊表现形式”:
若向量 ?a <?R> ?b => ?b <?R> ?a. 这条规则揭示的是向量关系满足交换律。 anti-vectorize.xclp本文件中的几条规则执行“逆向量化”操作,正好是 vectorize.xclp 中规则的“反函数”,比如逆向量化规则 \?l, #?alpha, ?l <T> ?alpha => ?l [~T] ?alpha, ?l [~X] ?alpha. 的含义是:如果在向量空间中,向量 goal-match.xclp本文件中的规则使用用户给定的证明目标对已得到的事实进行匹配。
知识库的完整性自检与 DBC除了上述规则之外,知识库中还收录了许多自检测规则,用于检测事实库内部的完整性。这些设施可以有效地检测出用户给定事实之间的冲突、知识库规则之间的冲突,以及其他形式的 VRG bug. 事实上,在 VRG 的早期,这些自检测规则确实捕捉到不少连题库测试台都未捕捉到的 bugs。 一条典型的自检规则如下: \?l, #?alpha, ?l [on] ?alpha, ?l [~on] ?alpha 其含义是:一条直线要么在一个平面上,要不不在那个平面上。如果同时存在这两个事实,则生成 contradction 事实指示矛盾冲突的存在。 将完整性测试逻辑与系统自身的实现放在一起,在软件工程中称为 Design by contract (DBC).VRG 的实践表明,在基于规则的系统中实现 DBC 要比传统的命令式语言要方便和自然得多。 知识库的 Subversion 仓库您总是可以从下面的 Subversion (SVN) 仓库取得最新版本的 VRG 知识库: https://svn.berlios.de/svnroot/repos/unisimu/VRG/knowledge TODO
COPYRIGHTCopyright 2006 by Agent Zhang (章亦春). All rights reserved. SEE ALSOOverview - VRG 专家系统概览NAMEOverview - VRG 专家系统概览 AUTHOR章亦春 <agentzh at gmail dot com> 计算机科学与通信工程学院 江苏大学 VERSIONMaintainer: Agent Zhang <agentzh at gmail dot com> VRG 是什么?VRG 是一个立体几何定性问题证明系统。比如下面这样的问题都可以使用VRG 进行证明:
上述问题都引用自 VRG 的自动化测试台的用例。VRG 可以对任一个用户问题作出 2 种基本判断:Yes (即可以证明)和 No(即无法确定),并且给出提示信息和证明过程。 用户如何向 VRG 描述自己的问题?用户通过一种类似几何语言的“用户语言”向 VRG 描述自己的问题。 例如上面的第 1 题可以用 VRG 用户语言表达如下: line l, m; 第 2 题可以表达如下: plane alpha, beta; alpha T beta, a T beta => a // alpha 第 3 题可以表达如下: plane alpha, beta, theta; 第 4 题可以表达如下: line l1, l2, l3, l4; l1 on alpha, l2 on alpha, meet(l1, l2, Q), 第 5 题可以表达如下: plane alpha, beta; alpha T beta, n on alpha, m on beta, m T n => n T beta, m T alpha; 第 6 题即三垂线定理,其 VRG 描述如下: plane alpha; 用户该如何运行 VRG 系统?用户首先使用 VRG 用户语言描述自己的立体几何问题,并将之保存到一个磁盘文件,并使用 $ perl script/vrg-run.pl foo.vrg 典型地,若将上面的第 1 题用 VRG 语言描述后保存至 problem-1.vrg文件,则运行 $ perl script/vrg-run.pl problem-1.vrg generating vectorize.png... 输出的第一行为`` 最后生成的 2 张图片比较特别。problem-1.vrg1.png 描述的是已知条件所对应的向量关系图(即 Vector Relational Graph),而 problem-1.vrg2.png 描绘的则是推理结束后结论加已知条件所对应的向量关系图。向量关系图本身使用下面的表示约定:所有节点表示向量,黑色实线表示“垂直关系”,黑色虚线表示“既不平行,也不垂直”,红色实线表示“平行关系”,红色虚线表示“不平行关系”,而其他关系会用文字显式标出。通过“向量关系图”,用户可以看到证明过程的数学本质。 VRG 是如何绘制这些 PNG 格式的有向图的?VRG 在内部使用 AT&T 的自由软件库 Graphviz 来生成所有的有向图。 VRG 在证明结果的描述上还有哪些特别之处?对于多证明目标的题目,VRG 在判断不成立时,会显式地指出具体是哪些目标是未决的。而对于题目自身的条件是彼此冲突的,比如两个几何元素既平行又垂直了,VRG 也会显式地指出冲突所涉及的细节(比如哪两个元素冲突了,是哪两个关系冲突了)。 VRG 经过了怎么的测试?我已使用高中数学教材中所有的公理、定义、定理和推论对 VRG 进行了测试(在 VRG的测试集中即对应 sanity.t 文件),此外,我还使用高三时候积累的所有相关的高考复习题对 VRG 进行了测试(在测试集中即对应 senior.t 文件)。 哪些立体几何问题是 VRG 无法求解的?对于涉及定量关系的几何问题是无法用 VRG 进行求解的,比如角度计算问题、线段长度之类。VRG 是定性求解系统,它只能处理“垂直”、“平行”、“线在面上”这样的定性关系。 VRG 的知识库是使用什么语言描述的?VRG 的知识库全部是使用我自主设计和实现的通用目的专家系统编程语言 XClips 进行描述的,在 VRG 源代码目录中,对应 knowledge/*.xclp 这些文件。 由于使用了可扩展的 XClips 语言,VRG 的知识库非常简洁,非常清晰。 VRG 在底层采用了什么样的推理引擎?VRG 在底层使用了美国航空航天局约翰逊太空中心开发的正向链推理机 CLIPS. 事实上,VRG 系统与 CLIPS 的交互全部是通过 XClips 系统来完成的。XClips 正是建筑在CLIPS 之上的。 值得一提的是,CLIPS 是发布在公共域(public domain)中的,因此可以将之用于任何目的。 VRG 可以运行在哪些操作系统上?VRG 的构件和依赖项都是高度可移植的,包括 CLIPS, perl, Graphviz, 因此可以不加修改地运行在包括 Windows, Linux, FreeBSD, Solaris 在内的多种操作系统上。目前,我只在 Windows XP 和 Windows 2000 上进行过测试。 如何获取 VRG ?您总是可以从下面的 SVN 仓库获得 VRG 最新版本的源代码: http://svn.berlios.de/svnroot/repos/unisimu/VRG 如何加入 VRG 的开发工作?如果您想帮助完善 VRG 系统,请发送电子邮件告知作者。谢谢! COPYRIGHTCopyright 2006 by Agent Zhang (章亦春). All rights reserved. SEE ALSO11月17日 XClips 与 VRG前些日子我本打算为本周的专家系统课程制做两组幻灯片。一组是《Introduction to XClips》,介绍我基于 CLIPS 设计的专家系统编程语言;一组是《Introduction to VRG》,介绍我用 XClips 语言编写的 立体几何自动化证明系统 VRG。但由于时间的关系,只完成了第一组。第二组我真的累了,暂时不想做了(尽管有更多更激动人心的东西值得介绍)。 《Introduction to XClips》这一组幻灯片,共 94 张。制做这套幻灯的过程是非常令人愉快的,尽管有些辛苦。呵呵。这是我第一次为自己设计和实现的专家系统语言编写幻灯,激动啊~~ 如果您在江大校外,可以从这里下载 PPT 格式的幻灯: http://svn.berlios.de/svnroot/repos/unisimu/Slides/xclips/xclips.ppt 将上面的 .ppt 改为 .pdf 可以取得 PDF 格式的版本。 如果您在江大校内,则可以从江大医学院的服务器上获取: http://yxy.ujs.edu.cn/images/xclips.ppt 或者 http://yxy.ujs.edu.cn/images/xclips.pdf 经过 10 天的努力,VRG 和 XClips 这两个项目从无到有,从小到大。 高中数学书上几乎所有的立体几何部分的公理、定理现在都能正确地为我的专家系统所证明啦。对应的测试文件如下: http://svn.berlios.de/svnroot/repos/unisimu/VRG/t/sanity.t 另外,我使用高三时搜集的许多高考复习题轰炸它,也全部为它轻松搞定。对应的测试文件如下: http://svn.berlios.de/svnroot/repos/unisimu/VRG/t/senior.t 你看到的这两个 .t 文件其实都是 100% 的 perl 脚本文件。由于使用了 Ingy 的 Test::Base 模块, 测试都是自说明的,非常清晰,非常漂亮。呵呵。 通过 VRG 项目我证实了向量化方法和定性推理的确是极为有力的几何证明工具。 该项目的源代码总是可以从下面的位置自由获取: http://svn.berlios.de/svnroot/repos/unisimu/VRG 与此同时,我还在专家系统的自动化单元测试技术、自动化覆盖测试、DBC (Design by Contract) 风格的自检验、基于模块的规则隔离与事实共享、推理过程的可视化等方面做了不少有趣的工作。我正试图将这些东西以最自然的形式融入到我的幻灯片中。呵呵。 由于使用像 CLIPS 这样的基于正向链 (forward chaining) 的推理引擎,我可以从 Prolog 的无限循环的困挠中解放出来,从而将主要力量放在知识库本身的表达以及推理过程的自动化解释的核心问题上,而不是时时刻刻去关心像消除左递归,避免规则回路这样的枯燥而琐碎的事情。耶~~~ |
|
|