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剪枝算法相关推荐

  1. 头歌平台(EduCoder)————数据挖掘算法原理与实践:决策树

    第1关:决策树算法思想 任务描述 本关任务:根据本节课所学知识完成本关所设置的选择题. 相关知识 为了完成本关任务,你需要掌握决策树的相关基础知识. 第2关:决策树算法原理 任务描述 本关任务:根据本 ...

  2. 头歌平台-人工智能导论实验(神经网络)

    BP神经网络 import numpy as npdef loaddataset(filename):fp = open(filename)#存放数据dataset = []#存放标签labelset ...

  3. 头歌平台-人工智能导论实验(盲目搜索算法)

    广度优先搜索 def PlayMazz(mazz, start, end):'''走迷宫,从start走到end:param mazz: 图:param start: 图的起点:param end: ...

  4. AlphaBeta剪枝算法求解博弈树最优选择 头歌实验平台

    AlphaBeta剪枝算法求解博弈树最优选择 头歌实验平台 前言 一.AlphaBeta剪枝是什么? 1.由来, 最大最小决策树 2.发展 3. AlphaBeta剪枝 二.实验算法伪代码 三.实验算 ...

  5. 头歌MinMax算法和AlphaBeta算法

    这里头歌平台上两题都能过.由于本人的python非常渣,代码可能有点繁琐,没有体现python的简洁,可以改进的地方自行改造 MinMax算法 对弈游戏时,假定两人都足够聪明,下一步都是对自己最有益. ...

  6. python井字棋ai_实现AI下井字棋的alpha-beta剪枝算法(python实现)

    代码参考自中国大学mooc上人工智能与信息社会陈斌老师的算法,我在原来的基础上增加了玩家输入的异常捕获 AlphaBeta剪枝算法是对Minimax方法的优化,能够极大提高搜索树的效率,如果对这个算法 ...

  7. Alpha-Beta剪枝算法在直棋中的运用

    游戏说明 详见本人的项目描述页面:https://gitee.com/liuweilhy/NineChess/blob/master/Readme.md 我做了个简单的GUI如下图. 点击这里可以下载 ...

  8. Minimax 和 Alpha-beta 剪枝算法简介,及以此实现的井字棋游戏(Tic-tac-toe)

    前段时间用 React 写了个2048 游戏来练练手,准备用来回顾下 React 相关的各种技术,以及试验一下新技术.在写这个2048的过程中,我考虑是否可以在其中加入一个 AI 算法来自动进行游戏, ...

  9. 如何下载头歌平台在线实验闯关中的文件到本地进行查看

    如何下载头歌平台在线实验闯关中的文件到本地进行查看 文章目录 如何下载头歌平台在线实验闯关中的文件到本地进行查看 一.前言 二.进入在线实验 三.使用SSH工具连接实验所属服务器 四.下载需要的文件到 ...

  10. python alpha beta 剪枝_一看就懂的 Alpha-Beta 剪枝算法详解

    Alpha-Beta剪枝用于裁剪搜索树中没有意义的不需要搜索的树枝,以提高运算速度. 假设α为下界,β为上界,对于α ≤ N ≤ β: 若 α ≤ β  则N有解. 若 α > β 则N无解. ...

最新文章

  1. Linux 命令(记录)
  2. 《HTML5游戏编程核心技术与实战》一2.6 其他全局属性
  3. [Dnode]基于Node.js给浏览器提供异步远程方法调用
  4. Debian中编译内核
  5. JavaWeb 入门篇 (5) Cookie 和 Session 详解
  6. 游戏AI的生命力源自哪里?为你揭开MOBA AI的秘密!
  7. php:页面乱码的解决方法
  8. 数据结构:最小生成树
  9. 为CMUSphinx训练声学模型教程手册
  10. 比Gmail更强悍:超大3GB免费邮箱申请!
  11. Nexus3 Recommended file descriptor limit is 65536 but count is 4096
  12. c语言访问mysql,C语言访问mysql数据库
  13. 飞机一般是什么操作系统?
  14. 51假期读书笔记(下)——流畅的python
  15. error RC1015: cannot open include file 'sal.h'.
  16. POI操作ppt图表完整示例演示
  17. Windows 7 显示适配器
  18. 移动硬盘加密软件TrueCrypt使用指南
  19. mongodb API 官方资料
  20. 模式识别学习笔记(4)——离散变量的贝叶斯决策

热门文章

  1. mescroll API 汇总
  2. MPU9250调试笔记(融合磁力计计算Yaw)
  3. H5前端开源框架收藏
  4. 红巨星粒子插件Trapcode Suite 14.0 Win版全套中文完美汉化版
  5. 线性定常系统参数辨识-(数学建模与系统辨识——NJUST)
  6. 第四期_Metasploit 基础(二)MSFconsole《Metasploit Unleashed Simplified Chinese version(Metasploit官方文档教程中文版)》
  7. IMX6ULL 的 IEEE 1588 功能
  8. 51单片机学习笔记(清翔版)(23)——红外通讯
  9. 【嵌入式】基于ARM的嵌入式Linux开发总结
  10. UI - PS如何导入不同的字体