【人工智能Ⅰ】实验1:谓词表示法与产生式知识表示

实验1  谓词表示法与产生式知识表示

一、实验目的

1、熟悉谓词逻辑表示法;

2、理解和掌握产生式知识表示方法,实现产生式系统的规则库。

二、实验内容

要求通过C/C++/python语言编程实现:

1、猴子摘香蕉问题

2、动物识别系统

(1)建立识别七种动物识别系统的规则;

(2)确定需要识别的动物及其属性(7种动物,即:老虎、金钱豹、斑马、长颈鹿、企鹅、鸵鸟和信天翁)。

三、问题描述

1、房子里有一只猴子(即机器人),位于a处。在c处上方的天花板上有一串香蕉,猴子想吃,但摘不到。房间的b处还有一个箱子,如果猴子站到箱子上,就可以摸着天花板。如图1所示,对于上述问题,可以通过谓词逻辑表示法来描述知识。实现猴子摘香蕉问题的求解过程。

图1  猴子摘香蕉问题

2、建立一个动物识别系统的规则库,编写程序用以识别虎、豹、斑马、长颈鹿、企鹅、鸵鸟、信天翁等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 动物是信天翁

四、编写程序并调试(源程序、实验过程与结果)

1:猴子摘香蕉问题

1.1:源程序

dict = {}

count = 0

while 1:

    if count == 3:

        break

    item = input("please input your item:")

    site = input("please input your site:")

    if item != 'monkey' and item != 'box' and item != 'banana':

        print("input error")

    else:

        dict.setdefault(item, site)

        count += 1

print() # change lines

step = 1 #initialzie step

climb = 0

gain = 0

# if monkey is not at box site

if dict['monkey'] != dict['box']:

    result = "step"+str(step)+": move monkey to box"

    print(result,end=" ")

    print(dict['monkey']+"->"+dict['box'])

    dict['monkey']=dict['box']

    step += 1

# if box is not at banana site

if dict['box'] != dict['banana']:

    result = "step"+str(step)+": move box to banana"

    print(result,end=" ")

    print(dict['box']+"->"+dict['banana'])

    dict['box']=dict['banana']

    dict['monkey']=dict['banana']

    step += 1

# monkey climbs onto the box

if climb == 0:

    result = "step"+str(step)+": monkey climbs on the box"

    print(result,end=" ")

    print(dict['monkey']+"->"+dict['box'])

    step += 1

    climb = 1

# monkey jumps to get the banana

if climb == 1 and gain == 0:

    result = "step"+str(step)+": monkey jumps to get the banana"

    print(result,end=" ")

    print(dict['box']+"->"+dict['banana'])

    step += 1

    gain = 1

 1.2:实验过程与结果


如下图所示,依次输入三个物体及其地点,例如猴子在a点、箱子在b点、香蕉在c点。输入完毕后,程序自动显示每一步的操作。

以图中的结果为例,第一步命令猴子移动到箱子处,即a点到b点;第二步命令猴子将箱子移动到香蕉处,即b点到c点;第三步命令猴子爬到箱子上,地点不变;第四步命令猴子跳起来拿到香蕉,地点不变。综上所述,通过上述4个步骤即可实现猴子拿到香蕉的结果。

 

2:动物识别系统

    2.1:源程序

dict = {}

dict.setdefault(1, "有毛发")

dict.setdefault(2, "有奶")

dict.setdefault(3, "有羽毛")

dict.setdefault(4, "会飞")

dict.setdefault(5, "会生蛋")

dict.setdefault(6, "吃肉")

dict.setdefault(7, "犀利牙齿")

dict.setdefault(8, "有爪")

dict.setdefault(9, "眼向前方")

dict.setdefault(10, "有蹄")

dict.setdefault(11, "反刍")

dict.setdefault(12, "有黄褐色")

dict.setdefault(13, "有暗斑点")

dict.setdefault(14, "有黑色条纹")

dict.setdefault(15, "有长脖子")

dict.setdefault(16, "有长腿")

dict.setdefault(17, "不会飞")

dict.setdefault(18, "有黑白二色")

dict.setdefault(19, "会游泳")

dict.setdefault(20, "善飞")

mammal = 0  # 哺乳动物

bird = 0    #

meat = 0    # 食肉动物

foot = 0    # 蹄类动物

print(dict)

print("please later input features according to this directory")

feature = []

n = int(input("please input the total number of your features: "))

# add int() to convert str into int, or error will occur

for i in range(n):

    t = int(input("please input your current feature number: "))

    feature.append(t)

# hash features

hash = []

for i in range(21):

    hash.append(0)

for item in feature:

    hash[item]=1

# rules

result = ""

check = 0

# rule 1 2

if hash[1] == 1 or hash[2] == 1:

    mammal = 1

# rule 3 4

if hash[3] == 1 or (hash[4] == 1 and hash[5] == 1):

    bird = 1

# rule 5 6

