gpt4 book ai didi

c++ - 实现近似(基于特征)q 学习的问题

转载 作者:行者123 更新时间:2023-11-30 04:49:06 24 4
gpt4 key购买 nike

我是强化学习的新手。我最近学习了近似 q 学习,或基于特征的 q 学习,其中您通过特征描述状态以节省空间。我试图在一个简单的网格游戏中实现这一点。在这里,代理应该学会不进入火坑(由 f 发出信号),而是尽可能多地吃掉点。这是使用的网格:

...一个
.f.f
.f.f
...f

此处 A 表示代理的起始位置。现在,在实现时,我设置了两个功能。一个是 1/((到最近点的距离)^2),另一个是 (到火坑的距离) + 1。当代理进入火坑时,程序返回 -100 的奖励。如果它到达一个已经被访问过的非火坑位置(因此没有点可以被吃掉),奖励是 -50。如果它到达一个未访问的点,则奖励为 +500。在上面的网格中,无论初始权重是多少,程序永远不会学习到正确的权重值。具体来说,在输出中,第一个训练类(class)获得的分数(它吃了多少点)为 3,但对于所有其他训练类(class),分数仅为 1,权重收敛到错误的值 -125,权重为 1(到火坑的距离)和权重 2 的 25(到未访问点的距离)。是我的代码有什么特别的错误,还是我对近似 q 学习的理解不正确?

我曾尝试使用环境给予的奖励以及初始权重。这些都没有解决问题。这是整个程序的链接:https://repl.it/repls/WrongCheeryInterface

这是主循环中发生的事情:

while(points != NUMPOINTS){
bool playerDied = false;
if(!start){
if(!atFirepit()){
r = 0;
if(visited[player.x][player.y] == 0){
points += 1;
r += 500;
}else{
r += -50;
}
}else{
playerDied = true;
r = -100;
}
}

//Update visited
visited[player.x][player.y] = 1;

if(!start){
//This is based off the q learning update formula
pairPoint qAndA = getMaxQAndAction();
double maxQValue = qAndA.q;
double sample = r;
if(!playerDied && points != NUMPOINTS)
sample = r + (gamma2 * maxQValue);
double diff = sample - qVal;
updateWeights(player, diff);
}

// checking end game condition
if(playerDied || points == NUMPOINTS) break;

pairPoint qAndA = getMaxQAndAction();
qVal = qAndA.q;
int bestAction = qAndA.a;

//update player and q value
player.x += dx[bestAction];
player.y += dy[bestAction];

start = false;
}

我希望这两个权重仍然是正的,但其中一个是负的(那个给出了到火坑的距离)。

我还希望程序随着时间的推移学习到进入火坑是不好的,去一个未访问过的点也是不好的,但没有那么糟糕。

最佳答案

可能不是您想听到的答案,但是:

  • 近似 Q 学习之前,您是否尝试过实现更简单的表格 Q 学习?在您的设置中,只需几个状态和 Action ,它就会完美地工作。如果您正在学习,我强烈建议您从更简单的案例开始,以便更好地理解/直觉强化学习的工作原理。

  • 您知道使用逼近器而不是学习确切的 Q 函数的含义吗?在某些情况下,由于问题的复杂性(例如,当状态空间是连续的时),您应该近似 Q 函数(或策略,取决于算法),但这可能会引入一些收敛问题。此外,在您的情况下,您正在尝试手动挑选一些特征,这通常需要对问题(即环境)和学习算法有深入的了解。

  • 你了解超参数alphagamma 的含义吗?你不能随意选择它们。有时它们对于获得预期结果至关重要,但并非总是如此,这在很大程度上取决于问题和学习算法。在您的情况下,查看您权重的收敛曲线,很明显您使用的 alpha 值太高了。正如您所指出的,在第一次训练后,您的体重保持不变。

因此,实用建议:

  • 在尝试更复杂的事情之前,请务必使用表格 Q 学习算法解决您的网格游戏。

  • 尝试不同的 alphagamma 和奖励值。

  • 深入阅读有关近似 RL 的更多信息。一本非常好的易读的书(从零知识开始)是经典的萨顿和巴托的书:Reinforcement Learning: An Introduction ,您可以免费获取并于 2018 年更新。

关于c++ - 实现近似(基于特征)q 学习的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55545051/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com