强化学习笔记4-Python/OpenAI/TensorFlow/ROS-时间差分

2019-06-15 15:54:22 浏览数 (1)

时间差分学习(Temporal Difference Learing)

预测,估计值函数;控制,优化值函数。

离线:Q学习;在线:SARSA。

智能体驾驶出租车。 总共有四个地点,智能体必须在一个地方接载一名乘客,然后在另一个地方放下乘客。 智能体将获得 20分作为成功下车的奖励,并且每次获得的时间步数为-1分。 非法接送和丢弃的智能体也将失去-10分。 因此,智能体的目标是学习在短时间内在正确的位置接载和放下乘客,无需登上任何非法乘客。

出租车案例-Q学习

代码语言:javascript复制
import random
import gym
env = gym.make('Taxi-v2')
env.render()
q = {}
for s in range(env.observation_space.n):
    for a in range(env.action_space.n):
        q[(s,a)] = 0.0

def update_q_table(prev_state, action, reward, nextstate, alpha, gamma):
    
    qa = max([q[(nextstate, a)] for a in range(env.action_space.n)])
    q[(prev_state,action)]  = alpha * (reward   gamma * qa - q[(prev_state,action)])

def epsilon_greedy_policy(state, epsilon):
    if random.uniform(0,1) < epsilon:
        return env.action_space.sample()
    else:
        return max(list(range(env.action_space.n)), key = lambda x: q[(state,x)])

alpha = 0.4
gamma = 0.999
epsilon = 0.017

for i in range(8000):
    r = 0
    
    prev_state = env.reset()
    
    while True:
        
        
        env.render()
        
        # In each state, we select the action by epsilon-greedy policy
        action = epsilon_greedy_policy(prev_state, epsilon)
        
        # then we perform the action and move to the next state, and receive the reward
        nextstate, reward, done, _ = env.step(action)
        
        # Next we update the Q value using our update_q_table function
        # which updates the Q value by Q learning update rule
        
        update_q_table(prev_state, action, reward, nextstate, alpha, gamma)
        
        # Finally we update the previous state as next state
        prev_state = nextstate

        # Store all the rewards obtained
        r  = reward

        #we will break the loop, if we are at the terminal state of the episode
        if done:
            break

    print("total reward: ", r)

env.close()

部分结果如下:

代码语言:javascript复制
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 

 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (East)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (South)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (South)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (South)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (South)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (Pickup)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : |_: |
|Y| : |B: |
 --------- 
  (North)
 --------- 
|R: | : :G|
| : : : : |
| : : :_: |
| | : | : |
|Y| : |B: |
 --------- 
  (North)
 --------- 
|R: | : :G|
| : : : : |
| : :_: : |
| | : | : |
|Y| : |B: |
 --------- 
  (West)
 --------- 
|R: | : :G|
| : :_: : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (North)
 --------- 
|R: | : :G|
| :_: : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (West)
 --------- 
|R:_| : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (North)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (West)
total reward:  7

出租车案例-SARSA

代码语言:javascript复制
import random
import gym
env = gym.make('Taxi-v2')
env.render()
Q = {}
for s in range(env.observation_space.n):
    for a in range(env.action_space.n):
        Q[(s,a)] = 0.0

def epsilon_greedy(state, epsilon):
    if random.uniform(0,1) < epsilon:
        return env.action_space.sample()
    else:
        return max(list(range(env.action_space.n)), key = lambda x: Q[(state,x)])

alpha = 0.85
gamma = 0.90
epsilon = 0.8

for i in range(4000):
    
    # we store cumulative reward of each episodes in r
    r = 0
    
    # initialize the state,
    state = env.reset()
    
    # select the action using epsilon-greedy policy
    action = epsilon_greedy(state,epsilon)
    
    while True:
       
        # env.render()
        env.render()
        # then we perform the action and move to the next state, and receive the reward
        nextstate, reward, done, _ = env.step(action)
        
        # again, we select the next action using epsilon greedy policy
        nextaction = epsilon_greedy(nextstate,epsilon) 
    
        # we calculate the Q value of previous state using our update rule
        Q[(state,action)]  = alpha * (reward   gamma * Q[(nextstate,nextaction)]-Q[(state,action)])

        # finally we update our state and action with next action and next state
        action = nextaction
        state = nextstate
        
        # store the rewards
        r  = reward
        
        # we will break the loop, if we are at the terminal state of the episode
        if done:
            break
            
    print("total reward: ", r)

env.close()

 部分结果显示如下:

代码语言:javascript复制
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (Pickup)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (North)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (West)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (Dropoff)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (West)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (North)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (Dropoff)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (Pickup)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (South)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (South)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (West)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (Dropoff)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (Pickup)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (East)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (West)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (East)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (Pickup)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (North)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (East)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (South)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (Dropoff)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (West)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (Dropoff)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (East)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (North)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (East)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (East)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (West)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (Dropoff)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (East)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (East)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (West)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (Pickup)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (Pickup)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (Dropoff)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (North)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (South)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (East)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (Pickup)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (South)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (East)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (North)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (West)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (East)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (South)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (East)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (East)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (Dropoff)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (West)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (Dropoff)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (North)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (North)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (Dropoff)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (West)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (Pickup)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (East)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (West)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (East)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (North)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (South)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (South)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (East)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (West)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (East)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (South)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (West)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (West)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (South)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (North)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (East)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (East)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (North)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (North)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (West)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (South)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (North)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (West)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (West)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (North)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (East)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (East)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (East)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (Pickup)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (West)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (West)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (Dropoff)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (Dropoff)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (Pickup)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (West)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (Pickup)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (Dropoff)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (South)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (West)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (East)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (West)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (Pickup)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (Dropoff)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (South)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (North)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (North)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (North)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (North)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (South)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (West)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (Dropoff)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (South)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (East)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (South)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (Pickup)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (East)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (North)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (East)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (South)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (South)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (South)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (East)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (Pickup)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (South)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (Pickup)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (West)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (South)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (Pickup)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (East)
 --------- 
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
 --------- 
  (West)
total reward:  -695

参考文献资料:

  • https://github.com/shashir/td-learning
  • https://link.springer.com/article/10.1007/BF00115009
  • https://link.springer.com/content/pdf/10.1007/BF00115009.pdf

Temporal difference (TD) learning (Sutton1988; Barto et al., 1990; Bertekas and Tsitsiklis, 1996; Sutton and Barto, 1998) is a form of error-driven learning used in feed-forward neural networks in which input patterns(e.g., patterns of place cell activity) are to be associated with output values(e.g., an expectation of how close the goal is), but where additionally there isinformation to be had in the sequence in which input patterns and outputvalues present themselves.


0 人点赞