赞
踩
目录
Wumpus世界是由多个房间组成并相连接起来的山洞;
生活在该环境的唯一希望是发现一堆金子。
带着金子爬出洞口+1000;掉入无底洞或被Wumpus吃掉-1000;采取一个行动-1;用掉箭-10;Agent死亡或Agent出洞,游戏结束。
4*4的房间网格。Agent从(1,1)出发,面向右方。金子和Wumpus、无底洞随机选择在除了起始方格的任一方格;
Agent可以向前、左转、右转。可以捡起所处方格内的物体;可以向正对方向射箭;箭向前运动直到击中Wumpus;Agent只能从(1,1)中爬出。
有5个传感器[臭气,微风,金光,撞击,嚎叫]
离散的、静态的、单个Agent、部分可观察的
需要找出无底洞和Wumpus,需要推理
可以参考:
pytorch | 1.13.0 | |
pygame | 2.1.2 | |
numpy | 1.18.5 |
World.py包含房间的各种操作,其中无底洞、黄金、怪兽位置随机生成且不在入口处;
Env.py(调用World.py)为游戏的整体架构,包含各种游戏操作函数。
强化学习DQN算法奖励机制设计:
采取一个行动 | -1 | |
带着金子爬出洞口 | +1000 | |
掉入无底洞、Wumpus吃掉 | -1000 | |
射箭 | -10 |
注:为了节省计算资源,加快训练速度,不将图片输入到网络,只将位置信息(hero、PIT、GOLD、WUMPUS),即输入层共(1+PIT_COUNT +GOLD_COUNT+ WUMPUS_COUNT)神经元
向上箭头:向上移动 W:向上射箭
向下箭头:向下移动 S:向下射箭
向左箭头:向左移动 A:向左射箭
向右箭头:向右移动 D:向右射箭
点击洞穴(0,0)位置退出洞穴
怪兽、金堆等游戏元素的可视化图片。它包含了加载图片、修改尺寸和设置位置等功能。
- class Object(pygame.sprite.Sprite): # 怪兽、金堆、无底洞等各种可视化图片
- def __init__(self, filename, location, size=150):
- # 调父类来初始化子类
- pygame.sprite.Sprite.__init__(self)
- # 加载图片并修改尺寸为size*size
- self.image = pygame.image.load(filename).convert()
- self.image = pygame.transform.smoothscale(self.image, (size, size))
- self.rect = self.image.get_rect() # 获取图片位置
- self.rect.topleft = location # 设置位置
代表迷宫的房间,具有不同的状态,如臭气、微风、无底洞、金堆和怪兽等。通过设置不同的状态,可以改变房间的显示。
主要逻辑部分:它定义了迷宫的大小、无底洞、金堆、怪兽和箭的数量。通过调用set()函数,可以设置不同位置的无底洞、金堆和怪兽。shoot()函数用于射杀怪兽。set_breeze_around()和set_stench_around()函数分别用于设置周围房间的微风和臭气状态。
生成随机的位置坐标。它确保生成的位置不会重复,并且不会生成在迷宫入口处(0,0)。返回包含指定数量的不重复随机位置列表:
- def get_random_location(screen_width, screen_height, size, count=1): # 返回不重复、随机的二维数据列表, 且不包含(0 ,0),共count个元组
- # random.randrange(self, start, self.stop=None, step=1, _int=int)从指定范围内按指定基数递增的集合中获取一个随机数
- loc_list = []
- while len(loc_list) < count:
- x, y = 0, 0
- while x == 0 and y == 0: # 入口(0,0)处不能有任何物体
- x = random.randrange(0, screen_width, size)
- y = random.randrange(0, screen_height, size)
- loc = (x, y)
- if loc not in loc_list:
- loc_list.append(loc)
- return loc_list
待补充
Wumpus World游戏操作展示
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。