1. 程式人生 > >模擬退火演算法實現尋找函式最值

模擬退火演算法實現尋找函式最值

模擬退火的演算法思想

模擬退火演算法從某一較高初溫出發,伴隨溫度引數的不斷下降,結合概率突跳特性在解空間中隨機尋找目標函式的全域性最優解,即在區域性最優解能概率性地跳出並最終趨於全域性最優。

模擬退火演算法模板:

初始溫度
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)