前11章的代码链接为:https://github.com/Teacher-Guo/RL_code
后2章的代码链接为:https://github.com/junxiaosong/AlphaZero_Gomoku
pygame在强化学习中主要用来构建原理模型,让学习效果能够清楚的展示在研究者面前,下面简要介绍pygame用法:
从pygame最小开发框架可以知道,pygame的用法主要分两大部分:
第一部分:引入相关的库(如pygame和sys),并且对你的展示模型画面做一些初始化定义。比如:我要展示的图画多大,背景啥颜色,然后我要在哪里画图片(一切你能看到的东西)。一句话总结就是你把你最原始的样子先在第一部分给老子画出来,然后我再去想办法改变,然后一次次改变后的效果就叠加成动画了。这样你也就知道了强化学习学习的动态效果了。(一次动画的改变一般对应智能体采取一次动作后的效果)
第二部分:这部分就是当你智能体做出动作的时候你你该如何根据智能体的动作进行画面的重新排布。(就是获取事件并且逐类响应),最后为了让你变化后的样子能够让人看到你就进行一次屏幕刷新。周而复始就成了动画图
def render(self): if self.viewer is None: pygame.init() #画一个窗口 self.viewer=pygame.display.set_mode(self.screen_size,0,32) pygame.display.set_caption("yuanyang") #下载图片 self.bird_male = load_bird_male() self.bird_female = load_bird_female() self.background = load_background() self.obstacle = load_obstacle() # self.viewer.blit(self.bird_male, self.bird_male_init_position) #在幕布上画图片 self.viewer.blit(self.bird_female, self.bird_female_init_position) # pygame.display.update() self.viewer.blit(self.background, (0, 0)) # pygame.display.update() self.font = pygame.font.SysFont('times', 15) self.viewer.blit(self.background,(0,0)) # pygame.display.update() #画直线 for i in range(11): pygame.draw.lines(self.viewer, (255, 255, 255), True, ((120*i, 0), (120*i, 900)), 1) pygame.draw.lines(self.viewer, (255, 255, 255), True, ((0, 90* i), (1200, 90 * i)), 1) self.viewer.blit(self.bird_female, self.bird_female_init_position) #画障碍物 for i in range(8): self.viewer.blit(self.obstacle, (self.obstacle1_x[i], self.obstacle1_y[i])) self.viewer.blit(self.obstacle, (self.obstacle2_x[i], self.obstacle2_y[i])) #画小鸟 self.viewer.blit(self.bird_male, self.bird_male_position) # 画值函数 for i in range(10): for j in range(10): surface = self.font.render(str(round(float(self.value[i, j]), 5)), True,(0, 0, 0)) self.viewer.blit(surface, (120 * i + 5, 90 * j + 70)) # 画路径点 for i in range(len(self.path)): rec_position = self.state_to_position(self.path[i]) pygame.draw.rect(self.viewer, [255, 0, 0], [rec_position[0], rec_position[1], 120, 90], 3) surface = self.font.render(str(i), True, (255, 0, 0)) self.viewer.blit(surface, (rec_position[0] + 5, rec_position[1] + 5)) pygame.display.update() self.gameover() # time.sleep(1) self.FPSCLOCK.tick(15)
直接写上这玩意,谁还不初始化呢
碰到display,系统就会给你显示东西,你断电调试会发现出来一个size大小的黑框框。
又有display呀,说明他又显示东西了,仔细一看左上角出现了title字符串
self.bird_male = load_bird_male()-----这一系列东西就是一个图片
这里需要注意的是你看不到有个图像到另外一个图像上去了,因为没有display。
ATTENTION:
你对图像帧做的改变只有运行display后才会显示