首页
/ 深入解析DouZero斗地主AI中的神经网络模型设计

深入解析DouZero斗地主AI中的神经网络模型设计

2025-07-08 07:42:50作者:卓艾滢Kingsley

模型架构概述

DouZero项目中的神经网络模型采用了LSTM与多层感知机(MLP)相结合的架构,专门为斗地主游戏设计。该模型包含三个主要角色:地主(landlord)和两个农民(landlord_up和landlord_down),每个角色都有独立的模型结构,但农民模型结构相同。

核心模型类解析

LandlordLstmModel(地主模型)

地主模型是专门为地主角色设计的神经网络,主要结构包括:

  1. LSTM层:输入维度162,隐藏层维度128,用于处理序列信息
  2. 全连接层:6层512维的MLP,每层后接ReLU激活函数
  3. 输入处理:将LSTM输出(128维)与原始特征(373维)拼接,形成501维的输入
class LandlordLstmModel(nn.Module):
    def __init__(self):
        super().__init__()
        self.lstm = nn.LSTM(162, 128, batch_first=True)
        self.dense1 = nn.Linear(373 + 128, 512)
        # ... 其他dense层

FarmerLstmModel(农民模型)

农民模型结构与地主模型类似,但输入维度有所不同:

  1. LSTM层:同样162输入,128隐藏层
  2. 全连接层:6层512维MLP
  3. 输入处理:LSTM输出(128维)与更大维度的原始特征(484维)拼接,形成612维输入
class FarmerLstmModel(nn.Module):
    def __init__(self):
        super().__init__()
        self.lstm = nn.LSTM(162, 128, batch_first=True)
        self.dense1 = nn.Linear(484 + 128, 512)
        # ... 其他dense层

模型统一接口类

Model类提供了三个模型的统一接口,主要功能包括:

  1. 模型初始化:根据设备(CPU/GPU)初始化三个模型
  2. 前向传播:根据角色(position)选择对应模型进行前向计算
  3. 模型管理:共享内存、切换评估模式、获取参数等
class Model:
    def __init__(self, device=0):
        self.models = {}
        # 初始化三个模型并移动到指定设备
        self.models['landlord'] = LandlordLstmModel().to(torch.device(device))
        self.models['landlord_up'] = FarmerLstmModel().to(torch.device(device))
        self.models['landlord_down'] = FarmerLstmModel().to(torch.device(device))

关键技术点解析

1. 输入特征处理

模型接收两种输入:

  • z:162维的序列数据,由LSTM处理
  • x:静态特征(地主373维,农民484维)

两者在LSTM处理后拼接,形成完整的输入特征。这种设计可以同时捕捉序列信息和静态特征。

2. 探索与利用平衡

在前向传播时,模型支持ε-greedy策略,通过flags.exp_epsilon控制探索概率:

if flags is not None and flags.exp_epsilon > 0 and np.random.rand() < flags.exp_epsilon:
    action = torch.randint(x.shape[0], (1,))[0]  # 随机探索
else:
    action = torch.argmax(x,dim=0)[0]  # 利用最优动作

3. 深度网络设计

两个模型都采用了6层512维的全连接网络,这种深度设计能够学习复杂的非线性关系,适合斗地主这种策略复杂的游戏。

模型应用场景

  1. 训练阶段:使用return_value=True获取所有动作的价值估计
  2. 评估/测试阶段:使用return_value=False直接输出最优动作或随机探索动作
  3. 多设备支持:可通过device参数指定CPU或GPU运行

设计优势分析

  1. 角色专用模型:地主和农民采用不同模型,可以更好地学习各自策略
  2. 序列+静态特征:LSTM处理序列信息,MLP处理静态特征,全面捕捉游戏状态
  3. 统一接口:Model类封装了三个模型,便于管理和使用
  4. 灵活的运行模式:支持训练和评估两种模式,并内置探索机制

总结

DouZero的模型设计充分考虑了斗地主游戏的特性,通过LSTM与深度MLP的结合,能够有效处理游戏中的序列决策问题。地主与农民模型的差异化设计,以及统一的接口封装,使得整个系统既灵活又高效。这种设计思路对于类似的非完美信息策略游戏AI开发具有很好的参考价值。