什么是Q-learning?

Q学习(Q-learning)是一种价值迭代算法,它通过采样来学习动作价值函数Q,从而获得最优策略。

Q学习的主要思想是:
agents以ε-greedy策略选择动作,在环境中采样。

根据采样结果更新Q表中的 Q(s,a)值,使用下面的更新规则:
Q(s,a) = Q(s,a) + α * (r + γ * maxQ(s’,a’) – Q(s,a))
其中,α为学习率,γ为衰减因子,r为采样得到的immediate reward,maxQ(s’,a’)为下一状态s’下的最优动作值。
通过持续采样和更新,Q表逐渐逼近最优,最终得到最优策略。

Q学习的主要优点是:
可以直接应用到连续或高维状态空间,因采用采样的方法。
易于实现并且收敛快。

Q学习也存在一定的缺点:
学习过程容易受到噪声的影响,收敛于次优。
难以并行,因需要记忆过去状态。
需要大量采样,时间和空间复杂度较高。

代码示例:

python 
import numpy as np

# 构建Cliff Walking环境
class CliffWalkingEnv():
    def __init__(self):
        self.x = 0     # 当前位置x坐标
        self.y = 0     # 当前位置y坐标

    def step(self, action):
        # 左移
        if action == 0:   
            self.x -= 1

        # 右移
        elif action == 1:  
            self.x += 1

        # 下移
        elif action == 2:  
            self.y -= 1

        # 转移概率和奖励
        if self.x < 0 or self.x > 11 or self.y < 0:
            reward = -100
            done = True
        elif (self.x, self.y) == (0, 0) or (self.x, self.y) == (11, 0):
            reward = 100
            done = True
        elif self.y == -1:
            reward = -100
            self.x, self.y = 0, 0  # 回到起点
            done = False
        else:
            reward = -1
            done = False

        return self.x, self.y, reward, done

# Q学习算法    
def q_learning(env, episodes=500, learning_rate=0.1, gamma=0.9, epsilon=0.1): 
    # 构建Q表
    Q = np.zeros((12, 1))  

    # 采样episodes轮
    for episode in range(episodes):
        state = env.reset()

        while True:
            # ε-greedy策略选择动作
            if np.random.uniform(0, 1) < epsilon:  
                action = np.random.choice(3) 
            else:
                action = np.argmax(Q[state, :])

            # 执行动作,获得反馈               
            next_state, next_y, reward, done = env.step(action)  

            # Q表更新
            Q[state, action] += learning_rate * (reward + gamma * 
                                       np.max(Q[next_state, :]) - Q[state, action])

            state = next_state

            if done:
                break

    return Q

在这个示例中,我们构建了Cliff Walking环境,并实现了Q学习算法。通过在环境中采样和更新Q表,最终学习到最优的动作价值函数,得到最优策略。

Q学习作为一种重要的强化学习方法,它采用价值迭代的思想但通过采样来更新Q表,适用于连续状态空间的学习任务。