本來預定是要再寫一部份理論的,不過前面一不小心就把理論都講的差不多了XD
那我們就進入實作吧!
其實實作的部份沒有很難,照著前面的框架走應該是沒問題的
function SA_algorithm()
x = State[] # 蒐集走過的狀態
push!(x, initiate()) # 初始化狀態
T_0 = 10000 # 設定初始溫度
while T > T_MIN && cost_best_counter < halt
for i in 1:max_iteration
new_state = generate_state()
alpha = acceptance(new_state, x[i], T)
push!(x, update(new_state, x[i], alpha))
cooling!(T, T_0)
end
end
return x
end
用julia寫真的很簡潔XD
這邊的energy計算是隱含在acceptance
裏面,不過這樣做似乎不太好,補上剩下的function。
function acceptance(cost_new, cost_current, temperature)
if cost_new < cost_current
return 1.0
end
if temperature == 0.0
return 0.0
end
return exp( -(cost_new - cost_current) / temperature )
end
function update(new_state, current_state, alpha::Float64)
u = rand()
if u <= alpha
return new_state
else
return current_state
end
end
以上有些細節還沒修,所以應該不太能動XD
今天先到這邊