Symulowane wyżarzanie - złożoność

0

Witam. Mam pytanie jak obliczy złożoność obliczeniową algorytmu symulowanego wyżarzania?

Poniżej pseudokod:

 
Wyznaczyć rozwiązanie początkowe s i sB 
Wyznaczyć temperaturę początkową t 
repeat
      for i = 0 to L
      Wyznaczyć losowo sąsiednie rozwiązanie s′ ∈ N(s)
      if (f(s′) < f(sB)) then sB = s′
      δ = f (s′) − f (s)
      if δ < 0 then s = s′
      else
          Wylosowac x z zakresu (0,1) 
          if (x < exp( −δ )) then s = s′
  t = α(t)
until warunekzatrzymania = true 
Zwrócić rozwiązanie sB

Opis problemu i pseudokod znajdują się tu:
http://155.158.112.34/~algorytmyewolucyjne/.../algorytm_symulowanego_wyzarzania.pdf

Wszelkie wskazówki będą mile widziane:)

0

Ok, poprawiłem nieco ten kod. Przypuśćmy, że warunek zatrzymania będzie równy true jeśli temperatura będzie mniejsza od 1.

Wyznaczyć rozwiązanie początkowe s i sB 
Wyznaczyć temperaturę początkową t 
repeat
      for i = 0 to L
      Wyznaczyć losowo sąsiednie rozwiązanie s′ ∈ N(s)
      if (f(s′) < f(sB)) then sB = s′
      δ = f (s′) − f (s)
      if δ < 0 then s = s′
      else
          Wylosowac x z zakresu (0,1) 
          if (x < exp( −δ )) then s = s′
  t = α(t)
  if (t < 1)
  warunek = zatrzymania = true
until warunekzatrzymania = true 
Zwrócić rozwiązanie sB
0

Oczywiscie mialo byc tak:

Wyznaczyć rozwiązanie początkowe s i sB 
Wyznaczyć temperaturę początkową t 
repeat
      for i = 0 to L
      Wyznaczyć losowo sąsiednie rozwiązanie s′ ∈ N(s)
      if (f(s′) < f(sB)) then sB = s′
      δ = f (s′) − f (s)
      if δ < 0 then s = s′
      else
          Wylosowac x z zakresu (0,1) 
          if (x < exp( −δ )) then s = s′
  t = α(t)
  if (t < 1)
  warunekzatrzymania = false
until warunekzatrzymania = true 
Zwrócić rozwiązanie sB
0

W symulowanym wyżarzaniu zwykle jako warunek stopu przyjmuje się, gdy temperatura spadnie poniżej zadanej wartości lub gdy wykonano dostateczną liczbę iteracji. Co oznacza tyle, że jeśli te parametry nie są celowo powiązane przez projektanta konkretnego algorytmu z wielkością problemu, to liczba iteracji algorytmu wynosi O(const), co oznacza że całkowita złożoność obliczeniowa algorytmu jest równa złożoności (wyboru rozwiązania z sąsiedztwa + obliczania funkcji kosztu rozwiązania).

A formatowanie pseudokodu faktycznie mógłbyś nieco poprawić.
Chyba powinno być jednak tak:

repeat
 ...
 if (t < 1)
   warunekzatrzymania = true
until warunekzatrzymania = true 

Nie wiem, czemu przeprawiłeś na false, skoro t jest zmniejszane.

Albo prościej:

repeat 
  ...
until (t < 1) 

0 użytkowników online, w tym zalogowanych: 0, gości: 0