当前位置:文档之家› 人工智能课程设计报告

人工智能课程设计报告

人工智能课程设计报告
人工智能课程设计报告

疾病诊断小型专家系统

——人工智能课程设计报告

智能1001班

傅宝林

0909101217

2013.6.18

1内容提要

此系统采用专家系统的规则库-推理机技术原理,以医学诊断为背景,旨在作出一个简单的辅助诊断专家系统。

系统的框架及界面采用的是Java语言,调用XML里保存的知识库和规则库。

此小型的专家系统以肺结核、哮喘、食管癌、骨折等疾病的诊断为例,展示了一个小型专家系统是如何构建的。

目录

1内容提要 (2)

2目的和意义 (4)

3系统的主要内容和功能 (5)

4设计流程及描述 (6)

5课程设计体会 (21)

6参考文献 (22)

2目的和意义

(1)加深理解专家系统的结构及开发过程。

(2)初步掌握知识获取的基本方法。

(3)掌握产生式规则知识表示方法及其编程实现方法。(4)初步掌握知识库的组建方法。

3系统的主要内容和功能

系统主要以问答的形势询问病情症状,操作者只需要回答YES或NO。当一趟询问完成后,系统会基于以上询问得出的事实推理出最终的诊断结果。

功能见以下截图1、2.

图1 问询界面

图2 诊断结果界面

4设计流程及描述

1)需求分析

本设计需要用高级语言编写框架及调用外部的规则库与知识库。方便起见,用java语言编写框架,用XML文件保存。

2)知识获取与知识表示

知识获取通过医学临床专业的同学及医学诊断专业书籍,确保专家系统的专家性。

知识的表示采用的是xml语言,把事实与规则一条条保存。3)知识库的组建

知识库分事实库和规则库组建。疾病诊断因为有的病有交叉的症状,所以逻辑上,从症状到诊断的过程是对一颗二叉树的搜索,当问题回答的是YES时,就进行深度优先搜索,当回答NO时,就转到兄弟节点。对于无关的疾病,则回到根节点重新对下一颗子树进行搜索。得到一种疾病的确诊就是result,得到这个叶子节点前遍历过的节点组成了reasons.

4)推理机制选择/编制

采用的是问题引导式推理。在规则库里写的其实不是真正的规则。真正的规则蕴含在问题及前提里。为了不让“专家”问无用的问题,每个问题都是以某个问题的答案为前提的。这样组成了内部的因果关系,所以真正的推理规则只与某一趟提问的最后一个问题的答案得出的事实有关。

5)程序清单

package 专家系统_V2;

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Font;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.ArrayList;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

import javax.swing.border.LineBorder;

