代码之家  ›  专栏  ›  技术社区  ›  aimkeys mwaura

动态行动空间的强化学习

  •  0
  • aimkeys mwaura  · 技术社区  · 2 年前

    我希望开发一个RL代理来玩我的双人纸牌游戏。为了训练这个代理,我有一个节点套接字服务器,它运行游戏逻辑,其中两个玩家(代理)可以连接并相互对抗。服务器接收移动并保留状态。

    环境

    游戏开始时给每位玩家发四张牌和一张先发牌。根据游戏规则,玩家可能会将一组牌丢到废牌堆中,也可能会从封闭的牌组中挑选一张牌。此外,有些牌可能会迫使对手采取特殊行动,例如挑选三张牌。游戏的目标是把所有的牌都丢到废牌堆里,最后丢一张获胜的牌。

    env空间:

    • agent_hand
    • 顶部卡片(_C)
    • 卡片数量
    • player_turn

    由于这是一个54张牌的游戏,我将手牌和最上面的牌热编码为(1*54)张量,并将它们堆叠起来。

    动作空间

    游戏服务器为玩家生成所有可能的动作,考虑到玩家的手牌、最上面的牌和对手的任何特殊动作。代理的可用操作数量各不相同,因此很难获得稳定的输出。此外,每个州的这种行为总是不同的。我该如何解决这个问题?

    我试图将可能的操作空间限制为每个状态最多32个操作,如下所示:

       def network(self):
            self.f1 = nn.Linear(880, self.first_layer)
            self.f2 = nn.Linear(self.first_layer, self.second_layer)
            self.f3 = nn.Linear(self.second_layer, self.third_layer)
            self.f4 = nn.Linear(self.third_layer, 32)
    

    我遇到了一些问题,因为行为本身是不同的。

    0 回复  |  直到 2 年前