優化演算法(二)模擬退火演算法

2021-08-27 04:03:21 字數 1241 閱讀 1197

import numpy as np

# 隨機確定變化的方向

def direction2():

if np.random.random() > 0.5:

return 1

return -1

# 隨機確定是否接受較差的解

def direction3(delta, t):

chance = np.exp(-1*delta/t)

if np.random.random() < chance:

return true

return false

# 模擬退火求解最小值

def saa(fitness, x, t=10000, c=0.96, t=1000):

# fitness 表示待優化函式

# x 表示一組可行解

# t 表示溫度

# c 表示退火因子

# t 表示在每個溫度下的尋優次數

# 初始化最優解

pg = x

# 解空間的維度

d = len(x)

# 主迴圈

while t > 1:

for i in range(t):

for j in range(d):

# 構造新解

nx = pg[:]

nx[j] += direction2() * np.random.random()

# 更新最優解

if fitness(nx) < fitness(pg):

pg = nx

elif direction3(fitness(nx)-fitness(pg), t):

pg = nx

t *= c

# 返回最優解和最優值

return pg, fitness(pg)

# 目標函式

def func(x):

x1, x2 = x

return x1 ** 2 + 2 * x1 + 1 + x2 ** 2 + 2 * x2 + 1

# 初始解

init = [2*np.random.random(), 2*np.random.random()]

xm, fv = saa(func, init)

print(xm, fv)

# [-1.001342543851264, -1.0025416982616582] 8.262654045854134e-06

智慧型優化演算法之模擬退火演算法

詳細的 解釋及背景,過幾天再進行補充 模擬退火演算法 問題背景是tsp問題,有100個旅遊景點。並且假設距離矩陣d已經給出。d已知 sum inf for j 1 1000 s 1,1 randperm 100 102 temp 0 for i 1 101 temp temp d s i s i 1...

演算法 模擬退火演算法

模擬退火演算法 一 簡單介紹 於固體退火原理,是一種基於概率的演算法。物理學解釋 將固體加溫至充分高,再讓其徐徐冷卻,加溫時,固體內部粒子隨 溫公升變為無序狀,內能增大,而徐徐冷卻時粒子漸趨有序,在每個溫度都達到 平衡態,最後在 常溫時達到基態,內能減為最小。模擬退火演算法從某一較高初溫出發,伴隨溫...

模擬退火演算法

w 模擬退火演算法的基本思想 將乙個優化問題比擬成乙個金屬物體,將優化問題的目標函式比擬成物體的能量,問題的解比擬成物體的狀態,問題的最優解比擬成能量最低的狀態,然後模擬金屬物體的退火過程,從乙個足夠高的溫度開始,逐漸降低溫度,使物體分子從高能量狀態緩慢的過渡到低能量狀態,直至獲得能量最小的理想狀態...