【强化学习】手把手教你实现游戏通关AI(2)——Q-Learning

系列文章目录

在本系列文章中笔者将手把手带领大家实现基于强化学习的通关类小游戏,笔者将考虑多种方案,让角色顺利通关。本文将讲述如何使用 Q-Learning算法实现AI通关。

完整代码已上传至github:https://github.com/TommyGong08/RL_shoot_game

【强化学习】手把手教你实现游戏通关AI(1)——游戏界面实现

【强化学习】手把手教你实现游戏通关AI(2)——Q-Learning

文章目录

Q-Learning算法

QL的思想是:为每个状态-动作对学习动作函数Q(s,a)
Q(s,a)的值是在状态s中执行动作a之后获得的累计返回值。agent直接从历史经验中学习,不需要完全了解环境模型。当agent做出决策时,只需要比较 s状态下每个动作对应的Q(s,a)值,就可以确定s状态下的最优策略,而 不考虑状态s的后续状态
Q_learning算法流程如图所示:

【强化学习】手把手教你实现游戏通关AI(2)——Q-Learning
在主函数中我们按照如下步骤进行:
  • 随机初始化Q表
  • 对于每一个游戏情节:
  • 从Q表中选择当前状态对应的action
  • 实施这个action(这时候物体已经移动到下一个状态s_了)
  • 对于状态s_,观察奖励reward
  • 更新Q表

即如下流程图所示:

【强化学习】手把手教你实现游戏通关AI(2)——Q-Learning

; 主程序


"""
游戏的主程序,调用q_learning和env
"""

from game import Mygame
from q_learning import QLearning
import pygame

def update():
    for episode in range(100):

        state = env.reset()
        print(state)

        step_count = 0

        while True:

            clock = pygame.time.Clock()
            clock.tick(10)

            action = RL.choose_action(str(state))

            state_, reward, done = env.step(action)

            step_count += 1

            RL.learn(str(state), action, reward, str(state_))

            state = state_
            env.person = state

            env.draw_map()

            if done:
                print("回合 {} 结束. 总步数 : {}\n".format(episode + 1, step_count))
                break

    print('游戏结束')
    pygame.quit()

if __name__ == "__main__":

    pygame.init()
    env = Mygame()
    RL = QLearning(actions=list(range(env.n_actions)))

    update()

    print('\nQ table:')
    print(RL.q_table)

Q-Learning代码

注:为了避免角色陷入局部解,我们在动作选择函数choose_action中采用Epsilon Greedy 贪婪方法。


"""
Q Learning Algorithm
"""

import numpy as np
import pandas as pd

class QLearning:
    def __init__(self, actions, learning_rate=0.01, discount_factor=0.9, e_greedy=0.1):
        self.actions = actions
        self.lr = learning_rate
        self.gamma = discount_factor
        self.epsilon = e_greedy
        self.q_table = pd.DataFrame(columns=self.actions, dtype=np.float32)

    def check_state_exist(self, state):
        if state not in self.q_table.index:

            self.q_table = self.q_table.append(
                pd.Series(
                    [0] * len(self.actions),
                    index=self.q_table.columns,
                    name=state,
                )
            )

    def choose_action(self, state):
        self.check_state_exist(state)

        if np.random.uniform() < self.epsilon:

            action = np.random.choice(self.actions)
        else:
            state_action = self.q_table.loc[state, :]

            state_action = state_action.reindex(np.random.permutation(state_action.index))
            action = state_action.idxmax()
        return action

    def learn(self, s, a, r, s_):
        self.check_state_exist(s_)

        q_predict = self.q_table.loc[s, a]

        if s_ != 'terminal':
            q_target = r + self.gamma * self.q_table.loc[s_, :].max()
        else:
            q_target = r

        self.q_table.loc[s, a] += self.lr * (q_target - q_predict)

效果展示

【强化学习】手把手教你实现游戏通关AI(2)——Q-Learning

; 总结

结合上一篇游戏界面制作,我们就介绍完了Q_learning算法制作通关类游戏AI的基本过程。将上一篇中的game.py以及本文中的main.py和q_learning.py相结合,能完整实现整个项目。各位读者可以实操一下,完整代码我已上传至github:https://github.com/TommyGong08/RL_shoot_game

下文我将带领大家用DQN算法是继续完善我们的小游戏。

参考资料

强化学习学习总结(二)——QLearning算法更新和思维决策

强化学习——从Q-Learning到DQN到底发生了什么?

