junxiaosong / AlphaZero_Gomoku

An implementation of the AlphaZero algorithm for Gomoku (also called Gobang or Five in a Row)
MIT License
3.25k stars 965 forks source link

关于写禁手的疑问 #75

Open tristantian opened 5 years ago

tristantian commented 5 years ago

我想增加禁手规则,但是我无法根据board.current_players判断谁是先手。我自己增加了标志,但是在start_self_play中失效了。看代码,我怎么觉得在start_self_play中永远都是p1先手?想问一下

junxiaosong commented 5 years ago

因为self-play是一个MCTS同时下双方,所以默认一直是p1先下。如果要判断当前play的是先手还是后手,可以根据board.state里元素个数的奇偶性判断,目前board.current_state函数里是这么处理的;另外如果想设置先手player编号的话,也是可以在board.init-board里设置的,可以参考start_play函数

tristantian commented 5 years ago

谢谢回答。另外我想问一个白痴的问题,我在训练中模型和pure_MCTS对比达到了“win :10 lose 0”的状态,但训练的结果还是很差(和我自己下,他不会拦,每次都我赢)。这个情况让我很意外,我不知道是我的禁手出了问题(训练出来模型的一直在诱导对方下禁手?所以才win:10)还是这种情况本来就有可能发生呢。

junxiaosong commented 5 years ago

对阵使用多少次playout的pure_MCTS达到了10:0呢?如果playout次数很少的话,pure_MCTS本来就是很弱的,另外目前的pure_MCTS实现的时候是没有考虑禁手的

tristantian commented 5 years ago

次数的话大约6、7百次。pure_MCTS本来就很弱呀,那我再继续训练试试。

cxgreat2014 commented 5 years ago

新年快乐~@junxiaosong 如果想要增加禁手规则大概需要改哪些文件呢?

人工智能来玩五子棋,若无禁手规则。。感觉总缺了那么一块,毕竟有先手必胜,/无奈,有空还是加上吧。。