莫烦python学习笔记1

什么是Q Learning

Q Learning也是一个决策过程

小例子

用tabular Q-learning的方法实现一个小例子,例子的环境是一个一维世界,在世界的右边有宝藏,探索者只要得到了宝藏尝到了甜头,然后以后就记住了得到宝藏的方法,这就是他用强化学习所学习到的行为。

-o---T
# T 就是宝藏的位置, o 是探索者的位置

Q-learing是一种记录行为值(Q value)的方法,每种在一定状态的行为都会有一个值Q(s,a),就是说行为a在s状态的值是Q(s,a).s在上面的探索游戏中,就是o所咋的地点。而每个地点探索者都能做出两个行为left/right,这就是探索者的所有可行的a

如果在某个地点s1,探索者计算了他能有的两种行为,哪个行为的Q值大则选择哪个行为。

预设值

import numpy as np
import pandas as pd
import time

N_STATES=6  #1维世界的宽度
ACTION=['left','right']  #探索者的的可用动作
EPSILON=0.9 #贪婪度 greedy
ALPHA=0.1 #学习率
GAMMA=0.9 #奖励递减值
MAX_EPISODES=13  #最大回合数
FRESH_TIME=0.3   #移动间隔时间

Q表

def build_q_table(n_states,actions):
	table=pd.DataFrame(
	np.zeros((n_states,len(actions))),columns=actions,)  #columns对应的是行为名称
	return table

定义动作

接着是定义探索者是如何挑选行为的,引入epsilon greedy的概念。因为在初始阶段,随机的探索环境,往往比固定的行为模式要好,所以这也是累计经验的阶段,我们希望探索者不会那么贪婪(greedy),所以EPSILON就是用来控制贪婪程度的值。EPSILON可以随着探索时间不断提升(越来越贪婪),不过这个例子中,我们就固定成EPSILON=0.9,90%的时间是选择最优策略,10%的时间用来探索。

#在某个state地点,选择行为
def choose_action(state,q_table):
	state_actions=q.table.iloc[state,:] #选出这个state的所有action值
    if (np.random.uniform() > EPSILON) or (state_actions.all() == 0):  # 非贪婪 or 或者这个 state 还没有探索过
        action_name = np.random.choice(ACTIONS)
     else:
     	action_name=state_actions.argmax()#贪婪度
     return action_name

环境反馈

做出行为后,环境也要给我们的行为一个反馈,反馈出下个state,以及reward

def get_env_feedback(S, A):
    # This is how agent will interact with the environment
    if A == 'right':    # move right
        if S == N_STATES - 2:   # terminate
            S_ = 'terminal'
            R = 1
        else:
            S_ = S + 1
            R = 0
    else:   # move left
        R = 0
        if S == 0:
            S_ = S  # reach the wall
        else:
            S_ = S - 1
    return S_, R

环境更新

def update_env(S, episode, step_counter):
    # This is how environment be updated
    env_list = ['-']*(N_STATES-1) + ['T']   # '---------T' our environment
    if S == 'terminal':
        interaction = 'Episode %s: total_steps = %s' % (episode+1, step_counter)
        print('\r{}'.format(interaction), end='')
        time.sleep(2)
        print('\r                                ', end='')
    else:
        env_list[S] = 'o'
        interaction = ''.join(env_list)
        print('\r{}'.format(interaction), end='')
        time.sleep(FRESH_TIME)

强化学习主循环

def rl():
	q_table=build_q_table(N_STATES,ACTIONS)  #初始 qtable
	for episode in range(MAX_EPISODES):#回合
		step_counter=0
		S=0  #回合初始位置
		is_terminated=False #是否回合结束
		update_env(S,episode,step_counter)  #环境更新
		while not is_terminated:
			A=choose_action(S,q_table)  #选择行为
			S_,R=get_env_feeback(S,A) #实施行为并得到环境的反馈
			q_predict=q_table.loc[S,A]  #估算得到的(状态-行为)值
			if S_!='terminal':
				q_target = R + GAMMA * q_table.iloc[S_, :].max()   #  实际的(状态-行为)值 (回合没结束)
			else:
				q_target=R  #实际的(状态-行为值)回合结束
				is_terminated=True
			q_table.loc[S,A]+=ALPHA*(q_target-q_predict) #q_table更新
			S=S_ #探索者移动到下一个state
			updata_env(S,episode,step_counter+1) #环境更新
			step_counter+=1
		
		return q_table
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值