python代码搭建wumpus世界
时间: 2023-07-23 07:29:54 浏览: 179
Wumpus 世界是一个经典的 AI 游戏场景,玩家需要控制一个智能体在地图中寻找黄金,同时避免遭遇危险的 Wumpus 和陷阱。下面是一个简单的 Python 代码可以实现 Wumpus 世界的搭建:
```python
import random
class WumpusWorld:
def __init__(self, size=4):
self.size = size
self.grid = [[0 for j in range(size)] for i in range(size)]
self.agent_pos = (0, 0)
self.gold_pos = (0, 0)
self.wumpus_pos = (0, 0)
self.pit_pos = []
# 随机放置黄金、Wumpus 和陷阱
self.place_gold()
self.place_wumpus()
self.place_pits()
def place_gold(self):
self.gold_pos = self.random_pos()
self.grid[self.gold_pos[0]][self.gold_pos[1]] = 1
def place_wumpus(self):
self.wumpus_pos = self.random_pos()
self.grid[self.wumpus_pos[0]][self.wumpus_pos[1]] = 2
def place_pits(self):
for i in range(self.size):
for j in range(self.size):
if (i, j) != self.agent_pos and (i, j) != self.gold_pos and (i, j) != self.wumpus_pos:
if random.random() < 0.2:
self.grid[i][j] = 3
self.pit_pos.append((i, j))
def random_pos(self):
return (random.randint(0, self.size-1), random.randint(0, self.size-1))
def move_agent(self, action):
if action == "up":
if self.agent_pos[0] > 0:
self.agent_pos = (self.agent_pos[0]-1, self.agent_pos[1])
elif action == "down":
if self.agent_pos[0] < self.size-1:
self.agent_pos = (self.agent_pos[0]+1, self.agent_pos[1])
elif action == "left":
if self.agent_pos[1] > 0:
self.agent_pos = (self.agent_pos[0], self.agent_pos[1]-1)
elif action == "right":
if self.agent_pos[1] < self.size-1:
self.agent_pos = (self.agent_pos[0], self.agent_pos[1]+1)
if self.agent_pos == self.wumpus_pos:
return -10 # 被 Wumpus 攻击,游戏失败
elif self.agent_pos in self.pit_pos:
return -10 # 掉入陷阱,游戏失败
elif self.agent_pos == self.gold_pos:
return 10 # 找到黄金,游戏胜利
else:
return -1 # 继续探索
def print_world(self):
for i in range(self.size):
for j in range(self.size):
if (i, j) == self.agent_pos:
print("A", end=" ")
elif (i, j) == self.gold_pos:
print("G", end=" ")
elif (i, j) == self.wumpus_pos:
print("W", end=" ")
elif (i, j) in self.pit_pos:
print("P", end=" ")
else:
print("-", end=" ")
print()
```
在这个代码中,我们定义了一个 `WumpusWorld` 类来表示 Wumpus 世界。类中包含了世界的地图信息 `grid`,智能体的位置 `agent_pos`,黄金的位置 `gold_pos`,Wumpus 的位置 `wumpus_pos`,和陷阱的位置 `pit_pos`。在初始化函数中,我们首先创建一个空的地图,然后随机放置黄金、Wumpus 和陷阱。在移动智能体时,我们检查智能体的移动是否合法,并根据移动结果返回相应的奖励值。最后,我们还定义了一个 `print_world()` 函数用于打印地图信息,方便玩家观察游戏状态。
你可以通过以下代码来测试 Wumpus 世界的代码:
```python
world = WumpusWorld()
world.print_world()
while True:
action = input("Enter your action (up/down/left/right): ")
reward = world.move_agent(action)
world.print_world()
print("Reward:", reward)
if reward == 10 or reward == -10:
break
```
在这个代码中,我们首先创建一个新的 Wumpus 世界,然后开始一个循环,每次循环中等待玩家输入一个移动指令,并根据指令移动智能体,打印地图和奖励,直到游戏结束为止。你可以通过运行这个代码来体验 Wumpus 世界的游戏。
阅读全文