public class MainFrame extends JFrame{

/**

* 主界面类

* @param args

*/

public static void main(String[] args) {

MainFrame main = new MainFrame();

main.myShow();

}

private void myShow() {

exe = new Execution();

exe.init();

this.setTitle(exe.expert_name+"专家系统");

this.setSize(380, 250);

this.setDefaultCloseOperation(3);

this.setResizable(false);

this.setLocationRelativeTo(null);

this.setLayout(new BorderLayout());

JPanel jp_center = new JPanel();

jp_center.setBackground(Color.white);

jp_center.setPreferredSize(new Dimension(380,250));

jp_center.setLayout(null);

jl = new JLabel();

jl.setText("请回答下列问题:");

jl.setFont(new Font(Font.DIALOG,Font.BOLD,25));

jl.setForeground(Color.blue);

jl.setBounds(10, 10, 200, 30);

jta=new JTextArea();

JScrollPane js=new JScrollPane(jta);

jta.setEditable(false);

jta.setBorder(new LineBorder(Color.black));

jta.setLineWrap(true);

jta.setFont(new Font(Font.DIALOG,Font.BOLD,20));

js.setBounds(20, 50, 330, 100);

jb1 = new JButton("YES");

jb1.setBounds(100, 170, 60, 30);

jb1.addActionListener(l);

jb2 = new JButton("NO");

jb2.setBounds(200, 170, 60, 30);

jb2.addActionListener(l);

jp_center.add(jl);

jp_center.add(js);

jp_center.add(jb1);

jp_center.add(jb2);

this.add(jp_center,BorderLayout.CENTER);

problem=this.initProblem();

this.setVisible(true);

}

private Problem initProblem(){

for(int i=0;i

Problem problem = exe.problems.get(i);

if(problem.getPremise()==null||problem.getPremise().isIstrue()){ if(problem.getPremise()!=null){

problem.getPremise().setIstrue(false);

}

jta.setText(problem.getContext());

exe.problems.remove(problem);

return problem;

}

jb1.setEnabled(false);

jb2.setEnabled(false);

return null;

}

private Execution exe;

private JButton jb1,jb2;

private JTextArea jta ;

private JLabel jl;

private Problem problem;

private Action l = new Action();

class Action implements ActionListener{

public void actionPerformed(ActionEvent e) {

if("YES".equals(e.getActionCommand())){

if(null!=problem.getAnswer_YES()){

problem.getAnswer_YES().setIstrue(true);

}

}else if("NO".equals(e.getActionCommand())){

System.out.println("aaa");

if(null!=problem.getAnswer_NO()){

System.out.println("aaa");

problem.getAnswer_NO().setIstrue(true);

}

}

exe.allReasoning();

problem=initProblem();

if(problem==null){

ArrayList facts=exe.start();

String result="";

for(int i=0,n=1;i

String des = facts.get(i).getDescribe();

if(!"null".equals(des)){

result+=i+1+"."+des+"\n";

n++;

}

}

jl.setText("推理结果如下:");

jta.setText(result);

jb1.setEnabled(false);

jb2.setEnabled(false);

return;

}

}

}

package 专家系统_V2;

import java.io.File;

import java.io.IOException;

import java.io.UnsupportedEncodingException;

import https://www.doczj.com/doc/462770198.html,.URLDecoder;

import java.util.ArrayList;

import java.util.HashMap;

import javax.swing.JOptionPane;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.NodeList;

import org.xml.sax.SAXException;

public class Execution {

public boolean init(){

try {

this.initXML(this.getPath());

} catch (ParserConfigurationException e) {

e.printStackTrace();

} catch (SAXException e) {

this.exit(e.getMessage());

} catch (IOException e) {

e.printStackTrace();

} catch (NullPointerException e){

this.exit("找不到相应的xml文件,请检查xml文件名是否符合规范");

}

return false;

}

private void initXML(String file) throws ParserConfigurationException, SAXException, IOException{

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

DocumentBuilder builder = dbf.newDocumentBuilder();

Document doc=null;

try{

doc = builder.parse(new File(file));

}catch(Exception e){

this.exit(e.getMessage());

}

Element root = doc.getDocumentElement(); // 获取根元素

expert_name=root.getAttribute("name"); //取得名字

//获取事实fact

NodeList allfacts = root.getElementsByTagName("facts");

NodeList onefacts = ((Element)allfacts.item(0)).getElementsByTagName("fact");

for(int i=0;i

Element onefact = (Element)onefacts.item(i);

Fact fact = new Fact();

try{

fact.setName(onefact.getElementsByTagName("name").item(0).getFirstChild().getNodeValu e());

fact.setDescribe(onefact.getElementsByTagName("describe").item(0).getFirstChild().getNod eValue());

}catch(NullPointerException e){

this.exit("fact中缺少相应标签");

}

facts.put(fact.getName(), fact);

}

//获取推理reasoning

NodeList allreasonings = root.getElementsByTagName("reasonings");

NodeList onereasonings = ((Element)allreasonings.item(0)).getElementsByTagName("reasoning");

for(int i=0;i

Element onereasoning = (Element)onereasonings.item(i);

Reasoning reasoning = new Reasoning();

NodeList reasons = onereasoning.getElementsByTagName("reason");

if(reasons.getLength()==0){

this.exit("reasoning中不可以缺少reason标签");

}

for(int j=0;j

String name=reasons.item(j).getFirstChild().getNodeValue();

if(facts.get(name)!=null){

reasoning.getReason().add(facts.get(name));

}else{

this.exit("reason标签内容不正确,没有对应事实");

}

}

NodeList results = onereasoning.getElementsByTagName("result");

if(results.getLength()==0){

this.exit("reasoning中不可以缺少result标签");

}

for(int j=0;j

String name=results.item(j).getFirstChild().getNodeValue();

if(facts.get(name)!=null){

reasoning.getResult().add(facts.get(name));

}else{

this.exit("result标签内容不正确,没有对应事实");

}

}

reasonings.add(reasoning);

}

//获取问题problem

NodeList allproblems = root.getElementsByTagName("problems");

NodeList oneproblems = ((Element)allproblems.item(0)).getElementsByTagName("problem");

for(int i=0;i

Element oneproblem = (Element)oneproblems.item(i);

Problem problem = new Problem();

problem.setContext(oneproblem.getElementsByTagName("context").item(0).getFirstChild(). getNodeValue());

try{problem.setPremise(facts.get(oneproblem.getElementsByTagName("premise").item(0).g etFirstChild().getNodeValue()));

}catch(Exception e){}

try{problem.setAnswer_YES(facts.get(oneproblem.getElementsByTagName("answer_YES") .item(0).getFirstChild().getNodeValue()));

}catch(Exception e){}

try{problem.setAnswer_NO(facts.get(oneproblem.getElementsByTagName("answer_NO").it em(0).getFirstChild().getNodeValue()));

}catch(Exception e){}

problems.add(problem);

}

public void allReasoning(){

boolean proceed=true;

while(proceed){

proceed=false;

for(Reasoning reasoning:reasonings){

reasoning.startReasoning();

if(reasoning.startReasoning()){

proceed=true;

}

}

}

}

public ArrayList start(){

// this.allReasoning();

ArrayList reallyFacts = new ArrayList();

for(Fact fact:facts.values()){

if(fact.isIstrue()){

reallyFacts.add(fact);

}

}

return reallyFacts;

}

private void exit(String passage){

JOptionPane.showMessageDialog(null, passage);

System.exit(0);

}

//查找当前路径

private String getPath(){

String myPath=null;

try {

myPath=URLDecoder.decode(Execution.class.getProtectionDomain().getCodeSource().getL ocation().getFile(), "UTF-8");

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

String path=myPath.substring(1,https://www.doczj.com/doc/462770198.html,stIndexOf("/")+1)+"XML/配置文件.xml";

return path;

}

public HashMap facts = new HashMap ();

public ArrayList reasonings = new ArrayList();

public ArrayList problems = new ArrayList();

public String expert_name;

}

package 专家系统_V2;

/**

* 存放事实的类

* @author liguanyi

*

*/

public class Fact {

private String name; //名字

private boolean istrue=false; //是否成立

private String describe; //事实相应表述

public String getName() {

return name;

}

public void setName(String name) {

https://www.doczj.com/doc/462770198.html, = name;

}

public boolean isIstrue() {

return istrue;

}

public void setIstrue(boolean istrue) {

this.istrue = istrue;

}

public String getDescribe() {

return describe;

}

public void setDescribe(String describe) {

this.describe = describe;

}

}

package 专家系统_V2;

import java.util.ArrayList;

//表示推理

public class Reasoning {

private ArrayList reason = new ArrayList(); //前提事实private ArrayList result = new ArrayList(); //结果事实

public ArrayList getReason() {

return reason;

}

public void setReason(ArrayList reason) {

this.reason = reason;

}

public ArrayList getResult() {

return result;

}

public void setResult(ArrayList result) {

this.result = result;

}

public boolean startReasoning(){

if(reason.size()==0){

return false;

}

for(Fact fact:reason){

if(!fact.isIstrue()){

return false;

}

}

for(Fact fact:reason){

fact.setIstrue(false);

}

for(Fact fact:result){

fact.setIstrue(true);

}

return true;

}

}

package 专家系统_V2;

public class Problem {

private Fact premise;

private String context;

private Fact answer_YES; //结果

private Fact answer_NO; //结果

public Fact getPremise() {

return premise;

}

public void setPremise(Fact premise) {

this.premise = premise;

}

public String getContext() {

return context;

}

public void setContext(String context) {

this.context = context;

}

public Fact getAnswer_YES() {

return answer_YES;

}

public void setAnswer_YES(Fact answerYES) {

answer_YES = answerYES;

}

public Fact getAnswer_NO() {

return answer_NO;

}

public void setAnswer_NO(Fact answerNO) {

answer_NO = answerNO;

}

}

以下是XML文件(保存事实库和规则库)中部分内容

fact1

咳嗽

fact2

胸痛

fact3

盗汗

fact4

食欲不振

fact5

消瘦

fact6

午后低热

fact7

肺结核

fact9

呼吸困难

fact10

胸腔积液

fact11

伴有哮鸣音的呼吸困难

fact12

发作性胸闷咳嗽

fact13

哮喘

fact14

不盗汗

fact15

不咳嗽

fact16

没有伴有哮鸣音的呼吸困难

fact17

上腹痛

fact18

节律性、周期性疼痛

fact19

灼疼

fact20

钝痛

fact21

消化性溃疡

fact22

上腹不痛

fact23

胸骨后不适

fact24

灼烧感

fact6

fact7

fact9

fact10

fact12

fact13

fact20

fact21

fact27

fact28

fact32

fact33

fact43

fact44

fact47

fact48

是否咳嗽?

fact1

fact15

fact1

是否胸痛?

fact2

fact2

是否盗汗?

fact3

fact14

fact14

是否呼吸困难?

fact9

fact3

食欲不振?

fact4

fact4

消瘦?

fact5

fact5

午后低热?

fact6

伴有哮鸣音的呼吸困难?

fact11

fact11

是否有发作性胸闷咳嗽?

fact12

fact14

呼吸困难?

fact9

6)程序测试与调试

遇到两个问题:1问多余的问题,通过给某些问题加前提解决了这个问题;2把一些得出的中间事实作为最终推理结果列了出来,解决方案:修改规则库,把实际蕴含在问题过程中的推理省掉,只保留最后的条件与结果。

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

计算机科学与技术学院 《人工智能》课程设计报告设计题目:动物识别系统 设计人员:学号: 学号: 学号: 学号: 学号: 学号: 指导教师: 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) ....................................................................................................... 错误!未定义书签。 3.3.2 反向推理示意图 (8) ....................................................................................................... 错误!未定义书签。 四、实例系统实现 (9)

游戏人工智能实验报告记录四

游戏人工智能实验报告记录四

————————————————————————————————作者:————————————————————————————————日期:

实验四有限状态机实验 实验报告 一、实验目的 通过蚂蚁世界实验掌握游戏中追有限状态机算法 二、实验仪器 Windows7系统 Microsoft Visual Studio2015 三、实验原理及过程 1)制作菜单 设置参数:点击会弹出对话框,设置一些参数,红、黑蚂蚁的家会在地图上标记出来 运行:设置好参数后点击运行,毒药、食物、水会在地图上随机显示 下一步:2只红蚂蚁和2只黑蚂蚁会随机出现在地图上,窗口右方还会出现红、黑蚂蚁当前数量的统计 不断按下一步,有限状态机就会不断运行,使蚁群产生变化 2)添加加速键

资源视图中下方 选择ID和键值

3)新建头文件def.h 在AntView.cpp中加入#include"def.h" 与本实验有关的数据大都是在这里定义的 int flag=0; #define kForage 1 #define kGoHome 2 #define kThirsty 3 #define kDead 4 #define kMaxEntities 200 class ai_Entity{ public: int type; int state; int row; int col; ai_Entity(); ~ai_Entity() {} void New (int theType,int theState,int theRow,int theCol); void Forage(); void GoHome(); void Thirsty(); void Dead();

