CS188-Project4

文章目录

  • CS188-Project4
    • 一、问题描述:
    • 二、解题思路:
      • (1)贝叶斯网络结构
      • (2)贝叶斯网络概率
      • (3)加入因素
    • 三、运行结果:
    • 四、总结思考:

一、问题描述:

整个地图是不可见的。在探索过程中,他了解了有关相邻细胞的信息。地图包含两个房子:一个鬼屋,可能大部分是红色的,还有一个食品屋,可能大部分是蓝色的。吃豆人的目标是进入美食屋,同时避开鬼屋。吃豆人将根据他的观察推断哪个房子是哪个,并推断在冒险或收集更多证据之间的权衡。

问题目录如下:


核心文件如下:

问题解析:

1.贝叶斯网络结构:

实现BayesAgents.pyconstructBayesNet,它构建了一个空贝叶斯网络,其结构如下所述:

  • X 位置决定哪个房子在棋盘的哪一边。它要么是食物剩下的,要么是鬼魂留下的。
  • Y 位置决定了房屋的垂直方向。它同时模拟两个房子的垂直位置,并具有四个值之一:both-top、both-bottom、left-top 和 left-bottom。“左上”顾名思义:棋盘左边的房子在上面,棋盘右边的房子在下面。
  • 食屋和鬼屋指定了两间屋子的实际位置。它们都是“X 位置”和“Y 位置”的确定性函数。
  • 观察结果是吃豆人在绕着棋盘旅行时所做的测量。请注意,有许多这样的节点——可能是房屋墙壁的每个棋盘位置都有一个。如果给定位置没有房子,则对应的观察值是none;否则它要么是红色,要么是蓝色,颜色的精确分布取决于房子的种类。

2.贝叶斯网络概率:

实现BayesAgents.pyfillYCPT ,不同于上一问的是,这一问题目已经规定好了X 位置、房屋和观察因素,我们需要采用在上一个问题中构建的贝叶斯网络,并指定控制 Y 位置变量的因素。

3.加入因素:

实现factorOperations.pyjoinFactors,它接受一个Factor的列表并返回一个新的Factor,其概率条目是输入Factor的相应行的乘积。

joinFactors可以用作乘积规则,如果有一个 P(X∣Y)P(X|Y)P(X∣Y) 形式的因子和另一个 P(Y)P(Y)P(Y) 形式的因子,那么加入这些因子将产生 P(X,Y)P(X ,Y)P(X,Y)。因此,joinFactors允许合并条件变量(在本例中为 Y)的概率。但是,不应该假设joinFactors被称为概率表-这是可以调用joinFactorsFactors,它的行总和不等于1。

二、解题思路:

(1)贝叶斯网络结构

​ 首先看题目提示,构造空的贝叶斯网络需要五种变量,x位置、y位置、食品屋、鬼屋和吃豆人在绕着棋盘旅行时所做的测量值(具体变量含义在问题解析中已阐述),同时网络一定包含有向边,那么构建网络所需就集齐了:变量列表、向边列表以及变量值域,分别对应代码中变量。

    obsVars = []edges = []variableDomainsDict = {}

按照上图网络结构构建有向边列表:

[(X_POS_VAR, GHOST_HOUSE_VAR), (X_POS_VAR, FOOD_HOUSE_VAR),(Y_POS_VAR, FOOD_HOUSE_VAR), (Y_POS_VAR, GHOST_HOUSE_VAR)]

最后构建网络即可。

代码如下:

    "*** YOUR CODE HERE ***""贝叶斯网络结构"variableDomainsDict[X_POS_VAR] = X_POS_VALSvariableDomainsDict[Y_POS_VAR] = Y_POS_VALSvariableDomainsDict[FOOD_HOUSE_VAR] = HOUSE_VALSvariableDomainsDict[GHOST_HOUSE_VAR] = HOUSE_VALSedgeTuplesList = [(X_POS_VAR, GHOST_HOUSE_VAR), (X_POS_VAR, FOOD_HOUSE_VAR),(Y_POS_VAR, FOOD_HOUSE_VAR), (Y_POS_VAR, GHOST_HOUSE_VAR)]edges.extend(edgeTuplesList)for housePos in gameState.getPossibleHouses():for obsPos in gameState.getHouseWalls(housePos):obsVar = OBS_VAR_TEMPLATE % obsPosobsVars.append(obsVar)edges.append((FOOD_HOUSE_VAR, obsVar))edges.append((GHOST_HOUSE_VAR, obsVar))variableDomainsDict[obsVar] = OBS_VALSvariables = [X_POS_VAR, Y_POS_VAR] + HOUSE_VARS + obsVarsnet = bn.constructEmptyBayesNet(variables, edges, variableDomainsDict)return net, obsVars"*** END YOUR CODE HERE ***"