if hash[6] == 1 or (hash[7] == 1 and hash[8] == 1 and hash[9] == 1):

    meat = 1

# rule 7 8

if mammal == 1 and (hash[10] == 1 or hash[11] == 1):

    foot = 1

# rule 9

if mammal == 1 and meat == 1 and hash[12] == 1 and hash[13] == 1:

    if check == 0:

        check = 1

        result = ""

# rule 10

if mammal == 1 and meat == 1 and hash[12] == 1 and hash[14] == 1:

    if check == 0:

        check = 1

        result = ""

# rule 11

if foot == 1 and hash[15] == 1 and hash[16] == 1 and hash[13] == 1:

    if check == 0:

        check = 1

        result = "长颈鹿"

# rule 12

if foot == 1 and hash[14] == 1:

    if check == 0:

        check = 1

        result = "斑马"

# rule 13

if bird == 1 and hash[17] == 1 and hash[15] == 1 and hash[16] == 1 and hash[18] == 1:

    if check == 0:

        check = 1

        result = "鸵鸟"

# rule 14

if bird == 1 and hash[17] == 1 and hash[19] == 1 and hash[18] == 1:

    if check == 0:

        check = 1

        result = "企鹅"

# rule 15

if bird == 1 and hash[20] == 1:

    if check == 0:

        check = 1

        result = "信天翁"

if check == 1:

    print("判断的结果是:"+result)

else:

    print("无法判断")

    2.2:实验过程与结果

在实验过程中,首先编写供用户查阅编号和对应特征的字典,然后令用户根据提示输入特征的总数和每个特征的编号,中间使用哈希表将用户输入的特征所对应的表内位置设定为1,不涉及的特征设定为0,再通过if语句逐条判断规则是否成立,如果成立则将相应的判定结果进行标记,最后输出判断的结果。

值得注意的是,有可能出现无法判断的情况。以下将展示测试规则系统中的各类判断结果,并逐个列举用户所使用的特征。

用户字典:

·测试豹:1、2、6、7、8、9、12、13

·测试虎:1、2、6、7、8、9、12、14

·测试斑马:1、2、10、11、14、17、19

·测试长颈鹿:1、10、13、15、16

·测试企鹅:3、5、17、18、19

·测试鸵鸟:3、5、15、16、17、18


·测试信天翁:3、20


·测试无法判断:1、3、6

 综上所述,各类情况均判断完毕,结果如图所示。

五、遇到的问题和解决办法

问题1:

n = int(input("please input the total number of your features: "))

# add int() to convert str into int, or error will occur

for i in range(n):

    t = int(input("please input your current feature number: "))

    feature.append(t)

上述代码在没有加int()前,input默认输入的为字符串,导致在循环开头时,n不是整数类型而报错。

解决方法1:

将 n = input() 改为 n = int(input()) 即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/118124.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring无法加载静态属性和SpringBoot单元测试指定加载配置文件

一、Spring无法加载静态属性,怎么解决? Spring主要用于管理和注入Bean(对象)的实例属性,而不是静态属性。静态属性属于类本身,而不是类的实例,因此Spring的依赖注入机制不会处理它们。 看图&a…

项目部署Linux步骤

1、最小化安装centos7-环境准备 安装epel-release 安装epel-release,因为有些rpm包在官方库中找不到。前提是保证可以联网 yum install -y epel-release 修改IP net-tools net-tool:工具包集合,包含ifconfig等命令 yum install -y net-…

【MySQL-->数据操作】

文章目录 前言一、insert1.单行插入2.多行插入3.插入更新/替换 二、select1.全列查询2.指定列插入3.列别名4. 表达式计算5.去重6.where条件查询7.排序8.limit分页显示 三、update四、delete五、插入查询结果六、聚合函数六、聚合分组1.格式2.where和having的区别 前言 一、inse…

个人创业新机遇,零成本开启真人手办定制项目

桌上的日历变薄,2023年已经接近尾声,浅观这一年,您是否发现大家日常关注的重点有明显的变化,诸多社会事件和宏观数字的背后,潜藏着对经济的“不托底”,而当我们真正开始关注起用个人经济积累去对冲未来的不…

大数据Flink(一百零一):SQL 表值函数(Table Function)

文章目录 SQL 表值函数(Table Function) SQL 表值函数(Table Function) Python UDTF,即 Python TableFunction,针对每一条输入数据,Python UDTF 可以产生 0 条、1 条或者多条输出数据,此外,一条输出数据可以包含多个列。比如以下示例,定义了一个名字为 split 的Pyt…

【会员管理系统】篇二之项目搭建、初始化、安装第三方库

一、项目搭建 1.全局安装vue-cli npm install -g vue/cli查看版本信息 vue -V 2.创建项目 vue create 项目名称 回车 回车 剩余选择如下 之后等待项目创建 最后npm run serve 二、初始化配置 1.更改标题 打开public下的index,将title标签里的改成想要设置的…

汽车电子专有名词与相应技术

