模擬退火
模擬退火(sim
ulat
edan
neal
ing[
sa]simulated ~~annealing[sa]
simula
teda
nnea
ling
[sa]
)的出發點是基於物理中固體物質的退火過程與一般組合優化問題之間的相似性。模擬退火演算法是一種通用的優化演算法,其物理退火過程由加溫過程、等溫過程、冷卻過程這三部分組成。
模擬退火演算法是基於mon
te−c
arlo
monte-carlo
monte−
carl
o迭代求解策略的一種隨機尋優演算法,從某一較高初溫出發,伴隨溫度引數的不斷下降,結合概率突跳特性在解空間中隨機尋找目標函式的全域性最優解,即在區域性最優解能概率性地跳出並最終趨於全域性最優。
演算法流程
每次隨機出乙個新解,設當前溫度為t
tt、新解對應的函式值與當前最優解的差為δ
e\delta e
δe。如果這個解更優即δ
e<
0\delta e<0
δe<
0則接受它為當前最優解;否則以一定的概率eδe
te^}
etδe
接受它為當前可能最優解,即隨機出的概率小於eδe
演算法偽**:
status sa()
elseif(
exp(
-del / t)
* rand_max >
rand()
) t *= delta;
}return ans;
}
如何得到盡可能精確的解時間複雜度時間複雜度和上述的三個影響解的引數t,e
ps,d
elta
t,eps,delta
t,eps,
delt
a應用一:求函式的最值
hdu-2899
現在有方程f(x
)=6∗
x7+8
∗x6+
7∗x3
+5∗x
2−k∗
x(0≤
x≤100)
f(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-k*x (0 \leq x \leq 100)
f(x)=6
∗x7+
8∗x6
+7∗x
3+5∗
x2−k
∗x(0
≤x≤1
00),每次給出k
kk,求該函式在[0,
100]
[0,100]
[0,100
]的最小值。
**
需要注意的是,因為本題有定義域的限制,我們在隨機尋找最優解的時候應該限制在定義域中。
const
double t =
100;
const
double delta =
0.996
;const
double eps =
1e-14
;double y;
doublef(
double x)
doublesa(
)elseif(
exp(
-del / t)
* rand_max >
rand()
) t *= delta;
}return ans;
}void
solve()
}
應用二:求費馬點
poj-2420
給出平面內的n
nn個點找出費馬點,即找到乙個點使得該點到其他所有點的距離之和最小,輸出這個最小距離。
**
const
double eps =
1e-14
;const
double dinf =
1e300
;const
double delta =
0.993
;const
double t =
100;
struct point
} p[
105]
;int n;
point s;
double
dis(point a, point b)
double
f(point cur)
return ans;
}doublesa(
)elseif(
exp(
(ans - res)
/ t)
* rand_max >
rand()
) t *= delta;
}return ans;
}void
solve()
s =point
(sumx / n, sumy / n)
;printf
("%.0lf\n",sa
());
}
應用三:求最小球覆蓋
gym101981d - country meow
給出三維座標系的若干個點,在座標系範圍內找到乙個點作為圓心,在給出的點中距離它最遠的點的距離作為半徑作出乙個球,該球內包含了其餘所有的給定點。
**
const
double t =
100000
;const
double delta =
0.998
;const
double eps =
1e-14
;const
double dinf =
1e300
;struct point
} p[
105]
;int n;
point s;
double
dis(point a, point b)
intf
(point cur)
}return ans;
}doublesa(
)elseif(
exp(
-del / t)
* rand_max >
rand()
) t *= delta;
}return ans;
}void
solve()
s =point
(sumx / n, sumy / n, sumz / n)
;printf
("%.8lf\n",sa
());
}
模擬退火演算法
w 模擬退火演算法的基本思想 將乙個優化問題比擬成乙個金屬物體,將優化問題的目標函式比擬成物體的能量,問題的解比擬成物體的狀態,問題的最優解比擬成能量最低的狀態,然後模擬金屬物體的退火過程,從乙個足夠高的溫度開始,逐漸降低溫度,使物體分子從高能量狀態緩慢的過渡到低能量狀態,直至獲得能量最小的理想狀態...
模擬退火演算法
一些求解極值的問題不能通過函式特性直接求解,只能暴力列舉,但是單純的列舉效率不高,通過模擬退火演算法可以高效的找到答案。學習好博文 最小圓覆蓋 hdu 3007 buried memory 大意 給出一些點,求出能覆蓋他們的最小的圓。輸出圓心和半徑 include include include i...
模擬退火演算法
1.模擬退火演算法認識 爬山演算法也是乙個用來求解最優化問題的演算法,每次都向著當前上公升最快的方向往上爬,但是初始化不同可能 會得到不同的區域性最優值,模擬退火演算法就可能跳出這種區域性最優解的限制。模擬退火演算法是模擬熱力學系統 中的退火過程。在退火過程中是將目標函式作為能量函式。大致過程如下 ...