machine-learning - 如何制作一个自我提升的井字游戏(10x10 棋盘)游戏
问题描述
我制作了一个井字游戏(10x10 棋盘大小)机器人。它比普通人玩得更好。
电路板尺寸为 10x10 而不是 3x3。必须放置连续 5 个 O 或 X 才能获胜,而不是 3。
因此,我使用 Minimax + Board Evaluation Function + Limited Available Moves 制作了该机器人以提高性能。
让我解释一下我的代码。
首先,我单独使用了 Minimax 算法,但我意识到了这一点。第一步后大约有 100 种可能的状态,第二步后有 100*99,第三步后有 100*99*98。
而且可能无法计算所有可能的董事会状态。
所以,我所做的是创建了一个董事会评估功能。
我为棋盘评估功能设置了一些规则,无论Bot玩多少游戏都是一样的。
但我想制作一个板评估功能,它可以自我改进或给我一些数据,我可以用它来改进它。我想不出井字游戏的任何方法,你们可以吗?
谢谢
解决方案
这样做的一种方法是生成有关船上状态的统计数据。创建一个具有有效棋盘状态的 1:1 棋盘散列函数,并填充所采取的动作字典。记录每个棋盘状态下每个动作的赢/输,并根据给定选项的赢率对移动选择应用权重。
这是内存密集型的,但您可以通过使用在板旋转和镜像上不变的散列将其提高 8 倍(通常,您可以散列当前状态的所有 8 个旋转和翻转,并始终返回最小值,例如; 可能有一个不那么蛮力的选项。)
另一个改进是不记录在预测窗口中保证赢/输的任何游戏的移动,尽管这是一个较小的百分比改进。
推荐阅读
- sql - 团队成员多次被召回的返回日期
- python - 在 Python 中,更改 csv 文件中的列类型
- android - 如何使用 Retrofit 进行同步调用
- c# - 如何在 Xamarin Forms 中将参数从一个页面传递到另一个页面?以及如何绑定视图(页面)及其 ViewModel 并初始化 ViewModel 对象?
- python - 为什么我当前版本的 Python 和我的 PATH 之间存在差异?
- node.js - 当找不到我的 python 安装时,如何使 npm install 工作?
- tkinter - python tkinter ScrolledText 文本出现并被推送
- c++ - 为什么 2 个 double 值之间的差值计算错误?
- python - 以有效的方式从 Django 的表单中获取值
- python - python 用 sort() 替换使用 lambda 键的排序