(2)贝叶斯网络概率

对于给出的y position变量所指向的每一个值观测值,按照如下提示进行概率的设定,然后建立条件概率表即可。

代码如下:

    "*** YOUR CODE HERE ***""贝叶斯概率"yFactor.setProbability({Y_POS_VAR: LEFT_TOP_VAL}, PROB_ONLY_LEFT_TOP)yFactor.setProbability({Y_POS_VAR: BOTH_TOP_VAL}, PROB_BOTH_TOP)yFactor.setProbability({Y_POS_VAR: LEFT_BOTTOM_VAL}, PROB_ONLY_LEFT_BOTTOM)yFactor.setProbability({Y_POS_VAR: BOTH_BOTTOM_VAL}, PROB_BOTH_BOTTOM)bayesNet.setCPT(Y_POS_VAR, yFactor)"*** END YOUR CODE HERE ***"

(3)加入因素

先看题目提示:1.应该计算用于连接这些因素的非条件变量集和条件变量集;2.假设所有加入的变量域因素是相同的因为它们同样来自贝叶斯网络;3.只允许非条件变量出现在一个输入因素中。

所以:1.计算非条件变量和条件变量;2.过滤条件变量列表;3.计算概率。

代码如下:

    "加入因素"factors_list = [i for i in factors]unconditioned_variables = []conditioned_variables = []variablesDomainDict = factors_list[0].variableDomainsDict()# 填充无条件变量和条件变量列表for factor in factors_list:unconditioned_variables += [i for i in factor.unconditionedVariables() if i not in unconditioned_variables]conditioned_variables += [i for i in factor.conditionedVariables() if i not in conditioned_variables]# 过滤条件变量列表for variable in unconditioned_variables:if variable in conditioned_variables:conditioned_variables.remove(variable)retFactor = Factor(unconditioned_variables, conditioned_variables, variablesDomainDict)# 获取和计算概率assignments = retFactor.getAllPossibleAssignmentDicts()for assignment in assignments:probability = 1for factor in factors_list:probability = probability * factor.getProbability(assignment)retFactor.setProbability(assignment, probability)return retFactor"*** END YOUR CODE HERE ***"

三、运行结果:


四、总结思考:

1.贝叶斯网络(Bayesian network),又称信念网络,或有向无环图模型,是一种概率图模型,可以模拟人类推理过程中因果关系的不确定性处理。通过本次对贝叶斯网络的实践,理论落地也是加深理论理解的过程。从生活中的可能不可能到概率、从贝叶斯公式到贝叶斯网络,看似不可能的事物出现了,看似无关联的事物却产生了并且还在不断延伸。这个概念诞生的过程就很不可思议,可实践之处也是我超出我知识或者说想象范畴的,这是我在这次实验和贝叶斯网络学习中感受到的。

2.本实验构建出一个贝叶斯网络,围绕着它的组成元素1.无回路的有向无环图 2.节点参数与边的方向,下面分这两步来描述下如何构造一个贝叶斯网络。

​ 1、确定随机变量间的拓扑关系,形成无回路的有向无环图。想要建立一个好的拓扑结构,通常需要不断迭代和改进才可以。

2、训练贝叶斯网络参数——估计出各节点的条件概率表。这一步也就是要完成条件概率表的构造,如果每个随机变量的值都是可以直接观察的,那么这一步的训练是直观的,方法类似于朴素贝叶斯分类。但是通常贝叶斯网络的中存在隐藏变量节点,那么训练方法就是比较复杂。

