問題
求f(x)在定義域[5,8]上的最大值
原始碼
# 模擬退火法執行結果import numpy as np
import math
# 定義域x從5到8閉區間
bound = [5,8]
tmp = 1e2
tmp_min = 1e-3
alpha = 0.98
beta = 1
def f(x):
return math.sin(x*x)+2.0*math.cos(2.0*x)
def judge(de,tmp):
if de > 0:
return 1
else:
if math.exp(de/tmp) > np.random.rand():
return 1
else:
return 0
x = np.random.rand()*(bound[1]-bound[0])+bound[0]
f = f(x)
counter = 0
while tmp > tmp_min:
delta = (np.random.rand()-0.5)*beta
x_new = x + delta
if x_new < bound[0]:
x_new = x_new + bound[1] - bound[0]
if x_new > bound[1]:
x_new = x_new - bound[1] + bound[0]
f_new = f(x_new)
de = f_new - f
flag = judge(de,tmp)
if(flag):
f = f_new
x = x_new
if de > 0:
tmp = tmp * alpha
counter += 1
print('current x {}, y {},tmp {},counter {}'.format(x,f,tmp,counter))
調調引數看怎樣收斂比較快
# 更優的引數配搭最優化演算法 模擬退火 Python實現
模擬退貨演算法可以分解為解空間 目標函式和初始解三部分 求乙個函式的最優解可以通過貪心演算法獲得其最優解,但有可能是區域性最有解,而不是全域性最優解。為了解決這一問題,產生了模擬退火演算法,該演算法是在搜尋的過程中加入了隨機的因素,以一定的概率接受比當前解要差的解,因此有可能會跳出這個區域性最優解,...
模擬退火演算法
w 模擬退火演算法的基本思想 將乙個優化問題比擬成乙個金屬物體,將優化問題的目標函式比擬成物體的能量,問題的解比擬成物體的狀態,問題的最優解比擬成能量最低的狀態,然後模擬金屬物體的退火過程,從乙個足夠高的溫度開始,逐漸降低溫度,使物體分子從高能量狀態緩慢的過渡到低能量狀態,直至獲得能量最小的理想狀態...
模擬退火演算法
一些求解極值的問題不能通過函式特性直接求解,只能暴力列舉,但是單純的列舉效率不高,通過模擬退火演算法可以高效的找到答案。學習好博文 最小圓覆蓋 hdu 3007 buried memory 大意 給出一些點,求出能覆蓋他們的最小的圓。輸出圓心和半徑 include include include i...