【Python】强化学习SARSA走迷宫

news/2024/6/20 17:12:26

之前有实现Q-Learning走迷宫,本篇实现SARSA走迷宫。

Q-Learning是一种off-policy算法,当前步采取的决策action不直接作用于环境生成下一次state,而是选择最优的奖励来更新Q表。

更新公式:

SARSA是一种on-policy算法,当前步采取的策略action既直接作用于环境生成新的state,也用来更新Q表。

更新公式:

其中s是当前状态,a是当前动作,s’是下次状态,a'是下次动作。

代码如下:

import numpy as np
import random
import matplotlib.pyplot as plt
from PIL import Image
import imageio
import ioH = 30
W = 40start = (0, random.randint(0, H-1))
goal = (W-1, random.randint(0, H-1))img = Image.new('RGB', (W, H), (255, 255, 255))
pixels = img.load()maze = np.zeros((W, H))
for h in range(H):for w in range(W):if random.random() < 0.1:maze[w, h] = -1actions_num = 4
actions = [0, 1, 2, 3]
q_table = np.zeros((W, H, actions_num))
rate = 0.5
factor = 0.9
images = []for i in range(2000):state = startpath = [start]action = np.random.choice(actions)while(True):next_state = None                       #执行该动作if action == 0 and state[0] > 0:next_state = (state[0]-1, state[1])elif action == 1 and state[0] < W-1:next_state = (state[0]+1, state[1])elif action == 2 and state[1] > 0:next_state = (state[0], state[1]-1)elif action == 3 and state[1] < H-1:next_state = (state[0], state[1]+1)else:next_state = stateif next_state == goal:                  #得到reward,到目标给大正反馈reward = 100elif maze[next_state] == -1:reward = -100                       #遇见障碍物给大负反馈else:reward = -1                         #走一步给小负反馈,走的步数越小,负反馈越小
       done = (next_state == goal)  if np.random.rand() < 1.0/(i+1):              #随机或者下一个状态最大q值对应的动作next_action = np.random.choice(actions)else:next_action = np.argmax(q_table[next_state])current_q = q_table[state][action]      #根据公式更新qtableq_table[state][action] += rate * (reward + factor * q_table[next_state][next_action]  - current_q) state = next_stateaction = next_actionpath.append(state)if done: breakif i % 10 == 0:                            #每10次看结果for h in range(H):for w in range(W):if maze[w,h]==-1:pixels[w, h] = (0, 0, 0)else:pixels[w, h] = (255, 255, 255)for x, y in path:pixels[x, y] = (0, 0, 255)pixels[start] = (255, 0, 0)pixels[goal] = (0, 255, 0)plt.clf()                           # 清除当前图形
        plt.imshow(img)plt.pause(0.1)                      # 暂停0.1秒,显示动态效果
buf = io.BytesIO()plt.savefig(buf, format='png')      # 保存图像到内存中buf.seek(0)                         # 将文件指针移动到文件开头images.append(imageio.imread(buf))  # 从内存中读取图像并添加到列表中

plt.show()
imageio.mimsave('result.gif', images, fps=3)  # 保存为 GIF 图像,帧率为3

效果似乎没有Q-Learning好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hjln.cn/news/33543.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

编译mmdetection3d时,无root权限下为虚拟环境单独创建CUDA版本

在跑一些深度学习代码的时候,如果需要使用mmdetection3d框架,下载的pytorch的cudatoolkit最好需要和本机的cuda版本是一样的,即输入nvcc -V命令后显示的版本一样。 但是如果是在学校里,一般是服务器管理员装的cuda驱动是啥版本,cudatoolkit就是啥版本,且非root用户改变不…

前端传递不同格式时间后端统一转化

这几天遇到了一个问题,就是我后端再接受查询条件的时候,关于条件我都是用 TimeQuery 来接受的,但是因为前端的比较混乱,就导致了有些传参是年月日,有些传参是年月日时分秒格式,就导致我后端一直出转化异常的错误,当时就是叫前端传参都用下统一的格式 package com.state.…

XYCTF2024

XYCTF2024 warm up 又是md5 源码 <?php include next.php; highlight_file(__FILE__); $XYCTF = "Warm up"; extract($_GET);if (isset($_GET[val1]) && isset($_GET[val2]) && $_GET[val1] != $_GET[val2] && md5($_GET[val1]) == md5(…

一文彻底整明白,基于Ollama工具的LLM大语言模型Web可视化对话机器人部署指南

在上一篇博文中,我们在本地部署了**Llama 3 8B**参数大模型,并用 Python 写了一个控制台对话客户端,基本能愉快的与 Llama 大模型对话聊天了。但控制台总归太技术化,体验不是很友好,我们希望能有个类似 ChatGPT 那样的 Web 聊天对话界面,本博文就安排起来……在上一篇博文…

常见Windows图标和缩略图问题的解决方法 steam图标变白、变地球

常见Windows图标和缩略图问题的解决方法 steam图标变白、变地球原文地址:https://itxiaozhang.com/common-windows-icon-thumbnail-issues-solutions/ 此教程配合视频学习效果最佳,视频教程在文章末尾。Windows桌面图标问题指南 在使用Windows操作系统时,我们经常会遇到各种…

使用GET方法访问网站

使用GET方法访问网站 服务器接收get参数 server.pyimport flask app = flask.Flask(__name__) @app.route(/) def index():province = flask.request.args.get(province)city = flask.request.args.get(city)print(province, city)return province+","+citydebug=Tru…

m基于BP译码算法的LDPC编译码matlab误码率仿真,对比不同的码长

1.算法仿真效果 matlab2022a仿真结果如下:2.算法涉及理论知识概要低密度奇偶校验码(Low-Density Parity-Check, LDPC)是一种高效的前向纠错码,因其优越的纠错性能和近似香农限的接近程度而广泛应用于现代通信系统中。LDPC码的编译码算法众多,其中Belief Propagation(BP)…

免费解锁Windows 11的HEVC支持:轻松播放4K电影的详细步骤

Windows 11的HEVC支持Windows 11 安装完成后,用电影和电视这个应用打开4K或者8K的MP4文件时,提示缺少解码器 以下就是本人解决过程 第一步:查找HEVC扩展的Microsoft Store页面 (本人直接浏览器打开:https://apps.microsoft.com/,搜索HEVC扩展,得到以下页面)复制地址栏的…