汉诺塔实验报告
一、 实验目的:
1、掌握产生式系统解决汉诺塔算法的基本思想。
2、熟悉和掌握问题规约法的原理、实质和规约过程。
3、理解规约图的表示方法。
二、实验原理:
1、在移动盘子时,每次只移动A/B/C柱子上可以移动的盘子中最大的盘子。
2、如果上一次已经移动了某个盘子,则下一次不能继续移动,即:一个盘子不能被连续移动两次。如:某次操作将1号盘子由A柱子移动到B柱子,那么在选择下一个要移动的盘子时应不在考虑1号盘。
3、当某个可以移动的盘子摆放位置不唯一时要将当前状态入栈,并选择盘子移动前所在的柱子的左侧(同理:反方向选择也可)柱子作为移动的目标柱子。
为提高程序运行过程中的空间利用率,产生式规则在汉诺塔移动过程中依据以上规则自动生成。
三、实验条件:
1、必须要有三个柱子A,B,C。
2、盘子的数量不能太多。
3、应该用自己熟悉的语言写程序。
四、实验步骤:
第一次移动之后:
第二次移动之后:
第三次移动之后:
五、实验内容:
利用c/c++语言编写汉诺塔程序,并实现盘子的移动过程。
六、实验小结:
通过本次实验我掌握了汉诺塔的算法和移动的过程,同时也更好的运用了c++的知识解决了这个问题,在做的过程中确实有不懂的地方,但是查资料还是解决了,希望自己以后会更好的利用c++/c这们高级程序编写语言。
人工智能课内实验报告(一)
----主观贝叶斯
一、实验目的
1. 学习了解编程语言,掌握基本的算法实现;
2. 深入理解贝叶斯理论和不确定性推理理论;
3. 学习运用主观贝叶斯公式进行不确定推理的原理和过程。
二、实验内容
在证据不确定的情况下,根据充分性量度LS、必要性量度LN、E的先验概率P(E)和H的先验概率P(H)作为前提条件,分析P(H/S)和P(E/S)的关系。
具体要求如下:
(1) 充分考虑各种证据情况:证据肯定存在、证据肯定不存在、观察与证据
无关、其他情况;
(2) 考虑EH公式和CP公式两种计算后验概率的方法;
(3) 给出EH公式的分段线性插值图。
三、实验原理
1. 知识不确定性的表示:
在主观贝叶斯方法中,知识是产生式规则表示的,具体形式为:
IF E THEN (LS,LN) H(P(H))
LS是充分性度量,用于指出E对H的支持程度。其定义为:
LS=P(E|H)/P(E|¬H)。
LN是必要性度量,用于指出¬E对H的支持程度。其定义为:
LN=P(¬E|H)/P(¬E|¬H)=(1-P(E|H))/(1-P(E|¬H))
2. 证据不确定性的表示
在证据不确定的情况下,用户观察到的证据具有不确定性,即0<P(E/S)<1。此时就不能再用上面的公式计算后验概率了。而要用杜达等人在1976年证明过的如下公式来计算后验概率P(H/S):
P(H/S)=P(H/E)*P(E/S)+P(H/~E)*P(~E/S) (2-1)
下面分四种情况对这个公式进行讨论。
(1) P(E/S)=1
当P(E/S)=1时,P(~E/S)=0。此时,式(2-1)变成
P(H/S)=P(H/E)= (2-2)
这就是证据肯定存在的情况。
(2) P(E/S)=0
当P(E/S)=0时,P(~E/S)=1。此时,式(2-1)变成
P(H/S)=P(H/~E)= (2-3)
这就是证据肯定不存在的情况。
(3) P(E/S)=P(E)
当P(E/S)=P(E)时,表示E与S无关,则利用全概率公式可知:
P(H/S)=P(H/E)*P(E)+P(H/~E)*P(~E)=P(H) (2-4)
即观察与证据无关,观察与结论无关。也就是说,该观察不影响结论,所以在该观察下,结论的概率没有变,还是原来的先验概率。
(4) 其他情况
当P(E/S)为其他值时,通过分段线性插值可计算出P(H/S)。具体公式如下:
P(H/S)= (2-5)
该公式称为EH公式或者UED公式。
3. LS和LN的性质
(1) LS>1: 表明证据E是对H有利的证据。
LN>1: 表明证据¬E是对H有利的证据。
所以:不能出现LS>1且LN>1的取值。
(2) LS<1: 表明证据E是对H不利的证据。
LN<1:表明证据¬E是对H不利的证据。
所以:不能出现LS<1且LN<1的取值
(3) 一般情况下,取LS>1, LN<1。
四、实验程序及运行结果
程序如下:
#include<stdio.h>
#include<graphics.h>
#include<conio.h>
float ls,ln,ph,pe,phs,pes,phne,phe;
int main()
{
printf("please input the value:");
scanf("%f/n",&ls);
scanf("%f/n",&ln);
scanf("%f/n",&ph);
scanf("%f/n",&pe);
initgraph(1000, 600);
if((pes>=0)&&(pes<=pe))
{
phne=(ln*ph)/((ln-1)*ph+1);
phs=phne+((ph-phne)*pes/pe);
initgraph(1000, 600);
line(1000,500,0,500);
line(0,600,0,0);
line(0,phne*500,pe*500,ph*500);
}
if((pes>=pe)&&(pes<=1))
{
phe=(ls*ph)/((ls-1)*ph+1);
phs=ph+(phe-ph)*(pes-pe)/(1-pe);
initgraph(1000, 600);
line(1000,500,0,500);
line(0,600,0,0);
line(pe*500,ph*500,1*500,phe*500);
}
getch();
closegraph();
}
程序运行截图如下:
输入 ls=100 ln=0.1 ph=0.6 pe=0.4
五、实验体会和感想
通过输入自己定的LS、LN、P(E)、P(H)等值,经程序计算判断出属于证据不确定的哪种情况,就可以画出EH公式的分段线性插值图。
通过这个实验,初步了解了人工智能理论中关于不确定性算法的知识。通过分类各个情况,了解了不同情况下的的计算方法。我也更加深入地理解了主观Bayes方法的实质及其特点,根据先验概率的条件不同来分析后验概率,利用它们之间的关系,更好的了解不确定性推理方法。
课程设20xx年12月21计日目录2实验目的错误未定义书签3问题分析24实验步骤错误未定义书签5流程图36程序代码47程序调试与测…
1实验目的通过本实验掌握复杂性问题的分析方法了解汉诺塔游戏的时间复杂性和空间复杂性2问题描述汉诺塔问题来自一个古老的传说在世界刚被…
课程设计报告课程名称高级语言课程设计课程代码07300561设计内容汉诺塔演示系统专业计算机科学与技术20xx年12月16日1目录…
计算机学院实验报告课程名称数据结构实验名称汉诺塔学生姓名朱孝彬学生学号20xx0511001实验日期20xx1一实验目的1理解数据…
一算法程序includeltiostreamgtusingnamespacestd圆盘的个数最多为64constintMAX64用…
课程设20xx年12月21计日目录2实验目的错误未定义书签3问题分析24实验步骤错误未定义书签5流程图36程序代码47程序调试与测…
1实验目的通过本实验掌握复杂性问题的分析方法了解汉诺塔游戏的时间复杂性和空间复杂性2问题描述汉诺塔问题来自一个古老的传说在世界刚被…
课程设计报告课程名称高级语言课程设计课程代码07300561设计内容汉诺塔演示系统专业计算机科学与技术20xx年12月16日1目录…
计算机学院实验报告课程名称数据结构实验名称汉诺塔学生姓名朱孝彬学生学号20xx0511001实验日期20xx1一实验目的1理解数据…
一算法程序includeltiostreamgtusingnamespacestd圆盘的个数最多为64constintMAX64用…