數論 模擬退火

2021-09-22 20:14:56 字數 767 閱讀 3691

題目

大佬說這題可以很好的入門模擬退火

雖然模擬退火不是這題的最佳解

但是確實可以通過這個來理解模擬退火的思想

本題求乙個平衡點,我們要找乙個點使得∑ni=di∗wi最小(di為i點到該點的距離)。

#include#include#include#include#define rg register

#define r rg long double

#define rd t*(rand()*2-rand_max)

const int maxn=1009;

const long double d=0.97,eps=1e-14;//引數。。。模擬退火的核心(但是不會調-_-)

double x[maxn],y[maxn],w[maxn];

int n;

inline long double calc(r x0,r y0)//計算當前選定點的勢能

return res;

}int main()

best=ans=calc(bx/=n,by/=n);

srand(time(null));//保證每次的隨機數不一樣

while(times--)

if(ans>res||exp((ans-res)/t)>(long double)rand()/rand_max)

} }printf("%.3lf %.3lf\n",bx,by);//輸出用lf

return 0;

}

模擬退火演算法

w 模擬退火演算法的基本思想 將乙個優化問題比擬成乙個金屬物體,將優化問題的目標函式比擬成物體的能量,問題的解比擬成物體的狀態,問題的最優解比擬成能量最低的狀態,然後模擬金屬物體的退火過程,從乙個足夠高的溫度開始,逐漸降低溫度,使物體分子從高能量狀態緩慢的過渡到低能量狀態,直至獲得能量最小的理想狀態...

模擬退火合集

首次接觸模擬退火 看來還是挺神奇的。主要參考這篇博文 題意判斷多邊形內部能否容納乙個半徑為r的圓,即在有限的平面內找最優範圍。遺傳演算法的結果難以掌控,爬山演算法又沒法保證跳出區域性最優,所以基於貪心原則的模擬退火演算法還是值得考慮的。然後就是設定每次變化的步長和演化方式。該題可以從每條邊的中點開始...

模擬退火演算法

一些求解極值的問題不能通過函式特性直接求解,只能暴力列舉,但是單純的列舉效率不高,通過模擬退火演算法可以高效的找到答案。學習好博文 最小圓覆蓋 hdu 3007 buried memory 大意 給出一些點,求出能覆蓋他們的最小的圓。輸出圓心和半徑 include include include i...