Qlearning与Sarsa的区别在于:Sarsa为同策略,行动搜索和评估都采用-贪婪;Qlearning是异策略。
异策略off-policy:产生数据的策略 (行动策略) 与 评估和改善的策略(评估策略)不同
同策略 on-policy:相同
行动策略:在选择动作a到达状态s'的时候,采用贪婪算法
评估(目标)策略: 在选择状态s‘的下一个动作,求Q(St+1)时,采用贪婪算法
机器学习常用的随机策略:https://blog.csdn.net/hiwallace/article/details/81909570
贪婪算法代码实现:
(注意:遇到第一个return就跳出函数,不会再进行接下来的程序了)
Qlearning:
Qlearning中的探索策略分别为 _贪婪 和 玻尔兹曼的结果对比: 前者收敛快,后者收敛慢,迭代500次前者只花了0.7秒,后者花了2.6秒。而且玻尔兹曼搜索只适合于动作空间离散且动作空间不大的情况,要不然计算行为值函数的和太费时间了。
Sarsa的结果: 没有收敛得足够完美。
玻尔兹曼搜索代码:
####玻尔兹曼搜索策略
def boltzmann(qfunc,state):
pro=[0.0 for i in range (len(actions))]
q_sum=0.0
for i in range(len(actions)): #求s状态下所有动作的行为值函数的和
key = "%d_%s"%(state, actions[i])
q_sum+= qfunc[key]
for i in range(len(actions)):
key = "%d_%s" % (state, actions[i])
if q_sum>0:
pro[i] += qfunc[key]/q_sum
##选择动作
r = random.random()
s = 0.0
for i in range(len(actions)):
s += pro[i]
if s >= r: return actions[i]
return actions[len(actions) - 1]