嗨!

我正试图为我的国际象棋引擎编写一个negamax搜索算法,但我似乎无法让它工作.我使用wikipedias伪代码作为示例,但不知何故它不会产生预期的结果.当我以2的ply运行它时,它会改变我的电路板数据结构,尽管它不应该.功能完成与ply 2一起运行后,所有白色(或黑色的.取决于玩家所称的功能.)棋子从起始位置向前移动2个空格.

我的make和unmake move函数完美地工作,因为我使用非递归函数测试它们,搜索最多5层.然后,它完美地工作.我的negamax实现一定有问题.

非常感谢您的帮助!

def negaMax(self, board, rules, ply, player):

""" Implements a minimax algorithm. """

if ply == 0:

return self.positionEvaluation()

self.max_eval = float('-infinity')

self.move_list = board.generateMoves(rules, player)

for self.move in self.move_list:

board.makeMove(self.move, player)

self.eval = -self.negaMax(board, rules, ply - 1, board.getOtherPlayer(player))

board.unmakeMove(self.move, player)

if self.eval > self.max_eval:

self.max_eval = self.eval

return self.max_eval

解决方法:

这里的主要问题是我相信对象变量的使用而不是局部变量.

self.move是一个对象变量,每次你改变它 – 递归的每个级别“看到”变化,这通常是递归算法的坏事.

递归算法应该是自包含的,并且如果对调用环境有任何改变则做最小化 – 这使得更容易遍历算法流程.

我在这段代码中看到的两个主要问题是:

> self.move应该是一个局部变量(将其声明为move).当你以后做:board.unmakeMove(self.move,player) – 我怀疑该板正在撤消一个不同的移动,它在递归树中设置得更深,而不是你想要的那个.使用局部变量将消除这种不期望的行为.

>递归调用的每个级别都设置self.max_eval = float(‘ – infinity’) – 所以你不断改变它,虽然它可能不是你想要做的.

解决方案应该是这样的:

def negaMax(self, board, rules, ply, player):

""" Implements a minimax algorithm. """

if ply == 0:

return self.positionEvaluation()

max_eval = float('-infinity')

move_list = board.generateMoves(rules, player)

for move in move_list:

board.makeMove(move, player)

currentEval = -self.negaMax(board, rules, ply - 1, board.getOtherPlayer(player))

board.unmakeMove(move, player)

if currentEval > max_eval:

max_eval = currentEval

return max_eval

我不是100%肯定它确实会解决代码中的所有内容(但它会解决其中的一些问题)但我100%肯定避免使用对象变量会使代码更容易理解和调试.

标签:python,chess

来源: https://codeday.me/bug/20190630/1331763.html

