參考:
參考:爬山演算法
比如我要求乙個函式在區間的最大值,
我開始會在這個區間內隨機選幾個點,然後挑最大的,
接下來在最大的點的附近又開始隨機選幾個點,然後再挑最大的
以此迴圈,最終是可以找到滿足精度要求的
盤山演算法實際上就是貪心,所以它滿足區域性最優解,但不一定滿足全域性最優解
我們想要的最終答案是a
爬山演算法最終可能會得到b
模擬退火
為了解決爬山演算法的不足
模擬退火會以一定概率接受乙個非更優解
假如當前記錄的最優解為b
隨機到的下乙個點為c
爬山演算法會直接否定了這個點,但模擬退火決定以一定概率去接受
這樣得到最終全域性最優解a的概率就大大增加
模擬演算法的描述是這樣的:
若移動後得到更優解,則總是接受該移動
若移動後的解比當前解要差,則以一定的概率接受移動,而且這個概率隨著時間推移逐漸降低。
這裡的一定的概率的計算參考了金屬冶煉的退火過程,這也是模擬退火演算法名稱的由來。
在 溫度
為t的情
況下出現
一次能量
差為δe
的降溫的
概率為在溫度為t的情況下出現一次能量差為δe的降溫的概率為
在溫度為t的
情況下出
現一次能
量差為δ
e的降溫
的概率為
p (d
e)=e
xp(d
e/(k
t))p(de) = exp( de/(kt) )
p(de)=
exp(
de/(
kt))
說白了就是:溫度越高,出現一次能量差為de的降溫的概率就越大;溫度越低,則出現降溫的概率就越小。又由於de總是小於0(否則就不叫退火了),因此de/kt < 0 ,所以p(de)的函式取值範圍是(0,1) 。
隨 著溫
度t的降
低,p(
de)會
逐漸降低
。隨著溫度t的降低,p(de)會逐漸降低。
隨著溫度t的
降低,p
(de)
會逐漸降
低。例題strange fuction
題意:f(x
)=6∗
x7+8
∗x6+
7∗x3
+5∗x
2−y∗
x(0<=x
<
=100
)f(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x (0 <= x <=100)
f(x)=6
∗x7+
8∗x6
+7∗x
3+5∗
x2−y
∗x(0
<=x
<=1
00)給你y
讓你求m
inf(
x)給你y 讓你求min f(x)
給你y讓你求
minf
(x)
ac code
/*
strange fuction
hdu - 2899
題意: f(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x (0 <= x <=100) 給你y求最小值
解法 模擬退火
*/#include
using namespace std;
#define t 100.0
#define delta 0.999
#define eps 1e-8
double y,dx[2]
=;doublef(
double x)
intmain()
printf
("%.4lf\n"
, ans);}
return0;
}
/*
strange fuction
hdu - 2899
題意: f(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x (0 <= x <=100) 給你y,求f(x)最小值
解法: 爬山演算法
*/#include
using namespace std;
#define t 100.0
#define delta 0.999
#define eps 1e-8
double y,dx[2]
=;doublef(
double x)
intmain()
printf
("%.4lf\n",f
(x));}
return0;
}
模擬退火演算法
w 模擬退火演算法的基本思想 將乙個優化問題比擬成乙個金屬物體,將優化問題的目標函式比擬成物體的能量,問題的解比擬成物體的狀態,問題的最優解比擬成能量最低的狀態,然後模擬金屬物體的退火過程,從乙個足夠高的溫度開始,逐漸降低溫度,使物體分子從高能量狀態緩慢的過渡到低能量狀態,直至獲得能量最小的理想狀態...
模擬退火演算法
一些求解極值的問題不能通過函式特性直接求解,只能暴力列舉,但是單純的列舉效率不高,通過模擬退火演算法可以高效的找到答案。學習好博文 最小圓覆蓋 hdu 3007 buried memory 大意 給出一些點,求出能覆蓋他們的最小的圓。輸出圓心和半徑 include include include i...
模擬退火演算法
1.模擬退火演算法認識 爬山演算法也是乙個用來求解最優化問題的演算法,每次都向著當前上公升最快的方向往上爬,但是初始化不同可能 會得到不同的區域性最優值,模擬退火演算法就可能跳出這種區域性最優解的限制。模擬退火演算法是模擬熱力學系統 中的退火過程。在退火過程中是將目標函式作為能量函式。大致過程如下 ...