人工智能 课程实验 专家系统 程序源代码

合集下载

人工智能应用技术课程标准

人工智能应用技术课程标准

人工智能应用技术课程标准-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN《人工智能应用技术》课程标准一、课程定位与目标(一)课程定位《人工智能应用技术》是一门综合性前沿学科,是信号与系统与计算机的交叉学科。

机电一体化技术专业培养方案中“职业能力与素质”模块中的一门专业核心课。

培养学生程序设计能力、软件开发能力、硬件开发能力、数字信号处理能力、机器算法能力以及神经网络算法能力。

先修课程:《C语言程序设计》、《Java程序设计》、《Android编程》、《Linux 操作系统》、《嵌入式技术与应用》。

后续课程:《工业机器人应用技术》和《机电一体化技术》(二)课程目标通过本课程的学习和训练,使学生掌握人工智能技术的基本原理;了解启发式搜索策略、与或图搜索问题、谓词逻辑与归结原理、知识表示、不确定性推理方法、机器学习和知识发现等目前人工智能的主要研究领域的原理、方法和技术;增强学生的逻辑思维与实验能力,为今后在各自领域开拓高水平的人工智能技术应用奠定基础。

二、设计理念与思路(一)设计理念1.以职业教育模式为中心,突出教师的主导作用和学生的主体地位。

教师的教授应以学生为主体,以学生的学习为中心进行课程教学活动的设计。

2.注重学生的素质教育和能力培养作为计算机网络技术专业的一门应用性很强的专业基础课,要紧紧扣住技术应用这一主线,进行课程内容的改革,帮助学生“学其所用,用其所学”。

3.课程设计充分体现了职业性、实践性和开放性的要求体现职业岗位的能力要求,使课程设计与职业岗位能力紧密对应。

让企业参与到专业建设及课程设置的各个环节中,在校企合作中创新人才培养模式。

1.理解和记忆算法基本结构在整个课程所涉及的教学内容的学习过程中都按照“算法基本结构的理解和记忆-简单C++程序算法设计-上机调试程序技能训练-实际应用”这条主线来进行。

也就是说对人工智能的各种算法主要内容的学习,以理解加记忆为主,通过上机调试程序加深理解和记忆;要求学生熟记常用的典型算法。

java 人工智能源代码

java 人工智能源代码

java 人工智能源代码
Java人工智能源代码主要包括一些开源项目和库,这些项目和库为Java程序员提供了实现人工智能功能的工具和框架。

以下是一些常用的Java人工智能源代码:
1.JOONE(Java面向对象的神经网络):JOONE是一个开源的Java神经网络框架,它为Java程序员提供了一种简单有效的方式来实现人工神经网络。

JOONE具有很多特性,如多线程、分布式处理等,可以大大简化神经网络实现的复杂性。

2.Weka:Weka是一个基于Java的开源机器学习库,包含了多种机器学习算法和数据挖掘工具。

Weka提供了大量的分类、回归、聚类等算法,以及数据预处理、特征选择等功能。

3.Deeplearning4j:Deeplearning4j是一个基于Java的深度学习框架,提供了神经网络、卷积神经网络(CNN)、循环神经网络(RNN)等多种深度学习算法。

4.Apache Mahout:Apache Mahout是一个开源的分布式机器学习库,提供了许多经典的机器学习算法,如聚类、推荐系统等。

5.NLTK(自然语言处理工具包):NLTK是一个开源的Java库,用于实现自然语言处理功能。

NLTK提供了丰富的文本处理、语言识别、词向量生成等功能。

这些Java人工智能源代码可以帮助您快速搭建和实现各种人工智能应用,提高开发效率。

在实际项目中,您可以根据需求选择合适的项目和库进行开发。

人工智能c语言源代码

人工智能c语言源代码

人工智能c语言源代码人工智能是一个广泛的领域,涉及多种算法和技术。

在C语言中,可以实现一些基本的人工智能功能。

下面是一个简单的示例,展示了如何使用C语言编写一个简单的决策树算法:c.#include <stdio.h>。

// 定义决策树节点结构。

typedef struct DecisionTreeNode {。

char question;struct DecisionTreeNode yesNode;struct DecisionTreeNode noNode;} DecisionTreeNode;// 创建决策树节点。

DecisionTreeNode createNode(char question) {。

DecisionTreeNode node = (DecisionTreeNode)malloc(sizeof(DecisionTreeNode));node->question = question;node->yesNode = NULL;node->noNode = NULL;return node;}。

// 决策树算法。