人工智能课程设计报告-罗马尼亚度假问题

人工智能课程设计报告-罗马尼亚度假 问题 1

2

3 2020年5月29日 课 程 :人工智能课程设计报告 班 级: 姓 名: 学 号: 指导教师:赵曼 11月

人工智能课程设计报告 课程背景 人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,能够设想,未来人工智能带来的科技产品,将会是人类智慧的”容器”。 人工智能是对人的意识、思维的信息过程的模拟。人工智能不是人的智能,但能像人那样思考、也可能超过人的智能。 人工智能是一门极富挑战性的科学,从事这项工作的人必须懂得计算机知识,心理学和哲学。人工智能是包括十分广泛的科学,它由不同的领域组成,如机器学习,计算机视觉等等,总的说来,人工智能研究的一个主要目标是使机器能够胜任一些一般需要人类智能才能完成的复杂工作。但不同的时代、不同的人对这种”复杂工作”的理解是不同的。 人工智能是计算机学科的一个分支,二十世纪七十年代以来被称为世界三大尖端技术之一(空间技术、能源技术、人工智能)。也被认为是二十一世纪三大尖端技术(基因工程、纳米科学、人工智能)之一。这是因为近三十年来它获得了迅 速的发展,在很多学科领域都获得了广泛应用,并取得了丰硕的成果,人工智能已逐 - 1 - 2020年5月29日

人工智能实验报告大全

人工智能实验报告大 全

人工智能课内实验报告 (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 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)

人工智能课程设计

课程名称:人工智能及应用 设计题目:基于智能搜索的进路选排设计院系:计算机与通信工程系 班级:信号一班 姓名: 学号: 指导教师:胡可 西南交通大学峨眉校区 2013 年12 月13 日

课程设计任务书 专业铁道信号姓名代荣龙学号20108065 开题日期:2013 年09 月23 日完成日期:2013 年12 月13 日题目基于智能搜索的进路选排设计 一、设计的目的 通过对课程设计任务的完成,进一步理解智能搜索算法与计算机联锁软件设计的理论内容,并且巩固和深化所学课程的知识,同时培养综合运用所学课程知识,分析和解决实际问题的能力,逐步树立正确的设计思想及严谨认真的科学态度。 二、设计的内容及要求 要求每位同学能够根据对人工智能搜索算法以及计算机联锁的进路选排过程的知识,结合课程设计的内容,独立完成该课程设计。 设计内容: 1)自选信号布置图,建立站场型静态数据库,并绘制其模块链接图; 2)自选智能搜索算法,编写动态进路搜索选排程序; 3)用所编搜索程序对建立的数据库进行进路选排,并举例说明其过程。 三、指导教师评语 四、成绩 指导教师(签章) 年月日

