首页 > 编程语言 >【AI游戏】使用强化学习玩 Flappy Bird:从零实现 Q-Learning 算法(附完整资源)

【AI游戏】使用强化学习玩 Flappy Bird:从零实现 Q-Learning 算法(附完整资源)

时间:2025-01-12 22:58:31浏览次数:3  
标签:游戏 Flappy AI self 算法 Learning delta

1. 引言

Flappy Bird 是一款经典的休闲游戏,玩家需要控制小鸟穿过管道,避免碰撞。虽然游戏规则简单,但实现一个 AI 来自动玩 Flappy Bird 却是一个有趣的挑战。本文将介绍如何使用 Q-Learning 强化学习算法来训练一个 AI,使其能够自动玩 Flappy Bird。

我们将从游戏的基本框架开始,逐步实现 Q-Learning 算法,并最终训练出一个能够自动玩 Flappy Bird 的 AI。本文的代码基于 Python 和 Pygame,适合对强化学习和游戏开发感兴趣的读者。

完整资源:https://download.csdn.net/download/weixin_74773078/90246209


2. 项目结构

项目主要由以下几个部分组成:

  • cfg.py:配置文件,定义了游戏的参数、图片路径和音频路径。

  • flappybird.py:主程序,负责游戏的初始化、运行和强化学习算法的调用。

  • modules/:包含游戏中的精灵类(如小鸟、管道)和强化学习算法的实现。


3. 配置文件 cfg.py

cfg.py 是项目的配置文件,定义了游戏的基本参数和资源路径。以下是关键配置:

  • FPS:游戏的帧率,设置为 45。

  • 屏幕大小SCREENWIDTH 和 SCREENHEIGHT 分别设置为 288 和 512。

  • 图片路径:包括小鸟、管道、背景、数字等的图片路径。

  • 音频路径:包括小鸟飞行、碰撞、得分等音效。

    # FPS
    FPS = 45
    # 屏幕大小
    SCREENWIDTH = 288
    SCREENHEIGHT = 512
    # 管道之间的间隙
    PIPE_GAP_SIZE = 100
    # 游戏图片路径
    NUMBER_IMAGE_PATHS = {
        '0': os.path.join(os.getcwd(), 'resources/images/0.png'),
        '1': os.path.join(os.getcwd(), 'resources/images/1.png'),
        # 其他数字图片路径
    }

    4. 主程序 flappybird.py

    flappybird.py 是游戏的主程序,负责初始化游戏、加载资源、运行游戏循环以及调用强化学习算法。以下是关键部分:

    4.1 初始化游戏
  • 使用 Pygame 初始化游戏窗口和音频。

  • 加载游戏资源,包括小鸟、管道、背景等图片和音效。

    def initGame():
        pygame.init()
        pygame.mixer.init()
        screen = pygame.display.set_mode((cfg.SCREENWIDTH, cfg.SCREENHEIGHT))
        pygame.display.set_caption('Flappy Bird小游戏')
        return screen
    4.2 游戏主循环
  • 游戏主循环负责处理用户输入、更新游戏状态、绘制游戏画面。

  • 使用 Q-Learning 算法来决定小鸟的动作(是否跳跃)。

    while is_game_running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):
                if mode == 'train': agent.saveModel(modelpath)
                pygame.quit()
                sys.exit()
        
        # 使用强化学习算法玩游戏
        delta_x = 10000
        delta_y = 10000
        for pipe in pipe_sprites:
            if pipe.type_ == 'bottom' and (pipe.rect.left-bird.rect.left+30) > 0:
                if pipe.rect.right - bird.rect.left < delta_x:
                    delta_x = pipe.rect.left - bird.rect.left
                    delta_y = pipe.rect.top - bird.rect.top
        delta_x = int((delta_x + 60) / 5)
        delta_y = int((delta_y + 225) / 5)
        if agent.act(delta_x, delta_y, int(bird.speed+9)):
            bird.setFlapped()
            sounds['wing'].play()
    4.3 强化学习算法
  • 使用 Q-Learning 算法来训练 AI。Q-Learning 是一种基于值函数的强化学习算法,通过不断更新 Q 表来学习最优策略。

  • 在训练模式下,AI 会根据当前状态选择动作,并根据奖励更新 Q 表。

    agent = QLearningAgent(mode) if policy == 'plain' else QLearningGreedyAgent(mode)
    modelpath = 'checkpoints/qlearning_%s.pkl' % policy
    
    if os.path.isfile(modelpath):
        agent.loadModel(modelpath)

    5. 强化学习算法实现

    Q-Learning 是一种无模型的强化学习算法,通过不断更新 Q 值来学习最优策略。以下是 Q-Learning 的核心步骤:

  • 状态表示:状态由小鸟与最近管道的水平距离 delta_x 和垂直距离 delta_y 组成。

  • 动作选择:动作空间为 {跳跃, 不跳跃}

  • 奖励设计

    • 小鸟成功穿过管道:奖励 +5。

    • 小鸟碰撞管道或地面:奖励 -10。

    • 其他情况:奖励 +1。

  • Q 表更新:使用 Bellman 方程更新 Q 值。

    class QLearningAgent:
        def __init__(self, mode):
            self.mode = mode
            self.q_table = {}
            self.alpha = 0.1  # 学习率
            self.gamma = 0.9  # 折扣因子
            self.epsilon = 1.0  # 探索率
    
        def act(self, delta_x, delta_y, speed):
            state = (delta_x, delta_y, speed)
            if state not in self.q_table:
                self.q_table[state] = [0, 0]  # [不跳跃, 跳跃]
            
            if self.mode == 'train' and random.random() < self.epsilon:
                return random.choice([0, 1])  # 随机选择动作
            else:
                return np.argmax(self.q_table[state])  # 选择最优动作

    6. 训练与测试

  • 训练模式:在训练模式下,AI 会不断探索环境,更新 Q 表。训练完成后,Q 表会保存到文件中。

  • 测试模式:在测试模式下,AI 会加载训练好的 Q 表,并根据 Q 表选择最优动作。

    7. 总结

    通过本文,我们实现了一个基于 Q-Learning 的 Flappy Bird AI。Q-Learning 是一种简单但有效的强化学习算法,适合解决状态空间较小的问题。未来可以尝试使用更复杂的算法(如 DQN)来进一步提升 AI 的表现。