python国际象棋的价值_python – 国际象棋negamax功能相关推荐

  1. python压缩视频文件_python实现视频压缩功能

    引言 实现一个视频压缩的功能, 性能优良 压缩视频 从61M 到 11M或者80M到15M 视频看起来没有太大损伤 缺点:耗时20s (win10,CPU:intel i7 8G运存 ) 由于压缩运算 ...

  2. python词频统计西游记_Python文本统计功能之西游记用字统计操作示例

    本文实例讲述了Python文本统计功能之西游记用字统计操作.分享给大家供大家参考,具体如下: 一.数据 xyj.txt,<西游记>的文本,2.2MB 致敬吴承恩大师,4020行(段) 二. ...

  3. python图像拼接过渡自然_python实现图像拼接功能

    利用Python将Market1501的分割图片和原图两张图片进行拼接成一左一右一张图片,并将图片的像素值调整成256*128. 所有文件夹: 文件夹下的所有原图: 文件夹下的所有的分割图片: 代码如 ...

  4. python和java反射_python实现反射功能

    在java中用classfor 很容易实现反射,比如SPRING,就大量用这个东西实现.现在用python做服务端,也想用类似的方式.在搜索了大量的网站后,找到一个classloader方案,源代码, ...

  5. python 在险价值_Python计算股票投资组合的风险价值(VaR)

    在开始之前,请注意,标准VaR计算假定以下条件: 收益的正态分布 -VaR假设投资组合的收益是正态分布.对于大多数资产而言,这当然是不现实的,但允许我们使用更为简单的计算来制定基准. (可以对VaR进 ...

  6. python下载包没用_Python下载各种功能包出问题

    转换Excel表格到MarkDown:exceltk 源码和下载: 源码:https://github.com/fanfeilong/exceltk 下载:http://files.cnblogs.c ...

  7. python打印国际象棋规则口诀_python输出国际象棋棋盘的实例分享

    国际象棋是当今国际上最流行的智力体育运动项目.青年人下棋可以锻炼思维.增强记忆力和培养坚强的意志:中年人下棋可以享受美学:老年下棋可以很好的休息娱乐.国际象棋游戏有自己的规则,需要两个人将棋子落在棋盘 ...

  8. python绘制8×8棋盘_python图形工具turtle绘制国际象棋棋盘

    本文实例为大家分享了python图形工具turtle绘制国际象棋棋盘的具体代码,供大家参考,具体内容如下 #编写程序绘制一个国际象棋的棋盘 import turtle turtle.speed(30) ...

  9. python国际象棋棋盘图片_python图形工具turtle绘制国际象棋棋盘

    本文实例为大家分享了python图形工具turtle绘制国际象棋棋盘的具体代码,供大家参考,具体内容如下 #编写程序绘制一个国际象棋的棋盘 import turtle turtle.speed(30) ...

  10. python国际象棋ai程序_使用Python创建属于你的国际象棋AI

    使用Python创建属于你的国际象棋AI Python3 最后更新 2020-10-23 16:23 阅读 120 最后更新 2020-10-23 16:23 阅读 120 Python3 ##Fly ...

最新文章

  1. 【python教程入门学习】Python函数定义及传参方式详解(4种)
  2. ubuntu 14.04设备OVS虚拟OpenFlow交换机配置汇总
  3. Form表单提交按钮图片IE6下背景透明(js提交)
  4. Scala入门到精通——第六节:类和对象(一)
  5. SAP BSP应用configuration的加载原理
  6. oc引导windows蓝屏_人人都会遇到系统蓝屏问题,教大家自已排除蓝屏,学会一辈子受用...
  7. bat从数组中找出相同数字并删除_全网把Map中的hash()分析的最透彻的文章,别无二家...
  8. Javascript:面向对象举例——矩形类及其实例化
  9. 手机端答题页面_有奖答题来啦!科普知识等你来挑战……
  10. Perl中的执行上下文
  11. 泛泰A870(高通APQ8064t 600 cpu) Mokee4.4.2(Android4.4) 图赏
  12. 2020,咋赚钱?|【常垒·常识】
  13. 计算机用户名显示TEMP,Windows 下Temp帐号处理
  14. 红警2 技术篇 地图基础ini 教程
  15. 三星 GALAXY Note 4 柏林发布会
  16. VUE学习笔记------奕长苏
  17. android 10系统下载地址,Android 10正式版
  18. mac 卸载 redis
  19. 工程车辆监控管理系统方案
  20. 动态规划题目集合——贰

热门文章

  1. 计算机上什么键有存储,电脑保存的快捷键是什么_电脑知识
  2. 统计学的Python实现-019:任意正态分布计算概率
  3. RuoYi-Vue 若依 新增子module模块,子模块的接口报404,以及自定义包名后如何确保正确扫描?
  4. CSS3 的 calc()函数(为元素设置动态的属性值)【积累】
  5. Java实战项目-移动电商秒杀系统seckill优化
  6. 2021-2027全球与中国抽屉拉手市场情况与未来趋势研究报告
  7. 最大公约数,最小公倍数的求法
  8. 《Adobe Illustrator CS6中文版经典教程(彩色版)》—第0课0.4节应用颜色
  9. 智能家居项目方案介绍
  10. 如何修改织梦后台登陆界面