模擬退火(SA)模板

2021-09-17 20:35:56 字數 1389 閱讀 9671

退役很久了,今天看一篇*****用sa演算法代替隨機梯度優化神經網路,故學習一波sa演算法。

因為網上的資料很多,所以這裡就不多說啦。

詳情可以看

高中生太強啦

這裡放乙個模板~

如圖:有n個重物,每個重物繫在一條足夠長的繩子上。每條繩子自上而下穿過桌面上的洞,然後繫在一起。圖中x處就是公共的繩結。假設繩子是完全彈性的(不會造成能量損失),桌子足夠高(因而重物不會垂到地上),且忽略所有的摩擦。

問繩結x最終平衡於何處。

注意:桌面上的洞都比繩結x小得多,所以即使某個重物特別重,繩結x也不可能穿過桌面上的洞掉下來,最多是卡在某個洞口處。

輸入格式:

檔案的第一行為乙個正整數n(1≤n≤1000),表示重物和洞的數目。接下來的n行,每行是3個整數:xi.yi.wi,分別表示第i個洞的座標以及第 i個重物的重量。(-10000≤x,y≤10000, 0輸出格式:

你的程式必須輸出兩個浮點數(保留小數點後三位),分別表示處於最終平衡狀態時繩結x的橫座標和縱座標。兩個數以乙個空格隔開。

輸入樣例#1:複製

3

0 0 1

0 2 1

1 1 1

輸出樣例#1:複製

0.577 1.000
[jsoi]

**:

#include using namespace std;

const int n = 1e4+10;

struct point

}p[n];

int n;

double g[n];

point ans;

double minans=dbl_max;

double rand()

double sqr(double a)

double eulc(point a,point b)

double calc(point a)

tmp*=dec;

}for(int i=0;i<10000;i++)

return now;

}int main()

{ while(scanf("%d",&n)!=eof)

{point init;

init.x=init.y=0.0;

for(int i=0;i能不能ac全看臉,啟發式演算法為了逼近全域性最優解,其中包含有隨機值。

當然實際使用中,我們往往並不需要最優解,而只要乙個逼近最優解的值就行了。

模擬退火演算法(SA)

介紹模擬退火前,先介紹爬山演算法。爬山演算法是一種簡單的貪心搜尋演算法,該演算法每次從當前解的臨近解空間中選擇乙個最優解作為當前解,直到達到乙個區域性最優解。爬山演算法實現很簡單,其主要缺點是會陷入區域性最優解,而不一定能搜尋到全域性最優解。如圖1所示 假設c點為當前解,爬山演算法搜尋到a點這個區域...

模擬退火模板

個人感覺模擬退火就是通過隨機法逐步趨近於最優值。結合例題進行說明 一 求三角形的費馬點 平面內到三個頂點距離和最小的點 includeusing namespace std struct point p 5 int row 4 向四個方向移動點尋找最優解 int col 4 double len p...

matlab練習程式(模擬退火SA)

模擬退火首先從某個初始候選解開始,當溫度大於0時執行迴圈。在迴圈中,通過隨機擾動產生乙個新的解,然後求得新解和原解之間的能量差,如果差小於0,則採用新解作為當前解。如果差大於0,則採用乙個當前溫度與能量差成比例的概率來選擇是否接受新解。溫度越低,接受的概率越小,差值越大,同樣接受概率越小。是否接受的...