标签:游戏,Flappy,AI,self,算法,Learning,delta
From: https://blog.csdn.net/weixin_74773078/article/details/145044674

相关文章

  • Python在生成式AI驱动的电影特效中的作用
    文章目录引言一、生成式AI在电影特效中的应用1.1生成式AI简介1.2生成式AI在电影特效中的角色二、Python的优势及其在生成式AI中的应用2.1Python的生态系统2.2Python在生成式AI中的应用三、虚拟角色生成3.1虚拟角色生成的挑战3.2利用GAN生成虚拟角色四、场景重建......
  • 【AI中数学-线代-综合实例-包括python实现】 聚焦注意力:解析GPT等大模型中的注意力机
    第三章线性代数--综合实例第11节聚焦注意力:解析GPT等大模型中的注意力机制在人工智能的众多技术中,注意力机制(AttentionMechanism)无疑是推动大规模模型如GPT(GenerativePre-trainedTransformer)取得突破性进展的关键因素之一。本节将通过五个实际应用案例,深入解析注意力机......
  • containerd版本升级影响调查
    这边测试环境的containerd版本是1.5.7,生产环境的会是1.6.28,排查版本不同的影响。调研1.更新影响containerd版本1.5.7升级到1.6.28,是软件本身的优化和修复,对业务暂时没有排查到明显的影响。数据来源:https://github.com/containerd/containerd/releases/tag/v1.6.0https://g......
  • Python AI教程之十八:监督学习之决策树(9) 决策树模型中的过度拟合
    决策树模型中的过度拟合在机器学习中,决策树是一种常用的预测工具。然而,使用这些模型时遇到的一个常见问题是过度拟合。在这里,我们探讨决策树中的过度拟合以及应对这一挑战的方法。决策树为什么会出现过度拟合?决策树模型中的过度拟合是指决策树变得过于复杂,并捕获训练数......
  • AI项目依赖安全分析评估
    场景自动化漏洞检测与分析代码扫描与漏洞识别:AI可以快速扫描项目依赖的代码库,利用机器学习算法识别潜在的安全漏洞。通过对大量已知漏洞代码模式的学习,AI能够准确地检测出类似的安全问题,提高漏洞检测的效率和准确性。漏洞优先级排序:在检测到多个漏洞时,AI可以根据漏洞的严重程度、......
  • python语言daifanyedeshipin爬虫程序代码QZQ
    importrequestsimportosimportsubprocessurl=‘https://api.bilibili.com/x/space/wbi/arc/search?mid=3493140394674396&pn=1&ps=25&index=1&order=pubdate&order_avoided=true&platform=web&web_location=1550101&dm_img_list=[]&am......
  • JAVA之PAI&字符串
    1、API(ApplicationProgrammingInterface):应用程序编程接口JAVAAPI:指的是JDK中提供的各种功能的java类2、字符串String     1.java.long.String类代表字符串     2.字符串的内容是不会发生改变的,它的对象在创建后不能被更改     3.创建Str......
  • AI真的能理解我们这个现实物理世界吗?深度剖析原理、实证及未来走向
    摘要:当下,AI与深度学习广泛渗透生活各领域,大模型与海量数据加持下,其是否理解现实物理世界引发热议。文章开篇抛出疑问,随后深入介绍AI深度学习基础,包含神经网络架构、反向传播算法。继而列举AI在物理场景识别、实验数据分析中显露的“理解”迹象,也点明常识性错误、极......
  • 使用 smtp 结合 gpt 接口实现的AIGC邮件发送脚本
    一、引言在这个数字化信息爆炸的时代,自动化任务在提高效率和实现个性化服务方面发挥着至关重要的作用。本文将为你详细介绍一个利用GPT接口结合Python实现的邮件发送脚本,该脚本不仅能自动发送邮件,还能通过调用GPT接口生成独特的邮件内容,为你的信息传递带来更多创意和乐......
  • 人工智能(Artificial Intelligence)是什么?人工智能有什么好处?AI应用架构的关键组成?人工
    AI人工智能(ArtificialIntelligence)概念与历程了解人工智能向何处去,首先要知道人工智能从何处来。1956年夏,麦卡锡、明斯基等科学家在美国达特茅斯学院开会研讨“如何用机器模拟人的智能”,首次提出“人工智能(ArtificialIntelligence,简称AI)”这一概念,标志着人工智能学科的......