一些求解極值的問題不能通過函式特性直接求解,只能暴力列舉,但是單純的列舉效率不高,通過模擬退火演算法可以高效的找到答案。
學習好博文:
最小圓覆蓋:
hdu 3007
buried memory
大意:給出一些點,求出能覆蓋他們的最小的圓。輸出圓心和半徑
#include #include #include #include using namespace std;
const double eps=1e-7,inf=1e99; // t: 初始溫度 delta:下降速率
const double t=10,delta=0.88; //一般地,t=100, delta=0.98
const int n=5e2+10;
struct pointp[n],s;
double dis(point a,point b)
double solve(int n)
}s.x+=(p[k].x-s.x)/d*t;
s.y+=(p[k].y-s.y)/d*t;
r=min(r,d);
t*=delta;
}return r;
}int main()
p[35],s;
double dis(point a,point b)
double solve(int n)
}double d=dis(s,p[k]);
ans=min(ans,d);
s.x+=(p[k].x-s.x)/d*t; //向量
s.y+=(p[k].y-s.y)/d*t;
s.z+=(p[k].z-s.z)/d*t;
t*=delta;
}return ans;
}int main()
int jud(double a,double b)}}
}t=t*delta;
}for(int i=0;i>t;
while(t--)
return 0;}/*
%.4lf\n
2100
-74.4291
200-178.8534
-------------
%lf\n
2100
-74.429122
200-178.853367
*/
本想嘗試做三分題,zoj 3421
error curves,但是發現不是超時,就是wa。
模擬退火演算法
w 模擬退火演算法的基本思想 將乙個優化問題比擬成乙個金屬物體,將優化問題的目標函式比擬成物體的能量,問題的解比擬成物體的狀態,問題的最優解比擬成能量最低的狀態,然後模擬金屬物體的退火過程,從乙個足夠高的溫度開始,逐漸降低溫度,使物體分子從高能量狀態緩慢的過渡到低能量狀態,直至獲得能量最小的理想狀態...
模擬退火演算法
1.模擬退火演算法認識 爬山演算法也是乙個用來求解最優化問題的演算法,每次都向著當前上公升最快的方向往上爬,但是初始化不同可能 會得到不同的區域性最優值,模擬退火演算法就可能跳出這種區域性最優解的限制。模擬退火演算法是模擬熱力學系統 中的退火過程。在退火過程中是將目標函式作為能量函式。大致過程如下 ...
模擬退火演算法
題目大意 給出平面上n個點,求到所有點距離和最短的點,輸出該距離和。include include include include include struct posp 101 int n 計算點x到各點距離之和 double dis pos x 模擬退火 double sa return mi ...