用强化学习做井字棋

井字棋,英文名叫Tic-Tac-Toe,是一种在3*3格子上进行的连珠游戏,和五子棋类似,由于棋盘一般不画边框,格线排成井字故得名。游戏需要的工具仅为纸和笔,然后由分别代表O和X的两个游戏者轮流在格子里留下标记(一般来说先手者为X),任意三个标记形成一条直线,则为获胜

用强化学习做井字棋_第1张图片

井字棋强化学习导论内容请移步:http://blog.csdn.net/ilypl/article/details/78923820

我们先理一下脉络,机器学习一贯流程都是,先训练,然后测试模型效果,若测试效果过关就可以跑模型了。

我们先看训练函数:

def train(epochs=20000):
    player1 = Player()#实例化玩家一
    player2 = Player()#实例化玩家二
    judger = Judger(player1, player2)#判断玩家一和玩家二胜负
    player1Win = 0.0#玩家一胜利场数
    player2Win = 0.0#玩家二胜利场数
    #epochs为训练次数
    for i in range(0, epochs):
        print("训练代数", i)
        winner = judger.play()
        if winner == 1:
            player1Win += 1
        if winner == -1:
            player2Win += 1
        judger.reset()#一盘对决结束就重置游戏
    print(player1Win / epochs)#玩家一胜率
    print(player2Win / epochs)#玩家二胜率
    player1.savePolicy()#保存策略
    player2.savePolicy()
程序跑下来,玩家一的胜率为0.2244,玩家二的胜率为0.2465
Player类和Judger类我们在后面再实现它

训练完模型后那么就该测试模型的效果

测试函数:

def compete(turns=500):
    player1 = Player(exploreRate=0)#没有探索率
    player2 = Player(exploreRate=0)
    judger = Judger(player1, player2, False)
    player1.loadPolicy()#加载训练模型
    player2.loadPolicy()
    player1Win = 0.0#玩家一胜利场数
    player2Win = 0.0
    #tuens为测试回合数
    for i in range(0, turns):
        print("Epoch", i)
        winner = judger.play()
        if winner == 1:
            player1Win += 1
        if winner == -1:
            player2Win += 1
        judger.reset()
    print(player1Win / turns)#玩家一胜率
    print(player2Win / turns)

测试结果为玩家一和玩家二的胜率都为0,说明500场测试中玩家一和玩家二都为打平,说明测试成功。

最后就可以跑模型了:

def play():
    while True:
        player1 = Player(exploreRate=0)
        player2 = HumanPlayer()#人类控制的玩家
        judger = Judger(player1, player2, False)
        player1.loadPolicy()
        winner = judger.play(True)
        if winner == player2.symbol:
            print("赢!")
        elif winner == player1.symbol:
            print("失败!")
        else:
            print("平!")

用强化学习做井字棋_第2张图片
代码地址:https://gitee.com/CCHChenChangHong/QiangHuaXueXi

日常深推公众号:

用强化学习做井字棋_第3张图片

你可能感兴趣的:(强化学习导论)