Pong既是电子游戏历史上的开山鼻祖之一也是现代强化学习Reinforcement Learning, RL和计算机视觉CV领域中最经典的基准测试环境Benchmark。无论是想用 C 练手面向对象编程、在 FPGA 上连 VGA 显示器手撕硬件还是刚开始用 PyTorch 训练 Policy Gradient策略梯度智能体Pong 都是绝佳的切入点。以下从游戏核心逻辑和AI 强化学习环境两个维度为你拆解 Pong。1. 极简极智Pong 的核心游戏逻辑从零实现一个 Pong 游戏比如用 C 结合 SDL/SFML 库或者用 Python 的 Pygame其底层架构本质上是一个确定性的2D 刚体碰撞物理引擎。它的核心状态机和运动公式只有以下三部分① 状态表示State整个游戏在二维平面坐标系下运行只需要维护极少量的变量球Ball位置(x,y)(x, y)(x,y)速度向量(vx,vy)(v_x, v_y)(vx,vy)。球拍Paddles左拍ylefty_{left}yleft右拍yrighty_{right}yright以及固定的长宽和xxx轴位置。② 碰撞与反弹公式Collision Reflection球在移动过程中每帧更新x←xvxx \leftarrow x v_xx←xvx,y←yvyy \leftarrow y v_yy←yvy。上下墙壁碰撞当球触及屏幕上边界或下边界时速度在yyy轴反向vy←−vyv_y \leftarrow -v_yvy←−vy球拍碰撞与角度修正当球的xxx坐标与球拍重合且yyy坐标在球拍范围内时vxv_xvx反向。为了让游戏更有可玩性通常会根据球击中球拍的位置来动态改变vyv_yvy即击中球拍边缘时反弹角度更刁钻vy←vyoffset×paddle_speedv_y \leftarrow v_y \text{offset} \times \text{paddle\_speed}vy←vyoffset×paddle_speed③ 胜负判定当球的xxx坐标越过左边界或右边界则对方得分球回到中心重新开球。2. 深度学习中的 Pong从像素到决策在 OpenAI Gym现为 Farama Foundation Gymnasium的 Atari 游戏环境中Pong-v4是用来检验强化学习算法如 DQN, PPO是否入门的标准试金石。AI 是如何玩 Pong 的与人类玩家直接看屏幕类似AI 模型的输入通常是原始的屏幕像素画面输入预处理State Representation原始的 Atari 屏幕是210×160210 \times 160210×160的 RGB 图像。为了减少计算量通常会将其裁剪为84×8484 \times 8484×84并转换为灰度图。关键技巧帧堆叠Frame Stacking。单张静态图片是无法看出球的运动方向和速度的。因此通常会将连续的 4 帧画面压在一起作为网络的输入这样 CNN卷积神经网络就能捕捉到速度和加速度信息。动作空间Action SpacePong 的动作空间极其精简通常只有 3 个有效动作NOOP不动、UP向上移动球拍、DOWN向下移动球拍。奖励机制Reward Signal赢下一球获得1。输掉一球获得-1。其余时间球在空中飞时奖励为0。一场比赛先到 21 分的一方获胜。为什么说它是经典的 BaselinePong 的状态空间比围棋或《星际争霸》简单得多且奖励相对密集相比于那些要走很久迷宫才能拿到奖励的游戏。一个设计良好的DQN深度Q网络或Policy Gradient策略梯度算法通常在消费级显卡上训练几个小时就能实现对内置 AIRule-based AI的 21:0 完美血洗。它是验证“端到端”输入像素直接输出控制指令控制算法是否写错 Bug 的最佳标尺。
Pong是什么
发布时间:2026/6/7 19:40:07
Pong既是电子游戏历史上的开山鼻祖之一也是现代强化学习Reinforcement Learning, RL和计算机视觉CV领域中最经典的基准测试环境Benchmark。无论是想用 C 练手面向对象编程、在 FPGA 上连 VGA 显示器手撕硬件还是刚开始用 PyTorch 训练 Policy Gradient策略梯度智能体Pong 都是绝佳的切入点。以下从游戏核心逻辑和AI 强化学习环境两个维度为你拆解 Pong。1. 极简极智Pong 的核心游戏逻辑从零实现一个 Pong 游戏比如用 C 结合 SDL/SFML 库或者用 Python 的 Pygame其底层架构本质上是一个确定性的2D 刚体碰撞物理引擎。它的核心状态机和运动公式只有以下三部分① 状态表示State整个游戏在二维平面坐标系下运行只需要维护极少量的变量球Ball位置(x,y)(x, y)(x,y)速度向量(vx,vy)(v_x, v_y)(vx,vy)。球拍Paddles左拍ylefty_{left}yleft右拍yrighty_{right}yright以及固定的长宽和xxx轴位置。② 碰撞与反弹公式Collision Reflection球在移动过程中每帧更新x←xvxx \leftarrow x v_xx←xvx,y←yvyy \leftarrow y v_yy←yvy。上下墙壁碰撞当球触及屏幕上边界或下边界时速度在yyy轴反向vy←−vyv_y \leftarrow -v_yvy←−vy球拍碰撞与角度修正当球的xxx坐标与球拍重合且yyy坐标在球拍范围内时vxv_xvx反向。为了让游戏更有可玩性通常会根据球击中球拍的位置来动态改变vyv_yvy即击中球拍边缘时反弹角度更刁钻vy←vyoffset×paddle_speedv_y \leftarrow v_y \text{offset} \times \text{paddle\_speed}vy←vyoffset×paddle_speed③ 胜负判定当球的xxx坐标越过左边界或右边界则对方得分球回到中心重新开球。2. 深度学习中的 Pong从像素到决策在 OpenAI Gym现为 Farama Foundation Gymnasium的 Atari 游戏环境中Pong-v4是用来检验强化学习算法如 DQN, PPO是否入门的标准试金石。AI 是如何玩 Pong 的与人类玩家直接看屏幕类似AI 模型的输入通常是原始的屏幕像素画面输入预处理State Representation原始的 Atari 屏幕是210×160210 \times 160210×160的 RGB 图像。为了减少计算量通常会将其裁剪为84×8484 \times 8484×84并转换为灰度图。关键技巧帧堆叠Frame Stacking。单张静态图片是无法看出球的运动方向和速度的。因此通常会将连续的 4 帧画面压在一起作为网络的输入这样 CNN卷积神经网络就能捕捉到速度和加速度信息。动作空间Action SpacePong 的动作空间极其精简通常只有 3 个有效动作NOOP不动、UP向上移动球拍、DOWN向下移动球拍。奖励机制Reward Signal赢下一球获得1。输掉一球获得-1。其余时间球在空中飞时奖励为0。一场比赛先到 21 分的一方获胜。为什么说它是经典的 BaselinePong 的状态空间比围棋或《星际争霸》简单得多且奖励相对密集相比于那些要走很久迷宫才能拿到奖励的游戏。一个设计良好的DQN深度Q网络或Policy Gradient策略梯度算法通常在消费级显卡上训练几个小时就能实现对内置 AIRule-based AI的 21:0 完美血洗。它是验证“端到端”输入像素直接输出控制指令控制算法是否写错 Bug 的最佳标尺。