我正在使用时间差异学习来训练计算机玩围棋。我注意到我的代理在大约 20 分钟内应该能够玩 100.000 场比赛时玩 1 场比赛(比如 10 秒)真的很慢。在缩小问题范围后,我发现该行没有。以下代码中的5是麻烦制造者。代码取自一个更大的函数。
int i;
double td = newValue - oldValueWhite;
for(i = 0; i<FEATURES_SIZE; i++)
{
Value[i] =Value[i] + alpha*(td)*((double)phiOldWhite[i]);
}
但是,以下代码运行得非常顺利:
double tmp:
int i;
double td = newValue - oldValueWhite;
for(i = 0; i<FEATURES_SIZE; i++)
{
tmp =Value[i] + alpha*(td)*((double)phiOldWhite[i]);
}
我不确定是编译器忽略了计算还是将新值分配给 Value[i] 真的很慢。值得一提的是,Value 被作为指向函数的指针。
有任何想法吗?