我对实现模拟退火很感兴趣,而我的电流给出了错误的输出。我相信我对它的理解是有缺陷的。有人可以帮助解释这个实现是如何错误的吗? dist是我的条件概率数组。C++中的模拟退火实现
int idx=0;
double value = dist[0];
for (int ix = 1; ix < ITERS ; ixx){
double temp = (1/500)*((1/ix)- (1/ITERS));
for(int m = 0; m < input.rows()-1; m++){
double p = transitionProbability(dist[m], dist[m+1],temp);
if (p > unifRand()) {
if (dist[m+1] < value)
value = dist[m+1];
idx = m+1;
}
else {
idx = m;
}
}
}
double inline transitionProbability(double d0, double d1,double T) {
if (d0 > d1)
{ return 1; }
else
{ return (exp(d0 - d1)/T); }
}
对于某些特定的输入,*期望*和*实际*输出是什么?你有没有试过在调试器中运行,并逐行逐行查看发生了什么? – 2015-02-06 13:13:42