Original: https://blog.csdn.net/weixin_43794327/article/details/119551338
Author: TommyGong08
Title: 【强化学习】手把手教你实现游戏通关AI(2)——Q-Learning

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/782699/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 博客系统之登录功能(前后端分离vue + flask)

    前期安装 vue cli安装 sudo npm install -g @vue/cli 运行: vue ui 会自动开启localhost:8000 页面 mysql安装(选做) …

    Python 2023年8月13日
    049
  • Pandas之十数据分类

    关注微信公众号:数据研发技术,点击菜单:PY宝典,查看往期精彩内容 Pandas中为数据分类的需求提供专门的类型 category,可以由多种方式创建,并结合dataframe或S…

    Python 2023年8月17日
    031
  • super()函数

    重写了父类方法后如果又要调用父类的方法怎么办呢? 还记得调用对象方法时可以通过类调用吗?看下面的案例: class A: def func(self): print(‘A’) cl…

    Python 2023年6月11日
    062
  • Sanic框架基础之解决CORS跨域

    在前后端分离的情况下,CORS是必然要解决的问题。那什么是CORS呢?CORS是跨域资源共享的英文单词缩写,CORS是浏览器的一种策略,出于安全原因,浏览器限制从脚本内发起的跨源H…

    Python 2023年6月12日
    0147
  • YOLOv3详解

    文章目录 前言 一、YOLOv3网络模型分析 * 1.Backbone: Darknet-53 2.FPN 3.Yolo Head 二、anchor网格偏移量预测 三、正负样本匹配…

    Python 2023年8月2日
    056
  • pandas——玩转数据分析

    panda第8讲——利用pandas计算平均值扩充数据表 import pandas as pd df=pd.read_excel(‘F:/桌面杂碎/output.xlsx’,sh…

    Python 2023年8月16日
    053
  • Javaweb-购物商城实现展示商品,实现购物车购物,结算(Servlet+mysql+jsp+tomcat)

    演示视频: 购物网站 代码: https://github.com/wu1369955/shopping 购物网站首页 首先说明:这个是花几天搭建出来玩的,从github上拉到找好…

    Python 2023年11月7日
    039
  • numpy 对二维数组的常用操作

    1、提取二维数组的某几列或某几行 2、获取某个范围的数据 3、所有元素求和 4、计算数组中非零元素的个数 5、使用布尔型掩码提取某些行或某些列 6、获取数组的行数或列数 7、获取最…

    Python 2023年8月26日
    040
  • anaconda安装其不提供的第三方库及其注意事项(jieba库为例)

    快速安装 快速安装anaconda navigator内不包含的第三方库(如pygame、imagehash、jieba等等) 部分参考网址:https://blog.csdn.n…

    Python 2023年9月19日
    049
  • 详细聊聊k8s deployment的滚动更新(二)

    一、知识准备 ● 本文详细探索deployment在滚动更新时候的行为● 相关的参数介绍:livenessProbe:存活性探测。判断pod是否已经停止readinessProbe…

    Python 2023年6月10日
    079
  • 看漫画漫画柜mhgui,Python爬虫之神奇的eval,附赠一个压缩模块

    @ ⛳️ 看漫画漫画柜 mhgui 实战分析 ⛳️ 看漫画漫画柜 mhgui 实战分析 本次爬虫采集的案例是漫画柜,该站点貌似本身就游走在法律的边缘。站点地址直接检索即可进入,在该…

    Python 2023年6月3日
    095
  • pygame 图形绘制方法

    图形绘制 向屏幕上绘制一些简单的图形,如直线、圆形、椭圆等任何一个图形绘制后,会返回一个矩形Rect类表示该形状 方法说明.rect()矩形.line()直线.polygon()多…

    Python 2023年9月24日
    035
  • 使用scrapy爬取新片场的数据

    爬取新片场的数据 一:https://www.xinpianchang.com/channel/index/sort-like?from=navigator视频id。、视频标题。、…

    Python 2023年10月3日
    051
  • 面向对象介绍

    1.什么是面向对象和面向过程编程思想 面向过程: 1.核心是’过程’二字2.过程的含义是将程序流程化3.过程是流水线,用来分步骤解决问题的 程序=数据+功能…

    Python 2023年11月1日
    036
  • 记住这些windows网络操作命令,轻松搞定自己的电脑网络!

    windows操作系统中的网络操作主要是网络的配置、网络连接的监听、网络的路由跟踪、DNS服务器解析等等。 【阅读全文】 针对上面的这几项操作,整理了关于windows网络操作相关…

    Python 2023年5月24日
    0101
  • python+pytest+selenium+allure实战

    selenium是一个针对web端项目的模拟鼠标和键盘操作的自动化测试工具,pytest是一个和unittest类似的自动化测试框架,但它比unittest更加方便,并且可以兼容u…

    Python 2023年9月9日
    063
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球