<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>http://junhoahn.kr/noriwiki/index.php?action=history&amp;feed=atom&amp;title=%EB%8B%B4%EA%B8%88%EC%A7%88_%EA%B8%B0%EB%B2%95</id>
	<title>담금질 기법 - 편집 역사</title>
	<link rel="self" type="application/atom+xml" href="http://junhoahn.kr/noriwiki/index.php?action=history&amp;feed=atom&amp;title=%EB%8B%B4%EA%B8%88%EC%A7%88_%EA%B8%B0%EB%B2%95"/>
	<link rel="alternate" type="text/html" href="http://junhoahn.kr/noriwiki/index.php?title=%EB%8B%B4%EA%B8%88%EC%A7%88_%EA%B8%B0%EB%B2%95&amp;action=history"/>
	<updated>2026-04-08T04:47:11Z</updated>
	<subtitle>이 문서의 편집 역사</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>http://junhoahn.kr/noriwiki/index.php?title=%EB%8B%B4%EA%B8%88%EC%A7%88_%EA%B8%B0%EB%B2%95&amp;diff=562&amp;oldid=prev</id>
		<title>Ahn9807: 새 문서: 분류: 탐색  == 개요 == &#039;&#039;&#039;담금질 기법&#039;&#039;&#039;은 전역 최적화 문제에 대한 일반적인 확률적 메타 알고리즘이다. 이 기법은 광대한 탐색 공간 안에서, 주어진 함수의 전역 최적해에 대한 좋은 근사를 준다. 커크패트릭, 젤라트, 베키가 1983년에 고안했다. 보통 영어를 그냥 읽어서 &#039;&#039;&#039;시뮬레이티드 어닐링&#039;&#039;&#039;이라고 부른다.  담금질 기법이라는 말은 금속 공학...</title>
		<link rel="alternate" type="text/html" href="http://junhoahn.kr/noriwiki/index.php?title=%EB%8B%B4%EA%B8%88%EC%A7%88_%EA%B8%B0%EB%B2%95&amp;diff=562&amp;oldid=prev"/>
		<updated>2023-02-11T03:08:43Z</updated>

		<summary type="html">&lt;p&gt;새 문서: &lt;a href=&quot;/noriwiki/index.php?title=%EB%B6%84%EB%A5%98:%ED%83%90%EC%83%89&quot; title=&quot;분류:탐색&quot;&gt;분류: 탐색&lt;/a&gt;  == 개요 == &amp;#039;&amp;#039;&amp;#039;담금질 기법&amp;#039;&amp;#039;&amp;#039;은 &lt;a href=&quot;/noriwiki/index.php?title=%EC%A0%84%EC%97%AD_%EC%B5%9C%EC%A0%81%ED%99%94&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;전역 최적화 (없는 문서)&quot;&gt;전역 최적화&lt;/a&gt; 문제에 대한 일반적인 확률적 메타 알고리즘이다. 이 기법은 광대한 &lt;a href=&quot;/noriwiki/index.php?title=%ED%83%90%EC%83%89_%EA%B3%B5%EA%B0%84&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;탐색 공간 (없는 문서)&quot;&gt;탐색 공간&lt;/a&gt; 안에서, 주어진 &lt;a href=&quot;/noriwiki/index.php?title=%ED%95%A8%EC%88%98&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;함수 (없는 문서)&quot;&gt;함수&lt;/a&gt;의 &lt;a href=&quot;/noriwiki/index.php?title=%EC%A0%84%EC%97%AD_%EC%B5%9C%EC%A0%81%ED%95%B4&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;전역 최적해 (없는 문서)&quot;&gt;전역 최적해&lt;/a&gt;에 대한 좋은 근사를 준다. 커크패트릭, 젤라트, 베키가 &lt;a href=&quot;/noriwiki/index.php?title=1983%EB%85%84&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;1983년 (없는 문서)&quot;&gt;1983년&lt;/a&gt;에 고안했다. 보통 영어를 그냥 읽어서 &amp;#039;&amp;#039;&amp;#039;시뮬레이티드 어닐링&amp;#039;&amp;#039;&amp;#039;이라고 부른다.  담금질 기법이라는 말은 금속 공학...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[분류: 탐색]]&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;담금질 기법&amp;#039;&amp;#039;&amp;#039;은 [[전역 최적화]] 문제에 대한 일반적인 확률적 메타 알고리즘이다. 이 기법은 광대한 [[탐색 공간]] 안에서, 주어진 [[함수]]의 [[전역 최적해]]에 대한 좋은 근사를 준다. 커크패트릭, 젤라트, 베키가 [[1983년]]에 고안했다. 보통 영어를 그냥 읽어서 &amp;#039;&amp;#039;&amp;#039;시뮬레이티드 어닐링&amp;#039;&amp;#039;&amp;#039;이라고 부른다.&lt;br /&gt;
