基于 FPGA 的五子棋算法
设计文档
第一部分
设计概述 /Design Introducon
五子棋是日常生活中简单常见的棋类游戏。电脑、手机上也有许多这样的软件。前段时间
热议的 AlphaGo 人工智能围棋程序是我们灵感的来源,本作品希望打造一款具有真人体验
的五子棋人机对弈装置,通过 Matlab 编写的棋盘,通过算法计算落子位置并做出下棋的动
作,使对弈者感觉仿佛在与一个智能机器人对弈。
第二部分
系统组成及功能说明 /System Construcon & Funcon Descripon
1、预计功能:
使用 Matlab 编写的五子棋游戏,使用串口将数据传送到 FPGA,进行处理后获得黑白
子像素信息,存储后换算为坐标,转换为棋盘信息矩阵。在 FPGA 中实现简化的五子棋算
法,计算出在剩下所有格点中利益值最大的点,从而确定下一步最有利的落子位置,将位
置坐标重新发送给 Matlab,Matlab 将数据处理后得到下棋的位置,以此实现人机对弈。
2、系统组成:
本系统主题面板为 15*15 的矩阵。FPGA 使用 Xilinx 的“火龙果”平台。
主要模块功能及构成:
(1) 五子棋算法主控模块:五子棋算法采用利益值判别法,该法是五子棋常用的算
法,即每次遍历 FPGA 收到的棋盘信息的所有格点,对该格点周围一圈的棋子状
况进行判别,实际上原算法本身较为复杂,通过搭建一个 ZYNQ 硬核环境植入算
法进行处理,对各种情况(三连、人字等等)都赋予一定的利益值,最后选取
利益值最高的点作为机器落子的点,计算出其 x ,y 轴的坐标,输出给落子二维传
导模块。整个设计主要调用了一个串口 IP 以及 ZYNQ 相关配置 IP,然后进入 SDK
中进行代码的编写。
采用这种算法可以无需判断白色棋子的落点位置,大大简化了设计。
五子棋算法思路:
1、估计几步之内放在哪个位置最有利。
2、根据当前局面,评估每一个可以落子的位置,看看在这儿落子后的得分怎
样。极大极小值搜索就是在估计自己走的时候,选得分高的,估计别人走