首页 > 其他分享 >《人工智能导论》实验1-动物识别系统

《人工智能导论》实验1-动物识别系统

时间:2024-11-09 19:47:23浏览次数:3  
标签:结论 人工智能 识别系统 导论 Rule 库中 规则 推理 事实

实现思路总结:

该程序通过规则推理系统实现了一个简单的知识推理引擎,核心目标是根据已有事实和规则库中的规则,不断推导出新的结论,直到得出最终结论或无法继续推理为止。

1. 规则(Rule)类
  • 规则类是推理引擎的核心部分,每条规则包含:
    • 前提条件pre):该规则的前提条件(即规则生效所需的事实)。是一个字符串列表,表示多个条件。
    • 结论nxt):如果所有前提条件成立,则推导出的结论。
    • 是否为最终结论finish):布尔值,用于标识该规则的结论是否为最终结论。如果是最终结论,推理停止。
  • isApplicable 方法:检查当前规则的前提条件是否全部满足事实库中的事实。如果满足,返回 true,规则可应用。
2. 规则库(RuleBank)类
  • 存储所有规则。采用 list<Rule> 类型来保存规则,因为 list 支持高效的插入和删除操作。
  • addRule 方法:向规则库中添加规则。
3. 事实(Fact)类
  • 存储事实库,使用 set<string> 来避免重复事实。事实库中存储的每个事实可以是任意字符串。
  • addFact 方法:将新的事实加入事实库。
  • hasFact 方法:检查事实库中是否已经存在某个事实。
4. 推理引擎
  • 主程序 (main 函数) 中实现了推理引擎的核心逻辑。程序不断遍历规则库,检查每条规则的前提条件是否成立。如果某条规则的前提条件成立且结论尚未存在于事实库中,则将结论加入事实库,并输出推导出的新事实。
  • 若推导出新的事实,程序会继续推理,直到推导出最终结论或无法推导出更多事实为止。
  • 最终结论:一旦推导出标记为最终结论的事实,程序会终止并输出该结论。
5. 推理过程的终止
  • 程序的推理过程在两种情况下终止:
    1. 得到最终结论:如果某条规则的结论标记为最终结论(finish == true),程序立即输出该结论并终止。
    2. 无法推导出新的结论:如果在某次推理循环中没有推出新的事实,程序会输出无法继续推理的信息,并终止。
6. 算法流程
  • 初始化事实库,并根据需求将初始事实添加进去。
  • 创建规则库,添加若干规则。每条规则包含前提条件、结论和是否为最终结论的信息。
  • 进入推理循环,遍历规则库:
    • 对每条规则,检查它是否可以应用(即前提条件是否已经存在于事实库中)。
    • 如果可以应用且结论尚未在事实库中,则将结论加入事实库,并继续进行下一轮推理。
    • 如果推理出最终结论,则输出该结论并退出。
    • 如果无法推理出新事实,退出推理过程。
实现代码:
#include <bits/stdc++.h>

using namespace std;

// 规则类
class Rule {
public:
    vector<string> pre;  // 前提条件容器
    string nxt;          // 结论
    bool finish;         // 标记是否是最终结论

    // 构造函数,用来新建规则
    Rule(vector<string> preconditions, string conclusion, bool isFinish = false)
            : pre(preconditions), nxt(conclusion), finish(isFinish) {}

    // 判断规则是否可应用
    bool isApplicable(const set<string>& factSet) {
        for (const string& condition : pre) {
            if (factSet.find(condition) == factSet.end()) {
                return false;  // 如果前提条件不成立,规则不可应用
            }
        }
        return true;  // 如果所有前提条件都存在于事实库中,则规则可应用
    }
};

// 规则库类
class RuleBank {
public:
    list<Rule> Rule_list;  // 规则链表

    // 插入规则的方法
    void addRule(const Rule& rule) {
        Rule_list.push_back(rule);
    }
};

// 事实类
class Fact {
public:
    set<string> factSet;  // 事实库,使用集合来避免重复事实

    // 添加事实的方法
    void addFact(const string& fact) {
        factSet.insert(fact);
    }

    // 检查是否存在某个事实
    bool hasFact(const string& fact) {
        return factSet.find(fact) != factSet.end();
    }
};

// 主程序类
int main() {
    // 创建事实库并添加初始事实
    Fact factBase;
    factBase.addFact("动物有奶");
    factBase.addFact("动物有蹄");
    factBase.addFact("动物有长脖子");
    factBase.addFact("动物有长腿");
    factBase.addFact("动物有暗斑");

    // 创建规则库并添加规则
    RuleBank ruleBank;
    ruleBank.addRule(Rule({"动物有奶"}, "动物是哺乳动物"));
    ruleBank.addRule(Rule({"动物有蹄", "动物是哺乳动物"}, "动物是有蹄类动物"));
    ruleBank.addRule(Rule({"动物是有蹄类动物", "动物有长脖子", "动物有长腿", "动物有暗斑"}, "动物是长颈鹿", true));  // 标记为最终结论

    // 推理引擎,进行推理直到得出最终结论
    while (true) {
        bool newFactAdded = false;

        // 遍历规则库,寻找可应用的规则
        for (auto& rule : ruleBank.Rule_list) {
            if (rule.isApplicable(factBase.factSet) && !factBase.hasFact(rule.nxt)) {
                // 如果规则可应用并且结论尚未在事实库中
                factBase.addFact(rule.nxt);  // 将结论添加到事实库
                cout << "推理出新事实: " << rule.nxt << endl;

                if (rule.finish) {
                    // 如果是最终结论
                    cout << "最终结论: " << rule.nxt << endl;
                    return 0;  // 退出程序
                }

                newFactAdded = true;
                break;  // 一旦推理出新的事实,重新开始推理
            }
        }

        // 如果没有推理出新的事实,则退出循环
        if (!newFactAdded) {
            cout << "无法推理出新的结论,推理结束。" << endl;
            break;
        }
    }

    return 0;
}

标签:结论,人工智能,识别系统,导论,Rule,库中,规则,推理,事实
From: https://blog.csdn.net/qq_73301411/article/details/143650183

相关文章

  • 2024.11.5人工智能学记6
    人工智能(ArtificialIntelligence),引文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。(一)学科范畴人工智能是一门边沿学科,属于自然科学、社会科学、技术科学三向交叉学科。(二)涉及学科与领域哲学和认知科学,数学,神经生......
  • Springboot 整合 Java DL4J 打造自然语言处理之语音识别系统
    ......
  • 人工智能技术的应用前景及未来发展:改变工作与生活的力量
    目录引言1.人工智能技术概述:发展与核心技术1.1深度学习与神经网络1.2强化学习(RL)1.3自然语言处理(NLP)1.4计算机视觉(CV)1.5数据与算法优化2.人工智能在医疗行业的应用:从辅助诊断到个性化治疗2.1AI辅助诊断2.2AI在药物研发中的应用2.3个性化治疗与精准医疗2.4......
  • 人工智能的现状与未来:技术变革的无限可能
    随着人工智能技术的不断发展,我们已经看到了它在各行业带来的巨大变革。从医疗到企业运营,再到人们的日常生活,人工智能的应用几乎无处不在,深刻地改变了我们的工作方式和生活方式。本文将探讨人工智能的应用领域、发展现状以及它未来的发展前景。人工智能的发展历程与现状人......
  • 2025年入门深度学习或人工智能,该学PyTorch还是TensorFlow?
    随着2025应用人工智能和深度学习技术的举世泛气,还在迷茫于该选择哪个深度学习框架吗?PyTorch和TensorFlow是并立于深度学习世界两座巨塔,但是越来越多人发现,在2025年,PyTorch似乎比TensorFlow更为流行和被接受。下面我来分析一下这两个深度学习框架的发展历史,应用差异和现状,以......
  • 第二届生成式人工智能与信息安全国际学术会议(GAIIS 2025)
    第二届生成式人工智能与信息安全国际学术会议(GAIIS2025) 会议时间与地点:2025年2月21日至23日,中国杭州。会议主题:围绕“生成式人工智能与信息安全”的最新研究,聚焦AI热点和难点问题,深入剖析信息安全核心技术。大会主席:DongXu,UniversityofMissouri-Columbia,USA姚信......
  • 人工智能岩土工程+PFC离散元仿真模拟应用(入门+案例实操)
    在深度学习与岩土工程融合的背景下,科研的边界持续扩展,创新成果不断涌现。从基本物理模型的构建到岩土工程问题的复杂模拟,从数据驱动的分析到工程问题的智能解决,深度学习正以前所未有的动力推动岩土工程领域的革新。据调查,目前在岩土工程领域内,深度学习的应用主要集中在以下几个......
  • 人工智能--自然语言处理简介
    上一篇:《人工智能模型训练中的数据之美——探索TFRecord》序言:自然语言处理(NLP)是人工智能中的一种技术,专注于理解基于人类语言的内容。它包含了编程技术,用于创建可以理解语言、分类内容,甚至生成和创作人类语言的新作品的模型。在接下来的几章中,我们将会探讨这些技术。此外,现在有......
  • 大模型蓝皮书最新:2024人工智能大模型技术财务应用蓝皮书,报告共计:129页PDF无偿分享
    今天分享的是:2024人工智能大模型技术财务应用蓝皮书报告共计:129页《人工智能大模型技术财务应用蓝皮书》由智能财务研究院出品,探讨了人工智能大模型技术在财务领域的应用。大模型具有突出的“涌现”能力、统一的Prompt交互、高扩展性的应用框架和高成本的训练和推理过程......
  • 人工智能是怎么来预测足球比赛结果的?
    在科技日新月异的今天,人工智能已经渗透到我们生活的方方面面,从智能家居到自动驾驶汽车,从虚拟助手到医疗诊断。而现在,AI甚至开始涉足体育领域,尤其是在预测足球比赛结果这一领域展现出了惊人的能力。那么,AI是如何做到预测足球比赛结果的呢?让我们一起揭开这项技术的神秘面纱。......