1 Uvod
Jedna od glavnih odlika računala je da u kratkom
vremenu egzaktno riješi probleme koji u sebe uključuju
složene računske operacije. Ipak, uz svu tehnologiju i napredak
postignut u računarskoj znanosti, postoje problemi koji
današnjim metodama nisu rješivi u stvarnom
vremenu. Posebnu skupinu problema čine NP-teški i NP-potpuni
problemi. U NP-teške i NP-potpune probleme spadaju i mnogi
kombinatorni problemi, poput problema trgovačkog putnika i problem
zadovoljenja Booleove funkcije. Poznati algoritmi za
rješavanje NP-teških problema su u najboljem
slučaju eksponencijalne složenosti, tj. vrijeme izvođenja je
eksponencijalnog rasta. Za ilustraciju, to znači da se pojedini
problemi ne mogu poznatim algoritmima riješiti milijardama
godina. Pitanje je kako pristupiti takvim problemima.
Jedan od načina je da poboljšamo sklopovske performanse
računala. Dobar primjer tomu je kvantno računalo, koje bi,
zbog svojih fizikalnih mogućnosti, moglo riješiti probleme
eksponencijalne složenosti u razumnom vremenu. No kvantno računalo
ostavimo za blisku budućnost i pokušajmo pristupiti problemu
na drugačiji način. Inženjerska praksa nas uči da često nije potrebno
riješiti probleme egzaktno, tj. dovoljno ih je
riješiti približno. U tu svrhu koristimo se nekakvim
iskustvenim metodama čija je učinkovitost eksperimentalno
potvrđena. Neke od tih metoda su i heuristički algoritmi.
Riječ heuristika potječe od grčke riječi heurisko što znači
pronašao sam. Odavde se da naslutiti da su heuristički
algoritmi zapravo algoritmi nastali eksperimentiranjem u svrhu
dobivanja zadovoljavajućeg rješenja. Bitno svojstvo
heurističkih algoritama je da mogu približno (dovoljno dobro)
riješiti probleme eksponencijalne i faktorijelne složenosti.
Ipak, valja napomenuti da rješavanje problema heurističkim
algoritmima ne mora voditi k zadovoljavajućem rješenju, a za
neke probleme, heuristički algoritmi pokazuju relativno loše
rezultate. To se pogotovo odnosi na probleme za koje postoje egzaktni
algoritmi polinomske složenosti. Isto tako, heuristički algoritmi nisu
jednoznačno određeni. Pojedini dijelovi heurističkih algoritama se
razlikuju ovisno o situaciji u kojoj se koriste. Ti su
dijelovi uglavnom funkcije cilja (transformacije) i njihovo definiranje
znatno utječe na efikasnost algoritma.
Cilj seminarskog rada je dati pregled osnovnih heurističkih algoritama,
a neke i pobliže opisati. U prvom djelu se daje kratak opis
heurističkih algoritama i nabrajaju se moguće podjele metaheurističkih
algoritama. Odabire se podjela na algoritme putanje i algoritme
bazirane na populaciji rješenja. Pobliže se opisuje devet
algoritama: pohlepni algoritam, lokalno pretraživanje, algoritam
simuliranog kaljenja, tabu pretraživanje, pretraživanje promjenjivom
okolinom, stohastičko difuzno pretraživanje, optimizacija mravljom
kolonijom, optimizacija rojem čestica i evolucijski algoritmi. Na kraju
je dan kratak opis preostalih heurističkih algoritma.
.