python實現模擬退火演算法

2021-09-18 01:23:05 字數 1260 閱讀 3866

問題

求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...