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

合集下载

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

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

人工智能应用技术课程标准-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. 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是已经推理,不符合。

相关文档
最新文档