西安交大人工智能导论实验报告

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

2.
2、 LN 和 LS 的意义
1.当证据 E 愈是支持 H 为真时,则应是使相应的 LS 值愈大。 若证据 E 对 H 愈是必要,则相应 LN 的值愈小。 2. 不能出现 LS>1 且 LN>1的取值 因为: LS>1 :表明证据 E 是对 H 有利的证据。 LN>1 :表明证据 ?E 是对 H 有利的证据。 3. 不能出现 LS<1 且 LN<1的取值 因为: LS<1: 表明证据 E 是对 H不利的证据。 LN<1 :表明证据 ?E 是对 H 不利的证据。 4. 一般情况下,取 LS>1, LN<1。
M[3] = n->goright(); int i; for (i = 0; i < 4 ; i++) { if (M[i] == NULL) continue; if (!G.exist(M[i])){ // a G.add(M[i],n); //M[i]->draw(); if (!open.exist(M[i]) && !close.exist(M[i])) open.pushbyforder(M[i]); }else{ // b & c G.changeparent(M[i], n); } } // 7 order has beeen down in inserting. // 8 when we reached here, we will go to the front. } system("pause"); return 0; }
3、实验结果
4、结果分析 应用广度优先搜索可得到如上图所示的从初始状态到目标状态的路径。广度优先搜索盲目 性较大,当目标节点距初始节点较远时将会产生许多无用节点,搜索效率低。但只要问题 有解,用广度优先搜索总可以得到解,而且得到的是路径最短的解。
5、代码 #include <iostream> using namespace std; #include "classes.h"
2. P(E/S)=0 当 P(E/S)=0 时, P(-E/S)=1. 此时公式变成 ( 肯定不存在的情况 ) :
P( H / S) P(H / E) LN * P ( H ) ( LN 1)* P ( H ) 1
3. P(E/S)=P(E) 当 P(E/S)=P(E) 时, 表示 E 与 S 无关。利用全概率公式就将公式变为:
2、算法描述 (1)把初始节点 S0 放入 OPEN 表。 (2)如果 OPEN 表为空,则问题无解,退出。 (3)把 OPEN 表的第一个节点取出放入 CLOSE 表(记为节点 n) 。 (4)考察节点 n 是 否为目标节点。若是,则求得了问题的解,退出。 (5 )若节点 n 不可扩展,则转第 2 步。 (6)扩展节点 n,将其子节点放入 OPEN 表的尾部,并为每一个子节点都配置指向父节点 的指针,然后转第 2 步。
3 、证据不确定的情况
在现实中,证据肯定存在和肯定不存在的极端情况是不多的,更多 的是介于二者之间的不确定情况。对初始证据来说,由于用户对客观 事物或现象的观察不是很精确, 因而所提供的证据是不确定的; 另外, 一条知识的证据往往来源于另一条知识推出的结论,一般也具有某种 程度的不确定性。 所以我们要在 S 对 E 的观察的先验概率 0<P(E/S)<1 的情况下确定 H 的后验概率 P(H/S) 。 在证据确定的情况下, 我们因该用杜达等人 1976 年证明了的公式来
1. 在主观 Bayes 方法中, 证据的不确定性用概率表示。 对于证据 E,由 用户根据观察 S 给出 P(E|S) ,即动态强度。 用 P(E|S) 描述证据的不 确定性 (证据 E 不是可以直接观测的) 。 证据肯定存在时, P(E|S)=1 ; 3. 证据肯定不存在时, P(E|S)=0 ; 4. 证据具有不确定性时, 0<P(E|S)<1 。
人工智能课内实验报告
主观贝叶斯方法的研究
一、 实验题目
主观 Bayes 方法的研究。
二、 实验目的
在证据不确定的情况下,根据充分性量度 LS、必要性量度 LN 、 E 的先验 概率 P(E) 和 H 的先验概率 P(H) 作为前提条件,分析 P(H/S) 和 P(E/S) 的 关系。
三、 实验原理
1、 证据不确定性的表示
Biblioteka Baidu一步讨论:
P ( H / S) P ( H / E )* P ( E / S ) P( H / E )* P ( E / S)
分四种情况讨论这个公式: 1. P(E/S)=1 当 P(E/S)=1 时, P(-E/S)=0 。此时公式变成 ( 肯定存在的情况 ) :
P( H / S) P(H / E) LS * P( H ) ( LS 1)* P ( H ) 1
point p = this->getpos(); if (p.x < 2){ element* pnew = new element(m, layer); pnew->m[p.x][p.y] = pnew->m[p.x + 1][p.y]; pnew->m[p.x + 1][p.y] = 0; return pnew; } return NULL; } element * goleft(){ point p = this->getpos(); if (p.y > 0){ element* pnew = new element(m, layer); pnew->m[p.x][p.y] = pnew->m[p.x][p.y - 1]; pnew->m[p.x][p.y - 1] = 0; return pnew; } return NULL; } element * goright(){ point p = this->getpos(); if (p.y < 2){ element* pnew = new element(m, layer); pnew->m[p.x][p.y] = pnew->m[p.x][p.y + 1]; pnew->m[p.x][p.y + 1] = 0; return pnew; } return NULL;
} system("echo unable &pause"); } int f(){ int g = 0; for(int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (m[i][j] == dest[i][j]) { g += 0; } else { g += 1; } } } f_val = (int)(layer + k * g); return f_val; } element * goup(){ point p = this->getpos(); if (p.x > 0){ element* pnew = new element(m, layer); pnew->m[p.x][p.y] = pnew->m[p.x - 1][p.y]; pnew->m[p.x - 1][p.y] = 0; return pnew; } return NULL; } element * godown(){
六、试验总结
通过实验, 使我更加熟悉了主观 Bayes 方法的实质, 根据先验概率的条件不同来 分析后验概率,利用它们之间的关系,更好的了解不确定性推理
重排九宫算法实验报告
1、问题描述 在 3*3 的方格棋盘上放置分别标有数字 1,2,3,4,5,6,7,8 的 8 张牌,初始状态为 s0,目标状态 为 sg,可使用的算符有空格左移,空格上移,空格右移和空格下移,即它们只允许把位于 空格左,上,右,下边的牌移入空格。要求寻找从初始状态到目的状态的路径。
int main() { list<element> open, close; // these are two list that holds the tree node.
element ebegin(element::ebegin); mygraph G(&ebegin); // step 1 open.pushtop(&ebegin);
// step 4 if (element::reach(n)){ cout<<"solution got:"; G.drawtree(n); cout<<"Total steps:"<<n->layer<<endl; break; }
//step 5 element * M[4]; // extend the node M[0] = n->goup(); M[1] = n->godown(); M[2] = n->goleft();
P(H/S) 的
P ( E / S)
P( E ) 1
P(H / E)
1 P(E)
P ( E )], 若 P( E )
P( E / S)
该公式称为 EH公式或 UED 公式。
四、实验程序 ls=input('ls='); ln=input('ln='); ph=input('ph='); pe=input('pe='); phe=(ls*ph)/((ls-1)*ph+1); phfe=(ln*ph)/((ln-1)*ph+1); phs=[]; for pes=0:0.01:1
char element::ebegin[3][3] = { {2,8,3},
{1,0,4}, {7,6,5}
};
char element::dest[3][3] = { {1,2,3}, {8,0,4}, {7,6,5}
};
double element::k = 1; // if you change the k val, you may get different result.
//G.add(&ebegin);--> the construction function did it very well.
while(1){ // step 2
if (open.getnum() == 0) { cout<<"This question has no solution."<<endl; break; }
if pes<=pe a=phfe+(ph-phfe)/pe*pes; phs=[phs,a]; else a=ph+(phe-ph)/(1-pe)*(pes-pe); phs=[phs,a]; end end pes=0:0.01:1; plot(pes,phs) 五、实验结果
ls=1000 ln=0.3 ph=0.3 pe=0.3
P( H / S) P ( H / E )* P( E ) P( H / E )* P ( E ) P(H )
4. 当 P(E/S) 为其它值时,通过分段线性插值就可得到计算 公式: P( H / E ) P( H / S) P( H ) P( H ) P( H / E ) * P( E / S), 若 0 P( E ) P(H ) *[ P ( E / S)
/*if (close.getnum()>362880){ cout<< "out of bound error"<<endl; break; }*/ //cout<<open.getnum()<<" : "<<close.getnum()<<endl; // step 3 element * n; close.pushend(n = open.pop());
classes.h struct point { int x; int y;
point (int px, int py){ x = px; y = py; } };
class element { public: char m[3][3]; static char dest[3][3]; static char ebegin[3][3]; int layer; static double k; int f_val; element(char s[3][3], int l = 0) { layer = l + 1; for (int i = 0; i < 3 ; i++) { for(int j = 0; j < 3; j++) { m[i][j] = s[i][j]; } } this->f(); } point getpos(){ for (int i = 0; i < 3 ; i++) { for(int j = 0; j < 3; j++) { if (m[i][j] == 0) return point(i, j); }
相关文档
最新文档