13. tétel - Lokális optimalizálás
Mit értünk lokális optimalizálási módszerek alatt? Mutassa be a hegymászó módszert és annak variánsait (sztochasztikus, steepest ascent)! Ismertesse a Tabu keresés algoritmusát!
Hegymászó módszer
- kiválasztja a keresési tér egy véletlen pontját
- egy ciklust futtat, ami ezt a pozíciót tudja megváltoztatni, hogy jobb helyre jussunk
- ha sikerül: ez lesz az új pozíció, a ciklus folytatódik
- ha nem sikerül: tovább próbálkozik vagy leáll
- egyik legrégebbi, legegyszerűbb módszer
- már meglévő kereséseket is lehet vele finomhangolni
- az elnevezés megtévesztő, a legkisebb fitnesz felé akarunk haladni, nem a legnagyobb felé
A megvalósítások abban különböznek, hogy hogyan vizsgálják az aktuális pont környezetét.
Sztochasztikus hegymászó

flowchart LR
RAND[Véletlen pont kiválasztása]
STOPCOND{Leállási feltétel igaz?}
SEARCH[Véletlen pont választása ϵ távolságra]
ISBETTER{Jobb az új pont?}
STEP[Lépés az új pontba]
STOP["`Leállás, vissza *gpm(p)*`"]
STOPCOND-- nem -->SEARCH-->ISBETTER--nem-->STOPCOND
ISBETTER--igen-->STEP-->STOPCOND
RAND --> STOPCOND-- igen -->STOP
-
Az algoritmus kiindul egy véletlen pozícióból
-
Egy ciklust futtat addig, amíg a leállási feltétel nem lesz igaz
A leállási feltétel lehet pl:
- időkorlát,
- fitnesz korlát,
- fitnesz javulás korlát
-
Az aktuális pozíciót
pváltozó tárolja. A cikluson belül választ egy véletlen pozíciót (q) ennek \(ϵ\) sugarú környezetében.- Ha az új pont jobb, akkor átlép ide
- Ha nem, akkor tovább próbálkozik
-
Az algoritmus visszatérési értéke a
páltal reprezentált megoldás
Megjegyzések
- Indeterminisztikus módszer (minden indításkor más lehet a pont, de azonos pontból indulva is más lehet az eredmény)
- Fitnesz vizsgálatnál "\(<\)" helyett "\(\leq\)" használatával a síkságokon is továbblép
- \(ϵ\) értéke változtatható, pl. megakadásnál
Steepest Ascent

A q elemet ebben nem véletlenszerűen választjuk, hanem az \(ϵ\) sugarú környezet legjobb eleme lesz kiválasztva.
Fel tudja ismerni, ha globális oprimumba ragad: a sztochasztikus változat abban az esetben, ha a q pont nem volt jobb, mint p, akkor egy újabb véletlen szomszéd felé próbálkozott. Ebben a verzióban ennek nincsen értelme már, mert q biztosan a legjobb a szomszédok közül, a keresés akár le is állítható.
Megjegyzések
- Ez már determinisztikus (azonos helyről indulva: ugyanaz az út, ugyanaz a megoldás)
- A gyakorlatban általában nem kivitelezhető a környezet legjobb elemét kiválasztani
- 1 dimenzióban csak két elem van \(ϵ\) távolságra, 2 vagy több dimenzióban már végtelen
- így a környezetet általában valamilyen felbontással vizsgáljuk meg
- Kevesebb lépést tesz meg, de sokkal számításigényesebb a környezet vizsgálata
- Tehát a teljes algoritmus futásidejére nem várhatjuk, hogy jobb legyen
Tabu keresés
- A hegymászó egyik hiánya, hogy könnyen beragad a lokális optimumokba
- Felmerül az ötlet, hogy többször kéne elindítani más kiindulópontokkal
- A keresések függetlenek, így belefuthatnak ugyanazokba az utakba, ahol várhatóan ugyanahhoz a végeredményhez jutnak
- Érdemes lenne eltárolni a már megtett utakkal kapcsolatos tudást
- Minden lépést eltárolni túl memóriaigényes lenne, és nehéz lenne benne keresni
A hegymászót úgy módosítjuk, hogy tabu ponthoz érve hagyja abba a belső ciklus futtatását.

Segédfüggvények
-
SetTabuBarrier():- elhelyez egy jelzést a tabu pontok listájába, ami azt jelzi, hogy az ezt követő pontok az aktuális kereséshez tartoznak
- így a keresés nem akad össze a saját pontjaival
-
IsTabu(p): keres a tabu tárhelyen, ésigaz-at ad vissza, ha a paraméterben megadott pozíció tabu -
AddTabu(): felvesz egy új elemet a tabu tárhelyre -
PurgeTabu(): tömöríti a tabu tárhelyet
Megjegyzések
- Nem feltétel, de itt a steepest ascentet használtuk, mert determinisztikus
- ekkor nyilvánvaló a tabu szerepe, mert egy pontból mindig ugyanoda jut
- A kereséskor érdemes a pont környezetét keresni a tabu tárhelyen, mert többdimenziós feladatnál kicsi az esélye, hogy az algoritmus többször lép pont ugyanabba a pontba
Tabu tárhely kezelése
- Tárolás
- Végtelen lista
- Hasító táblák: gyors, de csak teljes egyezésre keres
- Tulajdonságok tárolása: nem a pontot, hanem valamilyen tulajdonságát tároljuk
- Változások tárolása: nem a megoldásjelölteket, hanem az azok közötti változásokat tároljuk
- Keresés
- Lineáris keresés
- Térbeli indexelés: a keresési tér részterekre bontásával, és a részterekben keresünk
- Karbantartás
- FIFO lista: korlátozzuk a tárolt elemek számát, új elem érkezésekor a legrégebbit töröljük, ha tele van
- nem szerencsés, attól hogy régi még lehet hasznos
- Klaszterezés: az egymáshoz közeli pontokból úgy törlünk, hogy a lefedett terület ne változzon
- FIFO lista: korlátozzuk a tárolt elemek számát, új elem érkezésekor a legrégebbit töröljük, ha tele van
Értékelés
- Többszöri újraindításra jelentősen csökkentheti a futásidőt
- Főleg determinisztikus kereséseknél hatékony
- Nem csak hegymászónál használható, más heurisztikák is kiegészíthetőek vele
- Hátrányok:
- Csak kis méretű keresési térnél működik hatékonyan
- A keresés lépés időigényes