用python写一个强化学习的程序
时间: 2023-10-13 07:06:42 浏览: 91
好的,以下是一个简单的 Q-learning 算法的 Python 代码示例:
```python
import numpy as np
# 定义环境状态数和动作数
num_states = 6
num_actions = 2
# 定义 Q 表格
Q = np.zeros((num_states, num_actions))
# 定义奖励和转移矩阵
R = np.array([[0, 0], [0, 0], [0, 0], [1, 1], [0, 0], [0, 0]])
T = np.array([[0, 1, 0, 0, 0, 0],
[1, 0, 1, 0, 0, 0],
[0, 1, 0, 1, 0, 0],
[0, 0, 1, 0, 1, 0],
[0, 0, 0, 1, 0, 1],
[0, 0, 0, 0, 1, 0]])
# 定义学习参数
alpha = 0.1
gamma = 0.9
num_episodes = 1000
# Q-learning 算法
for episode in range(num_episodes):
state = np.random.randint(0, num_states)
while state != 3:
action = np.argmax(Q[state, :] + np.random.randn(1, num_actions) / (episode + 1))
next_state = np.random.choice(np.arange(num_states), p=T[state, action, :])
reward = R[state, action]
Q[state, action] = (1 - alpha) * Q[state, action] + alpha * (reward + gamma * np.max(Q[next_state, :]))
state = next_state
print("Q 表格:")
print(Q)
```
这是一个简单的 Q-learning 算法,它使用 Q 表格来存储每个状态下每个动作的 Q 值,并根据当前状态选择最佳动作。在每个 episode 中,它将随机选择一个起始状态,并一直进行动作选择、状态转移和 Q 值更新,直到到达终止状态 3。在每次 Q 值更新中,它使用学习率 alpha 和折扣因子 gamma 来平衡当前奖励和未来奖励的重要性。
当程序运行结束时,它将打印出 Q 表格,其中每个元素 Q[s,a] 表示在状态 s 下选择动作 a 的 Q 值。
阅读全文