pysc2 地图系统详解:Map 配置类、Mini-Game、Ladder 与 Melee 三类地图的定义与使用
发布时间:2026/9/25 5:28:43来源:尧图网络
人工智能强化学习【免费下载链接】pysc2StarCraft II Learning Environment项目地址https://gitcode.com/gh_mirrors/py/pysc2点击查看免费下载本文基于 pysc2 仓库中的 maps 文档 及配套源码讲解 SC2 地图在 pysc2 中的组织方式SC2Map文件与 Python 地图配置的分工、Map基类的全部配置项、地图的自动注册与maps.get()查找机制以及 Mini-Game、Ladder、Melee 三类地图的实现细节。读完后你可以直接按类名选取内置地图、为自己的实验创建自定义地图配置并理解score_index、game_steps_per_episode、step_mul等参数如何被环境实际消费。1. 两层结构SC2Map 文件与地图配置SC2 游戏本身使用.SC2Map文件即仓库中pysc2/maps/mini_games/目录下可见的BuildMarines.SC2Map等文件但同一个地图文件可以配合不同的运行参数使用。pysc2 的做法是在地图文件之上再加一层“地图配置”map config由 Python 类定义SC2Map文件地图本体由游戏引擎加载决定地形、初始单位等地图配置Map子类定义该地图的 episode 时长、支持玩家数、评分方式、步数压缩比等运行行为。文档原文指出创建自己的地图配置只需继承Map基类并覆写若干设置其中最关键的是定义地图文件的目录与文件名任何Map子类只要在某处被 import就会被自动注册。2.Map基类完整配置项一览地图基类定义在 pysc2/maps/lib.py其类属性即全部可配置项默认值如下属性默认值含义据源码注释directory地图文件所在目录filenameNone地图文件名可省略.SC2Map后缀downloadNone地图缺失时的下载地址提示game_steps_per_episode0每 episode 的游戏步数上限独立于step_mul0表示不限制step_mul8agent 每步对应多少游戏步score_index-1使用哪个分数-1表示胜负奖励win/loss reward0表示取score_cumulative数组下标score_multiplier1分数乘数用于放大/缩小或翻转小分值playersNone该地图支持的最大玩家数battle_netNone该地图在 Battle.net 上的名称若存在path属性pysc2/maps/lib.py把directory、filename拼接成完整地图路径并自动补上.SC2Map扩展名。data()方法pysc2/maps/lib.py则通过run_config.map_data(path, players)读取地图二进制数据从 pysc2/run_configs/lib.py 可以看到map_data会在data_dir/Maps/下查找地图若指定了players还会优先尝试查找带(N)前缀命名的玩家变体地图文件不存在时若配置了download日志会给出下载地址提示。自定义地图注册机制与示例lib模块的 docstringpysc2/maps/lib.py给出了标准写法from pysc2.maps import lib class NewMap(lib.Map): prefix map_dir filename map_name players 3注册完全依赖 Python 的子类枚举Map.all_subclasses()pysc2/maps/lib.py递归遍历所有子类get_maps()pysc2/maps/lib.py收集其中定义了filename或battle_net的类以类名为键建立{map_name: map_class}字典重复类名会抛出DuplicateMapErrorget(map_name)pysc2/maps/lib.py按名实例化地图不存在时抛出NoMapError。有两点实现细节值得注意列表不能在模块顶层缓存。get_maps()的注释说明它刻意放在函数内部调用以避免“地图模块在本模块之后才被导入”的问题——因此自定义地图类只要在进程任何位置被 import 即可生效可以构建类继承层次来减少重复配置例如Ladder是所有天梯地图的公共父类见下文。pysc2/maps/init.py 统一导入了ladder、melee、mini_games三个地图模块并暴露get lib.get、get_maps lib.get_maps所以用户只需from pysc2 import maps然后maps.get(MapName)。仓库中大量脚本正是这么用的例如 pysc2/bin/agent.py、pysc2/bin/play.py 中的map_inst maps.get(FLAGS.map)另有 pysc2/bin/map_list.py 遍历maps.get_maps()打印全部已注册地图可用于验证当前环境下可用地图清单。3. DeepMind Mini-Games单人、定长、可评分文档说明Mini-games 是 DeepMind 制作的地图设计目标是单人single-player、固定时长fixed length并且每张图刻意考察游戏的不同侧面它们暴露 score/reward 让 agent 知道自己表现如何且该分数应当能区分差 agent如随机策略和好 agent。对应实现见 pysc2/maps/mini_games.pyclass MiniGame(lib.Map): directory mini_games download https://github.com/deepmind/pysc2#get-the-maps players 1 score_index 0 game_steps_per_episode 0 step_mul 8 mini_games [ BuildMarines, # 900s CollectMineralsAndGas, # 420s CollectMineralShards, # 120s DefeatRoaches, # 120s DefeatZerglingsAndBanelings, # 120s FindAndDefeatZerglings, # 180s MoveToBeacon, # 120s ] for name in mini_games: globals()[name] type(name, (MiniGame,), dict(filenamename))几个要点players 1、score_index 0单人地图分数取score_cumulative下标 0课程分数这与 pysc2/env/sc2_env.py 中_get_score(agent_obs, score_index)的取分逻辑对应score_index 0时读agent_obs[score_cumulative][score_index]见 pysc2/env/sc2_env.py注释里的秒数是各地图的时长参考BuildMarines900s、CollectMineralsAndGas420s、CollectMineralShards/DefeatRoaches/DefeatZerglingsAndBanelings/MoveToBeacon120s、FindAndDefeatZerglings180s地图文件实际打包在仓库中见 pysc2/maps/mini_games/ 目录如BuildMarines.SC2Map、MoveToBeacon.SC2Map等 7 个文件因此这类地图开箱即用每个地图的详细规则初始状态、奖励、结束条件、迷雾设置等在 docs/mini_games.md 中有完整说明例如MoveToBeacon中 Marine 到达 Beacon 得 1 且 Beacon 会瞬移到随机位置FindAndDefeatZerglings是集合中唯一启用战争迷雾且需要移动相机的地图。4. Ladder 地图Battle.net 天梯图文档说明Ladder 地图是 Battle.net 人类玩家打天梯的地图同一时间只有少数几张活跃每几个月新赛季会带来一组新图。地图名后缀含义LELadder Edition社区地图经暴雪修改 bug 后放入天梯池的版本TETournament Edition曾在锦标赛中使用的版本。它们都是多人地图且时限较长。实现见 pysc2/maps/ladder.py。父类设定了所有天梯图的公共参数pysc2/maps/ladder.pyclass Ladder(lib.Map): players 2 game_steps_per_episode 16 * 60 * 30 # 30 分钟上限 download https://github.com/Blizzard/s2client-proto#map-packs即16 * 60 * 30 28800游戏步对应 30 分钟SC2 默认每秒 16 游戏步。仓库覆盖的赛季为Ladder2017Season1至Ladder2019Season3共 11 个pysc2/maps/ladder.py每个赛季也是一个动态生成的Map子类directory指向赛季目录如Ladder2018Season2。具体地图通过元编程批量生成ladder_maps列表pysc2/maps/ladder.py约 47 张图每项为(所属赛季, battle.net 图名, 玩家数)如(Ladder2018Season2, 16-Bit LE, 2)、(Ladder2017Season1, Cactus Valley LE, 4)少数为 4 人图。随后在模块作用域中动态建类pysc2/maps/ladder.pyfor parent, bnet, players in ladder_maps: name re.sub(r[ -]|[LTRS]E$, , bnet) # 类名去空格/连字符/LE、TE 后缀 map_file re.sub(r[ ], , bnet) # 文件名去空格/单引号 globals()[name] type(name, (parent,), dict( filenamemap_file, playersplayers, battle_netbnet))从源码结构看类名会去掉 LE/TE 后缀正则[LTRS]E$同时兼容 LE、TE、SE 等结尾因此maps.get(Sequencer)即可创建Sequencer LE2017Season2而battle_net字段保留了完整天梯图名供需要按 Battle.net 名称定位地图的场景使用。另外注意.SC2Map文件不包含在本仓库中缺失时需按download提示从 s2client-proto 的 map-packs 获取。5. Melee 地图为机器学习专门制作文档说明Melee 地图是专门面向机器学习的地图格式类似天梯图但通常更小、也不保证适合高水平对战的平衡性分两个系列Flat 系列地形无任何特殊结构鼓励简单直接的进攻数字表示地图大小如Flat64即 64x64Simple 系列更接近正常天梯图有分矿、坡道和进攻路线但尺寸小于常规天梯图数字同样表示地图大小。实现见 pysc2/maps/melee.pyclass Melee(lib.Map): directory Melee download https://github.com/Blizzard/s2client-proto#map-packs players 2 game_steps_per_episode 16 * 60 * 30 # 30 分钟上限 melee_maps [ # Empty128, # Not really playable, but may be useful in the future. Flat32, Flat48, Flat64, Flat96, Flat128, Simple64, Simple96, Simple128, ]与 Ladder 相同的 30 分钟 episode 上限、2 人模式同样通过动态建类注册为Flat32、Simple96等 8 个地图类被注释掉的Empty128说明它是“尚不可玩、留作未来用途”的空图。这些地图常用于 PPO 等算法的两局对战训练win/loss 奖励对应score_index -1的默认值。6. 地图配置如何被环境消费三类地图最终都通过同一套机制进入训练/推理环境。pysc2/env/sc2_env.py 在构造时接收可选的game_steps_per_episode、score_index、score_multiplier覆盖参数解析优先级为显式传入 地图配置pysc2/env/sc2_env.py 用get_default(显式值, map_inst.对应属性)完成合并。取分逻辑在 pysc2/env/sc2_env.pyscore_index 0时从各 agent 观测的score_cumulative取课程分数作为 reward 来源再乘以score_multiplierscore_index -1时则使用胜负奖励。这意味着Mini-Game 地图默认给出可量化的课程分数适合模仿学习/RL 训练Ladder 与 Melee 地图默认给出胜负信号适合对抗训练而step_mul 8的默认值使 agent 决策频率为每秒 2 次16 游戏步/秒 ÷ 8可通过环境参数或地图子类覆写。7. 小结按任务类型选图与验证路径需求地图类代表地图关键配置地图文件来源单人定长、有课程分数MiniGamemini_games.pyMoveToBeacon、BuildMarinesplayers1、score_index0仓库内置pysc2/maps/mini_games/天梯对战、30 分钟长局Ladderladder.pySequencer、Cactus Valleyplayers2/4、28800 步上限需按download获取强化学习对战训练Meleemelee.pyFlat64、Simple96players2、28800 步上限需按download获取自定义地图时只需继承Map覆写directory/filename等属性并保证模块被 import即可被maps.get(类名)检索到运行前可用 pysc2/bin/map_list.py 列出全部已注册地图及其实例化摘要__str__会打印文件路径、玩家数、score_index、step_mul等见 pysc2/maps/lib.py再结合 docs/mini_games.md 的规则说明即可快速确认所选地图是否符合实验需求。赞分享人工智能强化学习【免费下载链接】pysc2StarCraft II Learning Environment项目地址https://gitcode.com/gh_mirrors/py/pysc2点击查看免费下载相关推荐Flet Map StrokePattern 类型详解为地图折线与多边形定制实线、虚线与点线描边Flet Map StrokePattern 类型详解为地图折线与多边形定制实线、虚线与点线描边 导读 flet_map.StrokePattern 是 Fl前端跨平台桌面应用移动开发Granite-34B-Code-Base-8K训练数据详解116种编程语言的数据集构建Granite 34B Code Base 8K训练数据详解116种编程语言的数据集构建 想要构建一个强大的代码生成AI模型吗Granite 34B Codkepler.gl 自定义地图样式Custom Map Style实战脱离 Mapbox 使用第三方底图服务kepler.gl 自定义地图样式Custom Map Style实战脱离 Mapbox 使用第三方底图服务 导读 kepler.gl 默认依赖 Mapb数据可视化数据分析上一篇Snowy-Cloud微服务快速开发平台技术文档下一篇热门项目推荐unibest - 让跨端开发更高效创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网