void decisionTree() {。

DecisionTreeNode root = createNode("Is it a mammal?");root->yesNode = createNode("Does it have fur?");root->yesNode->yesNode = createNode("It's amammal!");root->yesNode->noNode = createNode("It's not a mammal!");root->noNode = createNode("Does it have feathers?");root->noNode->yesNode = createNode("It's a bird!");root->noNode->noNode = createNode("It's not abird!");printf("%s\n", root->question);char answer;scanf(" %c", &answer);DecisionTreeNode currentNode = root;while (currentNode != NULL) {。

ai人工智能编程代码

ai人工智能编程代码

ai人工智能编程代码
人工智能编程代码是指用于开发人工智能应用程序的代码。

随着人工智能技术的发展,越来越多的企业和组织开始将人工智能应用到自己的业务中,因此人工智能编程代码也变得越来越重要。

在人工智能编程中,常用的编程语言有Python、Java、C++等。

Python是人工智能领域中最常用的编程语言之一,因为它易于学习
和使用,并且拥有强大的科学计算库和数据分析工具。

Java和C++
也被广泛使用,因为它们可以提供更快的执行速度和更好的内存管理。

人工智能编程代码可以用于训练机器学习模型、构建自然语言处理系统、设计图像识别算法等。

人工智能编程的核心是算法和数据,因此编写高效的算法和收集合适的数据至关重要。

总而言之,人工智能编程是一个广阔的领域,需要不断地学习和探索。

只有持续不断的实践和深入研究,才能编写出更加高效和智能的人工智能应用程序。

- 1 -。

人工智能实验报告大全

人工智能实验报告大全

人工智能课内实验报告(8次)学院:自动化学院班级:智能1501 姓名:刘少鹏(34)学号: 06153034目录课内实验1:猴子摘香蕉问题的VC编程实现 (1)课内实验2:编程实现简单动物识别系统的知识表示 (5)课内实验3:盲目搜索求解8数码问题 (18)课内实验4:回溯算法求解四皇后问题 (33)课内实验5:编程实现一字棋游戏 (37)课内实验6:字句集消解实验 (46)课内实验7:简单动物识别系统的产生式推理 (66)课内实验8:编程实现D-S证据推理算法 (78)人工智能课内实验报告实验1:猴子摘香蕉问题的VC编程实现学院:自动化学院班级:智能1501姓名:刘少鹏(33)学号: 06153034日期: 2017-3-8 10:15-12:00实验1:猴子摘香蕉问题的VC编程实现一、实验目的(1)熟悉谓词逻辑表示法;(2)掌握人工智能谓词逻辑中的经典例子——猴子摘香蕉问题的编程实现。

二、编程环境VC语言三、问题描述房子里有一只猴子(即机器人),位于a处。

在c处上方的天花板上有一串香蕉,猴子想吃,但摘不到。

房间的b处还有一个箱子,如果猴子站到箱子上,就可以摸着天花板。

如图1所示,对于上述问题,可以通过谓词逻辑表示法来描述知识。

要求通过VC语言编程实现猴子摘香蕉问题的求解过程。

图1 猴子摘香蕉问题四、源代码#include<stdio.h>unsigned int i;void Monkey_Go_Box(unsigned char x, unsigned char y){printf("Step %d:monkey从%c走到%c\n", ++i, x, y);//x表示猴子的位置,y为箱子的位置}void Monkey_Move_Box(char x, char y){printf("Step %d:monkey把箱子从%c运到%c\n", ++i, x, y);//x表示箱子的位置,y为香蕉的位置}void Monkey_On_Box(){printf("Step %d:monkey爬上箱子\n", ++i);}void Monkey_Get_Banana(){printf("Step %d:monkey摘到香蕉\n", ++i);}void main(){unsigned char Monkey, Box, Banana;printf("********智能1501班**********\n");printf("********06153034************\n");printf("********刘少鹏**************\n");printf("请用a b c来表示猴子箱子香蕉的位置\n");printf("Monkey\tbox\tbanana\n");scanf("%c", &Monkey);getchar();printf("\t");scanf("%c", &Box);getchar();printf("\t\t");scanf("%c", &Banana);getchar();printf("\n操作步骤如下\n");if (Monkey != Box){Monkey_Go_Box(Monkey, Box);}if (Box != Banana){Monkey_Move_Box(Box, Banana);}Monkey_On_Box();Monkey_Get_Banana();printf("\n");getchar();}五、实验结果相关截图六、心得体会通过本次实验,我初步了学会了使用VC的新建工程,并且进行简单的程序编写。

人工智能python项目源代码

人工智能python项目源代码

人工智能Python项目源代码介绍人工智能(Artificial Intelligence,简称AI)是一门研究如何使计算机能够像人类一样思考、学习和决策的科学。

近年来,随着计算机技术的快速发展,人工智能在各个领域都有着广泛的应用。

Python作为一种简洁、易学、功能强大的编程语言,被广泛应用于人工智能项目的开发中。

本文将介绍一个基于Python的人工智能项目源代码,包括以下几个方面内容:1.项目背景2.功能介绍3.技术实现4.使用方法5.总结与展望1. 项目背景随着人工智能技术的不断发展,越来越多的公司和组织开始关注并应用人工智能技术。

本项目旨在通过一个示例代码,展示如何使用Python编写一个简单的人工智能项目。

2. 功能介绍本项目实现了一个简单的聊天机器人。

用户可以与聊天机器人进行对话,并获取相关信息。

聊天机器人可以回答用户提出的问题,并根据用户输入进行相应的操作。

具体功能包括: - 问答功能:用户可以向聊天机器人提出问题,聊天机器人将根据预定义的问题和答案进行回复。

- 操作功能:用户可以通过输入指令与聊天机器人进行交互,如查询天气、播放音乐等。

3. 技术实现本项目使用Python编程语言实现。

下面是项目的主要技术实现:•自然语言处理(Natural Language Processing,NLP):使用NLP技术对用户的输入进行处理和理解,以便正确地回答用户的问题。

•机器学习(Machine Learning):通过训练模型,使聊天机器人能够根据问题内容进行分类和回答。

•数据库管理:使用数据库存储预定义的问题和答案,并根据用户的输入查询相关信息。

4. 使用方法在使用本项目前,需要先安装Python环境,并安装相关依赖库。

可以通过以下步骤来运行该项目:1.下载源代码到本地计算机。

2.打开命令行终端,进入项目所在目录。

3.安装所需依赖库,可以使用以下命令:pip install -r requirements.txt4.运行主程序文件:python main.py5.在命令行终端中与聊天机器人进行交互。

《人工智能》课程教学大纲

《人工智能》课程教学大纲

《人工智能》课程教学大纲一、课程基本信息开课单位 信息与网络工程学院 课程类别 个性拓展课程名称 人工智能课程编码 GT28101 开课对象 网络工程专业、计算机科学与技术专业开课学期第4或6学期学时学时//学分 36学时学时/2/2学分(理论课:学分(理论课:2828学时学时/1.5/1.5学分;实验课:学分;实验课: 8 8学时学时/0.5/0.5学分) 先修课程 离散数学、数据结构、程序设计课程简介:人工智能是计算机科学的重要分支,是研究如何利用计算机来模拟人脑所从事的感知、推理、学习、思考、规划等人类智能活动,来解决需要用人类智能才能解决的问题,以延伸人们智能的科学。

该课程主要讲述人工智能的基本概念及原理、知识与知识表示、机器推理、搜索策略、神经网络、机器学习、遗传算法等方面内容。

二、课程教学目标《人工智能》是计算机科学与技术专业的一门专业拓展课,通过本课程的学习使本科生对人工智能的基本内容、基本原理和基本方法有一个比较初步的认识,掌握人工智能的基本概念、基本原理、知识的表示、推理机制和智能问题求解技术。

启发学生开发软件的思路,培养学生对相关的智能问题的分析能力,提高学生开发应用软件的能力和水平。

三、教学学时分配《人工智能》课程理论教学学时分配表章次 主要内容学时分配教学方法或手段 第一章 人工智能概述 3 讲授法、多媒体 第二章 智能程序设计语言 5 讲授法、多媒体 第三章 图搜索技术4 探究式、多媒体 第四章 基于谓词逻辑的机器推理 6 讲授法、多媒体 第五章 机器学习与专家系统 4 概述法、多媒体 第六章智能计算与问题求解6 启发式、多媒体合计28《人工智能》课程实验内容设置与教学要求一览表序号实验项目名称实验内容教学要求学时分配实验类别实验类型每组人数实实验一 一分支与循环程序设计1) Prolog 运行环境; 2)2)利用利用PROLOG 进行事实库、规则库的编写; 3)3)分支程序设计;分支程序设计;4)4)循环程序设计;循环程序设计;5)5)输入出程序设计。

