الگوریتم جست وجوی simulated annealing

الگوریتم جست وجوی simulated annealing
الگوریتم شبیه سازی annealing که نسخه ای از تپه نوردی اتفاقی است و پایین آمدن از تپه مجاز است. حرکت به طرف پایین و به آسانی در اوایل زمانبندی annealing پذیرفته شده و با گذشت زمان کمتر اتفاق می افتد.
تضمینی وجود ندارد که الگوریتم تپه نوردی که هرگز حرکت روبه پایین به سمت حالتهایی با مقادیر کوچکتر (با هزینه بالاتر) را انجام نمیدهد، "کامل باشد" ، زیرا میتواند در یک ماکزیمم محلی متوقف شود. برعکس، یک حرکت کاملا تصادفی، یعنی حرکت به یک پسین که بطور یکنواخت و بطور تصادفی از مجموعه ای از پسین ها انتخاب شد، "کامل " است، اما کاملا غیر کارآمد است. لذا، منطقی است که ازیک تپه نوردی با حرکت تصادفی استفاده شود که کارامد و کامل است.
simulated annealing چنین الگوریتمی است. در متالوژی، annealing فرآیندی است که فلزهای سخت و شیشه را با درجه بالایی حرارت میدهد و سپس آنها را به تریج سرد میکند. به این ترتیب مواد به حالت کریستالی با انرژی پایین در می آیند. برای درک simulated annealing به جای تپه نوردی، فرود آمدن از شیب (یعنی مینیمم کردن هزینه) را در نظر میگیریم. جواب simulated annealing با تکان دادن شدید شروع میشود (دمای زیاد) و به تدریج شدت تکان دادنرا کاهش میدهد (به دمای پایینتر).
در شبه کد الگوریتم simulated annealing به جای انتخاب بهترین حرکت، یک حرکت تصادفی را انتخاب میکند. اگر این حرکت، وضعیت را بهبود بخشد، همواره قابل قبول است. وگرنه الگوریتم حرکت را با احتمال کمتر از 1 میپذیرد. میزان احتمال برحسب میزان بد بودن حرکت، بطور نمایی به اندازه ∆E کاهش می یابد و در نتیجه ارزیابی بدتر میشود. وقتی دمای "T" پایین می آید، این احتمال نیز کاهش می یابد: در شروع کار، وقتی دما بالا است حرکتهای "بد" با احتمال بیشتری رخ میدهند و بعید است که با کاهش T بیشتر شود. اگر زمانبندی ، T را به تدریج کاهش دهد، الگوریتم یک بهینه سراسری را با احتمال نزدیک به 1 می یابد.
شبه کد الگوریتم جست وجوی simulated annealing
function SIMULATED-ANNEALING (problem,schedule) returns a solution state
inputs: problem, a problem
schedule, a mapping from time to “temperature”
current <-- MAKE-NODE (problem.INITIAL-STATE)
for t=1 to ∞ do
T <-- schedule(t)
if T=0 then return current
next <-- a randomly selected successor of current
∆E <-- next.VALUE - current.VALUE
if ∆E > 0 then current <-- next
else current <-- next only with probability e^∆E/T