博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
象棋人机对弈程序的思想
阅读量:5119 次
发布时间:2019-06-13

本文共 1037 字,大约阅读时间需要 3 分钟。

电脑与玩家下象棋,围棋,五子棋,斗地主,三国杀等等,我们称之为人机博弈。下面以象棋为例,说说人机博弈程序的基本思想。

  这种对弈程序主要涉及到3个方面,分别是走法产生、估值算法和搜索技术。

<ignore_js_op> 象棋人机对弈程序的思想

 

  走法产生就是遍历当前局面的所有可行走法。

<ignore_js_op> 象棋人机对弈程序的思想

 

  上面的程序描述了红卒的走法。只要遍历每一种棋子的走法,通过AddMove添加到列表之中,走法表便形成了。

<ignore_js_op> 象棋人机对弈程序的思想

 

 

<ignore_js_op> 象棋人机对弈程序的思想

 

 

<ignore_js_op> 象棋人机对弈程序的思想

 

  了解走法产生后,就要介绍下估值算法了,总之就是评估一个局面好坏的算法。这里介绍三种评估方法,其一是计算棋子的价值,其二是计算棋子的灵活性(棋 子有没有被挡住),其三是计算棋子的关系(有没有威胁到对方棋子),将这几种方法结合起来,就可以得出较好的估值结果了。

<ignore_js_op> 象棋人机对弈程序的思想

 

 

<ignore_js_op> 象棋人机对弈程序的思想

 

 

<ignore_js_op> 象棋人机对弈程序的思想

 

 

<ignore_js_op> 象棋人机对弈程序的思想

 

 

<ignore_js_op> 象棋人机对弈程序的思想

 

 

<ignore_js_op> 象棋人机对弈程序的思想

 

  有了走法产生和估值,就能够产生一颗博弈树,接下来就要了解怎样找到一个最好的走法了。

<ignore_js_op> 象棋人机对弈程序的思想

 

 

<ignore_js_op> 象棋人机对弈程序的思想

 

  可以用下面的图来解释极大极小值算法,这是一个两层的博弈树,c1的估值是8,c2的估值是10。假如程序走红方,现在在B1局面,轮到黑方下棋,最 坏的情况就是黑方走到c1局面,因为这时候局面对红方的估值最小。所以B1的估值是c1,c2,c3的最小值,也就是8,B2和B3同理,得出的估值分别 是5和10。假如现在在局面A,轮到红方走,那自然要走一步对自己最有利的,于是选择了B3。

<ignore_js_op> 象棋人机对弈程序的思想

 

 

<ignore_js_op> 象棋人机对弈程序的思想

 

    如下图所示,当程序计算到c4的时候,得出c4是7,因为B2取的是下面节点的最小值,所以B2 <= 7,而B1 = 8,所以在A局面到B1,B2,B3局面选择时,就不可能选择B2了。这时候C5和C6就可以不用计算了,直接抛弃,有点像减掉一棵树的枝叶,称为剪枝, 这是对搜索算法的一种优化。

<ignore_js_op> 象棋人机对弈程序的思想

 

  完成了,了解了这一思想,你便也了解了五子棋、围棋、斗地主、三国杀等等人机博弈程序的思路了。

<ignore_js_op> 象棋人机对弈程序的思想

转载于:https://www.cnblogs.com/zhepama/p/4235773.html

你可能感兴趣的文章
PHP-目录的基本操作
查看>>
jquery 新建的元素事件绑定问题
查看>>
bzoj1013 [JSOI2008]球形空间产生器sphere
查看>>
iPhone游戏添加Game Center功能前需要做的提交工作
查看>>
简单总结Get与Post的区别
查看>>
第5章 串
查看>>
抽象工厂模式( Abstract Factory )
查看>>
solidity 智能合约操作
查看>>
各类技术学习笔记
查看>>
:集中式存储解决方案
查看>>
[转载]UIButton 详解
查看>>
MySQL备份和还原
查看>>
day8 文件操作
查看>>
Ajax
查看>>
Delphi数组
查看>>
KMP算法总结
查看>>
部门分享会演讲复盘-1
查看>>
fastReport.net 初了解
查看>>
利用WWW类获取图片并且在unityUGUI的Image中显示
查看>>
Java文件执行过程
查看>>