`
coolsooner
  • 浏览: 1309510 次
文章分类
社区版块
存档分类
最新评论

围棋博弈程序的实现与思考(8)——Zobrist哈希

 
阅读更多

本来并不想写着篇,因为英文维基上的zobrist hashing词条已经够详实了。后来发现自己的论文上有图文并茂的一节介绍zobrist哈希,想是为凑字数与图片写的,贴出来倒也方便:

Zobrist 哈希是一种专门针对棋类游戏而提出来的编码方式,以其发明者 Albert L.Zobrist 的名字命名。Zobrist 哈希通过一种特殊的置换表,也就是对棋盘上每一位置的各个可能状态赋予一个编码索引值,来实现在极低冲突率的前提下在一个整型数据上对棋盘进行编码。其编码步骤描述如下:

1) 将棋盘分为最小单位(如果将9X9围棋盘分为81个交叉点),求出每个单位上不同状态数(如围棋盘上的 1 个交叉点有 3 个状态)。

2) 为每个单位上的每种状态生成一个一定范围内(如64位整数)随机数。

3) 对于特定的棋局,将每个单位上的状态对应的随机数作异或运算,所得即为哈希值。


用 Zobrist 哈希为棋局状态编码至少具备两个优点:

1) 当随机数的范围足够大时,不同的棋局产生哈希冲突的概率非常小,在实际应用中通常可以忽略。

2) 在棋局进行过程中,不必每次重新开始计算棋局的哈希值,只需计算棋局状态发生改变的部分。


以下以一个 的围棋棋盘为例对 Zobrist 哈希作进一步说明:

  1. 2X2的围棋棋盘一共有 4 个单位,每个单位有 3 种状态(黑子,白子,空点),则为每种状态生成 1 个 8 位的随机数:


    对于如下棋局:




    额,贴得图文混杂,效果不太好……

分享到:
评论

相关推荐

    基于Alpha-Beta剪枝Max-Min博弈树实现的五子棋对战AI源码+搜索优化+Qt UI界面(含exe可执行程序)

    Zobrist-Hashing(Zobrist哈希方法) QT-UI框架 博弈树 概念解释: 顾名思义,对于“一来一往”式的 - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传...

    Java版中国象棋项目设计论文和源码

    中国象棋,位棋盘,Zobrist键值,alpha-beta搜索,置换表,局面评价,包含设计说明 摘 要:随着人工智能及计算机硬件的发展,计算机象棋程序的下棋水平也不断地得到提高。20世纪60年代初,麦卡锡提出了alpha-beta...

    一个简单的国际象棋项目,用于学习棋盘表示、引擎原理和算法_julia_代码_下载

    Zobrist 哈希。 发动机特点: Alpha-Beta 搜索。 迭代深化。 吸气窗。 徒劳的修剪。 后期搬家减少。 剃须刀。 空移动修剪。 静止搜索。 Delta 修剪。 静态交换评估。 移动订购。 杀手动作。 反动作。 历史启发式。 ...

    不使用哈希键的移动重复检测算法-研究论文

    本文讨论了计算机国际象棋编程中一个重要问题的理论和实践方面,即在重复位置情况下的图形检测问题... 我们开发的新型算法解决了在程序中未使用Zobrist键的情况下(即在未对内存进行哈希处理的情况下)的图形检测问题。

    基于Java的中国象棋对弈游戏系统开发(代码版本)

    内含高级算法:剪枝算法、博弈树算法、Zobrist算法等。 可以实现人机对战、人人对战、悔棋、重新开始、智能对战存储、残局等功能。 主要开发语言:Java。适合新手和小白进阶!!~ 界面美观丰富、并且人机对战有难度...

    风暴:C ++ UCI Chess Engine v2

    带有Zobrist哈希的换位表 PVS搜索 期望窗口和迭代加深 拉佐林 自适应空移修剪 徒劳的修剪 减少后期动作 评估: 材料 方块 国王安全 空间 骑士,主教,白嘴鸦,皇后 通过所有性能测试 思考 查看移动顺序 安装: ...

    基于JavaScript实现五子棋 AI【100012595】

    极大极小值算法的五子棋AI实现。使用了极大极小值搜索、Alpha Beta剪枝、启发式评估函数、Zobrist缓存、迭代加深、...等算法,对性能进行了优化,置换表其实就是最常见的一种性能优化方式。他不不会对棋力有负面影响...

    gomoku:Gomoku游戏,图形和AI引擎

    五子棋Gomoku(5行)GUI,具有2人游戏模式和vs.... AI利用negamax和alpha-beta修剪以及Zobrist哈希。 受到Tic-Tac-Toe图形案例研究的启发,可在此处找到: : 。 部分GUI组件是从此源中获取和修改的。

    基于极大极小值算法的五子棋AI实现.rar

    使用javascript编写的在线五子棋程序,主要使用了极大极小值搜索,Alpha Beta剪枝,启发式评估函数,Zobrist缓存,迭代加深等算法

    人工智能-五子棋算法研究

    人工智能-五子棋算法研究

    第10章 索 引

    SQL Server的索引是一种物理结构,它能够提供一种以一列或多列的值为基础迅速查找表中行的能力。

    simple chess without AI

    简单实现了走棋功能,使用了Zobrist键值。 实现的功能: 1. 输入一个初始棋盘文件和一个走法文件输出一終了文件 2. 输入两个初始棋盘文件和一个步数,判断在步数之内是否可以从一个棋盘到另一个棋盘。 因为这里只...

    Java毕业设计 论文:中国象棋.rar

    关键词:中国象棋,位棋盘,Zobrist键值,alpha-beta搜索,置换表,局面评价。本毕业设计论文根据国际象棋程序设计的一些成功经验,提出中国象棋程序设计的一些思路和方法。  在写中国象棋程序时,需要比较两个...

    基于Java的中国象棋对弈游戏系统开发-2W字(查重13%)

    基于Java的中国象棋对弈游戏系统开发-2W字(查重13%),主要技术栈:Java Swing、Eclipse、Idea、剪枝算法、搜索算法、博弈树算法、Zobrist及键值等。已完成国内外研究概况调研、游戏可行性分析、需求分析、界面设计、...

    基于JAVA开发的中国象棋包含源码

    中国象棋,位棋盘,Zobrist键值,alpha-beta搜索,置换表,局面评价,包含设计说明

    中国象棋对弈程序文档

    中国象棋设计文档,里面详细的文档,供您学习研究使用

    贝岭的matlab的代码-Organisation-responsabilisante:负责机构

    在这家公司,大多数员工完全自由并负责采取他们自己(而不是他们的经理或程序)决定的最适合公司愿景的任何行动。 Jean-François ZOBIST 的定义 一家除了客户之外没有任何其他限制的公司 图书 作者:Isaac GETZ 和 ...

    Halogen:C ++国际象棋引擎

    细节Halogen用c ++编写,实现了空移动修剪,减少后期移动,静止搜索以及使用Zobrist Hashing的换位表。 搜索例程使用SMP并行化技术进行多线程处理。 目前, 框架支持卤素开发。 OpenBench(由创建)是一个开放源...

    数据结构Advanced-Data-Structures

    Implicit data structure 8 Compressed data structure 9 Search data structure 10 Persistent data structure 11 Concurrent data structure 18 Abstract data types 21 Abstract data type 21 List 29 Stack 32 ...

    Panzercheckers:带有巴西官方规则的跳棋游戏-开源

    跳棋与巴西的官方规则棋盘游戏。 游戏引擎使用最多4件的残局数据库。 许多优化技术被用于生成和处理游戏树和minimax算法。 还使用了位板和zobrist键。

Global site tag (gtag.js) - Google Analytics