一、设计题目 通过对课程设计任务的完成,进一步理解智能搜索算法与计算机联锁软件设计的理论内容,并且巩固和深化所学课程的知识,同时培养综合运用所学课程知识,分析和解决实际问题的能力,逐步树立正确的设计思想及严谨认真的科学态度。 可实现的功能: 能设置道岔、轨道、信号机以及道岔、轨道、信号机的状态; 满足正常情况下的接发列车演练; 站场状态的直观形象显示; 办理列车作业; 取消进路功能; 完备的进路选排、开放保持及解锁功能 仿真分析: 对计算机联锁人机界面的分析可知,人机界面是类似于6502电气集中联锁控制台,所以设计时参考6502的控制台进行设计。 为让操作员很快适应该系统,该系统延续了一些传统的操作方法: 选排进路任采用双按钮形式; 进路排好采用白色表示; 进路占用弹出对话框(线路占用、已办理同方向进路、已办理反方向发车); 进路解锁弹出对话框(进路已解锁); 道岔的状态(定位绿灯显示、反位黄灯显示); 信号机的状态(平时红灯、开放时绿灯); 调车信号机的状态(平时蓝色、开放时白色) 列车按钮绿色(设于线路中间); 调车按钮白色(设于线路一侧); 进路的取消任然用双按钮(始端按钮和终端按钮); 取消进路时点击总取消按钮后对应的上行或者下行总取消按钮表示灯亮红灯; 线路状态(平时为黑色、占用为白色); 当进路排好后改进路上的同方向的调车信号显示白灯; 该系统的进路搜索程序采用类似于进路表的形式,将始端按钮和终端按钮按下后,改程序自动检查敌对信号是否开放(若开放则提示“已建立反方向发车”)、沿途的列车信号机是否有开放(若开放则提示“已办理同方向进路”或“已办理反方向进路”)、复式交分道岔的一组道岔是否已占用(若占用则提示“线路已占用”)、股道是否空闲(若不空闲则提示“线路已占用”),进路建立之后将显示对应信号机的状态和道岔的状态。该操作界面采用Microsoft visual basic 6.0编写,能够很直观的反映调度员所需信息,同时采用人性化理念,用弹出式对话框来提示操作过程中的一些禁止信息来提醒调度员。 设计过程: (一)绘制站场图和站场型数据模块链接图

人工智能实验报告

计算机科学与技术1341901301 陈敏 实验一:知识表示方法 一、实验目的 状态空间表示法是人工智能领域最基本的知识表示方法之一,也是进一步学习状态空间搜索策略的基础,本实验通过牧师与野人渡河的问题,强化学生对知识表示的了解和应用,为人工智能后续环节的课程奠定基础。 二、问题描述 有n个牧师和n个野人准备渡河,但只有一条能容纳c个人的小船,为了防止野人侵犯牧师,要求无论在何处,牧师的人数不得少于野人的人数(除非牧师人数为0),且假定野人与牧师都会划船,试设计一个算法,确定他们能否渡过河去,若能,则给出小船来回次数最少的最佳方案。 三、基本要求 输入:牧师人数(即野人人数):n;小船一次最多载人量:c。 输出:若问题无解,则显示Failed,否则,显示Successed输出一组最佳方案。用三元 组(X 1, X 2 , X 3 )表示渡河过程中的状态。并用箭头连接相邻状态以表示迁移过程:初始状态-> 中间状态->目标状态。 例:当输入n=2,c=2时,输出:221->110->211->010->021->000 其中:X 1表示起始岸上的牧师人数;X 2 表示起始岸上的野人人数;X 3 表示小船现在位置(1表 示起始岸,0表示目的岸)。 要求:写出算法的设计思想和源程序,并以图形用户界面实现人机交互,进行输入和输出结果,如: Please input n: 2 Please input c: 2 Successed or Failed?: Successed Optimal Procedure: 221->110->211->010->021->000 四、算法描述

人工智能课程设计报告-n皇后问题解读

人工智能课程设计报告 课班姓学程:人工智能课程设计报告级 : 名: 号: 指导教师:赵曼 2015年11月

人工智能课程设计报告 人工智能课程设计报告 课程背景 人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,可以设想,未来人工智能带来的科技产品,将会是人类智慧的“容器”。 人工智能是对人的意识、思维的信息过程的模拟。人工智能不是人的智能,但能像人那样思考、也可能超过人的智能。 人工智能是一门极富挑战性的科学,从事这项工作的人必须懂得计算机知识,心理学和哲学。人工智能是包括十分广泛的科学,它由不同的领域组成,如机器学习,计算机视觉等等,总的说来,人工智能研究的一个主要目标是使机器能够胜任一些通常需要人类智能才能完成的复杂工作。但不同的时代、不同的人对这种“复杂工作”的理解是不同的。 人工智能是计算机学科的一个分支,二十世纪七十年代以来被称为世界三大尖端技术之一(空间技术、能源技术、人工智能)。也被认为是二十一世纪三大尖端技术(基因工程、纳米科学、人工智能)之一。这是因为近三十年来它获得了迅速的发展,在很多学科领域都获得了广泛应用,并取得了丰硕的成果,人工智能已逐步成为一个独立的分支,无论在理论和实践上都已自成一个系统。 人工智能是研究使计算机来模拟人的某些思维过程和智能行为(如学习、推理、思考、规划等)的学科,主要包括计算机实现智能的原理、制造类似于人脑智能的计算机,使计算机能实现更高层次的应用。人工智能将涉及到计算机科学、心理学、哲学和语言学等学科。可以说几乎是自然科学和社会科学的所有学科,其范围已远远超出了计算机科学的范畴,人工智能与思维科学的关系是实践和理论的关系,人工智能是处于思维科学的技术应用层次,是它的一个应用分支。从思维观点看,人工智能不仅限于逻辑思维,要考虑形象思维、灵感思维才能促进人工智能的突破性的发展,数学常被认为是多种学科的基础科学,数学也进入语言、思维领域,人工智能学科也必须借用数学工具,数学不仅在标准逻辑、模糊数学等范围发挥作用,数学进入人工智能学科,它们将互相促进而更快地发展。

人工智能课程设计