汉诺塔实验(人工智能)

汉诺塔实验(人工智能)

实验二——专家系统一、源代码import javax.swing.JCheckBox;import javax.swing.JOptionPane;import javax.swing.JPanel;public class Index extends javax.swing.JFrame {public Index() {initComponents();}private void initComponents() {jmilk = new javax.swing.JCheckBox();jclaw = new javax.swing.JCheckBox();jhoof = new javax.swing.JCheckBox();jbird = new javax.swing.JCheckBox();jloogLeg = new javax.swing.JCheckBox();jflyable = new javax.swing.JCheckBox();jeatMeat = new javax.swing.JCheckBox();jfur = new javax.swing.JCheckBox();jruminate = new javax.swing.JCheckBox();jswim = new javax.swing.JCheckBox();jfeather = new javax.swing.JCheckBox();jdogTooth = new javax.swing.JCheckBox();jflyest = new javax.swing.JCheckBox();jlayEgg = new javax.swing.JCheckBox();jblackWhite = new javax.swing.JCheckBox();jyellow = new javax.swing.JCheckBox();jinFlyable = new javax.swing.JCheckBox();jdarkDot = new javax.swing.JCheckBox();jhoofAnimal = new javax.swing.JCheckBox();jpredator = new javax.swing.JCheckBox();jmammal = new javax.swing.JCheckBox();jblackStrip = new javax.swing.JCheckBox();jgaze = new javax.swing.JCheckBox();jLabel1 = new javax.swing.JLabel();btnOk = new javax.swing.JButton();jloogNeck = new javax.swing.JCheckBox(); 数组设置//:checkBoxs[0] = jmilk;checkBoxs[1] = jclaw;checkBoxs[2] = jhoof;checkBoxs[3] = jbird;checkBoxs[4] = jloogLeg;checkBoxs[5] = jflyable;checkBoxs[6] = jeatMeat;checkBoxs[7] = jfur;checkBoxs[8] = jruminate;checkBoxs[9] = jswim;checkBoxs[10] = jfeather;checkBoxs[11] = jdogTooth;checkBoxs[12] = jflyest;checkBoxs[13] = jlayEgg;checkBoxs[14] = jblackWhite;checkBoxs[15] = jyellow;checkBoxs[16] = jinFlyable;checkBoxs[17] = jdarkDot;checkBoxs[18] = jhoofAnimal;checkBoxs[19] = jpredator;checkBoxs[20] = jmammal;checkBoxs[21] = jblackStrip;checkBoxs[22] = jgaze;checkBoxs[23] = jloogNeck;://数组设置setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOS E);jmilk.setText("\u5976");jclaw.setText("\u722a");jhoof.setText("\u8e44");jbird.setText("\u9e1f");jloogLeg.setText("\u957f\u817f");jflyable.setText("\u4f1a\u98de");jeatMeat.setText("\u5403\u8089");jfur.setText("\u6bdb\u53d1");jruminate.setText("\u53cd\u520d");jswim.setText("\u6e38\u6cf3");jfeather.setText("\u7fbd\u6bdb");jdogTooth.setText("\u72ac\u9f7f");jflyest.setText("\u5584\u98de");jlayEgg.setText("\u4e0b\u86cb");jblackWhite.setText("\u9ed1\u767d\u8272");jyellow.setText("\u9ec4\u8910\u8272");jinFlyable.setText("\u4e0d\u4f1a\u98de");jdarkDot.setText("\u6697\u6591\u70b9");jhoofAnimal.setText("\u6709\u8e44\u7c7b\u52a8\u7269");jpredator.setText("\u98df\u8089\u52a8\u7269");jmammal.setText("\u54fa\u4e73\u52a8\u7269");jblackStrip.setText("\u9ed1\u8272\u6761\u7eb9");jgaze.setText("\u773c\u775b\u76ef\u7740\u524d\u65b9");jLabel1.setFont(new java.awt.Font("黑体", 0, 24));jLabel1.setText("\u4e13\u5bb6\u7cfb\u7edf");btnOk.setText("\u731c\u731c\u662f\u4ec0\u4e48\uff1f");btnOk.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) {btnOkActionPerformed(evt);}});jloogNeck.setText("\u957f\u8116\u5b50");javax.swing.GroupLayout layout = new javax.swing.GroupLayout( getContentPane());getContentPane().setLayout(layout);layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGap(35, 35, 35).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jmilk).addComponent(jclaw).addComponent(jhoof).addComponent(jbird)).addGap(44,44,44).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jeatMeat).addComponent(jfur).addComponent(jflyable).addComponent(jruminate))).addGroup(layout .createSequentialGroup().addComponent(jloogLeg).addGap(32,32,32).addComponent(jswim))).addGap(26, 26, 26).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jLabel1,javax.swing.GroupLayout.PREFERRED_SIZE,98,javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(btnOk).addGroup(layout.createSequentialGroup().addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jflyest).addComponent(jdogTooth).addComponent(jfeather).addComponent(jlayEgg).addComponent(jgaze)).addGap(23,23,23).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jloogNeck).addGroup(layout.createSequentialGroup().addGroup(layout.createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING).addComponent(jyellow).addComponent(jblackWhite).addComponent(jinFlyable).addComponent(jdarkDot)).addGap(18,18,18).addGroup(layout.createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING).addComponent(jmammal).addComponent(jpredator).addComponent(jblackStrip).addComponent(jhoofAnimal)))))).addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE,Short.MAX_VALUE)));layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout .createSequentialGroup().addGap(81,81,81).addComponent(jLabel1).addGap(65,65,65).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jfeather,javax.swing.GroupLayout.PREFERRED_SIZE,25,javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jfur).addComponent(jmilk).addComponent(jyellow)).addGap(18,18,18).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jdogTooth).addComponent(jeatMeat).addComponent(jclaw).addComponent(jblackWhite).addComponent(jpredator)).addGap(24,24,24).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jflyable).addComponent(jhoof)).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jlayEgg).addComponent(jinFlyable).addComponent(jblackStrip))).addGap(18,18,18).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jflyest).addComponent(jbird).addComponent(jruminate).addComponent(jdarkDot).addComponent(jhoofAnimal)).addPreferredGap(ponentPlacement.UNRELATED)).addGroup(layout .createSequentialGroup().addContainerGap(175,Short.MAX_VALUE).addComponent(jmammal,javax.swing.GroupLayout.PREFERRED_SIZE,25,javax.swing.GroupLayout.PREFERRED_SIZE).addGap(141,141,141))).addPreferredGap(ponentPlacement.UNRELATED).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout .createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jswim).addComponent(jgaze).addComponent(jloogNeck)).addComponent(jloogLeg)).addGap(73, 73,73).addComponent(btnOk).addGap(27, 27, 27)));pack();}// </editor-fold>//GEN-END:initComponents主要代码//:private void btnOkActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here:if (jfur.isSelected() && count() == 1) {show("哺乳动物");} else if (jmilk.isSelected() && count() == 1) {show("哺乳动物");} else if (jfeather.isSelected() && count() == 1) {show("鸟");} else if(jflyable.isSelected() && jlayEgg.isSelected() && count() == 2) {show("鸟");} else if (jeatMeat.isSelected() && count() == 1) {show("食肉动物");} else if (jdogTooth.isSelected() && jclaw.isSelected() && jgaze.isSelected() && count() == 3) {show("食肉动物");} else if(jmammal.isSelected() && jhoof.isSelected() && count() == 2) {show("有蹄类动物");} else if (jmammal.isSelected() && jruminate.isSelected() && count() == 2) {show("有蹄类动物");} else if (jmammal.isSelected() && jpredator.isSelected() && jyellow.isSelected() && jdarkDot.isSelected() && count() == 4) { show("金钱豹");} else if (jmammal.isSelected() && jpredator.isSelected() && jyellow.isSelected() && jblackStrip.isSelected() && count() == 4) { show("虎");} else if(jhoofAnimal.isSelected() && jloogNeck.isSelected() && jloogLeg.isSelected() && jdarkDot.isSelected() && count() == 4) { show("长颈鹿");} else if (jhoofAnimal.isSelected() && jblackStrip.isSelected() && count() == 2) {show("斑马");} else if (jbird.isSelected() && jinFlyable.isSelected() && jloogNeck.isSelected() && jloogLeg.isSelected() &&jblackWhite.isSelected() && count() == 5) {show("鸵鸟");} else if (jbird.isSelected() && jinFlyable.isSelected() && jblackWhite.isSelected() && jswim.isSelected() && count() == 4) { show("企鹅");} else if(jbird.isSelected() && jflyest.isSelected() && count() == 2) {show("信天翁");} else {show("我不知道是什么。

人工智能专业英语课程代码

人工智能专业英语课程代码

人工智能专业英语课程代码
人工智能专业的英语课程代码可能因学校和课程设置的不同而有所差异。

一般来说,人工智能专业的英语课程代码可能包括但不限于以下几种:
1. AI101: Introduction to Artificial Intelligence.
2. AI201: Machine Learning Fundamentals.
3. AI301: Natural Language Processing.
4. AI401: Deep Learning and Neural Networks.
5. AI501: Reinforcement Learning.
6. AI601: Computer Vision.
7. AI701: Ethics in AI.
8. AI801: AI Applications in Industry.
9. AI901: AI Capstone Project.
这些课程代码可能会根据学校的具体设置而有所不同,但一般来说,人工智能专业的英语课程代码会涵盖人工智能的基础理论、机器学习、深度学习、自然语言处理、计算机视觉、伦理等方面的内容。

希望这些信息能够对你有所帮助。

人工智能-动物识别专家系统算法Python+Pyqt实现

人工智能-动物识别专家系统算法Python+Pyqt实现

⼈⼯智能-动物识别专家系统算法Python+Pyqt实现⼀、基础知识库有⽑发哺乳动物 -有奶哺乳动物 -有⽻⽑鸟 -会飞会下蛋鸟 -吃⾁⾷⾁动物 -有⽝齿有⽖眼盯前⽅⾷⾁动物 -哺乳动物有蹄有蹄类动物 -哺乳动物反刍动物有蹄类动物 -哺乳动物⾷⾁动物黄褐⾊⾝上有暗斑点⾦钱豹 *哺乳动物⾷⾁动物黄褐⾊⾝上有⿊⾊条纹虎 *有蹄类动物长脖⼦有长腿⾝上有暗斑点长颈⿅ *有蹄类动物⾝上有⿊⾊条纹斑马 *鸟长脖⼦有长腿不会飞有⿊⽩⼆⾊鸵鸟 *鸟会游泳不会飞有⿊⽩⼆⾊企鹅 *鸟善飞信天翁 *最后⼀个字符为 - 表⽰结论为中间结果为 * 表⽰为⼀种动物⼆、QT界⾯源码# -*- coding: utf-8 -*-# Form implementation generated from reading ui file '动物识别专家系统.ui'## Created by: PyQt5 UI code generator 5.9.2## WARNING! All changes made in this file will be lost!from PyQt5 import QtCore, QtGui, QtWidgetsfrom PyQt5.QtGui import QFontclass Ui_Animals(object):def setupUi(self, Animals):Animals.setObjectName("Animals")Animals.resize(1127, 710)Animals.setAutoFillBackground(True)self.TL = QtWidgets.QTextEdit(Animals)self.TL.setGeometry(QtCore.QRect(670, 200, 251, 211))self.TL.setObjectName("TL")self.input = QtWidgets.QTextEdit(Animals)self.input.setGeometry(QtCore.QRect(240, 100, 151, 321))self.input.setAutoFillBackground(False)self.input.setObjectName("input")self.result = QtWidgets.QTextEdit(Animals)self.result.setGeometry(QtCore.QRect(670, 100, 251, 51))self.result.setObjectName("result")self.result.setReadOnly(True)self.input_lable = QtWidgets.QLabel(Animals)self.input_lable.setGeometry(QtCore.QRect(100, 80, 141, 41))self.input_lable.setObjectName("input_lable")self.input_lable.setFont(QFont("Roman times", 10, QFont.Bold))self.TL_label = QtWidgets.QLabel(Animals)self.TL_label.setGeometry(QtCore.QRect(750, 150, 101, 61))self.TL_label.setObjectName("TL_label")self.TL_label.setFont(QFont("Roman times", 10, QFont.Bold))self.result_label = QtWidgets.QLabel(Animals)self.result_label.setGeometry(QtCore.QRect(750, 70, 111, 31))self.result_label.setObjectName("result_label")self.result_label.setFont(QFont("Roman times", 10, QFont.Bold))self.scrollArea = QtWidgets.QScrollArea(Animals)self.scrollArea.setGeometry(QtCore.QRect(90, 120, 141, 20))self.scrollArea.setWidgetResizable(True)self.scrollArea.setObjectName("scrollArea")self.scrollAreaWidgetContents = QtWidgets.QWidget()self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 139, 18))self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")boBox = QtWidgets.QComboBox(self.scrollAreaWidgetContents)boBox.setGeometry(QtCore.QRect(0, 0, 141, 21))boBox.setObjectName("comboBox")self.scrollArea.setWidget(self.scrollAreaWidgetContents)self.pushButton = QtWidgets.QPushButton(Animals)self.pushButton.setGeometry(QtCore.QRect(500, 240, 93, 28))self.pushButton.setObjectName("pushButton")self.pushButton.setFont(QFont("Roman times", 10, QFont.Bold))self.checkBox = QtWidgets.QCheckBox(Animals)self.checkBox.setGeometry(QtCore.QRect(500, 190, 91, 19))self.checkBox.setObjectName("checkBox")self.checkBox.setFont(QFont("Roman times", 10, QFont.Bold))self.pushButton_2 = QtWidgets.QPushButton(Animals)self.pushButton_2.setGeometry(QtCore.QRect(10, 120, 61, 21))self.pushButton_2.setObjectName("pushButton_2")self.pushButton_2.setFont(QFont("Roman times", 10, QFont.Bold)) self.pushButton_3 = QtWidgets.QPushButton(Animals)self.pushButton_3.setGeometry(QtCore.QRect(500, 300, 91, 31)) self.pushButton_3.setObjectName("pushButton_3")self.pushButton_3.setFont(QFont("Roman times", 10, QFont.Bold)) self.retranslateUi(Animals)self.pushButton.clicked.connect(Animals.test)boBox.activated['int'].connect(Animals.selectChange)self.checkBox.stateChanged['int'].connect(Animals.checkChange) self.pushButton_2.clicked.connect(Animals.selectInit)self.pushButton_3.clicked.connect(Animals.rules)QtCore.QMetaObject.connectSlotsByName(Animals)def retranslateUi(self, Animals):_translate = QtCore.QCoreApplication.translateAnimals.setWindowTitle(_translate("Animals", "Form"))self.input_lable.setText(_translate("Animals", "请输⼊已知事实")) self.TL_label.setText(_translate("Animals", "推理过程"))self.result_label.setText(_translate("Animals", "专家分析结果"))self.pushButton.setText(_translate("Animals", "推理"))self.checkBox.setText(_translate("Animals", "反向推理"))self.pushButton_2.setText(_translate("Animals", "初始化"))self.pushButton_3.setText(_translate("Animals", "修改规则库")) View Code三、后端处理 Python源码# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'animal.py'## Created by: PyQt5 UI code generator 5.9.2## WARNING! All changes made in this file will be lost!from动物识别专家系统import Ui_Animalsfrom PyQt5 import QtWidgetsfrom PyQt5 import QtGuiimport sysimport osimport tkinterfrom tkinter import messageboxdef IsEvidence(x):for i in mywindow.fact:if x == i[-2]:return Falsereturn Truedef getData(x):data = []for i in mywindow.fact:tr = []if x == i[-2]:for j in range(0, len(i) - 1):tr.append(i[j])data.append(tr)return datadef backs(data):c = 0flag = Falsefor i in data:d = "if "for s in range(0, len(i)):if s == len(i)-2:d = d + str(i[s]) + " then "else:d = d + str(i[s]) + ""window.TL.append(d)for j in range(0, len(i) - 1):if (IsEvidence(i[j])):root = ()root.withdraw()a= messagebox.askquestion("提⽰", i[j]+"吗")#print(i[j] + "吗?")#r = input()print(a)if a == "yes":c = c + 1else:temp = getData(i[j])if (backs(temp)):c = c + 1if c >= i.__len__() - 1:flag = Trueprint(i[-1])print("验证成功")breakelse:flag = Falseprint(i[-1])print("验证失败")if (flag):return Trueelse:return Falseclass mywindow(QtWidgets.QWidget,Ui_Animals):fact = []conditions = set("")res = set("")def__init__(self):super(mywindow, self).__init__()f = open("rules.txt", "r")for line in f:ls = line.strip('\n').split("")mywindow.fact.append(ls)f.close()for i in mywindow.fact:for j in range(0,len(i)-2):mywindow.conditions.add(i[j])mywindow.res.add(i[-2])self.setupUi(self)def resizeEvent(self, event):palette = QtGui.QPalette()pix = QtGui.QPixmap('images/3.jpg')pix = pix.scaled(self.width(), self.height())palette.setBrush(QtGui.QPalette.Background, QtGui.QBrush(pix)) self.setPalette(palette)def test(self):if self.checkBox.isChecked():#逆向推理i = boBox.currentIndex()s = boBox.itemText(i)print(s)data=getData(s)print(data)if (backs(data)):root = ()root.withdraw()a = messagebox.showinfo("提⽰", "该动物是" + data[0][-1]) self.result.setText("专家分析该动物是"+data[0][-1])else:root = ()root.withdraw()self.result.setText("专家分析该动物不是" + data[0][-1])a = messagebox.showinfo("提⽰", "该动物不是" + data[0][-1])else: #正向推理s= self.input.toPlainText()tl =""description = s.split("\n")print("des")print(description)line = 0for i in mywindow.fact:same = 0for j in range(0, len(i)):if j >= len(i) - 2:breakfor k in range(0, len(description)):if i[j] == description[k]:same = same + 1breakif k == len(description):breakif same == i.__len__() - 2:print("same=i")line = 1if i[-1] == "*": # 是结论d = "if "for s in range(0,len(i)-1) :if s == len(i)-3:d=d+str(i[s])+" then "else:d=d+str(i[s])+""tl = tl + d + "\n"self.TL.setText(tl)self.result.setText("专家分析该动物是"+i[-2])print(i[-2])else:line = 1d = "if "for s in range(0, len(i) - 1):if s == len(i) - 3:d = d + str(i[s]) + " then "else:d = d + str(i[s]) + ""tl = tl + d +"\n"self.TL.setText(tl)self.result.setText("专家也不知道具体是什么动物,⼤概率推测是"+i[-2]) # print(i[-1])description.append(i[-2])if line ==0:self.result.setText("专家也不知道具体是什么动物")def selectInit(self):mywindow.fact.clear()mywindow.conditions.clear()mywindow.res.clear()f = open("rules.txt", "r")for line in f:ls = line.strip('\n').split("")mywindow.fact.append(ls)f.close()for i in mywindow.fact:for j in range(0, len(i) - 2):mywindow.conditions.add(i[j])mywindow.res.add(i[-2])boBox.clear()self.input.clear()self.result.clear()self.TL.clear()if(self.checkBox.isChecked()):for x in mywindow.res:boBox.addItem(str(x))else:for x in mywindow.conditions:boBox.addItem(str(x))def selectChange(self):if self.checkBox.isChecked():self.input.clear()i = boBox.currentIndex()s = boBox.itemText(i)self.input.append(s)else:i = boBox.currentIndex()s = boBox.itemText(i)self.input.append(s)def checkChange(self):boBox.clear()if self.checkBox.isChecked():for x in mywindow.res:boBox.addItem(str(x))else:for x in mywindow.conditions:boBox.addItem(str(x))def rules(self):os.startfile('rules.txt')app = QtWidgets.QApplication(sys.argv)window = mywindow()window.show()sys.exit(app.exec_())View Code。

用Prolog编写的人工智能专家系统设计与实现

用Prolog编写的人工智能专家系统设计与实现

用Prolog编写的人工智能专家系统设计与实现人工智能(Artificial Intelligence,AI)作为一门前沿的科学技术,正在逐渐渗透到各个领域,并在其中发挥着重要作用。

专家系统(Expert System)作为人工智能的一个重要分支,在知识表示和推理方面具有独特优势,被广泛应用于医疗、金融、工业控制等领域。

而Prolog作为一种逻辑编程语言,其规则引擎和模式匹配特性使其成为构建专家系统的理想选择。

本文将介绍如何使用Prolog编写人工智能专家系统,包括设计思路、实现步骤和案例分析。

1. 专家系统概述专家系统是一种模拟人类专家决策过程的计算机程序,通过将专家的知识和经验转化为计算机可处理的形式,来解决复杂的问题。

专家系统通常由知识库、推理机制和用户接口三部分组成,其中知识库存储了领域知识,推理机制根据用户输入的问题和知识库中的规则进行推理,最终给出结论或建议。

2. Prolog简介Prolog是一种基于逻辑的编程语言,其核心思想是利用逻辑规则进行推理。

Prolog程序由事实(Facts)和规则(Rules)组成,通过匹配规则中的条件来实现推理过程。

Prolog具有强大的模式匹配能力和自动回溯机制,非常适合用于构建专家系统。

3. 人工智能专家系统设计3.1 知识表示在设计人工智能专家系统时,首先需要将领域知识表示为Prolog 中的事实和规则。

事实通常包括对象之间的关系或属性,而规则描述了根据某些条件得出结论的推理过程。

例如,在医疗领域的专家系统中,可以表示疾病与症状之间的关系,以及根据症状推断可能患有的疾病。

3.2 推理机制推理是专家系统的核心功能,Prolog通过自动搜索匹配规则来实现推理过程。

当用户提出问题时,系统会根据用户输入的信息和知识库中的规则进行匹配,并逐步推导出结论。

如果存在多个可能的结论,Prolog会尝试不同路径直到找到所有可能解。

3.3 用户接口为了方便用户与专家系统交互,需要设计友好的用户接口。

人工智能课程设计报告--动物识别系统

人工智能课程设计报告--动物识别系统

文档从互联网中收集,已重新修正排版,word格式支持编辑,如有帮助欢迎下载支持。

计算机科学与技术学院《人工智能》课程设计报告设计题目:动物识别系统设计人员:学号:学号:学号:学号:学号:学号:指导教师:2015年7月目录目录 (1)摘要 (2)Abstract (2)一、专家系统基本知识 (3)1.1专家系统实际应用 (3)1.2专家系统的开发 (3)二、设计基本思路 (4)2.1知识库 (4)....................................................................................................... 错误!未定义书签。

2.1.2 知识库建立 (4)2.1.3 知识库获取 (5)2.2 数据库 (6)....................................................................................................... 错误!未定义书签。

....................................................................................................... 错误!未定义书签。

三、推理机构 (7)3.1推理机介绍 (7)3.1.1 推理机作用原理 (7)....................................................................................................... 错误!未定义书签。

3.2 正向推理 (7)3.2.1 正向推理基本思想 (7)3.2.2 正向推理示意图 (8)3.2.3 正向推理机所要具有功能 (8)3.3反向推理 (8)....................................................................................................... 错误!未定义书签。

《人工智能》课程教学大纲

《人工智能》课程教学大纲

《人工智能》课程教学大纲课程代码:H0404X课程名称:人工智能适用专业:计算机科学与技术专业及有关专业课程性质:本科生专业基础课﹙学位课﹚主讲教师:中南大学信息科学与工程学院智能系统与智能软件研究所蔡自兴教授总学时:40学时﹙课堂讲授36学时,实验教学4学时﹚课程学分:2学分预修课程:离散数学,数据结构一.教学目的和要求:通过本课程学习,使学生对人工智能的发展概况、基本原理和应用领域有初步了解,对主要技术及应用有一定掌握,启发学生对人工智能的兴趣,培养知识创新和技术创新能力。

人工智能涉及自主智能系统的设计和分析,与软件系统、物理机器、传感器和驱动器有关,常以机器人或自主飞行器作为例子加以介绍。

一个智能系统必须感知它的环境,与其它Agent和人类交互作用,并作用于环境,以完成指定的任务。

人工智能的研究论题包括计算机视觉、规划与行动、多Agent系统、语音识别、自动语言理解、专家系统和机器学习等。

这些研究论题的基础是通用和专用的知识表示和推理机制、问题求解和搜索算法,以及计算智能技术等。

此外,人工智能还提供一套工具以解决那些用其它方法难以解决甚至无法解决的问题。

这些工具包括启发式搜索和规划算法,知识表示和推理形式,机器学习技术,语音和语言理解方法,计算机视觉和机器人学等。

通过学习,学生能够知道什么时候需要某种合适的人工智能方法用于给定的问题,并能够选择适当的实现方法。

二.课程内容简介人工智能的主要讲授内容如下:1.叙述人工智能和智能系统的概况,列举出人工智能的研究与应用领域。

2.研究传统人工智能的知识表示方法和搜索推理技术,包括状态空间法、问题归约法谓词逻辑法、语义网络法、盲目搜索、启发式搜索、规则演绎算法和产生式系统等。

3.讨论高级知识推理,涉及非单调推理、时序推理、和各种不确定推理方法。

4.探讨人工智能的新研究领域,初步阐述计算智能的基本知识,包含神经计算、模糊计算、进化计算和人工生命诸内容。

人工智能实训项目小程序pycharm例子

人工智能实训项目小程序pycharm例子

以下是一个用 PyCharm 创建的小程序代码示例:```# -*- coding: utf-8 -*-# 导入 Flask 框架和相关模块from flask import Flask, request# 创建 Flask 应用程序app = Flask(__name__)# 定义首页@app.route('/')def index():return 'Welcome to my AI project.'# 定义一个 POST 请求@app.route('/predict', methods=['POST'])def predict():# 获取 POST 请求的数据data = request.get_json()# 对数据进行预测result = predict_data(data['data'])# 返回预测结果return {'result': result}# 进行数据预测def predict_data(data):# 这里是一个简单的数据预测示例prediction = len(data)return prediction# 启动 Flask 应用程序if __name__ == '__main__':app.run()```这个示例展示了一个基本的 Flask 应用程序,它具有一个首页和一个 POST 请求的路由。

当用户访问首页时,将返回一个欢迎信息。

当用户发送POST 请求并提供一些数据时,将调用 `predict_data` 函数对数据进行预测,并返回预测结果。

人工智能实验指导书

人工智能实验指导书

人工智能及应用实验指导书前言《人工智能及应用》课程实验的目的是为了配合课堂教学,进一步强化对人工制能的不同实现途径的理解。

实验的任务是要结合相关的人工智能语言平台(PROLOG语言),熟练掌握和深入理解课堂教学内容。

帮助学生更好地学习本课程,理解和掌握人工智能算法设计与实现所需的技术,为整个专业学习打好基础,要求运用所学知识,上机解决一些典型问题,通过分析、设计等各环节的训练,使学生深刻理解、牢固掌握所用到的一些原理与技术。

实验中的内容和教科书的内容是密切相关的,在反复实践的过程中才能掌握。

使学生在掌握抽象人工智能理论的基础之上学到更多可操作性很强的智能算法技术及实践经验。

目录实验一 Prolog语言及逻辑程序设计 (1)实验二搜索策略实验 (3)实验三专家系统实验 (6)实验一 Prolog语言及逻辑程序设计一、实验目的加深学生对逻辑程序运行机理的理解,使学生掌握PROLOG语言的特点、熟悉其编程环境,同时为后面的人工智能程序设计做好准备。

1、熟悉PROLOG语言编程环境的使用;2、了解PROLOG语言中常量、变量的表示方法;3、了解利用PROLOG进行事实库、规则库的编写方法。

二、实验环境计算机,Visual PROLOG教学软件。

三、预习要求实验前应阅读实验指导书,了解实验目的、预习PROLOG语言的相关知识。

四、实验内容1、学习使用Visual PROLOG,包括进入PROLOG主程序、编辑源程序、修改环境目录、退出等基本操作。

2、在Visual prolog集成环境下调试运行简单的Visual PROLOG程序。

3、编写一个描述亲属关系的PROLOG程序,然后再给出一些事实数据,建立一个小型演绎数据库。

可以以父亲和母亲为基本关系(作为基本谓词),再由此来描述祖父、祖母、兄弟、姐妹以及其他亲属关系。

4、修改教材2.2节例2.9的程序,使其能输出图中所有路径(path)。

五、实验方法和步骤1、启动Windows 操作环境。

人工智能实验报告

人工智能实验报告

暨南大学人工智能实验报告题目:动物识别系统院系:信科院计算机系专业:计算机软件与理论学号: 0934061004学生姓名:张韶远成绩:日期: 2009年11月10日一、目的与要求1.掌握人工智能的知识表示技术,能用产生式表示法表示知识,并实现一个用于识别的专家系统。

2.推理策略采用正向推理和反向推理两种。

二、主要内容1.学习人工智能的知识表示技术,关键掌握产生式知识表示的具体应用方法。

2.实现的动物识别系统的主要功能如下:2.1系统能通过正向、反向推理得到正确的动物识别结果。

2.2系统能动态地添加规则、能显示推理过程。

三.实验原理产生式表示:产生式表示是知识表示的一种。

这种方法是建立在因果关系的基础上的,可很容易的描述事实、规则及其不确定性度量。

1.事实的表示:事实可看成是断言一个语言变量的值或是多个语言变量间的关系的陈述句,语言变量的值或语言变量间的关系可以是一个词。

不一定是数字。

一般使用三元组(对象,属性,值)或(关系,对象1,对象2)来表示事实,其中对象就是语言变量,若考虑不确定性就成了四元组表示(增加可信度)。

这种表示的机器内部实现就是一个表。

如事实“老李年龄是35岁”,便写成(Lee,age,35)事实“老李、老张是朋友”,可写成(friend,Lee,Zhang)2.规则的表示:规则用于表示事物间的因果关系,以if condition then action 的单一形式来描述,将规则作为知识的单位。

其中的condition 部分称为条件式前件或模式,而action部分称作动作、后件或结论。

后件。

前件和后件也可以是有“与”、“或”、“非”等逻辑运算符的组合的表达式。

条件部分常是一些事实的合取或析取,而结论常是某一事实B。

如果不考虑不确定性,需另附可信度度量值。

产生式过则的含义是:如果前件满足,则可得到后件的结论或者执行后件的相应动作,即后件由前件来触发。

一个产生式生成的结论可以作为另一个产生式的前提或语言变量使用,进一步可构成产生式系统。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

游戏人物识别专家系统——邢洪伟一试验题目游戏人物识别专家系统二、试验内容游戏人物识别专家系统是流行的专家系统实验模型,主要基于暴风公司出品的经典角色类游戏《暗黑破坏神2》。

它用产生式规则来表示知识,共15条规则、可以识别八种游戏人物,这些规则既少又简单,可以改造他们,也可以加进新的规则,还可以用来识别其他东西的新规则来取代这些规则。

游戏人物识别15条规则的中文表示是:规则1:如果:暴风公司出品的单机角色类游戏则:该游戏是暗黑破坏神规则2:如果:暴风公司出品的单机对抗类游戏则:该游戏是魔兽争霸规则3:如果:暴风公司出品的网络游戏则:该游戏是魔兽世界规则4:如果:网易游戏出品的网络游戏则:该游戏是梦幻西游规则5:如果:暗黑破坏神版本1则:该游戏是暗黑破坏神1规则6:如果:是暗黑破坏神2则:该游戏是暗黑破坏神2规则7:如果:是暗黑破坏神3则:该游戏是暗黑破坏神3规则8:如果:暗黑破坏神版本2单手武器使用木棒的男性人物则:该人物是德鲁伊规则9:如果:暗黑破坏神2单手武器使用手杖的男性人物则:该人物是亡灵法师规则10:如果:暗黑破坏神版本2单手武器使用法杖的女性人物则:该人物是巫师规则11:如果:暗黑破坏神版本2双手武器使用长剑和盾牌的男性人物则:该人物是圣骑士规则12:如果:暗黑破坏神版本2单手武器使用斧头的男性人物则:该人物是野蛮人规则13:如果:暗黑破坏神版本2单手武器使用爪子的男性人物则:该人物是刺客规则14:如果:暗黑破坏神2单手武器使用长剑的女性人物则:该人物是亚马逊规则15:如果:梦幻西游单手使用鞭子的女性人物则:该人物是飞燕女游戏人物识别专家系统由15条规则组成,可以识别八种动物,在15条规则中,共出现 37个概念(也称作事实),共37个事实,每个事实给一个编号,从编号从1到37,在规则对象中我们不存储事实概念,只有该事实的编号,同样规则的结论也是事实概念的编号,事实与规则的数据以常量表示,其结构如下:Char *str{}={"暴风公司出品 ","网易游戏出品","单机游戏","网络游戏", "角色类游戏","对抗类游戏","版本1","版本2","版本3","男性","女性", "暗黑破坏神","梦幻西游","暗黑破坏神1","暗黑破坏神2","暗黑破坏神3","单身武器","双手武器","使用木棒","是用手杖","使用法杖","使用长剑","使用盾牌","使用斧头","使用爪子","使用鞭子","巫师","德鲁伊","亡灵法师","法师","圣骑士","野蛮人","刺客","亚马逊","飞燕女","魔兽争霸","魔兽世界","\ 0"}程序用编号序列的方式表达了产生式规则,如资料中规则15,如果动物是鸟,且善飞,则该动物是信天翁。

相应的规则数组第八条是{26,17,13,11,0,0},第26个是“使用鞭子”,如果事实成立,询问使用者下一个事实,第17个“单手武器”,如果也成立,询问使用者下一个事实,第13个是“梦幻西游”则,如果事实成立,询问使用者下一个事实,第11个是“女性”,如果事实成立,查找结论断言编号数组{28,29,30,31,32,33,34,35,14,15,16,1 3,12,36,37}中第八个“35”,这里35对应事实数组中的“飞燕女”。

上述就是程序的推理过程,也是程序中的重点,该部分是由规则类(类rul e)中的Query方法实现。

三、流程图及分析主程序的流程主要是:1、实例化各个类2、初始化事实集3、初始化规则集4、使用规则对事实进行推导规则类:规则名只是用来表示规则的一个名称,前提链由前提类生成的单链表,结论则是存放结论断言编号,表示由该规则的到的结论在事实数组中的编号。

事件类:事实号和规则数据和结论断言数据的数字相对应。

激活标志表示这个时候有没有被处理过。

断言这保存推理后的结论,在重复查询这个事实条件时不用反复询问用户。

四、关键代码int rule::Query(){int i;char c;int Tag=0;list *L;fact *F;F=Fact;L=Pre;if(L==NULL)cout<<"\nError";while(L!=NUll){F=Fact;for(;;){if(abs(L->GetNumber())==F->GetNumber())break;F=F->Next; //查找与规则前提链中前提号相同的事实}if(L->GetNumber()>0){if((F->GetSucc())==true) {L=L->Next;continue;}if((F->GetSucc())==false) return false;} //如果事实的断言为真则判断下一个前提,为假,则表示该规则不适合else{if((F->GetSucc())==true) return false;if((F->GetSucc())==false) {L=L->Next;continue;} }cout<<endl<<F->GetName()<<"(Y/N)";c=getchar(); //事实断言为不知道的时候,向用户询问flushall();if((c=='Y')||(c=='y')){if(L->GetNumber()>0)F->PutAct(1,true); //设置事实的断言和激活标志if(L->GetNumber()<0){F->PutAct(1,true);Tag=-1;return false;}}else{if(L->GetNumber()<0)F->PutAct(-1,false);else{F->PutAct(-1,false);Tag=-1;return false;}}L=L->Next;}F=Fact;for(;;){if(Conc==F->GetNumber()) break; //查找结论断言对应的事实F=F->Next;}if(Conc<24){F->PutAct(1,true);return false;}if(Tag!=-1){F=Fact;for(;;){if(Conc==F->GetNumber()) break;F=F->Next;}if(Conc<24){F->PutAct(1,true);return false;}cout<<"\nThis animal is"<<F->GetName();return true;}return false;};五试验结论通过这次试验和一些辅助书籍的阅读,加强了自己的阅读程序能力和编程的能力,而且游戏人物识别专家系统,它用产生式规则来表示知识,可以改造他们,也可以加进新的规则,还可以用来识别其他东西的新规则来取代这些规则,运用到其它方面去。

总之,这次试验让我受益匪浅。

附件:完整的源代码#include <string.h>#include <math.h>#include <stdio.h>#include <iostream.h>#define True 1#define False 0#define DontKnow -1Char *str{}={"暴风公司出品 ","网易游戏出品","单机游戏","网络游戏","角色类游戏","对抗类游戏","版本1","版本2","版本3","男性","女性", "暗黑破坏神","梦幻西游","暗黑破坏神1","暗黑破坏神2","暗黑破坏神3","单身武器","双手武器","使用木棒","是用手杖","使用法杖","使用长剑","使用盾牌","使用斧头","使用爪子","使用鞭子","巫师","德鲁伊","亡灵法师","法师","圣骑士","野蛮人","刺客","亚马逊","飞燕女","魔兽争霸","魔兽世界","\0"}int rulep[][6]={{19,17,15,10,0,0},{20,17,15,10,0,0},{21,17,15,11,0,0},{23,22,18,15,10,0},{24,17,15,11,0,0},{25,17,15,11,0,0},{22,17,15,11,0,0},{26,17,13,11,0,0},{12,7,1,0,0,0},{12,8,1,0,0,0},{12,9,1,0,0,0},{4,2,0,0,0,0},{5,3,1,0,0,0},{6,3,1,0,0,0},{4,1,0,0,0,0}};int rulec[]={28,29,30,31,32,33,34,35,14,15,16,13,12,36,37};class fact{private:int Number;char Name[21];int Active;int Succ;public:fact *Next;fact(int Num,char *L){strcpy(Name,L);Number=Num;Active=False;//-1是已经推理,不符合。

相关文档
最新文档