python国际象棋的价值_python – 国际象棋negamax功能
嗨!
我正试图为我的国际象棋引擎编写一个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功能相关推荐
- python压缩视频文件_python实现视频压缩功能
引言 实现一个视频压缩的功能, 性能优良 压缩视频 从61M 到 11M或者80M到15M 视频看起来没有太大损伤 缺点:耗时20s (win10,CPU:intel i7 8G运存 ) 由于压缩运算 ...
- python词频统计西游记_Python文本统计功能之西游记用字统计操作示例
本文实例讲述了Python文本统计功能之西游记用字统计操作.分享给大家供大家参考,具体如下: 一.数据 xyj.txt,<西游记>的文本,2.2MB 致敬吴承恩大师,4020行(段) 二. ...
- python图像拼接过渡自然_python实现图像拼接功能
利用Python将Market1501的分割图片和原图两张图片进行拼接成一左一右一张图片,并将图片的像素值调整成256*128. 所有文件夹: 文件夹下的所有原图: 文件夹下的所有的分割图片: 代码如 ...
- python和java反射_python实现反射功能
在java中用classfor 很容易实现反射,比如SPRING,就大量用这个东西实现.现在用python做服务端,也想用类似的方式.在搜索了大量的网站后,找到一个classloader方案,源代码, ...
- python 在险价值_Python计算股票投资组合的风险价值(VaR)
在开始之前,请注意,标准VaR计算假定以下条件: 收益的正态分布 -VaR假设投资组合的收益是正态分布.对于大多数资产而言,这当然是不现实的,但允许我们使用更为简单的计算来制定基准. (可以对VaR进 ...
- python下载包没用_Python下载各种功能包出问题
转换Excel表格到MarkDown:exceltk 源码和下载: 源码:https://github.com/fanfeilong/exceltk 下载:http://files.cnblogs.c ...
- python打印国际象棋规则口诀_python输出国际象棋棋盘的实例分享
国际象棋是当今国际上最流行的智力体育运动项目.青年人下棋可以锻炼思维.增强记忆力和培养坚强的意志:中年人下棋可以享受美学:老年下棋可以很好的休息娱乐.国际象棋游戏有自己的规则,需要两个人将棋子落在棋盘 ...
- python绘制8×8棋盘_python图形工具turtle绘制国际象棋棋盘
本文实例为大家分享了python图形工具turtle绘制国际象棋棋盘的具体代码,供大家参考,具体内容如下 #编写程序绘制一个国际象棋的棋盘 import turtle turtle.speed(30) ...
- python国际象棋棋盘图片_python图形工具turtle绘制国际象棋棋盘
本文实例为大家分享了python图形工具turtle绘制国际象棋棋盘的具体代码,供大家参考,具体内容如下 #编写程序绘制一个国际象棋的棋盘 import turtle turtle.speed(30) ...
- python国际象棋ai程序_使用Python创建属于你的国际象棋AI
使用Python创建属于你的国际象棋AI Python3 最后更新 2020-10-23 16:23 阅读 120 最后更新 2020-10-23 16:23 阅读 120 Python3 ##Fly ...
最新文章
- 【python教程入门学习】Python函数定义及传参方式详解(4种)
- ubuntu 14.04设备OVS虚拟OpenFlow交换机配置汇总
- Form表单提交按钮图片IE6下背景透明(js提交)
- Scala入门到精通——第六节:类和对象(一)
- SAP BSP应用configuration的加载原理
- oc引导windows蓝屏_人人都会遇到系统蓝屏问题,教大家自已排除蓝屏,学会一辈子受用...
- bat从数组中找出相同数字并删除_全网把Map中的hash()分析的最透彻的文章,别无二家...
- Javascript:面向对象举例——矩形类及其实例化
- 手机端答题页面_有奖答题来啦!科普知识等你来挑战……
- Perl中的执行上下文
- 泛泰A870(高通APQ8064t 600 cpu) Mokee4.4.2(Android4.4) 图赏
- 2020,咋赚钱?|【常垒·常识】
- 计算机用户名显示TEMP,Windows 下Temp帐号处理
- 红警2 技术篇 地图基础ini 教程
- 三星 GALAXY Note 4 柏林发布会
- VUE学习笔记------奕长苏
- android 10系统下载地址,Android 10正式版
- mac 卸载 redis
- 工程车辆监控管理系统方案
- 动态规划题目集合——贰
热门文章
- 计算机上什么键有存储,电脑保存的快捷键是什么_电脑知识
- 统计学的Python实现-019:任意正态分布计算概率
- RuoYi-Vue 若依 新增子module模块,子模块的接口报404,以及自定义包名后如何确保正确扫描?
- CSS3 的 calc()函数(为元素设置动态的属性值)【积累】
- Java实战项目-移动电商秒杀系统seckill优化
- 2021-2027全球与中国抽屉拉手市场情况与未来趋势研究报告
- 最大公约数,最小公倍数的求法
- 《Adobe Illustrator CS6中文版经典教程(彩色版)》—第0课0.4节应用颜色
- 智能家居项目方案介绍
- 如何修改织梦后台登陆界面