0
更新
我會找到全局最小值,繪圖顯示這個函數有許多局部最小值。模擬退火的實現;如何提高性能?
f[x_] = 0.5 x^2 + Cos[Pi x] 2 Sin[Pi x] + Cos[Pi x] + 2 Sin[Pi x];
plt1 = Plot[f[x], {x, -5, 5}, PlotStyle -> RGBColor[1, 0, 0],Frame -> True]
根據文件(http://ww.w.sliponline.org/Publications/Conferences/24/c24.pdf),我將實現SA算法,但性能非常緩慢。
fTmp = fBest = xBest = xTmp = 999.0;
k = 0;
LIMIT = 10^6;
tTmp = tInit = 300;
Alpha = 0.999999999;
For [tTmp = tTmp * Alpha;, k < LIMIT, k++,
xTmp = RandomReal[{-5, 5}];
fTmp = f[xTmp];
If [fTmp < fBest, fBest = fTmp; xBest = xTmp,
PRA = N[Min[{1, Exp[-(fTmp - fBest)/tTmp]}]];
R = RandomReal[{0.0, 1.0}];
If [R < PRA, fBest = fTmp; xBest = xTmp; k++,];
];
tTmp = tTmp * Alpha;
];
Print[xBest]
Print[fBest]
-0.390741
-2.10428
是否有可能提高模擬退火的性能和精度?請隨時發表評論,謝謝。
你能給我一個很好的例子嗎?我在哪裏可以找到有關此主題的網站或博客的示例? –
我已經添加了一些額外的信息給答案。我注意到你正在使用固定循環而不是動態停止標準。就研究論文的例子而言,我無法獲得大學給予學生的論文。如果你這樣做,只是谷歌模擬退火,看看有什麼學術文章出現,並閱讀了幾個有例子。他們可以解釋他們選擇的參數或者顯示他們如何優化他們。 – BobbyJ
非常感謝。 –