当前位置: 首页 > 知识库问答 >
问题:

机器学习在跳棋游戏中的应用

慕璞
2023-03-14

我正在为跳棋电脑游戏做最后一年的机器学习项目。

在这个游戏中,我自动化了一个玩家(随机移动),我希望第二个玩家学习随机性,并通过更多的游戏和试验变得聪明。

正如我所说,第一个玩家是自动化的,所以它工作得很好,但是说到第二个玩家,我对它的动作有些问题。

我正在使用目标函数作为

>

  • v(b)=w0 w1x1 w2x2 w3x3 w4x4 w5x5 w6x6

    其中x1=白色碎片数量x2=黑色碎片数量x3=白色国王数量x4=黑色国王数量x5=受到威胁的白色碎片数量x6=受威胁的黑色碎片数量

    w0至w6是要由算法学习的权重。

    如果我取初始棋盘状态,随机放置权重。通过放置随机权重(12,-15,6,19,-5,3),我们得到v(b) = -36,因为最初x1= 12 x2= 12 x3= 0 x4= 0 x5= 0 x6= 0

    所以v(b) = -36

    如何获取要移动的预测值?

    如果你能为我的问题出一份力,并努力解决它,那将是一个很大的帮助。

  • 共有2个答案

    卫振
    2023-03-14

    我得到了答案。我的导师告诉我,我们必须找出给定动作中每个可能动作的目标函数(v(b)),并将它们进行比较……无论哪一个是最大值,我们都会继续进行该动作,并相应地更新权重值。例如,这是第一次转弯时的情况:

    + - + - + - + - + - + - + - + - +
    |   |w32|   |w31|   |w30|   |w29|
    + - + - + - + - + - + - + - + - +
    |w28|   |w27|   |w26|   |w25|   |
    + - + - + - + - + - + - + - + - +
    |   |w24|   |w23|   |w22|   |w21|
    + - + - + - + - + - + - + - + - +
    | 20|   | 19|   | 18|   | 17|   |
    + - + - + - + - + - + - + - + - +
    |   | 16|   | 15|   | 14|   | 13|
    + - + - + - + - + - + - + - + - +
    |b12|   |b11|   |b10|   |b9 |   |
    + - + - + - + - + - + - + - + - +
    |   |b8 |   |b7 |   |b6 |   |b5 |
    + - + - + - + - + - + - + - + - +
    |b4 |   |b3 |   |b2 |   |b1 |   |
    + - + - + - + - + - + - + - + - +
    

    我们的是黑边:转1

    这些是此运动中可用的可能动作:

    Move 0: 9 to 13
    Move 1: 10 to 14
    Move 2: 11 to 15
    Move 3: 12 to 16
    Move 4: 9 to 14
    Move 5: 10 to 15
    Move 6: 11 to 16
    

    所以我们做了一个移动数和它们各自的v(b)的字典:

    sample_dict = {0: 15.944312287271288, 1: 6.444167413927058, 2: 17.771995708404148, 3: 8.847647756243374, 4: 9.420835807993932, 5: 13.057118996697053,6: 18.71362388578158}
    

    在这种情况下,您的系统将根据最大值v(b)移动,即移动[6]。

    所以采取的动作是“移动6:11到16”。

    这就是系统将学习如何采取更好的行动的方式。

    对于两个初始转弯,我们将在0和1之间取w0到w6的随机值。但在第二次移动后,我们将定期更新w0到w6的值,因为那时我们将有vtrain(b)和v(b)。

    最后一件事是,在任何给定的移动中,每次移动计算的所有v(b)将彼此相差两个值,即x5和x6。所以小心点。

    感谢大家如此迅速地回复。

    下面显示的是每次游戏后w0到w6的所有值,同时使其播放10次:在此处输入图像描述

    周翼
    2023-03-14

    这不是一个线性问题。尝试使用此资源,并告诉我它是否有帮助:https://kartikkukreja.wordpress.com/2015/07/12/creating-a-bot-for-checkers/

     类似资料:
    • 嗨,我正在尝试构建一个跳棋游戏,但在计算如何用单个棋子填充2D阵列游戏板时遇到了问题。任何帮助都将不胜感激。 我有两个独立的类RedPiece和BlackPiece来实现接口块。在额外的类板中,我试图将块放在一边,但我遇到了一个问题,在构建新板时找不到可变块: 这是我到目前为止为SetBoard()所做的: 有什么想法吗?谢谢。

    • 错误消息: 我正在尝试用java构建一个跳棋游戏(目前在控制台中)。我有6门课: > 板:显示并跟踪板。它是一个名为mySquare的Square对象的2d数组。 CheckerMobile:包含来自X、fromY、toX、toY和布尔isAJump的变量。在Play中,我创建了一个CheckerMobile对象数组来找出哪些移动是有效的。 单件:单个棋盘格件。每个玩家都有一个由12件物品组成的数

    • 我问这个问题的动机是,我发现了一个在图数据集上使用机器学习的有趣问题。有关于这个主题的论文。例如,“从有向图上的标记和未标记数据中学习”(周,黄,斯科普夫)。然而,我没有人工智能或机器学习的背景,所以在从事任何科学工作之前,我想为更普通的观众写一个更小的程序。 几年前,我写了一款名为Solumns的游戏。它是经典世嘉游戏《柱子》的邪恶变体。受巴斯特的启发,它暴力地选择对玩家不利的颜色组合。这很难。

    • 我想问在棋盘游戏中使用标准的具有TD学习方法的反向传播神经网络是否有意义? 我的方法看起来像: > < li >玩一局。Net同时扮演着贪婪策略和随机移动的角色。 < li> 对于每个存储的游戏位置(从终端1开始并移动到开始位置),计算估计位置值和期望位置值,例如 利用标准反向传播算法,从整个游戏结束训练中为网络创建训练模式,每个模式具有1个时期的小学习率。 在我的井字游戏中,我尝试了以上的一些组

    • 1.transformer结构 2.不用专业知识和数学知识解释CNN 3.如何把图片分割成目标数目不确定的多个子图 4.在UI特别复杂的游戏场景中,如何在数据进入RL之前把游戏场景中的agent信息提取出来 一面过 周四二面

    • 我正在为一项任务做一个跳棋游戏。除了一件奇怪的事之外,整个事情都在按它应该的方式运行。这是我的黑板: 我通过给出源行和列,然后是目标行和列来移动。 如果我试图将一个工件移动到无效的位置(不是对角线),我应该打印出一个错误。所以如果我试着从5.2- 对于大多数情况,它都可以工作,但如果我尝试直接向下移动一个空间(例如,2 3- 我卡住了!你知道为什么会这样吗?如果需要,我可以发布更多代码。