强化学习需要模拟现实的环境,后面几章回以格子世界来作为我们的模拟环境。我们首先创建一个格子世界。
创建窗口
首先咱们先用pygame创建一个窗口,这个窗口作为后续所有环境的父类,最核心的目的就是创建一个窗口
import pygame
import random
import sys
pygame.init()
class BaseEnv:
def __init__(self, WIDTH=800, HEIGHT=600, desc='env'):
random.seed(12345)
fonts = pygame.font.get_fonts()
self.font = pygame.font.SysFont(fonts, 12)
pygame.display.set_caption(desc)
self.screen = pygame.display.set_mode((WIDTH,HEIGHT)) # 创建窗口
self.clock = pygame.time.Clock() # 设置定时器,刷新频率
self.WIDTH = WIDTH
self.HEIGHT = HEIGHT
def render(self, fps=30, *args, **kwargs):
for event in pygame.event.get(): # 遍历事件
if event.type == pygame.QUIT: # 退出事件
sys.exit()
self.screen.fill((255,255,255)) # 填充为白色
pygame.display.update()
self.clock.tick(fps) # 设置刷新频率
def close(self):
pygame.quit()
if __name__ == '__main__':
env = BaseEnv()
while True:
env.render()
env.close()
绘制网格线
from base_env import BaseEnv
import pygame
import sys
pygame.init()
class GridEnv(BaseEnv):
def __init__(self, WIDTH=800, HEIGHT=600, desc='GridEnv', nrows=5, ncols=5):
super(GridEnv, self).__init__(WIDTH, HEIGHT, desc)
self.nrows = nrows # 定义格子的数量
self.ncols = ncols
self.dw = self.WIDTH // self.nrows # 计算每个格子的宽度
self.dh = self.HEIGHT // self.ncols # 每个格子的高度
def draw_b