强化学习迷宫用Python编写代码
时间: 2023-11-05 18:17:04 浏览: 87
python 强化学习
5星 · 资源好评率100%
好的,下面是一个简单的强化学习迷宫代码示例,使用Python语言编写:
```python
import numpy as np
import random
# 创建迷宫
maze = np.array([
[0, 0, 0, 0, 0],
[0, 1, 0, 1, 0],
[0, 1, 0, 0, 0],
[0, 1, 1, 1, 0],
[0, 0, 0, 0, 0]
])
ROWS, COLS = maze.shape
# 定义动作集合
actions = ['up', 'down', 'left', 'right']
# 定义奖励矩阵
rewards = np.array([
[0, 0, 0, 0, 0],
[0, -1, 0, -1, 0],
[0, -1, 0, 0, 0],
[0, -1, -1, -1, 0],
[0, 0, 0, 0, 0]
])
# 定义Q表
Q = np.zeros((ROWS, COLS, len(actions)))
# 定义超参数
EPSILON = 0.9
ALPHA = 0.1
GAMMA = 0.9
MAX_EPISODES = 50
# 定义状态转换函数
def next_state(row, col, action):
if action == 'up' and row > 0 and maze[row-1][col] != 1:
row -= 1
elif action == 'down' and row < ROWS-1 and maze[row+1][col] != 1:
row += 1
elif action == 'left' and col > 0 and maze[row][col-1] != 1:
col -= 1
elif action == 'right' and col < COLS-1 and maze[row][col+1] != 1:
col += 1
return row, col
# 定义Q学习算法函数
def q_learning():
for episode in range(MAX_EPISODES):
row, col = 4, 0 # 起点
while (row, col) != (0, 4): # 终点
if random.uniform(0, 1) < EPSILON:
action = actions[np.argmax(Q[row][col])]
else:
action = random.choice(actions)
next_row, next_col = next_state(row, col, action)
reward = rewards[next_row][next_col]
Q[row][col][actions.index(action)] += ALPHA * (reward + GAMMA * np.max(Q[next_row][next_col]) - Q[row][col][actions.index(action)])
row, col = next_row, next_col
# 运行Q学习算法
q_learning()
print(Q)
```
在上面的代码中,我们首先定义了一个迷宫,该迷宫是一个5x5大小的二维数组,其中0表示可以通过的路,1表示障碍物。然后,我们定义了动作集合、奖励矩阵和Q表。接下来,我们使用Q学习算法来训练我们的智能体,直到智能体能够从起点走到终点。
在训练过程中,我们首先初始化智能体的位置为起点,然后根据Q表选择一个动作。根据当前位置和选择的动作,我们计算下一个状态,并获得对应的奖励。然后,我们使用Q学习算法更新Q表。这个过程会重复进行,直到智能体能够从起点走到终点。最后,我们输出Q表,以便查看每个状态和动作的Q值。
阅读全文