基于蒙特卡洛信心上限搜索树UTC算法的四子棋游戏

1 实验任务简介

在M行N列的棋盘中,棋手每次只能在每一列当前的最底部落子,如果某一列已经落满,则不能在该列中落子,目标是在横向、纵向、两个斜向共四个方向中的任意一个方向上,使自己的棋子连成四个(或四个以上),并阻止对方达到同样的企图。先形成四连子的一方获胜,如果直到棋盘落满双方都没能达到目标,则为平局。

棋盘的大小是随机的,宽度和高度的范围均为[9,12],每次棋盘生成之后,会同时在棋盘上随机生成一个不可以落子的位置。因此任何情况下都存在必胜策略是不可能的,程序的目标是给出在任何情况下都可行的AT算法。

2 实验算法说明

2.1 核心算法

在本实验中,我使用了蒙特卡洛信心上限搜索树(UCT)的算法。其基本功能分为:在树中进行搜索,选择进行结点扩展或者寻找出最好的子节点,扩展树节点策略,选择最佳子节点,计算默认的收益值和回溯更新N和Q值这几个功能。

算法的基本思路和材料中给出的伪代码相近,我只做出了一些修改。

在扩展结点的判断上,每次在扩展结点的时候,我选择将所有的可能的结点一下子全部构造出来,并且赋值为默认的参数。并用一个标记来记录时候进行过来结点扩展。在判断进行过结点扩展的时候,就直接开始进行选择最好的子节点。

在信心上限搜索树的结点方面,我没有选择应用指针,而使用一批数组来储存他们。其中包括记录子节点的区间的1, r数组,记录父节点位置fa数组,记录其获胜因数的win数组,计算总数tot数组,这一个结点要下的位置xx, yy数组,判断记录当前局面的情况的re数组和记录当前一步为哪一方user数组,数组的上限为8000000。

18423381-f86fae3ef254f56a.png

源码和文档下载地址:https://www.write-bug.com/article/1901.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值