开发状态:
主要信息:
- 📌最小Python版本:3.8.10(其它版本尚未验证)
- 💻操作系统:Windows(其它系统尚未验证)
- 🗺️目前所支持NAL层级:NAL-1 ~ NAL-6
- 💬程序交互语言:简体中文
- 🕒最后更新时间:【2024-06-12 20:03:19】
最新测试入口为main.py
,可在终端中运行如下命令:
python main.py
该入口可调用其它测试用脚本,包括但不限于:
直接运行所有测试用例
python run_tests.py
运行指定测试用例,带有用户交互功能
python direct_test.py
从指定的测试结果文件(JSON)中查看测试结果
python result_loader.py
从指定的测试结果文件(JSON)中加载测试结果,分析不同推理器的测试结果差异
python diff_analyze.py
若使用 VSCode,可在.vscode/launch.json
中添加如下调试配置:
{
"configurations": [
{
"name": "测试套件 主入口",
"type": "debugpy",
"request": "launch",
"program": "main.py",
"console": "integratedTerminal"
},
{
"name": "运行分组NAL测试",
"type": "debugpy",
"request": "launch",
"program": "run_tests.py",
"console": "integratedTerminal"
},
{
"name": "运行精确NAL测试",
"type": "debugpy",
"request": "launch",
"program": "direct_test.py",
"console": "integratedTerminal"
},
{
"name": "测试结果加载器",
"type": "debugpy",
"request": "launch",
"program": "result_loader.py",
"console": "integratedTerminal"
},
{
"name": "差异分析",
"type": "debugpy",
"request": "launch",
"program": "diff_analyze.py",
"console": "integratedTerminal"
}
]
}
在添加该配置之后,可直接在VSCode中通过"调试"启动测试。
测试套件的所有"NARS版本"与"测试用例"均在constants.py
中定义,可通过修改该文件来调整测试套件的配置。
- 启用/禁用 NARS版本:注释/取消注释 相应常量的定义
- 启用/禁用 测试用例:注释/取消注释 相应常量的定义
在运行入口脚本run_tests.py
后,测试结果会即刻在终端中输出。
除了终端中输出,测试结果也会被存储在test_results
文件夹中(一般在项目根目录)。
其中的JSON文件可通过result_loader.py
加载回看:在控制台输入路径,直接从JSON中加载并展示测试结果。
亦可通过diff_analyze
对测试进行差异分析,比对相同用例中不同推理器的表现
- 部分成功 ⇒ 哪些成功,哪些失败
- 推理步数 ⇒ 各推理器通过测试所用的推理步数
- 运行耗时 ⇒ 各推理器在推理步数相同时,通过测试所用的时间
JSON格式:
- 主要用途:详尽、全面的信息存储,便于细节分析与漏洞溯因
- 文件名:
group_results-【时间戳】.test.json
- 所存数据:
- 所有测试指标
- 产生这些指标的程序输出(标准输出
stdout
与标准错误stderr
)
CSV格式:
- 主要用途:提供数据支持,便于直观而快速地规范化分析
- 文件名:
group_results-【时间戳】.test.csv
- 所存数据:
- 所有测试指标:测试用NARS、测试用例、测试通过与否、推理步数、程序运行时间等
- 不包括程序输出
BabelNAR 测试套件主要包括:
- NAL测试用例:涵盖NAL(Non-Axiomatic Logic,非公理逻辑)
测试套件的主要功能:
- 功能测试:单个推理器在各种知识处理功能上的表现
- 交叉测试:测试不同NARS实现在功能、性能上的差异
测试的主要指标
- 功能指标:
- 是否通过测试
- 性能指标:
- 通过测试所需程序运行时间
- 通过测试所需的最少推理步数
NAL是NARS运作的重要部分,旨在通过统一的"推理"实现通用化知识处理。
这些知识处理过程包括:
- 旧知识的修正
- 新知识的推断、派生
- 问题的回答
这些以"推理"为名的知识处理功能,通过"层级"的形式组织为六个层级。
NAL-1:基础的"继承"关系,推演&问答
测试编号 | 主要功能 |
---|---|
1.0 | 知识修正 |
1.1 ~ 1.5 | 三段论推理 |
1.6 ~ 1.7 | 问答 |
1.8 | 问题溯源 |
NAL-2:在"继承"关系上建立对称的"相似"关系,并引入新的"集合"概念
测试编号 | 主要功能 |
---|---|
2.0 | 知识修正 |
2.1 ~ 2.3 | "比较"推理 |
2.4 ~ 2.5 | 相似类比 |
2.6 | 相似传递 |
2.7 ~ 2.15 | 知识结构转换 |
2.16 ~ 2.19 | 新的"集合"概念 |
NAL-3:在NAL-2的"集合"上引入集合操作——两交两差、组合分解
测试编号 | 主要功能 |
---|---|
3.0 ~ 3.3 | 双前提组合分解 |
3.4 ~ 3.5 | 集合操作 |
3.6 ~ 3.7 | 组合与分解 |
3.8 ~ 3.15 | 单句组合与分解 |
NAL-4:引入与笛卡尔积类似的"积/像",并以此实现"关系推理"
测试编号 | 主要功能 |
---|---|
4.0 ~ 4.5 | "积"与"像"的相互转换 |
4.6 ~ 4.8 | "积"与"像"的组合分解 |
NAL-5:在"继承"之上引入"蕴含"关系,结合"合取/析取/否定"实现"高阶推理"与"条件推理"
测试编号 | 主要功能 |
---|---|
5.0 ~ 5.4 | 高阶三段论推理 |
5.5 ~ 5.6 | 分离前提或结论 |
5.7 ~ 5.12 | 高阶对称关系"等价" |
5.13 ~ 5.19 | 高阶集合"合取"与"析取" |
5.20 ~ 5.22 | 高阶差集"否定" |
5.23 ~ 5.25 | 条件演绎 |
5.26 ~ 5.28 | 条件归因 |
5.29 | 条件归纳 |
NAL-6:引入"变量"的概念,容纳并处理抽象化、符号化知识
测试编号 | 主要功能 |
---|---|
6.0 ~ 6.6 | 单变量统一 |
6.7 ~ 6.12 | 单变量消去 |
6.13 ~ 6.16 | 多变量消去 |
6.17 ~ 6.19 | 单变量引入 |
6.20 ~ 6.21 | 多变量引入 |
6.22 | 递归变量消去 |
6.23 ~ 6.24 | 深层变量统一 |
6.25 | 深层变量引入 |
6.26 ~ 6.27 | 部分变量消去 |
Python版本:3.8.10+
测试套件中已内置测试工具,且代码均基于Python内置标准库,无需安装第三方库。
该测试套件基于 BabelNAR 搭建,主要特性有:
- 统一的测试框架:一个测试可适配多种NARS,如OpenNARS、ONA、PyNARS
- 全自动化测试过程:可通过在
.nal
文件中插入相应命令,控制测试的"延时等待"、"结果预期"、"自动退出"等 - 基于配置的测试搭建:所有测试均可通过
hjson
文件方便配置
- Python脚本
- 入口:
run_tests.py
- NARS版本/测试 列表:
constants.py
- 测试工具链:
toolchain.py
- 测试结果加载工具:
result_loader.py
- 入口:
- 可执行文件:
executables/
- OpenNARS jar文件
- BabelNAR 可执行文件(
babelnar_cli.exe
)
- NAL测试用例:
nal/
- 单步推理:
single_step/*.nal
- 单步推理:
- BabelNAR 工具链配置文件:
config/*.hjson
该自动测试默认预期的真值(%频率;信度%
)只保留两位小数——若小数位数不为两位,则有可能导致测试失败
taskkill
命令终止进程 java.exe
——这可能导致系统中的其它Java应用停止运行
目前已被验证的、会被影响的有:
- 代码编辑器中的Java语言服务器(LSP)
- OpenNARS Shell交互式终端(立即停止运行)
在开始测试之前,请务必保护系统中依赖Java的应用,避免其意外终止给系统带来不必要的影响。
🕒因测试套件与Java的互操作表现不佳(依靠"强行终止"检测子进程状态),完成全套测试的时间可能较长
可考虑用如下方式缩短总测试时间:
- 减少使用的测试用例
- 方法:在
constants.py
中调整"测试区域分界线",或直接注释掉不需要的测试声明
- 方法:在
- 减少对比用NARS版本的数量
- 方法:直接注释掉不需要的NARS版本声明