我正在为跳棋计算机游戏进行机器学习的最后一年项目。
在这个游戏中,我已经自动化一个玩家(随机移动),我希望第二个玩家学习随机性 通过更多游戏和试验变得聪明。
正如我所说,第一个玩家是自动化的,所以它工作得很好,但谈到第二个玩家,我的动作有一些问题。
我正在使用目标函数
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
如何获得要移动的预测值?
如果你能为我的问题做出贡献并努力解决它,那将是一个很大的帮助。
答案 0 :(得分:0)
这不是一个线性问题。尝试使用此资源,让我知道它是否有帮助: https://kartikkukreja.wordpress.com/2015/07/12/creating-a-bot-for-checkers/
答案 1 :(得分:0)
我得到了答案。我的导师告诉我,我们必须在给定的运动中找出每个可能的移动的目标函数(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次:enter image description here