0%
模拟退火算法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| double solve(){ double T=100; double delta = 0.98; double x=50.0; double now=func(x); double ans=now; while(T>eps){ int f[2]={1,-1}; double newx = x+f[rand()%2]*T; if(newx >= 0 && newx<=100){ double next = func(newx); ans=min(ans,next); if(now-next>eps){x=newx;now=next;} } T*=delta; } return ans; }
|