返回信息流pathlist=[[['1', '2', '4', '6'], 4], [['1', '3', '5', '6'], 1], [['1', '2', '4', '5', '6'], 1], [['1', '2', '3', '5', '6'], 1]]
['1', '2', '4', '6'], 4]->1-2-4-6路径被选过4次
每次学习过程有1000episode,第一次学习过程找最短路径,第二次学习过程找次短,第三次学习过程找第三短。。。依此类推。
每次学习过程中的每次episode,为保证不出现循环(往返)路径的出现,当前状态可选动作去除已选过动作。
每次学习过程结束,通过test,遍历Q值表,获取当前状态Q值最大对应的动作,得到该学习过程学习到的路径,并存储于pathlist中
若后续学习过程的episode探索到与pathlist中相同的路径,rewards=-1000*出现次数(pathlist中记录的出现次数),没重复,并走到终点,最后选择动作reward=10000-length(路径长度),其他动作reward=0
以下是第8次学习过程截图:
path= ['1', '3', '2', '4', '5', '6'] total length = 2500.0 reward= 7500.0
path= ['1', '2', '3', '5', '6'] total length = 1600.0 reward= -1000
path= ['1', '3', '2', '4', '6'] total length = 2200.0 reward= -1000
path= ['1', '3', '2', '4', '5', '6'] total length = 2500.0 reward= 7500.0
path= ['1', '2', '3', '5', '6'] total length = 1600.0 reward= -1000
path= ['1', '3', '5', '6'] total length = 1300.0 reward= -1000
path= ['1', '2', '3', '5', '6'] total length = 1600.0 reward= -1000
path= ['1', '3', '5', '6'] total length = 1300.0 reward= -1000
path= ['1', '3', '2', '4', '5', '6'] total length = 2500.0 reward= 7500.0
path= ['1', '2', '3', '5', '4', '6'] total length = 1700.0 reward= 8300.0
path= ['1', '3', '5', '6'] total length = 1300.0 reward= -1000
path= ['1', '2', '3', '5', '6'] total length = 1600.0 reward= -1000
path= ['1', '3', '2', '4', '5', '6'] total length = 2500.0 reward= 7500.0
path= ['1', '2', '3', '5', '6'] total length = 1600.0 reward= -1000
path= ['1', '3', '2', '4', '5', '6'] total length = 2500.0 reward= 7500.0
path= ['1', '2', '3', '5', '6'] total length = 1600.0 reward= -1000
path= ['1', '3', '5', '6'] total length = 1300.0 reward= -1000
path= ['1', '3', '5', '6'] total length = 1300.0 reward= -1000
path= ['1', '2', '3', '5', '6'] total length = 1600.0 reward= -1000
path= ['1', '2', '3', '5', '6'] total length = 1600.0 reward= -1000
path= ['1', '3', '2', '4', '5', '6'] total length = 2500.0 reward= 7500.0
path= ['1', '2', '3', '5', '6'] total length = 1600.0 reward= -1000
path= ['1', '3', '2', '4', '5', '6'] total length = 2500.0 reward= 7500.0
path= ['1', '2', '3', '5', '6'] total length = 1600.0 reward= -1000
path= ['1', '3', '2', '4', '5', '6'] total length = 2500.0 reward= 7500.0
path= ['1', '2', '3', '5', '6'] total length = 1600.0 reward= -1000
path= ['1', '3', '2', '4', '5', '6'] total length = 2500.0 reward= 7500.0
path= ['1', '2', '3', '5', '6'] total length = 1600.0 reward= -1000
path= ['1', '3', '5', '6'] total length = 1300.0 reward= -1000
path= ['1', '2', '3', '5', '6'] total length = 1600.0 reward= -1000
path= ['1', '3', '5', '6'] total length = 1300.0 reward= -1000
path= ['1', '2', '3', '5', '6'] total length = 1600.0 reward= -1000
path= ['1', '3', '5', '6'] total length = 1300.0 reward= -1000
path= ['1', '2', '3', '5', '6'] total length = 1600.0 reward= -1000
path= ['1', '3', '2', '4', '5', '6'] total length = 2500.0 reward= 7500.0
path= ['1', '2', '3', '5', '6'] total length = 1600.0 reward= -1000
path= ['1', '3', '2', '4', '5', '6'] total length = 2500.0 reward= 7500.0
path= ['1', '2', '3', '5', '6'] total length = 1600.0 reward= -1000
path= ['1', '3', '2', '4', '5', '6'] total length = 2500.0 reward= 7500.0
path= ['1', '2', '3', '5', '6'] total length = 1600.0 reward= -1000
path= ['1', '2', '3', '5', '6'] total length = 1600.0 reward= -1000
path= ['1', '3', '2', '4', '5', '6'] total length = 2500.0 reward= 7500.0
path= ['1', '2', '3', '5', '6'] total length = 1600.0 reward= -1000
path= ['1', '3', '2', '4', '5', '6'] total length = 2500.0 reward= 7500.0
test:1-2-3-2-3-2-3-2-3-2-3-2-3-2-3-2-3-2-3-2-3-2-3-2-3-2-。。。
想问,1.为什么最后通过Q值表选择Q值最大的动作会出现循环?
2.为什么在之前7次中['1', '2', '4', '6']被选择了4次,明明他的reward已经为负值,通过第8次学习过程的探索可知,环境中还存在着reward为正的选项,难道不应该选择rearward为正的动作吗?
求大佬解答!!!
这是一条镜像帖。来源:北邮人论坛 / ml-dm / #33704同步于 2019/4/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ML_DM机器人发帖
为什么我的Q-learning没有收敛到,reward更大的策略上?
lemonmeng
2019/4/7镜像同步21 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
我试着按你说的将epsilon该小为0.2,并增大了学习的次数,然而最后收敛的结果还是长度最小的,而不是reward最大的
【 在 turkey11 的大作中提到: 】
: 路径长就需要更多的出现次数才能把最后的成功的reward传递到第一个状态,试着把epsion改小些,或者起始状态从离终点近的状态开始再慢慢推远
不清楚了 我猜可能是学习率的关系,8000的reward,0.01的学习率,就算连续出现几次传递到3-2的值也非常小了,也没有一次3-5的值大,可以试试改学习率?或者每一步都根据length设置一个小reward? 不一定对
可以的话最好说明一下实验环境,还有打印的日志的含义。初步看的话有点疑问:
1. 3-5-6 reward=200,这个200是什么意思?
2. length=1400,什么任务需要1400步才能结束?
另外,如果是3-5后选择的action不符合预期,那么直接能做的是把Q-table打印出来,看这个时候各个action的Q值。通常这样可以调试出一些未知错误。
初始的时候奖励是10000 - 800 = 9200,但是后期探索的时候会出现一系列的问题,而导致reward减小
【 在 stdiohero 的大作中提到: 】
: 为什么3-5-6的reward只有200啊?不应该是(10000 - 800 = 9200)么?
环境:寻找从起点到终点的一个路径:3-5-6,表示从起点3到终点6,中间会经过5.
reward:第一次训练 reward=10000-length(整条路径的长度),第二次训练后,初始reward同上,如果与之前所选的路径重复会得到一个负奖励,即如果所选的路径与之前已走过的路径重复,reward会逐渐减小
length=1400,代表的是所选的整条路径的长度,而不是所走的步数。
【 在 gomiss 的大作中提到: 】
: 可以的话最好说明一下实验环境,还有打印的日志的含义。初步看的话有点疑问:
: 1. 3-5-6 reward=200,这个200是什么意思?
: 2. length=1400,什么任务需要1400步才能结束?
: ...................
我试着增加了学习率,0.1/0.2, 在查找Q TABLE当前状态最大Q值状态时,很容易出现循环:1-2-3-4-3-4-3-4-3-4-3-4-3-4-3-........
如果每一步根据length设置一个小reward,是指根据当前已走过的length?还是整个完整步骤的length?如果是根据当前的length设置reward,第一个状态很容易陷入局部最优吧,毕竟第一部分路径长度最小,不代表后续也小;如果根据完整的length设置reward会不会就违背Q learning的工作原理了。
对不起,我的问题有点多。
【 在 turkey11 的大作中提到: 】
: 不清楚了 我猜可能是学习率的关系,8000的reward,0.01的学习率,就算连续出现几次传递到3-2的值也非常小了,也没有一次3-5的值大,可以试试改学习率?或者每一步都根据length设置一个小reward? 不一定对
1. '与之前所选的路径重复,会给一个负的reward'
如果没理解错的话,是不是说明,同一条路径在不同时刻得到的reward是不相同的?如果是的话,Q-table更新时会有问题。因为你使用了学习率,这样一条路径需要多次被采样才能学习准确。但是在你的实验环境中,一条路径每次被采样时的reward都不一样,那就一直收敛不了。
2. reward和Q值之间可能存在差异
具体来说,以3 - 5 - 3 - 5 - 6 total length = 1400.0 reward= 8600.0为例,如果这个reward 8600是准确的话,那么在第三步选择3的reward就是8600*0.9*0.9=6966,如果更新没问题的话,这个肯定要比3 - 5 - 6, reward=200的大。所以我觉得第二步的状态下的Q值可能有问题。建议把第二步的state下的Q表打印出来看一看,对比下action=3和action=6时的Q值。
3. 根据length加reward,我知道的这个一般是-length这样的reward,就是传统的gridWorld是为了让agent找到最短路径,所以每一步都可以加一个-1的reward。但是最终的final reward一定要比-1大很多,否则可能什么也学不会。
4. 我觉得你的实验中应该限制最大步数。比如max_step=100,这样会更高效。
5. 最后,还是建议,如果觉得哪个步骤选择的action有问题,不符合预期,就把这个状态的Q值打印出来看一下。可以更快的定位到问题
【 在 lemonmeng 的大作中提到: 】
: 环境:寻找从起点到终点的一个路径:3-5-6,表示从起点3到终点6,中间会经过5.
: reward:第一次训练 reward=10000-length(整条路径的长度),第二次训练后,初始reward同上,如果与之前所选的路径重复会得到一个负奖励,即如果所选的路径与之前已走过的路径重复,reward会逐渐减小
: length=1400,代表的是所选的整条路径的长度,而不是所走的步数。
: ...................