滑块问题求解系统 一、设计任务 用智能搜索算法中的盲目搜索和启发式搜索这两类基本方法设计八数码问题的求解系统。所谓八数码问题是指这样一种游戏:将分别标有数字1,2,3,…,8 的八块正方形数码牌任意地放在一块3×3 的数码盘上.放牌时要求不能重叠.于是,在3×3 的数码盘上出现了一个空格. 现在要求按照每次只能将与空格相邻的数码牌与空格交换的原则,将任意摆放的数码盘逐步摆成某种特殊的排列.如下图表示了一个具体的八数码问题求解. 二、设计环境及使用说明 设计环境主要采用VC++开发环境。 三、系统已实现的功能 用广度优先搜索算法和两种A*搜索算法实现八数码问题的求解系统。 四、算法思想及分析 1、广度优先搜索算法 算法思想: 这是一种盲目搜索算法。算法主要思想是从初始结点开始依次沿其上下左右四个方向扩展结点,并逐一检查这些后继结点是否为目标结点,若不等于目标结点则把该后继结点插入到数组末尾。然后取数组中未扩展的第一个结点重复以上操作,直到得到目标结点为止或在限定步数以内未得到解。 数据结构: 算法当中的结点用结构体实现, typedef struct{ int num[9]; //八个数码用一个一维数组来存储。 char expension; //记录是否可以扩展,Y代表可以扩展,N代表不可以。 char bandirect; //表示不可以执行的操作,'L'代表不能左移,'R'代表不能右 移,'U'代表不能上移,'D'代表不能下移,'C'代表可以任 意移动。 int father; //记录父节点的下标。 }Node; 扩展的结点存储在数组里: Node node[MAXSIZE]; //将搜索过的状态存储于该数组中。 算法当中遇到的问题和解决方法: 1)如何去表达八个数码的位置和每个结点状态的表示 用一维或二维数组去表示八个数码的位置关系,每个结点包含了一个一维数组 (用来表示八个数码的位置关系),可扩展标记(用来标识一个结点是否被扩 展过,避免重复扩展),限制移动方向的标记(避免一个结点在一个方向的重 复扩展),记录父节点的指针(父节点下标)。 2)如何以最简洁的方式表达一个结点在其四个方向的扩展 设定一个数组用以存储该结点在每个方位是否可扩展。操作一个结点时先根据

人工智能课程设计(五子棋)解读

《人工智能导论》课程报告 课题名称:五子棋 姓名: X X 学号:114304xxxx 课题负责人名(学号): X X114304xxxx 同组成员名单(学号、角色): x x1143041325 XXX1143041036 指导教师:张建州 评阅成绩: 评阅意见: 提交报告时间:2014年 1 月 9 日

五子棋 计算机科学与技术专业 学生XXX 指导老师张建州 [摘要]人类之所以不断在进步,是因为我们人类一直不断的在思考,五子棋游戏程序的开发符合人类进步也是促进人类进步的一大动力之一。五子棋游戏程序让人们方便快捷的可以下五子棋,让人们在何时都能通过下棋来提高逻辑思维能力,同时也培养儿童的兴趣以及爱好,让孩子更加聪明。 同时,五子棋游戏程序的开发也使得五子棋这个游戏得到了广泛的推广,让世界各地的人们知道五子棋,玩上五子棋,这已经不是局限。五子棋游戏程序使得越来越多的人喜欢上了五子棋,热爱下五子棋,它是具有很好的带动性的。 关键词:五子棋进步思考

目录 《人工智能导论》课程报告 0 1 引言 (3) 1.1五子棋简介 (3) 1.2 五子棋游戏的发展与现状 (3) 2 研究问题描述 (4) 2.1 问题定义 (4) 2.2 可行性研究 (4) 2.3 需求分析 (5) 2.4 总体设计 (5) 2.5 详细设计 (6) 2.6编码和单元测试 (6) 3 人工智能技术 (6) 4 算法设计 (7) 4.1α-β剪枝算法 (7) 4.2极大极小树 (7) 4.3深度优先搜索(DFS) (8) 4.4静态估值函数 (9) 5 软件设计和实现 (9) 5.1 数据结构定义 (9) 5.2 程序流程图 (17) 6 性能测试 (18) 6.1 程序执行结果 (18) 7 总结 (21) 参考文献 (21)

人工智能实验报告大全

人工智能课内实验报告 (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 unsigned int i; void Monkey_Go_Box(unsigned char x, unsigned char y) {

人工智能深度优先算法课程设计报告

人工智能课程报告 题目: 深 度 优 先 算 法 班级:XXXXXXXXXXX 学号:XXXXXXXXXXX 姓名:XXXXXXXXXXX

【摘要】结合生活中解决搜索问题所常用的思考方法与解题方法,从深度优先探讨了提高程序效率的适用技巧。 【关键词】1搜索顺序;2搜索对象;3搜索优化; 一、深度优先搜索的优化技巧 我们在做事情的时候,经常遇到这类问题——给出约束条件,求一种满足约束条件的方案,这类问题我们叫它“约束满足”问题。对于约束满足问题,我们通常可以从搜索的顺序和搜索的对象入手,进而提高程序的效率。 二、搜索的顺序及对象: 在解决约束满足问题的时候,问题给出的约束条件越强,对于搜索就越有利。之所以深度优先搜索的效率在很大程度上优于穷举,就是因为它在搜索过程中很好的利用了题目中的约束条件进行优化,达到提高程序效率的目的。 显然,在同样的一棵搜索树中,越在接近根接点的位置利用约束条件优化效果就越好。如何在搜索中最大化的利用题目的约束条件为我们提供剪枝的依据,是提高深度优先搜索效率的一个很重要的地方。而不同的搜索顺序和搜索对象就直接影响到我们对于题目约束条件的运用。 三、搜索特点 1.由于深度搜索过程中有保留已扩展节点,则不致于重复构造不必要的子树系统。 2.深度优先搜索并不是以最快的方式搜索到解,因为若目标节点在第i层的某处,必须等到该节点左边所有子树系统搜索完毕之后,才会访问到该节点,因此,搜索效率还取决于目标节点在解答树中的位置。

3.由于要存储所有已被扩展节点,所以需要的内存空间往往比较大。 4.深度优先搜索所求得的是仅仅是目前第一条从起点至目标节点的树枝路径,而不是所有通向目标节点的树枝节点的路径中最短的路径。 5.适用范围:适用于求解一条从初始节点至目标节点的可能路径的试题。若要存储所有解答路径,可以再建立其它空间,用来存储每个已求得的解。若要求得最优解,必须记下达到目前目标的路径和相应的路程值,并与前面已记录的值进行比较,保留其中最优解,等全部搜索完成后,把保留的最优解输出。 四、算法数据结构描述 深度优先搜索时,最关键的是结点扩展(OPEN)表的生成,它是一个栈,用于存放目前搜索到待扩展的结点,当结点到达深度界限或结点不能再扩展时,栈顶结点出栈,放入CLOSE表(存放已扩展节点),继续生成新的结点入栈OPEN 表,直到搜索到目标结点或OPEN栈空为止。 具体算法如下: ①把起始结点S放到非扩展结点OPEN表中(后进先出的堆栈),如果此结点为一目标结点,则得到一个解。 ②如果OPEN为一空表,则搜索失败退出。 ③取OPEN表最前面(栈顶)的结点,并把它放入CLOSED的扩展结点表中,并冠以顺序编号n。 ④如果结点n的深度等于最大深度,则转向2。 ⑤否则,扩展结点n,产生其全部子结点,把它们放入OPEN表的前头(入栈),并配上指向n的返回指针;如果没有后裔,则转向2。 ⑥如果后继结点中有任一个为目标结点,则求得一个解,成功退出;否则,转向2。

A-算法人工智能课程设计

人工智能(A*算法) 一、 A*算法概述 A*算法是到目前为止最快的一种计算最短路径的算法,但它一种‘较优’算法,即它一般只能找到较优解,而非最优解,但由于其高效性,使其在实时系统、人工智能等方面应用极其广泛。 A*算法结合了启发式方法(这种方法通过充分利用图给出的信息来动态地作出决定而使搜索次数大大降低)和形式化方法(这种方法不利用图给出的信息,而仅通过数学的形式分析,如Dijkstra算法)。它通过一个估价函数(Heuristic Function)f(h)来估计图中的当前点p到终点的距离(带权值),并由此决定它的搜索方向,当这条路径失败时,它会尝试其它路径。 因而我们可以发现,A*算法成功与否的关键在于估价函数的正确选择,从理论上说,一个完全正确的估价函数是可以非常迅速地得到问题的正确解答,但一般完全正确的估价函数是得不到的,因而A*算法不能保证它每次都得到正确解答。一个不理想的估价函数可能会使它工作得很慢,甚至会给出错误的解答。 为了提高解答的正确性,我们可以适当地降低估价函数的值,从而使之进行更多的搜索,但这是以降低它的速度为代价的,因而我们可以根据实际对解答的速度和正确性的要求而设计出不同的方案,使之更具弹性。 二、 A*算法分析 众所周知,对图的表示可以采用数组或链表,而且这些表示法也各也优缺点,数组可以方便地实现对其中某个元素的存取,但插入和删除操作却很困难,而链表则利于插入和删除,但对某个特定元素的定位却需借助于搜索。而A*算法则需要快速插入和删除所求得的最优值以及可以对当前结点以下结点的操作,因而数组或链表都显得太通用了,用来实现A*算法会使速度有所降低。要实现这些,可以通过二分树、跳转表等数据结构来实现,我采用的是简单而高效的带优先权的堆栈,经实验表明,一个1000个结点的图,插入而且移动一个排序的链表平均需500次比较和2次移动;未排序的链表平均需1000次比较和2次移动;而堆仅需10次比较和10次移动。需要指出的是,当结点数n大于10,000时,堆将不再是正确的选择,但这足已满足我们一般的要求。

人工智能课程报告封面

物理与电子工程学院 《人工智能》 课程设计报告 课题名称 专业 班级 学生姓名 学号 指导教师崔明月 成绩 2014年6月18日

题目 摘要: 关键词: 1.引言 正文 结论 参考文献:(文献10篇以上,参考下面的文献列写格式) [1]徐国华,谭民.移动机器人的发展现状及其趋势[J]. 机器人技术与应用, 2001(3):7~14. [2]H.F Durrant Whyte. Where am I? A tutorial on mobile vehicle localization. Industrial Robot, 1994, 21(2):11~16. [3]彭文刚,彭宝林,柳胜.移动机器人导航系统的研究现状与发展趋势[J]. 机电信 息, 2009(36):69~70. [4]高峰, 黄玉美, 林义忠等.自主移动机器人的模糊导航[J]. 西安理工大学 报,2005,21(4):337~341. 一、报告内容: 就下面的一方面或几方面的内容写一篇报告综述,包括目的、意义,基本概念、定义,主要的控制方法以及结果分析等,最后给出小节及自己的学习心得,要有图表,严禁抄袭,如若发现本课程按零分计! 1.模糊控制系统设计 2.神经网络控制系统 3.遗传算法在系统辨识、控制中的应用 4.模糊控制综述 5.神经网络控制综述 注:题目自拟,也可以自选题目。

二、格式与字体要求: 正文开头的每段开头空2个字符,正文小四号字,22磅行距。大小标题加黑,标题后空一行,一级标题三号字,二级标题四号字,三级标题小四号字(不按格式要求做扣分处理)。 封面见前面示例,单面打印。

人工智能课程设计报告-n皇后问题解读

课程:人工智能课程设计报告 班级: 姓名: 学号: 指导教师:赵曼 2015年11月

人工智能课程设计报告 课程背景 人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,可以设想,未来人工智能带来的科技产品,将会是人类智慧的“容器”。 人工智能是对人的意识、思维的信息过程的模拟。人工智能不是人的智能,但能像人那样思考、也可能超过人的智能。 人工智能是一门极富挑战性的科学,从事这项工作的人必须懂得计算机知识,心理学和哲学。人工智能是包括十分广泛的科学,它由不同的领域组成,如机器学习,计算机视觉等等,总的说来,人工智能研究的一个主要目标是使机器能够胜任一些通常需要人类智能才能完成的复杂工作。但不同的时代、不同的人对这种“复杂工作”的理解是不同的。 人工智能是计算机学科的一个分支,二十世纪七十年代以来被称为世界三大尖端技术之一(空间技术、能源技术、人工智能)。也被认为是二十一世纪三大尖端技术(基因工程、纳米科学、人工智能)之一。这是因为近三十年来它获得了迅速的发展,在很多学科领域都获得了广泛应用,并取得了丰硕的成果,人工智能已逐步成为一个独立的分支,无论在理论和实践上都已自成一个系统。 人工智能是研究使计算机来模拟人的某些思维过程和智能行为(如学习、推理、思考、规划等)的学科,主要包括计算机实现智能的原理、制造类似于人脑智能的计算机,使计算机能实现更高层次的应用。人工智能将涉及到计算机科学、心理学、哲学和语言学等学科。可以说几乎是自然科学和社会科学的所有学科,其范围已远远超出了计算机科学的范畴,人工智能与思维科学的关系是实践和理论的关系,人工智能是处于思维科学的技术应用层次,是它的一个应用分支。从思维观点看,人工智能不仅限于逻辑思维,要考虑形象思维、灵感思维才能促进人工智能的突破性的发展,数学常被认为是多种学科的基础科学,数学也进入语言、思维领域,人工智能学科也必须借用数学工具,数学不仅在标准逻辑、模糊数学等范围发挥作用,数学进入人工智能学科,它们将互相促进而更快地发展。

昆明理工大学人工智能第二次实验报告

理工大学信息工程与自动化学院学生实验报告 ( 2013 — 2014 学年第 1 学期) 课程名称:人工智能开课实验室:信自楼445 2013 年12月 20日 一、上机目的及容 1.上机容 用确定性推理算法求解教材65-66页介绍的八数码难题。 2.上机目的 (1)复习程序设计和数据结构课程的相关知识,实现课程间的平滑过渡; (2)掌握并实现在小规模状态空间中进行图搜索的方法; (3)理解并掌握图搜索的技术要点。 二、实验原理及基本技术路线图(方框原理图或程序流程图) (1)设计并实现程序,求解出正确的解答路径; (2)对所设计的算法采用大O符号进行时间复杂性和空间复杂性分析; (3)对一般图搜索的技术要点和技术难点进行评述性分析。 三、所用仪器、材料(设备名称、型号、规格等或使用软件) 1台PC及VISUAL C++6.0软件 四、实验方法、步骤(或:程序代码或操作过程)

建立工程后建立5个source Files文件分别为 1.AttributeValue.cpp #include "AttributeValue.h" #include "base.h" AttributeValue::AttributeValue(std::string const& instring) : m_value(instring) { } bool AttributeValue::GetType() { if (m_value == "P") { return true; } else if (m_value == "N") { return false; } else { throw DataErrException(); } } 2.basefun.cpp #include float log2 (float x) { return 1.0 / log10(2) * log10(x); } float calEntropy(float prob) { float sum=0; if (prob == 0 || prob == 1) { return 0; } sum -= prob * log2(prob); sum -= (1 - prob) * log2 ( 1 - prob ); return sum;

人工智能课程设计报告

疾病诊断小型专家系统 ——人工智能课程设计报告 智能1001班 傅宝林 0909101217 2013.6.18

1内容提要 此系统采用专家系统的规则库-推理机技术原理,以医学诊断为背景,旨在作出一个简单的辅助诊断专家系统。 系统的框架及界面采用的是Java语言,调用XML里保存的知识库和规则库。 此小型的专家系统以肺结核、哮喘、食管癌、骨折等疾病的诊断为例,展示了一个小型专家系统是如何构建的。

目录 1内容提要 (2) 2目的和意义 (4) 3系统的主要内容和功能 (5) 4设计流程及描述 (6) 5课程设计体会 (21) 6参考文献 (22)

2目的和意义 (1)加深理解专家系统的结构及开发过程。 (2)初步掌握知识获取的基本方法。 (3)掌握产生式规则知识表示方法及其编程实现方法。(4)初步掌握知识库的组建方法。

3系统的主要内容和功能 系统主要以问答的形势询问病情症状,操作者只需要回答YES或NO。当一趟询问完成后,系统会基于以上询问得出的事实推理出最终的诊断结果。 功能见以下截图1、2. 图1 问询界面 图2 诊断结果界面

4设计流程及描述 1)需求分析 本设计需要用高级语言编写框架及调用外部的规则库与知识库。方便起见,用java语言编写框架,用XML文件保存。 2)知识获取与知识表示 知识获取通过医学临床专业的同学及医学诊断专业书籍,确保专家系统的专家性。 知识的表示采用的是xml语言,把事实与规则一条条保存。3)知识库的组建 知识库分事实库和规则库组建。疾病诊断因为有的病有交叉的症状,所以逻辑上,从症状到诊断的过程是对一颗二叉树的搜索,当问题回答的是YES时,就进行深度优先搜索,当回答NO时,就转到兄弟节点。对于无关的疾病,则回到根节点重新对下一颗子树进行搜索。得到一种疾病的确诊就是result,得到这个叶子节点前遍历过的节点组成了reasons. 4)推理机制选择/编制 采用的是问题引导式推理。在规则库里写的其实不是真正的规则。真正的规则蕴含在问题及前提里。为了不让“专家”问无用的问题,每个问题都是以某个问题的答案为前提的。这样组成了内部的因果关系,所以真正的推理规则只与某一趟提问的最后一个问题的答案得出的事实有关。

