文章目录

  • 一、题目
  • 二、实验过程
  • 三、完整代码
  • 四、结果展示

一、题目

建造用以识别虎、金钱豹、斑马、长颈鹿、企鹅、鸵鸟和信天翁 7 种动物的产生式实验系统(包括规则库和事实库),然后实现推理过程。即,实现可以输入任何的事实,并基于原有的规则和输入的事实进行推理。

R1:IF 该动物有毛 THEN 该动物是哺乳动物
R2:IF 该动物有奶 THEN 该动物是哺乳动物
R3:IF 该动物有羽毛 THEN 该动物是鸟
R4:IF 该动物会飞 AND 会下蛋 THEN 该动物是鸟
R5:IF 该动物吃肉 THEN 该动物是食肉动物
R6:IF 该动物有犬齿 AND 有爪 AND 眼盯前方 THEN 该动物是食肉动物
R7:IF 该动物是哺乳动物 AND 有蹄 THEN 该动物是有蹄类动物
R8:IF 该动物是哺乳动物 AND 是反刍动物 THEN 该动物是有蹄类动物
R9:IF 该动物是哺乳动物 AND 是食肉动物 AND 是黄褐色 AND 身上有暗斑点 THEN 该动物是金钱豹
R10:IF 该动物是哺乳动物 AND 是食肉动物 AND 是黄褐色 AND 身上有黑色条纹 THEN 该动物是虎
R11:IF 该动物是有蹄类动物 AND 有长脖子 AND 有长腿 AND 身上有暗斑点 THEN 该动物是长颈鹿
R12:IF 该动物是有蹄类动物 AND 身上有黑色条纹 THEN 该动物是斑马
R13:IF 该动物是鸟 AND 有长脖子AND 有长腿 AND 不会飞 AND 有黑白二色 THEN 该动物是鸵鸟
R14:IF 该动物是鸟 AND 会游泳 AND 不会飞 AND 有黑白二色 THEN 该动物是企鹅
R15:IF 该动物是鸟 AND 善飞 THEN 该动物是信天翁

提示,识别动物的基本思路:首先根据简单的条件对动物进行初次的分类划分,然后根据题中逐渐增加的细化条件,缩小分类范围,最后得出识别以上 7种动物的规则结果。
需要注意的是,
(1) 当已知的事实不完全时,虽不能推出最终结论,但可以得到分类结果;
(2) 当需要增加对其它动物的识别时,规则中只需增加关于这些动物的识别规则,可以充分利用前导规则;

二、实验过程

1.用C++模板库的容器构造特征表,用数字表示动物特征和动物类别:

2.构建规则库:

