【问题标题】:Applying Machine learning with checkers game在跳棋游戏中应用机器学习
【发布时间】:2017-10-24 03:30:09
【问题描述】:

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

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

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

我正在使用目标函数作为

  1. v(b) = w0+w1x1+w2x2+w3x3+w4x4+w5x5+w6x6

    在哪里 x1=白块数 x2=黑色块数 x3=白王数量 x4=黑王数量 x5=受到威胁的白棋数量 x6=受到威胁的黑色棋子数

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

  2. 现在,如果我采用初始棋盘状态并随机放置权重。 通过放置随机权重 (12,-15,6,19,-5,3) 我们得到 v(b) = -36 和最初一样 x1= 12 x2= 12 x3= 0 x4= 0 x5= 0 x6= 0

    所以 v(b) = -36

  3. 但是 -36 并没有给我一个有效的位置来移动和进一步学习。

如何得到要移动的预测值?

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

【问题讨论】:

  • 请不要大喊大叫。
  • 你的成本函数是多少?

标签: python machine-learning alpha-beta-pruning


【解决方案1】:

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

【讨论】:

【解决方案2】:

我得到了答案。我的导师告诉我,我们必须找出给定动作期间每个可能动作的目标函数(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”。

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

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

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

感谢大家这么快回复。

下面显示的是每场比赛后w0到w6的所有值,同时让它玩了10次:enter image description here

【讨论】:

    猜你喜欢
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-28
    • 2016-05-09
    • 1970-01-01
    相关资源
    最近更新 更多