人工智能实验报告

人工智能课程项目报告 姓名: 班级:二班

一、实验背景 在新的时代背景下,人工智能这一重要的计算机学科分支,焕发出了他强大的生命力。不仅仅为了完成课程设计,作为计算机专业的学生, 了解他,学习他我认为都是很有必要的。 二、实验目的 识别手写字体0~9 三、实验原理 用K-最近邻算法对数据进行分类。逻辑回归算法(仅分类0和1)四、实验内容 使用knn算法: 1.创建一个1024列矩阵载入训练集每一行存一个训练集 2. 把测试集中的一个文件转化为一个1024列的矩阵。 3.使用knnClassify()进行测试 4.依据k的值,得出结果 使用逻辑回归: 1.创建一个1024列矩阵载入训练集每一行存一个训练集 2. 把测试集中的一个文件转化为一个1024列的矩阵。 3. 使用上式求参数。步长0.07,迭代10次 4.使用参数以及逻辑回归函数对测试数据处理,根据结果判断测试数 据类型。 五、实验结果与分析 5.1 实验环境与工具 Window7旗舰版+ python2.7.10 + numpy(库)+ notepad++(编辑)

Python这一语言的发展是非常迅速的,既然他支持在window下运行就不必去搞虚拟机。 5.2 实验数据集与参数设置 Knn算法: 训练数据1934个,测试数据有946个。

