【零基础强化学习】 基于tkinter搭建gridworld强化学习环境


更多代码Gitee主页:https://gitee.com/GZHzzz
博客主页CSDN:https://blog.csdn.net/gzhzzaa

写在前面

show me code, no bb

"""
Reinforcement learning maze example.
Red rectangle:          explorer.
Black rectangles:       hells       [reward = -1].
Yellow bin circle:      paradise    [reward = +1].
All other states:       ground      [reward = 0].
"""
import numpy as np
import pandas as pd
import numpy as np
import time
import sys
import tkinter as tk
 
UNIT = 40   # pixels   像素
MAZE_H = 10  # grid height
MAZE_W = 10  # grid width
 
class Maze(tk.Tk, object):
    def __init__(self):
        super(Maze, self).__init__()
        self.action_space = ['u', 'd', 'l', 'r']                #行为
        self.n_actions = len(self.action_space)                  #行为数
        self.title('maze')
        self.geometry('{0}x{1}'.format(MAZE_H * UNIT, MAZE_H * UNIT))
        self._build_maze()
 
    def _build_maze(self):
        self.canvas = tk.Canvas(self, bg='white',
                           height=MAZE_H * UNIT,
                           width=MAZE_W * UNIT)
 
        # create grids
        for c in range(0, MAZE_W * UNIT, UNIT):
            x0, y0, x1, y1 = c, 0, c, MAZE_W * UNIT
            self.canvas.create_line(x0, y0, x1, y1)   #画一条从(x0,y0)到(x1,y1)的线
        for r in range(0, MAZE_H * UNIT, UNIT):
            x0, y0, x1, y1 = 0, r, MAZE_H * UNIT, r
            self.canvas.create_line(x0, y0, x1, y1)
 
        # create origin
        origin = np.array([20, 20])
 
        # hell            #画第黑色正方形
        x = [
        1, 8, 5, 9, 2, 4, 3, 9, 8, 7, 5, 3, 1, 0, 4, 5,7, 9, 1,7,4,6,6,8]
        y = [
        2, 2, 9, 3, 0, 6, 0, 9, 0, 4, 4, 4, 9, 4 , 1, 2,4, 3, 6,7,8,0,6,5]
        self.res = []
        for i in range(24):
            oval_center= origin+np.array([x[i]*UNIT,y[i]*UNIT])
            self.rec = self.canvas.create_rectangle(
            oval_center[0] - 15, oval_center[1] - 15,
            oval_center[0] + 15, oval_center[1] + 15,
            fill='black')
            self.res.append(self.canvas.coords(self.rec))




        # create oval     #画黄色
        oval_center = origin + UNIT * 8
        self.oval = self.canvas.create_oval(
            oval_center[0] - 15, oval_center[1] - 15,
            oval_center[0] + 15, oval_center[1] + 15,
            fill='yellow')
 
        # create red rect   #画红色的正方形
        self.rect = self.canvas.create_rectangle(
            origin[0] - 15, origin[1] - 15,
            origin[0] + 15, origin[1] + 15,
            fill='red')
        # pack all
        self.canvas.pack()
 
    def reset(self):
        # self.update()
        # time.sleep(0.1)
        self.canvas.delete(self.rect)
        origin = np.array([20, 20])
        self.rect = self.canvas.create_rectangle(
            origin[0] - 15, origin[1] - 15,
            origin[0] + 15, origin[1] + 15,
            fill='red')
        # return observation
        return self.canvas.coords(self.rect)
 
    def step(self, action):
        s = self.canvas.coords(self.rect)
        base_action = np.array([0, 0])
        reward = 0
        done = False
        if action == 0:   # up
            if s[1] > UNIT:
                base_action[1] -= UNIT    #减40
            else:
                reward = -5
        elif action == 1:   # down
            if s[1] < (MAZE_H - 1) * UNIT:
                base_action[1] += UNIT     #加40
            else:
                reward = -5
        elif action == 2:   # right
            if s[0] < (MAZE_W - 1) * UNIT:
                base_action[0] += UNIT    #右移40
            else:
                reward = -5
        elif action == 3:   # left
            if s[0] > UNIT:               #左移40
                base_action[0] -= UNIT
            else:
                reward = -5
        self.canvas.move(self.rect, base_action[0], base_action[1])  # move agent
 
        s_ = self.canvas.coords(self.rect)  # next state
        # reward function
        if s_ == self.canvas.coords(self.oval):
            reward = 100
            done = True
            # s_ = 'terminal'
        if s_ in self.res:
            reward = -5
            
            self.canvas.move(self.rect, -base_action[0], -base_action[1])  # move agent
            s_ = self.canvas.coords(self.rect)  # next state
            
            # s_ = 'terminal'
        
        return s_, reward, done
 
    def render(self):
        time.sleep(0.1)
        # time.sleep(10)
        self.update()
 
if __name__ == "__main__":
    env = Maze()
    while True:
            # fresh env
        env.render()
    env.render()
  

    

  • 代码全部亲自跑过,你懂的!😝

结果展示

  • reward与状态转移可以由任务自适应改变

在这里插入图片描述

写在最后

十年磨剑,与君共勉!
更多代码Gitee主页:https://gitee.com/GZHzzz
博客主页CSDN:https://blog.csdn.net/gzhzzaa

  • Fighting!😎

基于pytorch的经典模型基于pytorch的典型智能体模型
强化学习经典论文强化学习经典论文
在这里插入图片描述

while True:
	Go life

在这里插入图片描述

谢谢点赞交流!(❁´◡`❁)

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
基于深度强化学习的轨迹跟踪是一种利用深度强化学习算法来实现目标物体在运动过程中的准确跟踪的技术。在这种方法中,通过将图像作为输入,使用深度神经网络来学习目标物体的运动模式和位置信息,然后根据当前图像来预测目标物体的下一个位置。 具体实现过程中,可以利用OpenCV算法对图像进行处理和分析,提取出目标物体的特征。然后,使用深度强化学习算法,例如深度Q网络(DQN)或者策略梯度方法,来训练一个模型来学习目标物体的运动模式。这个模型可以根据当前图像来预测目标物体的下一个位置。 在基于深度强化学习的轨迹跟踪中,可以使用Python标准GUI库Tkinter来实现图形用户界面功能,方便用户进行交互和控制。此外,还可以针对个人信息部分,调用智能识别API对学院、姓名进行手写文字识别,对班级、学号进行数字识别,以便更好地对目标物体进行跟踪和标识。 总之,基于深度强化学习的轨迹跟踪是一种结合了图像处理、深度学习和智能识别技术的方法,可以实现对目标物体在运动过程中的准确跟踪。这种方法在许多领域,如自动驾驶、机器人导航和无人机跟踪等方面具有广泛的应用前景。<span class="em">1</span> #### 引用[.reference_title] - *1* [基于Python+OpenCV智能答题卡识别系统-深度学习和图像识别算法应用(含Python全部工程源码)+训练与测试数据...](https://download.csdn.net/download/qq_31136513/88280326)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北郭zz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值