人工智能-Project 4: Inference in Bayes Nets(1)

官网项目介绍
源码框架下载

1、实习介绍

在本项目中,我们将实现贝叶斯网络的推理算法,特别是变量消除和完美信息值计算。这些推理算法将可以推理隐形颗粒和鬼魂的存在。
在这里插入图片描述
在搞懂了整个项目代码框架之后,就可以去进行局部的编码了。

2、问题编码

1、question1-Bayes Net Structure

在这个部分,我们需要根据项目描述构造一个空的贝叶斯网。
在这里插入图片描述

  • X 位置决定哪个房子在棋盘的哪一边。它要么是食物剩下的,要么是鬼魂留下的。
  • Y位置决定了房屋的垂直方向。它同时模拟两个房子的垂直位置,并具有四个值之一:both-top、both-bottom、left-top 和 left-bottom。“左上”顾名思义:棋盘左边的房子在上面,棋盘右边的房子在下面。
  • 食屋和鬼屋指定了两间屋子的实际位置。它们都是“X位置”和“Y 位置”的确定性函数。
  • 观察结果是吃豆子在绕着棋盘旅行时所做的测量。请注意,有许多这样的节点——可能是房屋墙壁的每个棋盘位置都有一个。如果给定位置没有房子,则对应的观察值是none;否则它要么是红色,要么是蓝色,颜色的精确分布取决于房子的种类。
    其中我们要进行编码的文件是BayesAgents.py中的constructBayesNet函数:
该贝叶斯网络中有5种变量:
-单个“x位置”变量(控制房屋的x位置)
-单个“y位置”变量(控制房屋的y位置)
-单个“food house”变量(包含房屋中心)
-单个“鬼屋”变量(包含房屋中心)
-Pacman可以测量每个细胞的大量“观察”变量
我们必须使用常量命名所有位置和房屋变量(X_POS_VAR、FOOD_HOUSE_VAR等)位于文件顶部。

在这里插入图片描述

使用上述步骤填充“obsVars”;
用Bayes网络中的每条边填充Bayes Net (a tuple `(from, to)`);
设置每个'variableDomainsDict[var]=values',其中'values'是集合对“var”的可能赋值。应再次使用在此文件顶部定义的常量;

在这里插入图片描述

2、question2-Bayes Net Probabilities

  • 在这里,要填充CPT给出y位置变量的先验概率
    可以参考方法fillXCPT:
    在这里插入图片描述
    从中可以看出,我们不需要自己手写概率,可以通过从layout中导入已经写的常量,然后调用方法setProbability,因为y的位置变量有四种,所以要设置4次。最后调用setCPT()即可。
    在这里插入图片描述

3、question3-Join Factors

  • 在factorOperations.py中实现joinFactors函数。
  • 它输入一个Factors列表,并返回一个新的Factors,其概率条目是输入Factors的相应行的乘积。
  • Factors存储了一个variableDomainsDict,它将每个变量映射到它可以接受的值列表(它的域)。
  • Factor从实例化它的BayesNet获取它的variableDomainsDict。因此,它包含了BayesNet的所有变量,而不仅仅是Factor中使用的非条件变量和条件变量。
需要用到的函数:
Factor.getAllPossibleAssignmentDicts:返回该因子包含的所有assignmentDicts的列表
Factor.setProbability:设置函数,设置因子的概率
Factor.getProbability:获取因子的概率值
Factor.unconditionedVariables: 返回因子中无条件变量的副本
Factor.conditionedVariables: 返回因子中条件变量的副本
Factor.variableDomainsDict: 返回因子中变量域的副本
首先,先从factors列表中取出每一个factor,然后调用factor.conditionedVariables()函数取出这个因子中的条件变量。
然后取出这个因子的每一个条件变量,如果既不在setsOfUnconditioned(变量的可迭代对象,它包含了这个因子中非条件的变量),也不在setsOfConditioned(是一个变量的可迭代对象, 
它包含了这个因素所制约的变量)中时,把这个变量加入到setsOfConditioned中。
然后再更新下这个因子的域字典。
最后调用Factor的构造函数,生成一个新的Factor.
然后处理限制:在那些行不等于1的factors上调用joinFactors。
最后返回一个新的Factor

在这里插入图片描述

3、运行结果

1、question1

测试指令:
python autograder.py -q q1

在这里插入图片描述

2、question2

运行指令
python autograder.py -q q2

在这里插入图片描述

3、question3

运行指令
python autograder.py -q q2
在调试期间运行特定测试可能很有用,以查看仅打印出一组因素。例如,要仅运行第一个测试,请运行:
python autograder.py -t test_cases/q3/1-product-rule

在这里插入图片描述
在这里插入图片描述
完成了问题1、2、3,并且通过了测试。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值