Simulované žíhání jako nástroj k hledání optimálního řešení Michael Pokorný Střední škola aplikované kbernetik s.r.o., Hradecká 5, Hradec Králové pokorn.michael@ssakhk.cz Abstrakt Simulované žíhání je metoda hledání optimálních řešení úloh vužívající fzikální intuici krstalizujícího kovu. Realizoval jsem jej v jazce C++ a provedl pokus na vhodných funkcích. Úvod Simulované žíhání (angl. simulated annealing) je metoda pro vhledání přibližného optimálního řešení úloh, která má velký stavový prostor nebo která nelze optimalizovat analtick. Jako příklad takové úloh lze zmínit například problém batohu (jak naplnit batoh omezené nosnosti věcmi s co největší hodnotou?). Oproti prohledání všech možných konfigurací sstému sice nezaručuje nalezení doopravd ideálního výsledku, ale zato v konstantním počtu kroků pravděpodobně najde přinejmenším výsledek velmi dobrý. Bla nezávisle popsána Scottem Krikpatrickem, C. Danielem Gelattem a Mariem P. Vecchim v roce 983 a Vladem Černým v roce 985. Tělo příspěvku. Inspirace metod Inspiraci k metodě simulovaného žíhání posktla metalurgie. Při žíhání se postupně ochlazuje zahřátý kov, ve kterém vznikají velké krstal s menšími defekt. Při zahřátí se atom uvolní ze svých počátečních pozic (z lokálních minim vnitřní energie) a začínají náhodně kmitat mezi stav s všší energií. S ochlazováním atom kmitají čím dál tím méně a více se drží v pozicích s nízkými energiemi. Simulované žíhání obdobně postupně ochlazuje průběžný stav. Vnitřní energii, v jejimž minimu se stav postupně usadí, nahrazuje minimalizované funkce. V každém kroku najde náhodný bod v okolí současného stavu, porovná jeho energii se současným stavem, a s určitou pravděpodobností závislou na tomto rozdílu a na teplotě se do tohoto nového stavu přesune. Tato pravděpodobnost není nutně nulová v případě, že nový stav je horší než stav původní, proto tato metoda při dostatečné teplotě neuvázne v lokálním minimu. Tuto metodu lze použít na funkce nejen nad R nebo Z, ale i nad vektor. Vstup: T (počáteční teplota), (počáteční stav) T T,, k opakuj n stav z okolí f( ) f( n) T ) p g( n s pravděpodobností p k k + T h(t, k) dokud k < k ma ; Charakteristika simulovaného žíhání je do velké mír určena charakteristickou skokovou funkcí g a ochlazovací funkcí h. Mezi jejich obvklé kombinace patří: Klasická : g () = { ep() <, h (T, k) = T Q k Moderní : g () = ( + ep( )), h (T, k) = T log (K+) FSA (fast simulated annealing): g 3 () = + arctan π, h 3 (T, k) = T + K N
FSA také zavádí oproti jednodušším variantám novinku: nové řešení se nní určuje jako nov = + ξ, kde ξ je náhodná veličina s Cauchho rozdělením a K = (N + K N, R; N je stejné jako v N chladící funkci). Toto umožňuje FSA se snižováním teplot nejenom méně poskakovat, ale i lépe mířit.
. Pokus.8.6.4. 8 6 4 8 f() -. -.4 6 4 -.6 -.8 5 5 Obrázek : Graf f() = ep( ) cos() na ; - 5 5 5 3 Obrázek 3: Porovnání různých strategií žíhání - moderní Svůj program jsem nejdříve testoval minimalizací f() = ep( ) cos() na intervalu ;. Tato funkce má na tomto intervalu 3 lokální minima v bodech π, 3π a 5π, přičemž první z nich je minimem celého intervalu. Otestoval jsem jak klasickou a moderní sadu skokových a chladících funkcí, tak i FSA. FSA oproti jednodušším strategiím dosáhlo minima za mnohem kratší dobu, a navíc získalo výsledek s větší přesností. 8 6 4 8 6 4 5-5 5 5 3 35 4 45 5 Obrázek 4: Porovnání různých strategií žíhání - FSA 5-5 3 4 5 6 Obrázek : Porovnání různých strategií žíhání - klasická Dále jsem program upravil na hledání výsledku ve formě vektoru a vzkoušel jej na Rosenbrockově a Himmelblauově funkci. Rosenbrockova funkce je definována jako R(, ) = ( ) +( ). Často se vužívá na testování optimalizačních algoritmů, protože její graf je údolí, ve kterém se na souřadnicích (, ) nachází globální minimum. Je jednoduché najít údolí, ale je poměrněobrázek 5: Průběh hledání minima Rosenbrockov složité najít toto mělké globální minimum. funkce Himmelblauova funkce je opět polnom: H(, ) =.5.5.5 -.5 f(,) - -.5 - -.5 - -.5.5.5 6 5 4 3
4 35 3 - - -3-4 f(,) -4-3 - - 3 4 3 5 5 5 Obrázek 6: Průběh hledání minima Himmelblauov funkce 8 7 6 5 4 3 3 4 5 6 7 8 9 Obrázek 7: Průběh hledání řešení na problém batohu ( + ) +(+ 7). Má 4 minima s hodnotou na přibližných souřadnicích (3, ), (.8, 3.), ( 3.8, 3.) a (3.6,.8). Můj poslední pokus bla optimalizace - problému batohu (- knapsack problem). Jedná se o klasický NP-kompletní problém: máme různé předmět s různou hmotností a různou cenou a batoh s omezenou nosností. Jak lze naskládat do batohu předmět tak, ab jejich celková cena bla maimální? Protože se jedná o NP-kompletní problém, blo b neužitečné jej v prai řešit hledáním přesného dokonalého řešení. V případě, že stačí jen dostatečně dobré, ale nikoliv optimální řešení, je na tuto úlohu simulované žíhání vhodný nástroj. se nní skládá z množin předmětů, které jsou v batohu, a okolí stavu jsou množin, ve kterých některé předmět přidáme nebo odebereme. Množství těchto změn je závislé v každém kroku na ξ. Ohodnocovací funkcí stavu je celková hodnota předmětů v batohu. Program opět nalezl dobré řešení.
3 Shrnutí Popsal jsem základní vužití technik simulovaného žíhání k hledání optimálních řešení. Otestoval jsem svoji implementaci na několika testovacích funkcích pro optimalizační algoritm a na problému batohu. 4 Poděkování Děkuji doc. Ing. Jaromíru Kukalovi, Ph. D. za inspirující odborné vedení miniprojektu a Ing. Vojtěchu Svobodovi, CSc. za organizaci Týdne věd na Jaderce.