3.实现原理
用C++STL库的set_difference()函数求规则库与输入数据的差集放入tmp_sec的vector容器中,如果该容器的大小为0,说明输入数据中的某一/某些特征符合规则库中的规则,可以继续推理下去,如果该容器的大小不为0,说明输入数据中的某一/某些特征只是规则库中的某一/某些规则的一部分条件,不能进行推理;
主要过程:

        map<vector<int>, int>::iterator vec_iter;vector<int>  tmp_sec;vec_iter = classific.begin();i = 0;while (vec_iter != classific.end()) {i++;set_difference(vec_iter->first.begin(), vec_iter->first.end(), fact.begin(), fact.end(), inserter(tmp_sec, tmp_sec.begin()));if (tmp_sec.size() == 0) {//得到结果result.push_back(vec_iter->second);}tmp_sec.clear();vec_iter++;}

手动推导:

具体示例:

三、完整代码

#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
//映射特征表
map<int, string> tables =
{{1,"有毛"},{2,"产奶"},{3,"有羽毛"},{4,"会飞"},{5,"会下蛋"},{6,"吃肉"},{7,"有犬齿"},{8,"有爪"},{9,"眼睛盯前方"},{10,"有蹄"},{11,"反刍"},{12,"黄褐色"},{13,"有暗斑点"},{14,"有黑色条纹"},{15,"长脖"},{16,"长腿"},{17,"不会飞"},{18,"会游泳"},{19,"黑白两色"},{20,"善飞"},{21,"哺乳类"},{22,"鸟"},{23,"食肉动物"},{24,"蹄类动物"},{25,"企鹅"},{26,"信天翁"},{27,"鸵鸟"},{28,"斑马"},{29,"长颈鹿"},{30,"老虎"},{31,"金钱豹"}
};
//推理表(规则库)
map<vector<int>, int> classific =
{{{1},21},               //1{{2},21},{{3},22},{{4,5},22},{{6},23},             //5{{7,8,9},23},{{10,21},24},{{11,21},24},{{12,13,21,23},31},{{12,14,24,26},30},        //10{{13,15,16,24},29},{{14,24},28},{{15,16,17,19,22},27},{{20,22},26},{{17,18,19,22},25}//15
};
bool have_result = false;
int main()
{int i, j, a, b, c;int num;vector<int> fact, temp, result;vector<int>::iterator p;int flag = 1;cout << "欢迎来到产生式系统:" << endl;//打印选项单map<int, string>::iterator iter;iter = tables.begin();while (iter->first <= 24) {cout << iter->first << "." << iter->second << "\t";if (iter->first % 5 == 0)cout << endl;iter++;}cout << endl;while (flag == 1) {//输入信息cout << "请输入特征数:" << endl;cin >> num;cout << "请输入特征:" << endl;for (i = 0; i < num; i++) {cin >> a;fact.push_back(a);}sort(fact.begin(), fact.end());//实现推理过程map<vector<int>, int>::iterator vec_iter;vector<int>  tmp_sec;vec_iter = classific.begin();i = 0;while (vec_iter != classific.end()) {i++;set_difference(vec_iter->first.begin(), vec_iter->first.end(), fact.begin(), fact.end(), inserter(tmp_sec, tmp_sec.begin()));if (tmp_sec.size() == 0) {//得到结果result.push_back(vec_iter->second);}tmp_sec.clear();vec_iter++;}//判断是否得出结论p = result.begin();if (result.begin() == result.end()){cout << "不能推导出!" << endl;}else{while (p != result.end()){if (*p < 21)//特征{cout << "不能推导出!" << endl;break;}else{cout << "该动物可能是" << tables[*p] << endl;}p++;}}fact.clear();result.clear();cout << "请选择:1.继续    0.退出" << endl;cin >> flag;}return 0;
}

四、结果展示

1.完全符合规则库的某一规则:

2.部分符合规则库的某一/某些规则:

3. 都不符合规则库的某一/某些规则

4.超出范围:

文章参考自:c++实现简单的产生式推理系统

人工智能基础---上机2:产生式系统相关推荐

  1. 人工智能基础---上机1:猴子摘香蕉

    人工智能基础-上机1:猴子摘香蕉 一.题目 利用一阶谓词逻辑求解猴子摘香蕉问题:房内有一个猴子,一个箱子,天花板上挂了一串香蕉,其位置如图 1 所示,猴子为了拿到香蕉,它必须把箱子搬到香蕉下面,然后再 ...

  2. dlut 人工智能基础上机————创造营2020数据爬取

    import json import requests from bs4 import BeautifulSoup import os from openpyxl import workbook # ...

  3. 首部高中《人工智能基础》教材问世,40家中学引入

     整理 | 阿司匹林 出品 | AI科技大本营(公众号ID:rgznai100) 随着人工智能逐渐上升为国际竞争的新焦点,AI 人才短缺也日益凸显,全球对于人工智能基础教育的呼声不断.国务院印发的 ...

  4. 计算机应用基础上机操作,计算机应用基础上机操作试题

    计算机应用基础上机操作试题 山东省计算机应用能力考核试题 准考证号:姓名: 一.win7操作题 1.在D盘根目录下建立文件夹,命名为自己的准考证号,在姓名文件 夹下建立文件夹user. 2.在user ...

  5. 理解与理论:人工智能基础问题的悲观与乐观

    来源:筑土为坛 梅剑华,男,1980年生,湖北秭归人,山西大学哲学社会学院教授,博士生导师,先后赴美国罗格斯大学.匹兹堡大学.奥地利萨尔茨堡大学等访学,研究方向是语言哲学与心灵哲学.实验哲学与认知科学 ...

  6. UC伯克利教授Stuart Russell人工智能基础概念与34个误区

    来源:数据简化DataSimp 数据简化DataSimp导读:UC伯克利教授StuartRussell人工智能基础概念与34个误区,Russell是加州大学伯克利分校人工智能系统中心创始人兼计算机科学 ...

  7. 计算机文化基础操作考试,(计算机文化基础上机考试操作指南.doc

    (计算机文化基础上机考试操作指南 <计算机文化基础>上机考试操作指南 一.考试说明: 本考试为无纸化考试,考生按照监考老师的指引进入考场,在指定的座位参加考试. 二.登录系统 1.用鼠标双 ...

  8. 计算机文化教程实验基础知识,《计算机文化基础上机实验教程》孙家启、黄晓梅、刘奎 著_孔网...

    <计算机文化基础上机实验教程>是安徽省高等学校"十一五"规划教材--<计算机文化基础教程>的配套实验教材.本教程共安排了19个实验,内容包括计算机基础知识( ...

  9. 综述 | 联邦学习-新兴的人工智能基础技术

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 编辑:Sophia 计算机视觉联盟  报道  | 公众号 CVLianMeng 转载于 :arivx, 专知 [人工 ...

最新文章

  1. python编程if语法-Python编程入门基础语法详解经典
  2. PHP GD库生成图像的几个函数总结
  3. Failed resolution of: Landroid/support/v7/internal/widget/TintManager;异常解决方法
  4. MD3200扩展柜MD1200,玩起
  5. FFmpegh.264解码
  6. nginx负载均衡与反向代理
  7. React中ref的使用方法
  8. 看完少年的你,想到少年的我
  9. Nanachi发布:基于 React 的多端小程序转译框架
  10. python遍历文件目录_python遍历文件夹及其子目录
  11. Helm 3 完整教程(十八):Helm 流控制结构(2)with 语句
  12. html 字体图标大小,CSS ICONFONT 基线和大小问题
  13. Element is not clickable at point,Other element would receive the click: xxx 遇到某个对象Click()不能正常使用?
  14. vlog短视频_适用于Vlog或视频网络的20+ WordPress主题
  15. 圣诞祝福网页_意派Epub360丨圣诞营销H5的多种趣味玩法(案例+模板)
  16. FreeSWITCH软电话互打
  17. C#中Get和Set的用法
  18. Bolzano-Weierstrass 定理
  19. python: format
  20. 国土电子政务办公平台设计

热门文章

  1. 4、福尔摩斯到某古堡探险
  2. 试试smartdraw
  3. 从游戏中学习和体会用户心理
  4. SLAM领域国内外优秀实验室汇总
  5. 小米稳定版怎么root
  6. CentOS 7 安装Broadcom无线网卡
  7. 高通ATHEROS AR93XX AP无线驱动介绍2
  8. spring基于注解的配置
  9. python:成绩统计 描述 编写函数grade(实现以下功能↓可以任意添加参数
  10. Tensorflow搭建卷积神经网络识别手写英语字母