我正在为跳棋电脑游戏做最后一年的机器学习项目。
在这个游戏中,我自动化了一个玩家(随机移动),我希望第二个玩家学习随机性,并通过更多的游戏和试验变得聪明。
正如我所说,第一个玩家是自动化的,所以它工作得很好,但是说到第二个玩家,我对它的动作有些问题。
我正在使用目标函数作为
>
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
如何获取要移动的预测值?
如果你能为我的问题出一份力,并努力解决它,那将是一个很大的帮助。
我得到了答案。我的导师告诉我,我们必须找出给定动作中每个可能动作的目标函数(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次:在此处输入图像描述
这不是一个线性问题。尝试使用此资源,并告诉我它是否有帮助: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- 我卡住了!你知道为什么会这样吗?如果需要,我可以发布更多代码。