产生式规则 java 置信度 概率_人工智能之产生式系统(c++实现)

人工智能之产生式系统(c++实现)

发布时间:2019-05-26 16:55,

浏览次数:106

这次的人工智能实验是产生式系统——动物分类。

规则库:

R1:动物有毛发→ 哺乳类

R2:动物有奶 → 哺乳类

R3:动物有羽毛 → 鸟类

R4:动物会飞 ∧会下蛋 → 鸟类

R5:哺乳类∧动物吃肉→ 食肉动物

R6:动物有犬齿 ∧有爪 ∧眼盯前方→食肉动物

R7:哺乳类 ∧有蹄 →蹄类

R8:哺乳类 ∧反刍 → 蹄类

R9:哺乳类 ∧ 食肉动物∧ 黄褐色 ∧ 有斑点→ 金钱豹

R10:哺乳类∧ 食肉动物 ∧ 黄褐色 ∧ 有黑色条纹→虎

R11:蹄类 ∧ 长脖 ∧ 长腿 ∧ 有斑点→ 长颈鹿

R12:蹄类 ∧ 有黑色条纹→ 斑马

R13:鸟类 ∧长脖 ∧ 长腿 ∧ 不会飞∧黑白二色 →鸵鸟

R14:鸟类 ∧会游泳 ∧黑白二色 ∧ 不会飞 →企鹅

R15:鸟类 ∧善飞 →信天翁

通过这个规则库,根据用户输入的已知条件,来判断所描述的动物。

产生式系统的问题求解过程即为对解空间的搜索过程,也就是推理过程。按照搜索的方向可把产生式系统分为正向推理、逆向推理和双向推理。

正向推理:从一组表示事实的谓词或命题出发,使用一组产生式规则,用以证明该谓词公式或命题是否成立。

逆向推理:从表示目标的谓词或命题出发,使用一组产生式规则证明事实谓词或命题成立,即首先提出一批假设目标,然后逐一验证这些假设。

双向推理:双向推理的推理策略是同时从目标向事实推理和从事实向目标推理,并在推理过程中的某个步骤,实现事实与目标的匹配。

已知 有斑点、长脖子、长腿、有奶、有蹄子

正向推理:R11–>R2–>R7

反向推理:假设R1到R7的某个结论成立,逐个与现有事实匹配

正反向混合推理(双向推理):正向推理,有斑点–>豹子或长颈鹿;根据其他事实反向推理

这里我们采用双向推理。

思路:

将所有名词编号,然后用编号来组织成一条条件(规则库),遍历这些条件,根据用户给出的名词,进行比较,同时计算每个条件的符合程度,推理出的名词加入到已知的名词队列中,重新遍历条件,更新符合度,如果没有100%符合的条件,则寻找符合度最高的条件,进行逆向推理,询问可能的且没有在已知名词队列中的名词,进行判断,加入名词队列,重新遍历,更新符合度,直至找到属于结果类的名词,即是结果

根据知识库中的知识和用户提供的事实进行推理,不断地由已知的事实推出未知的结论即中间结果,并将中间结果放到已知事实进行推理。

代码说明:

int change_speices(); // 对推理树中的可以直接推理的叶子节点进行推理,如有毛 --》哺乳类 将哺乳类加入名词队列中,将有毛去掉

就是对推理树中的可以推理的叶子节点进行推理,得到其父母节点,并将这些使用过的叶子节点去掉。

type

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值