CS188-Project4相关推荐

  1. UC Berkeley CS188 Intro to AI

    原文链接:https://people.eecs.berkeley.edu/~russell/classes/cs188/f14/lecture_videos.html 转载于:https://www ...

  2. 北航计算机组成实验课,北航计算机组成实验Project4

    [实例简介] Project4 VerilogHDL完成单周期处理器开发 适合北航计算机系的学生 1.处理器应 MIPS-Lite3 指令集. a)MIPS-Lite3={MIPS-Lite2,add ...

  3. CS188 Project 4: Inference in Bayes Nets(4-6)

    CS188 Project 4: Inference in Bayes Nets Question 4 (4 points): Eliminate 原理 方法 代码 结果 Question 5 (4 ...

  4. GeekOS操作系统Project4

    GeekOS-project4 一.项目设计目的 了解虚拟存储器管理设计原理,掌握请求分页虚拟存储管理的具体实现技术. 二.项目设计要求 1.在<~/geekos-0.3.0/src/proje ...

  5. CS 188 Project4(RL) Introduction:Ghostbusters

    Pacman一生都在逃避幽灵,但事情并非总是如此.传说很多年前,Pacman的曾祖父爷爷就学会了捕猎幽灵.然而,他被自己的能力蒙蔽了双眼,只能通过幽灵的砰砰声和叮当声来追踪他们.在这个项目中,您将设计 ...

  6. 人工智能-CS188 Project 2: Multi-agents

    一.项目介绍 项目介绍网页 项目代码下载 本项目是采用Berkeley的CS188课程内容实习二的内容,在这个项目中,我们将为经典版本的Pacman 设计自动算法,包括幽灵.在此过程中,我们将实现 m ...

  7. CS188 Proj 1

    更好的阅读体验 Project 1: Search Introduction In this project, your Pacman agent will find paths through hi ...

  8. 北航计算机组成实验project4,北航fpga实验的报告.docx

    北航fpga实验的报告 北航fpga实验报告 篇一:北航<彩色线阵CCD驱动电路设计>实验报告 XX年<仪器光电综合实验>实验报告 实验名称:彩色线阵CCD传感器实验及驱动电路 ...

  9. 0x79B2A261 (ucrtbased.dll) (Project4.exe 中)处有未经处理的异常: 0xC0000005: 写入位置 0x00A41023 时发生访问冲突。

    scanf_s("%c %c",&c1,&c2); 在v2019上输入以上代码可能会出现由于0xC0000005: 写入位置 0x00A41023 时发生访问冲突等 ...

  10. python反恐精英代码类似的编程_敲代码学Python:CS188之实现深度优先搜索

    先上运行代码后的视频:人工智能导论之深度优先搜索演示https://www.zhihu.com/video/1173641673426378752深度优先搜索演示之大地图https://www.zhi ...

最新文章

  1. flash与字符串:数组转换为字符串
  2. 快速安装Git客户端及TortoiseGit并使用
  3. 面试项目亮点_当面试官谈到项目经验的时候,你知道怎么回答吗?怎么反过来控制面试流程?...
  4. JUnit5 @BeforeEach注解示例
  5. Struts2学习笔记(八) 拦截器(Interceptor)(上)
  6. linux 比较两个文件夹不同 (diff命令, md5列表)
  7. 求助:为什么我用360浏览器和UC浏览器打不开JAVA中的index.html文件? 一打开就显示浏览器首界页...
  8. ajax菜鸟教程html,菜鸟教程--AJAX
  9. EasyUI项目之书籍管理(CRUD)
  10. UE4 Spline
  11. 2021年N1叉车司机复审考试及N1叉车司机模拟试题
  12. SIM卡所能保存的联系人姓名长度研究。
  13. MOSFET的基本知识
  14. 读书笔记---《如何高效学习》
  15. 食品科学与工程与计算机,《计算机在食品科学与工程中的应用》课程教学改革与探索...
  16. 浅谈大数据如何管理与分析
  17. Linux安装lamp环境,安装配置discus论坛
  18. php jwt使用案例,记一次PHP使用JWT
  19. 关于点到直线距离的理解
  20. nyoj 分数加减法

热门文章

  1. python构建带数字的古诗词数据集
  2. MT7621AT,MT7620A,WIFI6,MT7975D+MT7915DAN
  3. Spring中注解实现原理
  4. 删除远程桌面登录的记录(mstsc)
  5. m126a linux驱动下载,【惠普m126a驱动】惠普m126a驱动下载 v15.0 官方版-开心电玩
  6. VL1_四选一多路器(完整RTL、Testbench和覆盖率)
  7. 在线UTF-8转换成GBK工具
  8. 现代计算机发展各个阶段的主要特点是什么,计算机的发展历史 现代计算机发展的6个阶段...
  9. python层次聚类法画图_原理+代码|详解层次聚类及Python实现
  10. mysql 支持嵌套查询吗_【转】MySql 嵌套查询