1.EEA (Electronic & Electrical Architecture 电子电气架构) EEA在宏观上概括为物理架构与逻辑架构的结合,微观上通过众多电子元器件的协同配合,或集成式或分布式的系统级电子电气架构,具体详见专栏 新能源汽车电…

contenteditable实现文本内容确认提示

功能需求: 列表进行批量查询,需要对输入的值做提交校验,分三种情况: 若部分字符串有误,部分字符串需要变更字体颜色做提示,再次点击确认则对部分正确数据执行批量查询 若全部数据有误则变更字体颜色做提示&…

redis场用命令及其Java操作

目录 1. Redis入门 1.1 Redis简介 1.2 Redis下载与安装 1.2.1 Redis下载 1.2.2 Redis安装 1.3 Redis服务启动与停止 1.3.1 服务启动命令 1.3.2 客户端连接命令 1.3.3 修改Redis配置文件 1.3.4 Redis客户端图形工具 2. Redis数据类型 2.1 五种常用数据类型介绍 2.2 …

docker(1) dockfile制作docker java镜像 并启动

Dockerfile就是利用固定的指令来描述镜像的结构和构建过程,这样Docker才可以依次来构建镜像; 将springboot项目打包上传到指定目录,并且编写一个dockefile文件放在jar包的同级目录 输入命令 打包镜像 成功打包显示 运行镜像

中国区域2013-2021年森林地上生物量产品

该数据集包括中国陆地区域2013-2021年30m分辨率森林地上生物量产品。每年的产品存放在以年份数字命名的文件夹中,有2013-2021共9个文件夹。 每个文件夹内包括分块的产品和vrt文件。 产品命名方式为分区名年份数字.tif。 不同的分区名称如下: cold te…

简单聊下Redis的主从复制和哨兵机制以及集群(面试题)

ChatGPT的简答: Redis的主从复制(Master-Slave Replication)是指将一个Redis服务器的数据复制到其他Redis服务器的过程,其中一个服务器作为主节点(Master),而其他服务器作为从节点(S…

加上boot程序,FreeRTOS就跑不起来了

一、问题描述 bootloader跳转到APP时,app执行完初始化程序后死机 二、分析问题 第一步,执行app时死机死到哪里?通过DEBUG调试发现死到hardfault_handler()函数中,硬件错误,导致硬件错误的原因一般都是中断异常引起的。…

李宇航

该篇文章仅用作能直接在百度搜索到我的csdn,进入我的主页,没有实际意义. 进入李宇航博客方法 通过百度搜索"李宇航" 链接: https://blog.csdn.net/llllyh812 1.电脑端进入方法 输入网址链接: https://blog.csdn.net/llllyh812 或者 进入csdn主页,搜索"李宇…

口袋参谋:实时监测竞争对手的流量来源!

​ 在竞争激烈的淘宝天猫上运营店铺,如果想快速了解竞争对手的销售情况。 则可以通过口袋参谋同类目竞店透视工具,来剖析对方的数据信息,全面了解竞争对手的营销策略。 口袋参谋【同类目竞店透视】功能: 支持一键透视任意竞品…

Rockchip RK3399 - DRM crtc基础知识

一、LCD硬件原理 1.1 CRT介绍 CRT是阴极射线管(Cathode Ray Tube)的缩写,它是一种使用电子束在荧光屏上创建图像的显示设备。CRT显示器在过去很长一段时间内是主流的显示技术,现已被液晶显示屏或其他新兴技术所替代。 在CRT显示器中,扫描电子束从左到右、从上到下移动,照亮…

laravel 中 npm run 同时执行多个命令

在使用laravel 启动项目时 经常需要同时运行两个命令。 1.前端既是 npm run dev 2.后端php则是 php artisan serve 可以安装 使用 concurrently 进行并行启动 concurrently - npm npm install concurrently --save 之后修改 package.json 在 scripts 中增加 (多条…

useLayoutEffect和useEffect的区别

使用方式 这两个函数的使用方式其实非常简单,他们都接受一个函数一个数组,只有在数组里面的值改变的情况下才会再次执行 effect。所以对于使用方式我就不过多介绍了,不清楚的可以先参考官网 。 差异 useEffect 是异步执行的,而…

一招解决“请在微信客户端中打开链接”

一招解决“请在微信客户端中打开链接”-遇见你与你分享 在浏览器访问网站,却提示“请在微信客户端打开链接”。虽然这个情况你可能从未遇到过,但对于爱折腾的小伙伴,确是一道拦路虎 其实解决办法很简单,就是新建一个UA&#xff1…

ubuntu vbox 5.2 资源 virtualbox-dkms

各种 linux 包 https://pkgs.org/search/?qpython3.6 配置 python 默认版本 查看已安装python $ u82:~/Py_demo$ ls /usr/bin/python* /usr/bin/python2 /usr/bin/python2.7 /usr/bin/python3 /usr/bin/python3.8设置默认版本 $ u82:~/Py_demo$ sudo update-alternatives…