下面是一个简单的Q-learning算法的Python实现。这个代码示例是一个简化的版本,主要用于演示Q-learning的基本原理。在这个例子中,我们假设环境是一个简单的迷宫,其中有四个状态(S0, S1, S2, S3),并且可以从每个状态转移到其他任意状态。奖励函数是任意的,仅用于示例。
python复制代码
import numpy as np | |
# 定义环境参数 | |
states = ['S0', 'S1', 'S2', 'S3'] | |
actions = ['a0', 'a1', 'a2', 'a3'] # 假设在每个状态下都可以采取四个动作 | |
# 初始化Q表 | |
Q_table = {s: {a: 0 for a in actions} for s in states} | |
# 超参数 | |
gamma = 0.8 # 折扣因子 | |
alpha = 0.5 # 学习率 | |
num_episodes = 1000 # 训练回合数 | |
# 奖励函数(这里仅作为示例,具体奖励函数应根据实际问题定义) | |
def get_reward(state, next_state): | |
if next_state == 'S3': | |
return 10 | |
elif next_state == 'S2': | |
return -10 | |
else: | |
return 0 | |
# 环境转移函数(这里仅作为示例,具体转移函数应根据实际问题定义) | |
def get_next_state(state, action): | |
if action == 'a0': | |
return 'S0' | |
elif action == 'a1': | |
return 'S1' | |
elif action == 'a2': | |
return 'S2' | |
elif action == 'a3': | |
return 'S3' | |
# Q-learning训练过程 | |
for episode in range(num_episodes): | |
state = np.random.choice(states) # 随机选择一个初始状态 | |
while state != 'S3': # 假设S3是终止状态 | |
action = np.random.choice(actions) # 随机选择一个动作 | |
next_state = get_next_state(state, action) | |
reward = get_reward(state, next_state) | |
# 更新Q表 | |
Q_target = reward + gamma * max([Q_table[next_state][a] for a in Q_table[next_state]]) | |
Q_predict = Q_table[state][action] | |
Q_table[state][action] += alpha * (Q_target - Q_predict) | |
state = next_state | |
# 打印Q表 | |
print("Q-table:") | |
for state, actions_dict in Q_table.items(): | |
print(f"{state}: {actions_dict}") |
注意:这个代码示例是一个非常简化的Q-learning实现,主要用于教学目的。在实际应用中,你可能需要根据你的具体问题来定义环境、状态、动作、奖励函数和转移函数。此外,为了更高效地进行学习,你通常会使用一些优化策略,如ε-greedy策略来选择动作,而不是完全随机地选择动作。