# PythonGo **Repository Path**: tank2140896/PythonGo ## Basic Information - **Project Name**: PythonGo - **Description**: Python、围棋、深度学习、蒙特卡洛树搜索 - **Primary Language**: Python - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: https://gitee.com/tank2140896/PythonGo - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2023-01-06 - **Last Updated**: 2024-06-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: Python, 围棋, 深度学习, 蒙特卡洛树搜索 ## README # Python围棋深度学习 源代码参考:https://github.com/maxpumperla/deep_learning_and_the_game_of_go 谷歌论文解读参考:https://blog.csdn.net/weixin_36474809/article/details/86172679 # 简要说明 一、棋盘绘制采用的是turtle,因为要获取所有要提子的点位坐标(如果有),逻辑上多了些处理,如果不绘制棋盘,只输出落子的坐标,可以提高点执行速度。画图时time.sleep(1)需要要加上,不然可能由于画图速度跟不上下棋速度而导致棋面错乱不对 二、采用turtle时,draw.draw_board(finish=True)即turtle.done()会终止一切行为,因此一定要放在所有逻辑最后,编码时要注意!!!这个坑踩了我一下午的时间。。。 三、目前可以基于基础规则进行随机落子和蒙特卡洛树搜索,但是执行速度还有较多优化空间 1、目前完整一轮9 * 9规格的棋盘的随机模拟对局(去除棋盘绘制、sleep休眠等待、print输出),大约平均耗时0.04秒(单机约400秒才能完成1万次模拟),如果是19 * 19规格的棋盘的模拟对局,平均时间需要0.85秒。当然,还受机器性能等影响 2、导致速度慢的主要原因包括:多条机器人基础规则的逻辑处理、合并棋链的逻辑(同时包括黑旗和白旗)处理、面向对象编程时对象拷贝带来的性能消耗、随着探索次数的增加而导致的越来越庞大的蒙特卡洛搜素树等 四、目前提供了两种机器人落子策略(依然很简陋,机器人依然很笨。。。),参见:go/core/strategy.py 1、随机落子:bot_move_random 2、蒙特卡洛树搜索:bot_move_mcts 五、其它 Python:非常适合数据挖掘、AI 编程、统计程序、研究项目、网站、小型粘合程序和学习如何编程 C:是编写小型、嵌入式、安全关键和高性能程序的最佳语言 C++:是在满足对C语言的需求上,用来编写大型软件系统的最佳选择 Java:是最适合业务应用程序的后端和为 Android 编写应用程序