问题标签 [othello]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
13714 浏览

algorithm - Othello Evaluation Function

I am currently developing a simple AI for Othello using minimax and alpha-beta pruning.

My question is related to the evaluation function for the state of the board.

I am currently looking to evaluate it by looking at:

  1. Disc count (parity)

  2. Number of legal moves

  3. Importance of particular positions

So lets say the root node is the initial game state. The first action is the the AI's action while the second action is the opponent's action.

At node level 1, do I evaluate the disc count of my AI's chips and the number of legal moves it can make at the point of time after it has completed an action?

At node level 2, do I evaluate the disc count of the opponent's chips and the number of legal moves it can make at the point of time after the opponent has completed an action?

Meaning AI move -> Opponent move ==> At this point of time I evaluate the opponent's disc count and the number of legal the opponent can make.

0 投票
1 回答
83 浏览

algorithm - 桌游AI的参数优化

我创建了一个可以玩黑白棋的小型 AI 程序。我使用的算法(MCTS UTC)有一个参数,我可以在其中调整探索与利用的比率。这是一个范围从 0 到 10 的单个浮点值(无穷大是可能的,但高值没有多大意义)

我可以很容易地让算法与这个参数的不同值对战。这会让我知道这两个值中的哪一个更好。

什么是优化这个参数的好算法?

(我更喜欢有一些研究或出版物的算法来深入了解它为什么或何时最有效。)

0 投票
2 回答
557 浏览

optimization - 用 alpha beta 剪枝理解 minimax

抱歉,图片来自我的笔记。

α

最后一天,我一直在阅读极小极大树和 alpha 数据修剪,并为我的项目做一些准备。这是 c 中奥赛罗的一个实现。

我已经阅读了大量关于它的资源,我知道它被问了很多。在我开始我的评估功能之前,我想完全理解这一点。

在所附图像中,我无法弄清楚该功能Min_Node(pos)Max_Node(pos)确切的功能,任何输入将不胜感激。

如果有人在实现这个和我对奥赛罗的评估功能时有任何提示或事情我应该注意,我愿意接受我能找到的任何帮助。

0 投票
0 回答
83 浏览

java - Minimax 只下降到最左边的叶子

所以我为我的奥赛罗游戏准备了一个小棋盘游戏。在这个游戏中,人工智能应该使用 Alpha Beta Prune 搜索算法来决定要移动什么。我使用了以下伪代码形式 geeksforgeeks:

这就是我实现它的方式:

由于我的棋盘很小(4x4),我已经能够在游戏开始前大约 20 秒计算出完整的搜索树。这应该会改善我的搜索,因为我在玩游戏时没有构建任何东西。我的树中的每个节点都包含一个 Board,它本身有一个 2D 单元格数组。根节点/板如下所示:

现在当我开始游戏时,这是起跑板,我叫 AI 采取行动。执行 minimax 调用后,它在深度 12 处返回值 2。深度 12 是我树中的叶节点/板。在使用调试器运行它之后,我的实现似乎没有遍历树。它所做的只是下到最左边的树并返回它的评估。

0 投票
1 回答
266 浏览

reinforcement-learning - 在强化学习中实现损失函数 (MSVE)

我正在尝试为奥赛罗建立一个时间差异学习代理。虽然我的其余实现似乎按预期运行,但我想知道用于训练我的网络的损失函数。在 Sutton 的《Reinforcement learning: An Introduction》一书中,Mean Squared Value Error(MSVE)被呈现为标准损失函数。它基本上是 Mean Square Error 乘以 on policy 分布。(Sum over all states s ( onPolicyDistribution(s ) * [V(s) - V'(s,w)]² ) )

我现在的问题是:当我的策略是学习价值函数的电子贪心函数时,我如何在策略分布上获得这个?如果我只使用 MSELoss 代替,它甚至有必要吗?有什么问题?

我在 pytorch 中实现了所有这些,所以在那里轻松实现的奖励积分:)

0 投票
1 回答
159 浏览

java - 在 JButton 上画一个椭圆

所以基本上我正在尝试创建一个黑白棋游戏。首先,我创建了一个由按钮填充的板,并为它们附加了 ID,因此我可以在需要时访问它们。现在我正在尝试在每个按钮上绘制一个游戏块,但是我无法获取按钮的 getGraphics(),因为我读到这是一个坏主意并且还返回 null。请记住,我希望将所有实体分开:板、单元和部件,因为我使用 MVC 模式开发它。

板子.java

细胞.java

磁盘.java

TL;DR我应该如何重写我的代码,以便每个按钮上都有一个椭圆形。

提前致谢。

0 投票
1 回答
281 浏览

python - Tensorflow 损失已经很低

我正在做一个带有强化学习的 AI,我得到了奇怪的结果,损失显示如下:Tensorflow loss: https://imgur.com/a/Twacm

在训练的同时,在每场比赛之后,它都会与一名随机球员比赛,并在一名具有加权矩阵的球员之后进行比赛,但它会上下波动:结果:https ://imgur.com/a/iGuu2

基本上我正在做一个强化学习代理来学习玩奥赛罗。在 Tensorflow 上使用 Keras 使用 E-greedy、体验回放和深度网络。尝试了不同的架构,如 sigmoid、relu 和上图中的 tanh。他们都有类似的损失,但结果有点不同。在此示例中,代理正在从 100k 专业游戏中学习。这是架构,默认学习率为 0.005:

原始代码:https ://github.com/JordiMD92/thellia/tree/keras

那么,为什么我会得到这些结果?现在我的输入是 64 个神经元(8*8 矩阵),有 0 个空方格、1 个黑色方格和 -1 个白色方格。使用负输入不好吗?

0 投票
1 回答
1915 浏览

java - 如何在 JavaFx 中动态删除节点

我试着让如果再次按下开始按钮,那么船上的所有石头都会被擦除并开始新的游戏。作为第一步,我尝试擦除一个基本的石头,但我无法删除板上的任何石头。我应该怎么做才能解决这个问题?

0 投票
2 回答
689 浏览

java - 如何检查二维数组的相邻索引 - 奥赛罗

为了清楚起见,在寻求帮助之前,我已经在 Stack Overflow 和其他网站上查看了与此类似的问题。我还包括了下面的所有代码,以防万一它可以帮助任何人理解问题。

在游戏奥赛罗,也称为黑白棋,有两个玩家使用相反颜色的瓷砖。玩家需要放置一块瓷砖,使其与相反颜色的瓷砖相邻,并且相反颜色的瓷砖必须被同一方向两侧的瓷砖包围。例如,如果黑色瓷砖的左侧有一块白色瓷砖,则需要在白色瓷砖的左侧放置另一个黑色瓷砖,以便将其包围。如果一块瓷砖被包围,它会翻转。

(黑 - 白 - 黑)--> (黑 - 黑 - 黑)

环绕可以水平、对角或垂直发生。

我遇到的问题是我不知道如何检查所有索引并查看它们是否立即起作用。我尝试通过检查其旁边的所有可能值来检查与相反颜色的图块相邻的值。这不能正常工作,因为它不能确保一个瓷砖被两边包围或应用于一行多于一个瓷砖的行。

以上是我遇到问题的两种方法。

0 投票
1 回答
56 浏览

python - 索引错误:“越界”python Othello

即使我认为我已经确保它不会发送任何超出范围的内容,我的索引错误也会超出范围。我添加了一个打印功能,但它没有打印出 4,因为错误正在抱怨..所以不知道在这里做什么。我的代码中显然还有许多其他缺陷,但这是我现在正在处理的缺陷——在从 move_left 调用的函数 validMove 中。

这是我的代码:

This is the error I´m getting: