头歌平台-人工智能之AlphaBeta剪枝算法
EduCoder平台:人工智能导论第5章-对抗搜索
第1关:AlphaBeta剪枝算法求解博弈树最优选择
编程要求:
本关的编程任务是补全右侧代码片段 buildTree 、minmax_with_alphabeta 、max_value 、min_value 、get_value 和 isTerminal 中 Begin 至 End 中间的代码,具体要求如下:
在 buildTree 中,以递归的方式创建一棵博弈树,初始传入参数为博弈树的根结点 root ,以及解析后的列表与元组的组合数据 data_list;
在 minmax_with_alphabeta 中,基于 AlphaBeta 剪枝思想实现 MinMax 算法主体部分,初始传入参数为博弈树的根结点,函数最后返回根结点的最优决策结点;
在 max_value 中,计算该博弈树结点的子结点中的最大的评估值,并返回,传入参数为结点以及 Alpha 和 Beta 区间上下限;
在 min_value 中,计算该博弈树结点的子结点中的最小的评估值,并返回,传入参数为结点以及 Alpha 和 Beta 区间上下限;
在 get_value 中,返回结点 node 的值,即为 node.val;
在 isTerminal 中,判断某结点是否为最终结点(叶子结点),也就是说是否有子结点。
测试说明:
平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。
以下是平台的测试样例:
测试输入:
[A, [B, (E, 3), (F, 12), (G, 8)], [C, (H, 2), (I, 4), (J, 6)], [D,
(K, 14), (L, 5), (M, 2)]]
预期输出:
B 3
代码如下:
# -*- coding:utf-8 -*-import copy # 注意对象的深拷贝和浅拷贝的使用!!!class GameNode:'''博弈树结点数据结构成员变量:name - string 结点名字val - int 结点值children - list[GameNode] 子结点列表'''def __init__(self, name='', val=0):self.name = name # charself.val = val # intself.children = [] # list of nodesclass GameTree:'''博弈树结点数据结构成员变量:root - GameNode 博弈树根结点成员函数:buildTree - 创建博弈树'''def __init__(self):self.root = None # GameNode 博弈树根结点def buildTree(self, data_list, root):'''递归法创建博弈树参数:data_list - list[] like this ['A', ['B', ('E', 3), ('F', 12)], ['C', ('H', 2)], ['D', ('K', 14)]]root - GameNode'''#请在这里补充代码,完成本关任务#********** Begin **********#for i in range(1,len(data_list)):if type(data_list[i])==list:root.children.append(GameNode(data_list[i][0]))self.buildTree(data_list[i],root.children[i-1])else:root.children.append(GameNode(data_list[i][0],data_list[i][1]))#********** End **********#class AlphaBeta:'''博弈树结点数据结构成员变量:game_tree - GameTree 博弈树成员函数:minmax_with_alphabeta - 带AlphaBeta剪枝的极大极小值算法,计算最优行动max_value - 计算最大值min_value - 计算最小值get_value - 返回结点的值isTerminal - 判断某结点是否为最终结点'''def __init__(self, game_tree):self.game_tree = game_tree # GameTree 博弈树def minmax_with_alphabeta(self, node):'''带AlphaBeta剪枝的极大极小值算法,计算最优行动参数:node - GameNode 博弈树结点返回值:clf - GameNode 最优行动的结点'''#请在这里补充代码,完成本关任务#********** Begin **********#clf=self.max_value(node,-10000,10000)for child in node.children:if child.val==clf:return child;#********** End **********#def max_value(self, node, alpha, beta):'''计算最大值参数:node - GameNode 博弈树结点alpha - int 剪枝区间下限值beta - int 剪枝区间上限值返回值:clf - int 子结点中的最大的评估值'''#请在这里补充代码,完成本关任务#********** Begin **********#if self.isTerminal(node):return self.get_value(node)clf=-10000for child in node.children:clf=max(clf,self.min_value(child,alpha,beta))if clf>=beta:return clfalpha=max(alpha,clf)node.val=clfreturn clf#********** End **********#def min_value(self, node, alpha, beta):'''计算最小值参数:node - GameNode 博弈树结点alpha - int 剪枝区间下限值beta - int 剪枝区间上限值返回值:clf - int 子结点中的最小的评估值'''#请在这里补充代码,完成本关任务#********** Begin **********#if self.isTerminal(node):return self.get_value(node)clf=10000for child in node.children:clf=min(clf,self.max_value(child,alpha,beta))if clf<=alpha:return clfbeta=min(clf,beta)node.val=clfreturn clf#********** End **********#def get_value(self, node):'''返回结点的值参数:node - GameNode 博弈树结点返回值:clf - int 结点的值,即 node.val'''#请在这里补充代码,完成本关任务#********** Begin **********#return node.val#********** End **********#def isTerminal(self, node):'''判断某结点是否为最终结点(无子结点)参数:node - GameNode 博弈树结点返回值:clf - bool 是最终状态,返回True,否则返回False'''#请在这里补充代码,完成本关任务#********** Begin **********#if node.val==0:return Falseelse:return True#********** End **********#
头歌平台-人工智能之AlphaBeta剪枝算法相关推荐
- 头歌平台(EduCoder)————数据挖掘算法原理与实践:决策树
第1关:决策树算法思想 任务描述 本关任务:根据本节课所学知识完成本关所设置的选择题. 相关知识 为了完成本关任务,你需要掌握决策树的相关基础知识. 第2关:决策树算法原理 任务描述 本关任务:根据本 ...
- 头歌平台-人工智能导论实验(神经网络)
BP神经网络 import numpy as npdef loaddataset(filename):fp = open(filename)#存放数据dataset = []#存放标签labelset ...
- 头歌平台-人工智能导论实验(盲目搜索算法)
广度优先搜索 def PlayMazz(mazz, start, end):'''走迷宫,从start走到end:param mazz: 图:param start: 图的起点:param end: ...
- AlphaBeta剪枝算法求解博弈树最优选择 头歌实验平台
AlphaBeta剪枝算法求解博弈树最优选择 头歌实验平台 前言 一.AlphaBeta剪枝是什么? 1.由来, 最大最小决策树 2.发展 3. AlphaBeta剪枝 二.实验算法伪代码 三.实验算 ...
- 头歌MinMax算法和AlphaBeta算法
这里头歌平台上两题都能过.由于本人的python非常渣,代码可能有点繁琐,没有体现python的简洁,可以改进的地方自行改造 MinMax算法 对弈游戏时,假定两人都足够聪明,下一步都是对自己最有益. ...
- python井字棋ai_实现AI下井字棋的alpha-beta剪枝算法(python实现)
代码参考自中国大学mooc上人工智能与信息社会陈斌老师的算法,我在原来的基础上增加了玩家输入的异常捕获 AlphaBeta剪枝算法是对Minimax方法的优化,能够极大提高搜索树的效率,如果对这个算法 ...
- Alpha-Beta剪枝算法在直棋中的运用
游戏说明 详见本人的项目描述页面:https://gitee.com/liuweilhy/NineChess/blob/master/Readme.md 我做了个简单的GUI如下图. 点击这里可以下载 ...
- Minimax 和 Alpha-beta 剪枝算法简介,及以此实现的井字棋游戏(Tic-tac-toe)
前段时间用 React 写了个2048 游戏来练练手,准备用来回顾下 React 相关的各种技术,以及试验一下新技术.在写这个2048的过程中,我考虑是否可以在其中加入一个 AI 算法来自动进行游戏, ...
- 如何下载头歌平台在线实验闯关中的文件到本地进行查看
如何下载头歌平台在线实验闯关中的文件到本地进行查看 文章目录 如何下载头歌平台在线实验闯关中的文件到本地进行查看 一.前言 二.进入在线实验 三.使用SSH工具连接实验所属服务器 四.下载需要的文件到 ...
- python alpha beta 剪枝_一看就懂的 Alpha-Beta 剪枝算法详解
Alpha-Beta剪枝用于裁剪搜索树中没有意义的不需要搜索的树枝,以提高运算速度. 假设α为下界,β为上界,对于α ≤ N ≤ β: 若 α ≤ β 则N有解. 若 α > β 则N无解. ...
最新文章
- Linux 命令(记录)
- 《HTML5游戏编程核心技术与实战》一2.6 其他全局属性
- [Dnode]基于Node.js给浏览器提供异步远程方法调用
- Debian中编译内核
- JavaWeb 入门篇 (5) Cookie 和 Session 详解
- 游戏AI的生命力源自哪里?为你揭开MOBA AI的秘密!
- php:页面乱码的解决方法
- 数据结构:最小生成树
- 为CMUSphinx训练声学模型教程手册
- 比Gmail更强悍:超大3GB免费邮箱申请!
- Nexus3 Recommended file descriptor limit is 65536 but count is 4096
- c语言访问mysql,C语言访问mysql数据库
- 飞机一般是什么操作系统?
- 51假期读书笔记(下)——流畅的python
- error RC1015: cannot open include file 'sal.h'.
- POI操作ppt图表完整示例演示
- Windows 7 显示适配器
- 移动硬盘加密软件TrueCrypt使用指南
- mongodb API 官方资料
- 模式识别学习笔记(4)——离散变量的贝叶斯决策
热门文章
- mescroll API 汇总
- MPU9250调试笔记(融合磁力计计算Yaw)
- H5前端开源框架收藏
- 红巨星粒子插件Trapcode Suite 14.0 Win版全套中文完美汉化版
- 线性定常系统参数辨识-(数学建模与系统辨识——NJUST)
- 第四期_Metasploit 基础(二)MSFconsole《Metasploit Unleashed Simplified Chinese version(Metasploit官方文档教程中文版)》
- IMX6ULL 的 IEEE 1588 功能
- 51单片机学习笔记(清翔版)(23)——红外通讯
- 【嵌入式】基于ARM的嵌入式Linux开发总结
- UI - PS如何导入不同的字体