庙算兵棋推演AI开发初探(1-调用结构)

慈云数据 12个月前 (03-24) 技术支持 72 0

先放上几个网站……不然到时候不知道从哪找

庙算的门户: 

庙算 (ia.ac.cn)icon-default.png?t=N7T8http://wargame.ia.ac.cn/main图灵网:

人机对抗首页 (ia.ac.cn)icon-default.png?t=N7T8http://turingai.ia.ac.cn/


下载完社区开发版、用Python可以运行之后,开始思考怎么写AI。

这是徐师兄写的帮助文档:

《庙算 陆战指挥官》兵棋推演平台AI开发指南 (yuque.com)

AI开发需要自行编写名为Agent的类,继承BaseAgent类并重载一些方法:

    • setup
    • step
    • reset

    这些方法均来自BaseAgent类

    一、外部对AI(重写的agent类)的调用

    AI控制种类分为单agent模式,多agent模式;本篇先研究一下单agent模式。

    整体流程

    图引用自上面链接中的《平台AI开发指南》

    run_offline_games.py 中

    找到main函数

    重写了【注释】来说明一下内容

    def main():
        run_in_single_agent_mode()
        # run_in_multi_agents_mode()
    def run_in_single_agent_mode():
        """
        单 agent 模式
        """
        print("running in single agent mode...")
        # instantiate agents and env
        red1 = Agent()
        blue1 = Agent()
        env1 = TrainEnv()
        begin = time.time()
        # 读取地图、想定等数据【之后字典赋值的都是来源于这里】
        。。。。。。
        # 回放数据初始化。它是一个空列表,用于存储游戏过程中的环境状态。
        all_states = []
        # 玩家数据初始化(包含两个字典的列表)
        player_info = [。。。。。。
        # 交互环境初始化(一个字典)
        env_step_info = {。。。。。。
        # 传入刚定义的字典,把GREEN的状态添加到回访数据列表中
        state = env1.setup(env_step_info)
        all_states.append(state[GREEN])
        print("Environment is ready.")
        # 双方Agent类初始化(把自己的属性字典赋值进去)
        red1.setup(
            {。。。。。。
        )
        blue1.setup(
            {。。。。。。
        )
        print("agents are ready.")
        # 主循环
        print("steping")
        done = False
        while not done:
            actions = []
            actions += red1.step(state[RED])
            actions += blue1.step(state[BLUE])
            state, done = env1.step(actions)
            all_states.append(state[GREEN])
        #打扫清理
        env1.reset()
        red1.reset()
        blue1.reset()
        
        print(f"Total time: {time.time() - begin:.3f}s")
        # 保存回放资料
        。。。。。。

    碎碎念:这里总喜欢用setup()做初始化函数的命名……我比较喜欢用Init()来命名……

    二、Agent类解读

    0.行为定义

    agent.py文件中的ActionType类定义了都有哪些行为

    class ActionType:
        (
            Move,
            Shoot,
            GetOn,
            GetOff,
            Occupy,
            ChangeState,
            RemoveKeep,
            JMPlan,
            GuideShoot,
            StopMove,
            WeaponLock,
            WeaponUnFold,
            CancelJMPlan,
            Fork,
            Union,
            ChangeAltitude,
            ActivateRadar,
            EnterFort,
            ExitFort,
            LayMine,
        ) = range(1, 21)

    1.setup函数

    用于初始化(我看待时候竟然习惯于找头文件……不得不说还是python更方便)

    2.step函数

    在step中开发者需要体现AI的策略。step函数传入的参数是对局的态势信息,输出的则是AI的动作列表。因为AI所作出的一切动作都必须要通过step函数来返回,所以开发者需要在step函数中完成接受态势以及生成动作的功能。态势数据和动作参数的具体格式及含义见4.1 态势数据说明以及4.2 动作示例及参数说明。

    【这部分下一篇细说】

    3.reset函数

    在一场对局结束后,AI需要调用reset清空AI在对局中调用的数据、模型、资源等。为避免对接下来的对局过程中AI的决策产生意外的影响。

微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon