在求合法答案的最小值的时候
模拟退火是这样写的:
double delta=e-Ans.ans;
if(delta<0){
Ans.x=ra,Ans.y=rb,Ans.ans=e;
}
else if(exp(-delta/T)*RAND_MAX>radom(0,RAND_MAX)){
Ans.x=ra,Ans.y=rb;
}
但是在求合法答案的最大值得时候:
double delta=e-Ans.ans;
if(delta>0){
Ans.x=ra,Ans.y=rb,Ans.ans=e;
}
else if(exp(-delta/T)*RAND_MAX<radom(0,RAND_MAX)){
Ans.x=ra,Ans.y=rb;
}
double delta=e-Ans.ans;
if(delta>0){
Ans.x=ra,Ans.y=rb,Ans.ans=e;
}
else if(exp(delta/T)*RAND_MAX>radom(0,RAND_MAX)){
Ans.x=ra,Ans.y=rb;
}
这两种写法哪个对?并说明理由%%%%%%
还是说根据题目有不同的写法?