数据包括数字0-9的手写体。每个数字大约有200个样本。 每个样本保持在一个txt文件中。手写体图像本身的大小是32x32的二值图,转换到txt文件保存后,内容也是32x32个数字,0或者1,如下图所 示 建立一个kNN.py脚本文件,文件里面包含三个函数,一个用来生成将每个样本的txt文件转换为对应的一个向量:img2vector(filename):,一个用 来加载整个数据库loadDataSet():,最后就是实现测试。

人工智能实习报告(--)

人工智能 课 程 设 计 报 告 姓名: 班级:191092 学号:2009100 指导老师: 2011年10月

序言 经过近一周的奋战,我终于初步实现了我的“四子棋”游戏。起初,我选择这个游戏是因为它很独特、少有人做,而且我想当然的认为四子比五子少一子,实现起来应该相对简单,但是面对一个个头疼的错误,遭受一次又一次失败的打击,我才发现自己想错了,四子棋人机对战比五子棋更让人纠结。 暑期我和班上两名同学xxx,xx一起完成过五子棋和黑白棋的编程。当时,五子棋我们是参照别人的模板完成的,黑白棋是在透彻研究过五子棋的基础上不断讨论、优化算法最终完成的。现在,他们一个继续做五子棋一个做黑白棋,将其完善作为人工智能的课程设计课题。我只得另陌新路,关注起了四子棋。 界面的搭建以及二人对战的实现只用了我两个晚上的时间,当然我的界面构建的相对简单。二人对战实现关键一步就是输赢判断函数judge()的编写。人机对战整整折腾了自己四五天的时间,我本来对于博弈过程中alpha—beta剪枝算法很理解的,但是具体要自己编程实现时我觉得自己只了解到其皮毛。所以,我不断看五子棋程序、单步跟踪、寻问同学,终于算是把其递归和剪枝过程搞得明明白白。 花了两天完成了alpha—beta剪枝算法我本以为核心都解决了,却不知更让人头疼的是评估函数的确定还有统计当前棋局状况的函数Calculate()的编写。难题终究是可以被客服的,我花了整整一天写完了我的Calculate()函数。 直至10月27日上午我依然没有让机器足够智能,或者说它目前很呆板。我一直在找原因,自己的模块设计算法思路都是对的,请教过同学她也觉得设计思路没有错。现在,我整体的想了一下,觉得应该是我的静态评估函数设计的不够合理,或者说目前的设计方法对于五子棋很合理但是对于规则不同的四子棋就可能存在缺陷。既然目前时间不允许没能实现足够智能,那就只能把这粗略的程序提交。我一定会继续完善、改进算法,重新设计评估函数,争取让机器达到理想的“智能”。

