QLearing的算法目标是:达到reward最大的state(状态,以一个使用无监督学习环境的agent为例,自https://blog.csdn.net/qq_16234613/article/details/80268564

概念理解

1
2
3
4
预设值:首先将图中的每一条边预设reward,目标节点指向自己的邻接边的reward设100,其他设为0
Q、R矩阵: 包括状态action和行为state,作为行列
环境反馈: 对于每一次的episode (相当于迭代的东西),每一次尝试attemp,会根据反馈进行对网络更新
环境更新.
1
2
3
4
5
6
7
R+r*max_Q(32)

基本规则如下:
Q表内容为index--state(agent的位置),columns--action(行为集)
Q表(记录行为值)的计算规则是每次对于行为集合中的每一个action,对其进行计算、并进行选择。
每一次episode,Q表更新一次
定义EPSILON的目的是控制贪婪程度,其中,它可以随着时间推移 逐渐增加,贪婪)
  • 主循环:图示

首先要对其评估和更新准则进行确定,代码中表示可以直接定义在一个结构中。

1
2
3
4
5
6
7
8
9
10
11
12
13
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)

demo,参考莫烦python的一个例子

预先设置的参数,就是上述的预设值,其中gamma参数是作为奖励递减值,作用见后文代码,它是

1
2
3
4
5
6
N_STATES =  #1维宽度
ACTIONS = #动作集合
EPSILON = #greedy贪婪值
ALPHA = # learning rate 学习率
GAMMA = # discount factor 奖励递减值
MAX_EPISODES = # maximum episodes 最大回合数

Q表的行和列存储action和state,它的Value 每一次更新就是更新它的行为准则

1
2
3
4
5
6
def build_q_table(n_states, actions):
table = pd.DataFrame(
np.zeros((n_states, len(actions))),
columns=actions,
)
return table