python大作业黑白棋_计算概论大作业——黑白棋AI设计
一周前从学长那得知了北京大学计算概论的大作业黑白棋AI,正好最近从炉石脱坑,去凑了个热闹
网站上有规则和交互方式,在此不再赘述
游戏界面大概长这样,支持bot间或者人机对战
每回合要求程序读入局面信息,输出落子位置
1.一开始熟悉一下给出的样例程序的框架,做一些小测试。
因为之前没怎么接触黑白棋,也不懂有什么策略。样例给出的是随机落子,就把样例修改了一下,比如每次选择能占有最多格子的落子处,结果打不过样例……
2.AI框架
(1)极大极小搜索与AlphaBeta剪枝
一般AI的框架是把局面做一个估价,反应某一方的情况,数值越大代表优势越大,然后构建博弈树通过搜索得到较优策略。
比方说上面就是把占有的格子数当做一方的估价
假设博弈的两方叫做A和B,不妨设当前轮到A
如果A只考虑走一步,那么当然是走到一个对A估价最大的局面
如果A能往后考虑到B的下一步,B要走一个对A估价最小的局面,那A的落子就要使得下一步B落子后局面对A估价尽量大
A往后考虑若干步,以此类推,要使得A若干步后到达的局面对A估价尽量大。
局面之间形成一个树形结构,因为每一方每次有约10种走法,我们将博弈树限制在7-10层。
叶结点局面直接估价,其余结点用上述思路在树上深搜得出估价。
还有一个AlphaBeta剪枝,是说搜索一个结点的一些子节点一定不会改变这个结点的估价,就考虑剪枝
(2)
可以通过改变搜索顺序来提高效率,在开局和终局也可以适当增加搜索树层数
3.初步研究估价函数
(1)
围棋中有一个术语,叫做“金角银边草肚皮”,黑白棋也适用,意思是格子的重要性不同
角是一般比赛中获胜的关键,为了尽可能占有角,每个角周围三个格子(星位)就尽量不去占
因此我们给不同的格子制定不同的权值,而不是单纯以占有格子数来评价局面
(2)
行动力与稳定子
看了基本的黑白棋策略,发现有这两个概念
行动力:可选落子点总数。
稳定子:不可能被翻转的子。(右上角的一些黑棋是稳定子)
稳定子不好精确计算,我们仅把那些八个方向都没有空格的子视为稳定子
实际上这是一个充分不必要条件
前期对局势的判断,应当基于这两个参数
(3)
奇偶性
一个区域指的是棋盘上一块空着的区域,通常(并非总是)包括一个角,与其它区域隔开(右上角是一个区域)。
如果要填入一个偶数空的区域,通常最后下入其中要好一些。这就是说,你希望对手先下入区域,之后你跟进,试图吃回一些你的对手刚刚吃掉的棋子。
这是黑白棋中一个很重要的理论,在实践中发现它很有效,一个区域大小 <= 6 时我尝试将奇偶性考虑在内,如果落子的区域大小为奇数,则提高估价,否则减少这一步的估价,即我们希望在奇数区域落子。
(4)
经过观察,我得出了一些结论
通常一方跳过回合会导致失败,少有例外
在游戏早期,一方的子越少越有利,这可能跟行动力有关
失败的一方通常在边角的占领上处于劣势,强大的AI较重视边上的稳定子
4.改进估价函数
对一个局面的估价越准确,AI的决策就会越明智,我发现对战中常出现这样的情况
如左图,白方占领了边上中间的若干个,但是这些子不稳定,黑方占有1B和1H的可能性提高
甚至如右图,边上的白子很大可能被翻
——有时去占边并不能占到便宜
改进AI对边的评价,设计一个动态规划算法,只考虑边上一行/列的8个棋子,给这3^8种情况的估价
八个格子占满的估价直接计算,角的权重2,边的权重为1
否则考虑一方有一定概率在某个空格落子
比如左图,三个格子黑白方等概率占,右图1B黑方有大概率占,1A黑白方等概率
使用记忆化搜索转移
当边上形成稳定子时,估价会明显提高,鼓励AI形成边上的优势
大概思路如此,再花一些时间调整参数,花了几个晚上
代码390行,目前botzone天梯已进前5名
python大作业黑白棋_计算概论大作业——黑白棋AI设计相关推荐
- python第三周测试_第三周作业 - 作业 - 信息与计算17数31SWE - 班级博客 - 博客园...
格式要求 请大家在作业开头添加格式描述,仿照如下 这个作业要求在哪里 我在这个课程的目标是 此作业在哪个具体方面帮我实现目标 其他参考文献 作业正文 博客作业可以给出链接 正文 ........... ...
- ios相机黑边_苹果XR大黑边太感人 怎么看都不如OPPO R17漂亮
原标题:苹果XR大黑边太感人 怎么看都不如OPPO R17漂亮 苹果公司今年主打"低端"市场的iPhone XR近日终于正式发售,许多网友也已经尝鲜入手.但有网友在网上分享,发现i ...
- 华师大c语言平时作业答案,华师大-数据库系统概论-平时作业.doc
第 PAGE 17页 共17页 <数据库系统概论>作业 第一章 概述 1. 层次模型的数据结构是__树形___结构:网状模型的数据结构是 网状 结构:关系模型的数据结构是__二维表____ ...
- 苏宁大数据怎么运营_运营商大数据精准获客
说到运营商大数据公司的精准拓荒者,现在市场上很多人都在进行相关的业务流程,但做的人多的话就不好,所以很多公司找不到可靠的运营商大数据服务供应商. 大部分是不可靠的,所以喊着运营商大数据的精准拓客招牌, ...
- 棒棒糖球球机器人_球球大作战刷棒棒糖_球球大作战刷龙蛋攻略
玩过球球大作战的玩家们都知道我们要获得棒棒糖和龙蛋是很不容易的,那么游戏中我们要怎么免费获得龙蛋和棒棒糖呢,而通过怎么才能快速获得龙蛋和棒棒糖,同时通过刷的方式要怎么操作呢,接下来就由小编一起来详细给 ...
- 华为大数据中心山西_吕梁智能大数据产业技术创新研究院 、华为山西(吕梁)大数据中心吕梁职业技术学院大数据学院同日揭牌成立...
图为吕梁智能大数据产业技术创新研究院揭牌仪式现场.记者王益炜摄 在第二届"数谷吕梁·智赢未来"吕梁大数据产业发展推介会举办之际,8月18日,吕梁智能大数据产业技术创新研究院.华为山 ...
- python软件长什么样图片_听说各大网站的色情图片识别都是用的这个程序?Python识别色情图...
2.2 程序原理 本程序根据颜色(肤色)找出图片中皮肤的区域,然后通过一些条件判断是否为色情图片. 程序的关键步骤如下: HSV 颜色模式 h > 0 and h < 35 and s & ...
- python电商项目介绍_电商大数据项目-推荐系统实战(一)
本项目是基于Spark MLLib的大数据电商推荐系统项目,使用了scala语言和java语言.基于python语言的推荐系统项目会另外写一篇博客.在阅读本博客以前,需要有以下基础: 1.linux的 ...
- python代码编辑器、最好_这十大文本/代码编辑器最好用
10款最著名的代码(文本)编辑器,作为程序员的你喜欢哪个,哪种代码编辑器最入你的法眼.代码编辑器对我们的用途有多大呢? 通常操作系统和软件开发包中都包含文本/代码编辑器,可以用来编辑配置文件,文档文件 ...
- python程序员职业考试_最新10大Python面试常问的问题,60%的人都不会
Python是个非常受欢迎的编程语言,随着近些年机器学习.云计算等技术的发展,Python的职位需求越来越高.下面我收集了10个Python面试官经常问的问题,供大家参考学习. 类继承 有如下的一段代 ...
最新文章
- 《Linux4.0设备驱动开发详解》笔记--第十二章:Linux设备驱动的软件架构思想
- pandas index 用法 查询
- Win 10 安装detectron2 详细手册
- C#部分---函数添加基本格式;
- Android获取LAUNCHER,Android 获取Launcher 启动列表
- dj鲜生-01-新建项目-配置数据库
- 解决企业子CA无法检查吊销的问题
- 1.极限——例子_3
- dio设置自定义post请求_基于dio库封装flutter项目的标准网络框架
- C++自学14:关系运算符(bool/std::boolalpha)
- 虚无缥缈的代码到底是如何控制硬件工作的?
- C++入门经典 Ivor Horton 第3版
- 为matlab GUI添加背景图片
- Oracle 中LONG RAW BLOB CLOB类型介绍
- python操作ipv6_python ipv6计算SQLAlchemy复杂查询
- 中国军工电子行业运营模式及十四五发展规划咨询建议报告2022-2027年
- scratch——画板
- Python实现将坐标点绘制到地图上
- nw.js 将html打包为exe
- XCP BASIC安装
热门文章
- 郑州统考英语计算机培训,2016年郑州大学远程教育英语统考练习题
- Fabric2.3分布式部署
- win8.1电脑显示器亮度按钮无法使用
- 如何像打王者荣耀一样励志学习
- COUNTIF、COUNTIFS、SUMIF、SUMIFS用法详解
- linux权限英文,Linux常见英文报错中文翻译(菜鸟必知)
- 2022年江苏省职业院校技能大赛网络搭建与应用赛项中职样卷
- 解决电脑无法自动获取IP地址
- android 蓝牙传输速率,android蓝牙rfcomm连接速度太慢
- ECCV 2022 | 基于去遮挡和移除的3D交互双手姿态估计