我對實現模擬退火很感興趣,而我的電流給出了錯誤的輸出。我相信我對它的理解是有缺陷的。有人可以幫助解釋這個實現是如何錯誤的嗎? 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