&lt;br /&gt;
담금질 기법이라는 말은 금속 공학의 담금질(quenching)에서 왔는데, annealing의 오역이다. 풀림은 금속재료를 가열한 다음 조금씩 냉각해 [[결정]]을 성장시켜 그 결함을 줄이는 작업이다. 열에 의해서 [[원자]]는 초기의 위치([[내부 에너지]]가 극소점에 머무르는 상태)로부터 멀어져 에너지가 더욱 높은 상태로 추이된다. 천천히 냉각함으로써 원자는 초기 상태보다 내부 에너지가 한층 더 극소인 상태를 얻을 가능성이 많아진다.&lt;br /&gt;
&lt;br /&gt;
SA 알고리즘은 해를 반복해 개선함으로써, 현재의 해 근방에 있는 해를 임의로 찾는데, 그때에 주어진 함수의 값과 전역 인자 &amp;#039;&amp;#039;T&amp;#039;&amp;#039; 가 영향을 준다. 그리고 앞에서 기술한 물리 과정과 비슷한 원리로. &amp;#039;&amp;#039;T&amp;#039;&amp;#039;(온도)의 값은 서서히 작아진다. 따라서, 처음에는 &amp;#039;&amp;#039;T&amp;#039;&amp;#039;가 크기 때문에 해가 크게 변화하지만, &amp;#039;&amp;#039;T&amp;#039;&amp;#039;가 0에 가까워짐에 따라 변화가 줄어든다. 처음은 간단하게 비탈을 올라갈 수 있으므로, [[등산법]]으로 문제가 되는 [[지역 최적점]]에 빠졌을 때의 대책을 생각할 필요가 없다.&lt;br /&gt;
&lt;br /&gt;
[[Hill Climbing]]과 비교하였을때, Simulated Annealing기법은 항상 최적의 해만 찾아가기 위해서 노력하는 힐 클라이빙과는 다르게 잘못 된 선택을 종종함으로 현재의 상태를 더 그복할 수 있는 좋은 방법을 찾아간다는 점에서 차별점이 있다.&lt;br /&gt;
&lt;br /&gt;
== 의사 코드 ==&lt;br /&gt;
모든 경우의 수를 탐색하지 않고 최적의 해를 찾는 방법이 바로 담금질 기법이다. 하지만 이 담금질 기법의 문제점이 바로 적당한 Step 사이즈를 결정하는 것이다.  Step의 사이즈가 작으면 최적화의 방법을 당연히 찾을 것이나, 사이즈가 작으면 작을 수록 무작위로 모든 경우 수를 해보는 것과 점점 차이가 없어진다.&lt;br /&gt;
&lt;br /&gt;
담금질 기법의 원문을 자주 보거나 번역판을 보면 온도라는 말과 Frozen 즉 냉각이라는 말이 자주 나온다. 이것은 이 기법이 담금질 기법과 비슷하기 때문에 같은 개념으로 설명하기 위한 것이지 절대 이것이 정말 온도나 냉각을 의미하는 것이 아니라 경우의 수를 높여서 더 안좋은 결과가 나오는 것을 온도의 상승으로 보고, 경우의 수의 조합을 좋게 해서 온도의 하락으로 보고 설명을 하는 것이다. 온도가 완전히 떨어진 경우 Downhill의 최저점이 우리가 찾는 최적의 조합이 되는 것이다.&lt;br /&gt;
&lt;br /&gt;
이러한 최적의 해를 향하게 하는 온도, 얼마나 온도를 내릴지, 어느 상태에 도달하면 멈출지와 같은 문제들은 경험적으로 찾아야 하는 Hyper Parameter이다. &lt;br /&gt;
&lt;br /&gt;
기본적으로 알고리즘은 다음과 같다.&lt;br /&gt;
# new state으로 변하는 선택을 한다.&lt;br /&gt;
# 만약 new state로 가는 선택이 더 좋은 선택이라면 그 선택으로 이동한다.&lt;br /&gt;
# 만약 new state로 가는 선택이 더 안 좋은 선택이면 일정한 확률로 그 선택으로 이동한다. &lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
begin&lt;br /&gt;
Get an initial solution S; //  s ← s0; e ← E(s) 초기값을 설정한다.&lt;br /&gt;
Get an initial temperature T&amp;gt;0; // 초기 온도값을 설정함, 예) T=1000&lt;br /&gt;
while not yet &amp;quot;frozen&amp;quot; do  // 최적의 경우를 찾을 때까지 즉 온도가 완전히 내려 갈때까지 프로그램을 Loop한다.&lt;br /&gt;
   for 1&amp;lt;= i &amp;lt;= P do       // P=nk 즉 Step의 사이즈가 되고 k는 주어진 종류를 n은 우리가 결정하게 된다. 즉 STEP사이즈를 결정하게 된다.&lt;br /&gt;
   Pick a random neighbor S&amp;#039; of S; // 임의로 선택한 솔루션 S&amp;#039; 과 기존의 솔루션 S를 선택한다.&lt;br /&gt;
   ∆ ← cost(S&amp;#039;)-cost(S); // 기존의 솔루션과 새로운 솔루션을 가격의 차 즉 최적화의 값의 차를 만든다.&lt;br /&gt;
                          // ∆ ← area(S&amp;#039;)-area(S), 돌을 예를 들면 면적이 크기가 효율성의 차이이다.&lt;br /&gt;
   /* downhill move */&lt;br /&gt;
   if ∆ &amp;lt;= 0 then S ← S&amp;#039; // S&amp;#039;의 값이 작으면 즉 차지하는 면적이 작고, 더 효율적으로 배치 되었으면,&lt;br /&gt;
                          // 이것이 현재까지의 최적화가 되고 이것을 온도가 내려간다. Downhill로 표현한다.&lt;br /&gt;
   /* uphill move */&lt;br /&gt;
   if ∆ &amp;gt; 0 then S ← S&amp;#039; // S&amp;#039;의 값이 크면 즉 차지하는 면적이 크고, 더 비 효율적으로 배치 되었으면, 이것을 온도가 올라간다.&lt;br /&gt;
                         //  uphill로 표현한다.&lt;br /&gt;
T ← rT; // 한가지 경우의 수를 처리 했었므로 한 단계 줄어 들게 되면 다음 반복을 진행한다.&lt;br /&gt;
return S    // 프로그램이 마무리 되면 우리가 찾는 최적화의 답을 리턴하고, 정확히 최적화의 답을 찾았으면 이것을 Global Optimization 즉 모든 경우의 수중에서 가장 최적화된 것이다.&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
여기서 원래의 SA(Generic Simulated Annealing Algorithm)은 여러가지 찾는 속도나 사용하는 메모리의 경우에 대하여 문제점이 있다. 하지만 이 아이디어 자체는 모든 분야에 대하여 적용이 가능하다. 임의의 경우의 수가 많은 경우 정해진 조건에서 대용량의 최적화를 찾을 때 유용하게 사용이 된다.&lt;/div&gt;</summary>
		<author><name>Ahn9807</name></author>
	</entry>
</feed>