模擬退火演算法實現尋找函式最值
阿新 • • 發佈:2019-02-04
模擬退火的演算法思想:
模擬退火演算法從某一較高初溫出發,伴隨溫度引數的不斷下降,結合概率突跳特性在解空間中隨機尋找目標函式的全域性最優解,即在區域性最優解能概率性地跳出並最終趨於全域性最優。
模擬退火演算法模板:
初始溫度 T=100 冷卻速率 rate=0.99 while T>1: 隨機生成一個解 x=random 隨機解的適應度 y=f(x) 如果當前適應度大於最佳適應度,則儲存新解 if y>Y: X=x Y=y else: *演算法核心如果當前適應度小於最佳適應度,則以一定概率儲存新解,這個概率由適應度差值和當前溫度決定,差值越小,溫度越大,概率越大 if exp(-(Y-y)/T)>random(): X = x Y = y 冷卻 T*=rate
例子:
求解f(x)=x+5sin(5x)+2cos(4x)在區間上的函式最值。
程式碼
import numpy as np import matplotlib.pyplot as plt import math import random def aimFunction(x): y=x+5*math.sin(5*x)+2*math.cos(4*x) return y start=0 end=10 X=random.uniform(start,end) Y=aimFunction(X) T=100 rate=0.99 while T>1: x=random.uniform(start,end) y=aimFunction(x) if y>Y: X=x Y=y else: if math.exp(-(Y-y)/T)>random.random(): X = x Y = y T*=rate print(X,Y)