Symulowane wyżarzanie

0

Witam na forum.

Mam za zadanie zdefiniować problemy poszukiwania wartości maksimum dla różnych zadanych funkcji 1-
i 2-wymiarowych i nie wiem jak dostosować ten problem w c++, aby móc wyznaczyć maksimum.

Jeśli ma ktoś jakiś pomysł lub link to byłbym wdzięczny.

0

Chodzi Ci o zdefiniowanie "problemu" czy programu / algorytmu / procesu?

Bo problemów optymalizacyjnych jest bez liku. Np. dwuwymiarowy problem wielomianowy:

f(x, y) = 2x6 - 12.2x</sup>5 + 21.2x4 + 6.2x - 6.4x</sup>3
-4.7
x2 + y6 - 11y5 + 43.3y</sup>4 - 10y
-74.8
y3 + 56.9y2 - 4.1xy - 0.1(y 2)(x 2)
+0.4
y2x + 0.4x2*y

0

Jeśli chodzi o podejście deterministyczne, to poczytaj sobie np. o metodach gradientowych. Ewentualnie stosując podejście stochastyczne możesz wykorzystać metody Monte Carlo.

0

Symulowane wyżarzanie to tak naprawdę jedno z zastosowań metody Monte Carlo.

Metoda jest prosta (jeśli dobrze pamiętam):
#losujesz zbór wartości x, ustalasz dużą temperaturę T
#liczysz wartości f(x)
#losujesz nowe x' z pewnym rozkładem (rozkład normalny o zdanej szerokości w okół starego x), liczysz f(x')
#jeśli f(x')>f(x) aktualizujesz x, jeśli nie to aktualizujesz x z prawdopodobieństwem równym e^{-\frac{f(x)-f(x')}{kT}}
#aktualizujesz T (zmniejszasz odrobinę). skok do 3 jeśli temperatura jest daleka od zera

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