中南大学人工智能实验报告_002Word文档下载推荐.docx
《中南大学人工智能实验报告_002Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《中南大学人工智能实验报告_002Word文档下载推荐.docx(24页珍藏版)》请在冰点文库上搜索。
2,0,3
4.Lowestcostfirst
类似于BFS,但在搜索结点时,并不按照队列的顺序进行搜索,而选取队列中与起始结点距离最近的结点进行搜索。
2,0,3
5.bestfirst
最佳优先搜索通过扩展最有可能到达目标节点的节点,根据指定的规则,探索一个图。
6.层次深度优先
令k=1,进行k层的深度优先搜索,如果没有找到目标,则k+1,进行k+1层的深度优先搜索,以此类推。
7.A*算法
A*[1]
(A-Star)算法是一种静态路网中求解最短路最有效的直接搜索方法。
公式表示为:
f(n)=g(n)+h(n),
其中f(n)是从初始点经由节点n到目标点的估价函数,
g(n)是在状态空间中从初始节点到n节点的实际代价,
h(n)是从n到目标节点最佳路径的估计代价。
保证找到最短路径(最优解的)条件,关键在于估价函数f(n)的选取:
估价值h(n)<
=n到目标节点的距离实际值,这种情况下,搜索的点数多,搜索范围大,效率低。
但能得到最优解。
并且如果h(n)=d(n),即距离估计h(n)等于最短距离,那么搜索将严格沿着最短路径进行,此时的搜索效率是最高的。
如果估价值>
实际值,搜索的点数少,搜索范围小,效率高,但不能保证得到最优解。
8.修改源代码中的估价函数
对于一个启发式算法来说,他的搜索顺序依赖于估价函数的定义,而估价函数中启发函数部分h的定义比较主观,容易对搜索造成比较大的影响。
因此,如果我们修改关于八数码问题的源代码,将估价函数中的曼哈顿距离改为欧式距离,结果可能会改变。
修改前
修改后(将启发函数由曼哈顿距离改为欧氏距离)
由上面的2个结果可以看出,当未做修改前,我们的算法可以通过5步搜索得出结果,当把曼哈顿距离改为欧氏距离之后,算法尝试了561次搜索,直到内存不够,也没能得出结果。
可见估价函数对于整个搜索的影响力。
第二次实验:
推理技术
1.实验说明
产生式系统用来描述若干个不同的以一个基本概念为基础的系统,这个基本概念就是产生式规则或产生式条件和操作对。
在产生式系统中,论域的知识分为两部分:
用事实表示静态知识;
用产生式规则表示推理过程和行为。
2.实验内容
下面以一个具体的动物识别专家系统模型来说明其原理。
建立该专家系统的代码:
规则库
事实库
该动物是哺乳动物<
-该动物有毛发.
-该动物有奶.
该动物是鸟<
-该动物有羽毛.
-该动物会飞&
会下蛋.
该动物是食肉动物<
-该动物吃肉.
-该动物有犬齿&
有爪&
眼盯前方.
该动物是有蹄类动物<
-该动物是哺乳动物&
有蹄.
是嚼反刍动物.
该动物是金钱豹<
是食肉动物&
是黄褐色&
身上有暗斑点.
该动物是虎<
身上有黑色条纹.
该动物是长颈鹿<
-该动物是有蹄类动物&
有长脖子&
有长腿&
该动物是斑马<
该动物是鸵鸟<
-该动物是鸟&
不会飞&
有黑白二色.
该动物是企鹅<
会游泳&
该动物是信天翁<
善飞.
%会游泳.%--该动物是企鹅
%不会飞.
%有黑白二色.
%该动物是鸟.
%--------%--该动物是鸟
%该动物会飞.
%会下蛋.
%----该动物是金钱豹<
%该动物有毛发.
%是食肉动物.
%是黄褐色.
%身上有暗斑点.
%----该动物是虎<
该动物是哺乳动物.
是食肉动物.
是黄褐色.
%----该动物是长颈鹿<
%该动物是有蹄类动物.
%有长脖子.
%有长腿.
实现逆向推理过程(该动物是鸟):
将该事实(该动物是鸟)与规则库进行匹配,与“该动物是鸟<
-该动物有羽毛.”和“该动物是鸟<
会下蛋”这两条规则匹配,于是得到这两个结论,将它们加入用于推理的事实中,继续与规则库匹配,发现没有能够继续匹配的规则了,于是推理终止。
过程如下
我尝试对规则库进行修改,将“该动物是鸟<
会下蛋.”改为了“该动物是鸟<
会下蛋&
有屁股.”,果然发现得到的结果改变了
后来我又尝试自己建立规则库
规则库代码如下:
%file:
动物识别系统规则库.pl
该动物是人<
-该动物会说话.
-该动物知羞耻.
该动物有毛发<
-该动物等级高.
-该动物不是鱼.
该动物不是鱼<
-该动物不会游泳.
%------动物识别系统事实集:
%----%--该动物是人
%会说话.
%知羞耻
%---%该动物有毛发
%该动物等级高
%该动物不是鱼
%---%该动物不是鱼
%该动物不会游泳
实验自己生成的产生式系统(逆向推理“该动物有毛发”),得到如下结
果
由“该动物有毛发”推出了“该动物等级高”和“该动物不是鱼”,进而推出了“该动物不会游泳”。
可见这个产生式系统是符合要求的。
第三次实验:
神经网络
1.实验内容
1.1多数赞成表决器的应用
网络拓扑图
所使用的训练数据集:
数据类型:
(输入节点0,输入节点1,输入节点2,输入
节点5)
(0,0,0,0)(0,0,1,0)(0,1,1,1)(1,0,0,0)(1,0,1,1)(1,1,0,1)(1,1,1,1)
反复对这个网络训练的结果:
训练一次时的总误差1.68
训练五十次时的误差0.52
训练一百次时的误差0.11
训练一百五十次时的误差0.05
训练两百次时的误差0.03
可见随着不断的训练,误差越来越小,也就是说网络越来越能满足功能的要求,下面是误差随训练次数的变化图。
1.2异或问题的实现
网络拓扑图
(输入节点0,输入节点1,输入节点4)
用于训练的数据集:
(0,0,0)(0,1,0)(1,0,1)
对网络进行训练的结果:
训练1次的误差0.018
训练50次的误差0.010
训练100次的误差0.010
训练150次的误差0.010
训练200次的误差0.010
误差测试如下图
可以发现,和多数赞成表决器的BP网络一样,这个BP网络经过训练,误差也在不断减小。
单层的神经网络无法实现异或问题,但是含有中间层的BP网络却可以很好的解决异或问题。
最终得到的网络结构如下
功能测试:
我们输入结点1和0(异或),得到相应输出0.9574(近似为1)
我们输入结点0和0,得到相应输出0.0638(近似为0)
可见是可以实现异或功能的
2.感知器实现逻辑‘与’功能
2.1感知器实现逻辑‘与’功能的学习算法
单层感知器,即只有一层处理单元的感知器。
感知器结构如下图所示:
感知器结构
表1:
与运算的真值表
x1x2y
000
010
100
111
分界线的方程(w1x1+w2x2-T=0)
可以为:
0.5x1+0.5x2-0.75=0
输入为kx1、kx2,输出为yk。
当kx1和kx2均为1时,yk为1,否则yk为0。
2.2具体代码(用matlab编写):
functionyu();
closeall;
rand('
state'
sum(100*clock))
X=[-100;
-101;
-110;
-111]'
;
d=[0001];
h=0.1;
p=4;
epoch=100;
T=0.1;
W=rand(1,3);
W
(1)=T;
W1=[];
W2=[];
err=[];
k=0;
fori=1:
epoch
s=0;
forj=1:
p
net(j)=W*X(:
j);
o(j)=(net(j)>
=0);
W=W+h*(d(j)-o(j))*X(:
j)'
s=s+abs(d(j)-o(j));
end
err=[errs];
k=k+1;
W1=[W1W
(2)];
W2=[W2W(3)];
ifs==0,
break
end
end
figure
(1)
subplot(3,1,1)
x=1:
k;
plot(x,err,'
b-'
)
xlabel('
迭代次数'
ylabel('
error'
)
title('
误差的收敛曲线'
)
subplot(3,1,2)
plot(x,W1,'
r-'
)
W1'
权值W1的变化过程'
subplot(3,1,3)
plot(x,W2,'
y-'
W2'
权值W2的变化过程'
figure
(2)
holdon
gridon
x1=-2:
4;
x2=(T-W
(1)*x1)/W
(2);
plot(x1,x2,'
b--'
)
x1'
x2'
样本分布及分界线'
x=[0011];
y=[0101];
plot(x,y,'
b*'
);
M=[000;
010;
100;
111];
fprintf('
\n'
display(['
与运算的结果'
])
Thefinalerroris:
'
num2str(s)])
Theepochis:
num2str(k)])
ThefinalWis:
num2str(W
(2))'
'
num2str(W(3))])
ThefinalTis:
num2str(T)])
theresultis:
])display(['
'
x2'
y'
display(num2str(M))
2.3实验结果:
程序运行的结果
可见仅当x1、x2输入均为1时输出y才为1,实现了“与”功能。
得到的图表
误差的收敛曲线和迭代次数
样本分布及分界线
2.4总结和讨论:
①单层感知器的结构与功能都比较简单,所以在解决实际问题时很少被采用,但在神经网络中具有重要的意义,是研究其他网络的基础而
且较易学习和理解,适合与作为学习神经网络的起点。
②单层感知器的局限性:
仅对线性可分问题具有分类能力,不能解决
‘异或’问题。
③使用二值变换函数和连续变换函数对单层感知器产生的影响:
误差
的收敛曲线、权值W1、W2的变化不同。