시뮬레이티드 어닐링 (SA, simulated annealing)은 1983년에 커크패트릭(Kirkpatrick)이 개발한 최적화 알고리즘으로서 물리적 어닐링 과정을 최적화의 관점에서 모방하여 알고리즘을 개발했다고 한다. 시뮬레이티드 어닐링(SA)은 처음에 순회외판원문제(TSP, traveling salesman problem)와 같은 조합 최적화 문제를 해결하기 위해 도입되었지만 최근에는 연속형 최적화 문제 해결에도 적용되고 있다.
물리적 어닐링은 금속을 가열하여 액체 상태로 만든 다음 규칙적인 결정성 구조를 형성할 때까지 천천히 냉각시키는 방법이다. 냉각 과정에는 냉각이 시작되는 초기 온도와 냉각 속도 등 두가지 주요 파라미터가 있는데, 이 값에 따라 고체 상태의 금속의 강성과 원자 구조의 규칙성이 결정된다. 초기 온도가 충분히 높지 않으면 액체 상태에서 금속의 원자가 최소 에너지 구조로 위치를 재배열할 수 있는 자유도가 충분하지 않고, 냉각 시간이 충분하게 주어지지 않으면 금속의 원자가 최소의 내부 에너지로 규칙적으로 정렬하여 결정 격자를 형성 할 수 있는 시간이 부족해진다.

'시스템'이 특정 상태에 있을 확률을 해당 상태의 에너지와 시스템의 온도의 함수로 나타내는 확률 분포를 볼츠만(Boltzman) 분포라고 하며 다음과 같이 주어진다.
여기서 시스템이란 충분한 수의 원자의 집합을 의미하며,

SA 알고리즘은 물리적 어닐링을 시뮬레이션하는 알고리즘으로서 어닐링이 진행되는 금속의 물리적 구조의 변화를 재현함으로서 최소의 에너지를 갖는 해(solution)를 구하는 것을 목표로 한다.
다음과 같이 제약조건이 없는 일반적인 최적화 문제를 보자.
여기서
0. 온도(temperature)의 초기값
다음을
1. 후보(candidate) 해를 추출한다.
이에 대해서는 다양한 방법이 제안되었는데 대개 현재 해
2. 만약
만약
2-1. 후보 해의 수락 확률(acceptance probability)을 계산한다.
2-2. 확률
즉 균등분포
3. 선택한 냉각(cooling) 스케줄에 따라 다음 온도
위 알고리즘에서 보듯이 SA는 해를 수정하는 과정과 해를 선택적으로 수용하는 수락 확률로 구성되는 메트로폴리스(Metropolis) 기법을 기반으로 한다. 메트로폴리스 알고리즘에서는 제안 확률밀도함수가 대칭이라고 가정하기 때문에 수락 확률이 목표 확률밀도함수만의 함수가 된다. 여기서 목표 확률밀도함수 또는 확률 분포에 해당하는 것은 식 (1)의 볼츠만 분포다. 또한 에너지는
SA는 물리적 어닐링 과정을 모방하는 데서 유래하여 볼츠만 분포를 목표 확률 분포로 간주하지만 일반적인 확률 분포
여기서

SA 알고리즘과 메트로폴리스 알고리즘(https://pasus.tistory.com/367)을 비교해 보면, SA 알고리즘이 목표 확률밀도함수
메트로폴리스 알고리즘에 의하면 이론적으로는 특정 온도
SA 알고리즘에서 온도

냉각 또는 어닐링 스케줄, 즉 온도를 낮추는 방법은 기존 온도에서 일정한 온도를 빼주는 방법 (
효율적인 어닐링 알고리즘을 얻으려면 적절한 제안 분포와 적절한 냉각 스케줄을 선택하는 것이 매우 중요하다. 문헌에 보고된 부정적인 SA 결과의 대부분은 잘못된 제안 분포 설계에서 비롯된 경우가 많다고 한다.
다음은 PSO에 관한 게시글(https://pasus.tistory.com/357)에서 예제로 풀었던 최적화 문제다. 이번에는 SA로 풀어보자.
답이
iteration 1 : cost = 33.52190
iteration 2 : cost = 33.52190
iteration 3 : cost = 33.52190
iteration 4 : cost = 33.52190
iteration 5 : cost = 21.72813
iteration 6 : cost = 21.72813
iteration 7 : cost = 21.72813
...
iteration 998 : cost = 0.00782
iteration 999 : cost = 0.00782
iteration 1000 : cost = 0.00782
solution is
0.97813
2.08568
-2.99964

매트랩 코드는 다음과 같다.
%
% Simulated Annealing for argmin f(x)
%
% (c) st.watermelon
clear;
% Gaussian proposal pdf with mu-mean and 1-std
q_pdf = @(x, mu) 1/sqrt(2*pi)*exp(-(x-mu)^2/2);
% parameters
T0 = 1; % initial temperature
T = T0;
cooling_rate = 0.995;
max_iter = 1000;
% 0. initialize
x = randn(3,1);
fn = objective(x);
for t = 1 : max_iter
fn_hist(t) = fn';
% 1. sampling candidate from proposal q(x_new|x_t)
x_new = randn(3,1) + x;
% 2. accept or reject
fn_new = objective(x_new);
dE = fn_new - fn; % to downhill
if dE < 0
x = x_new;
fn = fn_new;
else
% 2-1. acceptance probability
alpha = min(1, exp(-dE/T));
% 2-2. accept or reject
u = rand(1);
if u < alpha
x = x_new;
fn = fn_new;
end
end
% 3. update temperature
T = T * cooling_rate;
if T < 1e-6
break;
end
fprintf('iteration %d : cost = %.5f \n', t, fn);
end
% result
semilogy(fn_hist);
fprintf('\n solution is \n %8.5f\n %8.5f\n %8.5f\n\n', x);
%%
function out = objective(x)
out = (x(1)-1).^2 + (x(2)-2).^2 + (x(3)+3).^2;
end
'AI 수학 > 최적화' 카테고리의 다른 글
시뮬레이티드 어닐링 (SA)의 TSP 적용 (0) | 2025.02.12 |
---|---|
파티클 군집 최적화 (Particle Swarm Optimization) (0) | 2024.12.20 |
라인서치 (Line Search) 방법 (0) | 2022.04.21 |
프라이멀-듀얼 내부점 방법 (Primal-Dual Interior-Point Method) (0) | 2022.04.15 |
장벽 내부점 방법 (Barrier Interior-Point Method) (0) | 2022.04.13 |
댓글