Q learning (Tabular)

Value-based Sequential Decision

Principle


根据 Q 表对下一时刻的动作进行选择,下图是 Q  表的更新方式


此时, 

[公式] 并未进行下一次的动作,而是预估了一下后果,由此来更新

 [公式]  Q  表。


其中,

 [公式] 学习速率

 [公式] 选择 Q  表最大值的概率。若

 [公式] ,则

 [公式] 概率选择 Q 表最大值即最优动作,

 [公式] 的概率随机动作。
[公式] 
由于

 [公式] 下一次的动作,会通过乘以奖励衰减值

 [公式] 的方式影响前一次的 Q  表取值,因此很容易想到只要

 [公式] ,以后的每次动作得到的奖励值都会影响之前动作的 Q  表取值。

- Q估计:

 [公式] 状态最优动作 a 的Q值
- Q现实:在选择了动作 a 后,进入

 [公式] 状态。Q表中 

[公式] 状态对应的Q值的最大值加上执行动作 a 之后得到的奖励值 r ,即为 Q  现实。

Implement

class Skylark_Qlearning():
    def __init__(self, env, alpha = 0.1, gamma = 0.6, epsilon=0.1):
        self.q_table = np.zeros([env.observation_space.n, env.action_space.n])
        self.env = env
        self.alpha = alpha      # learning rate
        self.gamma = gamma      # discount rate
        self.epsilon = epsilon  # epsilon-greedy 
    
    def train(self, num_epochs):
        for i in range(1, num_episodes):
            state = self.env.reset()

            epochs, penalties, reward, = 0, 0, 0
            done = False
            
            while not done:
                if np.random.uniform(0, 1) < self.epsilon:
                    action = self.env.action_space.sample() # Explore action space
                else:
                    action = np.argmax(self.q_table[state]) # Exploit learned values

                next_state, reward, done, info = self.env.step(action) # Interaction with Env
                
                old_value = self.q_table[state, action]
                next_max = np.max(self.q_table[next_state])
                
                new_value = (1 - self.alpha) * old_value + self.alpha * (reward + self.gamma * next_max)
                self.q_table[state, action] = new_value

                if reward == -10:
                    penalties += 1

                sum_rew += reward
                state = next_state
                epochs += 1
            print('Episode: {} | Avg_reward: {} | Length: {}'.format(i, sum_rew/epochs, epochs))
        print("Training finished.")

更多实现方式见本专栏关联Github

Reference

  1. 什么是 Q Learning