人工智能实验报告

人工智能 九宫格重移——搜索 成员:赵春杰 2009210665 羊森 2009210653 黄鑫 2009210 周成兵 2009210664 王素娟 2009210644

1.问题描述: 八数码问题也称为九宫问题。在3×3的棋盘,摆有八个棋子,每个棋子上标有1至8的某一数字,不同棋子上标的数字不相同。棋盘上还有一个空格,与空格相邻的棋子可以移到空格中。要求解决的问题是:给出一个初始状态和一个目标状态,找出一种从初始转变成目标状态的移动棋子步数最少的移动步骤。所谓问题的一个状态就是棋子在棋盘上的一种摆法。棋子移动后,状态就会发生改变。解八数码问题实际上就是找出从初始状态到达目标状态所经过的一系列中间过渡状态。 2.九宫重移有无答案检查(逆序数) 我们把每个9宫格横向展开,如第一个123456789,我们把左边数大于右边数的组数称为这个九宫格的逆序数,显然123456789的逆序数为0;考虑横向平移,那么逆序数的增量为2或0或-2;纵向平移,逆序数的增量为4或0或-4;但147258369的逆序数为奇数。所以147258369是无解的情况。由此也可以类推当将9宫格展开后,如果数据序列的逆序数为奇数,则此数据序列对应的九宫格是无解的。 3.BFS算法 队列: Queue open = new Queue();存放待扩展的节点 List: List closed = new List();存放已被扩展过的节点 ArrayList map = new ArrayList();//存放答案 HashTale: Hashtable table = new Hashtable();构造哈希表以方便查找

人工智能结课报告

结课报告 课程名称:人工智能 学院:信息工程与自动化学院 专业:物联网工程 年级:2013级 学号:201310107125 学生姓名:王子龙 指导教师:吴霖 日期:2014年12月28日 教务处制

智能家居 摘要 智能家居是在互联网影响之下物联化的体现。智能家居通过物联网技术将家中的各种设备(如音视频设备、照明系统、窗帘控制、空调控制、安防系统、数字影院系统、影音服务器、影柜系统、网络家电等)连接到一起,提供家电控制、照明控制、电话远程控制、室内外遥控、防盗报警、环境监测、暖通控制、红外转发以及可编程定时控制等多种功能和手段。与普通家居相比,智能家居不仅具有传统的居住功能,兼备建筑、网络通信、信息家电、设备自动化,提供全方位的信息交互功能,甚至为各种能源费用节约资金。 智能家居的概念起源很早,但一直未有具体的建筑案例出现,直到1984年美国联合科技公司(United Technologies Building System)将建筑设备信息化、整合化概念应用于美国康涅狄格州(Connecticut)哈特佛市(Hartford)的CityPlaceBuilding时,才出现了首栋的“智能型建筑”,从此揭开了全世界争相建造智能家居派的序幕。 应用价值 随着物联网技术的日益发展,依照物联网技术发展的新兴产业智能家居以住宅为平台,通过物联网、云计算、无线通讯等新技术,将照明、门窗、家电、安防等家居设施集,从而构建高效的住宅设施家庭日程事务的管理系统,并为用户营造安全、健康、舒适的家居生活环境。家居与人们的生活息息相关,所以比传统家居更具优势的智能家居也为人所称道,走进千家万户也是势在必行。 难点 1、用户搞不懂智能家居的概念 2、“智能家居产品太贵了” 3、安全隐患 收获 近年来智能家居行业发展迅速,所以对于行业标准的制定非常重要,1979年,美国的斯坦福研究所提出了将家电及电气设备的控制线集成在一起的家庭总线(HOMEBUS), 并成立了相应的研究会进行研究,1983年美国电子工业协会组织专门机构开始制定家庭电气设计标准,并于1988年编制了第一个适用于家庭住宅的电气设计标准,即:《家庭自动化系统与通讯标准》,也有称之为家庭总线系统标准(HBS,Home Bus System)。在其制定的设计规范与标准中,智能住宅的电气设计要求必须满足以下三个条件,即: 1.具有家庭总线系统; 2.通过家庭总线系统提供各种服务功能; 3.能和住宅以外的外部世界相连接。 物联传感技术是全球第一个利用物联网来控制灯饰及电子电器产品(我们通称为zigbee产品),并将其作为智能家居主流产品走向了商业化。ZigBee最初预计的应用领域主要包括消费电子、能源管理、卫生保健、家庭自动化、建筑自动化和工业自动化。这种技术低功耗、

相关主题
文本预览
相关文档 最新文档