Anna Wawszczak - Biblioteka szablonów algorytmów heurystycznych

Transkrypt

Anna Wawszczak - Biblioteka szablonów algorytmów heurystycznych
Biblioteka szablonów algorytmów heurystycznych
Anna Wawszczak1
1 Wydział Inżynierii Mechanicznej i Informatyki
Kierunek Informatyka, Rok V
[email protected]
Streszczenie
Algorytmy heurystyczne sa˛ wykorzystywane praktycznie w każdej dziedzinie nauki, mi˛edzy innymi w technice, medycynie, ekonomii. Cz˛esto jednak osoby zajmujace
˛ si˛e konkretnym problemem nie posiadaja˛ wiedzy wystarczajacej
˛ do samodzielnego zaimplementowania na przykład algorytmu genetycznego. Zaprezentowana w
niniejszej pracy biblioteka szablonów algorytmów heurystycznych MetahLib została
zaprojektowana aby umożliwić korzystanie z algorytmów heurystycznych bez konieczności posiadania szczegółowej wiedzy na temat ich działania.
Sposób wykorzystania biblioteki został przedstawiony na przykładzie problemu
minimalizacji funkcji wielu zmiennych z ograniczeniami. Do rozwiazania
˛
tego problemu zastosowane zostały algorytmy przeszukiwania lokalnego (z wykorzystaniem
strategii najwi˛ekszego spadku i pierwszego ulepszenia), oraz algorytm symulowanego wyżarzania.
1
Wst˛ep
Dynamiczny rozwój techniki stawia przed nami nowe, coraz trudniejsze zadania. Rozwiazywanie
˛
problemów staje si˛e coraz bardziej skomplikowane, gdyż staramy si˛e brać
pod uwag˛e coraz wi˛ecej czynników wpływajacych
˛
na analizowane zjawisko. Zaniedbanie cz˛eści z tych czynników powoduje, iż wykorzystywany model coraz bardziej odbiega
od rzeczywistości. Uwzgl˛ednienie dużej ich liczby powoduje konieczność wprowadzenia coraz bardziej skomplikowanych zwiazków
˛
i zależności mi˛edzy nimi, prowadzac
˛ w
rezultacie do komplikacji problemu i znacznego zwi˛ekszenia złożoności obliczeniowej.
Wiele współczesnych algorytmów próbujacych
˛
dać odpowiedź na pytania dotyczace
˛
otaczajacego
˛
nas świata to problemy klasy NP lub NP-trudne. Mimo szybkiego rozwoju komputerów, ciagłego
˛
zwi˛ekszania mocy obliczeniowej oraz stosowania komputerów
pracujacych
˛
równoległe, algorytmy takie sa˛ nadal zbyt kosztowne obliczeniowo. Wykładniczy wzrost liczby operacji koniecznych do wykonania pozwala na rozwiazanie
˛
tylko
niewielkich zadań.
Gdy rozmiar zadania jest na tyle duży, że bezpośrednie znalezienie rozwiazania
˛
za pomoca˛ klasycznych metod jest niemożliwe lub nieopłacalne, konieczne jest zastosowanie
algorytmów dajacych
˛
rozwiazanie
˛
bliskie optymalnemu. W wielu przypadkach korzystniej jest uzyskać w rozsadnym
˛
czasie rozwiazanie
˛
dobre, lecz nie optymalne niż czekać
1
bardzo długi okres czasu na znalezienie rozwiazania
˛
idealnego. W zadaniach tego typu
doskonale sprawdzaja˛ si˛e algorytmy heurystyczne.
Celem niniejszej pracy jest prezentacja biblioteki szablonów algorytmów heurystycznych MetahLib, zaprojektowanej w taki sposób, aby mogła być wykorzystywana również
przez osoby majace
˛ jedynie podstawowa˛ wiedz˛e na temat tego typu algorytmów. Cz˛esto osoby zajmujace
˛ si˛e konkretnym problemem nie posiadaja˛ wystarczajacej
˛ wiedzy aby
samodzielnie zaimplementować na przykład algorytm genetyczny. Z drugiej strony, osoby zajmujace
˛ si˛e heurystykami cz˛esto nie wiedza˛ wystarczajaco
˛ dużo na temat dziedziny
problemu, który należy rozwiazać.
˛
Biblioteka MetahLib pozwala na korzystanie z algorytmów heurystycznych bez konieczności zagł˛ebiania si˛e w szczegóły działania algorytmu. Wymaga jedynie zdefiniowania tych elementów, które sa˛ bezpośrednio powiazane
˛
z rozwiazywanym
˛
problemem.
W niektórych przypadkach do rozwiazania
˛
problemu konieczne jest jedynie zefiniowanie
funkcji oceny rozwiazania.
˛
Algorytmy heurystyczne charakteryzuja˛ si˛e tym, iż sa˛ w dużym stopniu uniwersalne.
Cz˛esto rozwiazanie
˛
problemu możliwe jest za pomoca˛ różnych heurystyk. Nie ma ściśle
określonych zasad dotyczacych
˛
wyboru najlepszego algorytmu. Czasami po uruchomieniu programu okazuje si˛e, że wybrany algorytm jest nieskuteczny. Biblioteka szablonów
algorytmów heurystycznych została zaprojektowana tak, aby umożliwić szybka˛ zmian˛e
wykorzystywanego algorytmu, bez konieczności ponownego definiowania jego elementów składowych. Wszystkie algorytmy należace
˛ do biblioteki MetahLib wymagaja˛ takiego samego sposobu zdefiniowania funkcji oceny, a w wi˛ekszości przypadków również
generatora sasiedztwa
˛
i kryterium stopu.
Możliwe jest na przykład wykorzystanie najprostszego algorytmu przeszukiwania lokalnego i uruchomienie go z kilku losowych punktów. Jeśli rozwiazania
˛
uzyskane z różnych punktów startowych b˛eda˛ różne, może to oznaczać, że istnieje wiele minimów (lub
maksimów) lokalnych. W prosty sposób można wyeliminować ten problem i przeprowadzić przeszukiwanie za pomoca˛ symulowanego wyżarzania, wykorzystujac
˛ zdefiniowana˛
wcześniej funkcj˛e sasiedztwa,
˛
reprezentacj˛e celu i funkcj˛e oceny.
2
Biblioteka MetahLib
Biblioteka MetahLib składa si˛e z trzech algorytmów heurystycznych:
• przeszukiwania lokalnego,
• symulowanego wyżarzania,
• algorytmu genetycznego,
oraz dodatkowych elementów koniecznych do działania algorytmu, mi˛edzy innymi:
• szablonu klasy b˛edacej
˛ modelem reprezentacji rozwiazania
˛
b˛edacego:
˛
– wektorem liczb rzeczywistych,
– ciagiem
˛
binarnym,
• funkcji sasiedztwa,
˛
2
• operatorów selekcji,
• operatorów krzyżowania,
• operatorów mutacji,
• generatora liczb losowych.
Biblioteka MetahLib została zaimplementowana w j˛ezyku C++.
3
3.1
Wybrane algorytmy heurystyczne
Przeszukiwanie lokalne
Local search (przeszukiwanie lokalne) to jedna z podstawowych metod optymalizacji
kombinatorycznej, pozwalajaca
˛ znaleźć rozwiazanie
˛
bliskie optymalnemu w rozsadnym
˛
czasie. Przeszukiwanie lokalne jest pewnego rodzaju baza˛ dla wielu metaheurystyk umożliwiajacych
˛
znalezienie rozwiazania
˛
lepszej jakości niż local search.
Algorytm przeszukiwania lokalnego zaczyna poszukiwania od rozwiazania
˛
poczatko˛
wego, które w pierwszej iteracji pełni rol˛e rozwiazania
˛
bazowego. Nast˛epnie, w otoczeniu
tego rozwiazania,
˛
poszukiwane jest rozwiazanie
˛
lepszej jakości. Znalezione w ten sposób
rozwiazanie
˛
staje si˛e nowym rozwiazaniem
˛
bazowym. W kolejnych krokach iteracji przeszukiwane jest otoczenie aktualnego rozwiazania.
˛
Proces poszukiwania kończy si˛e, gdy
w otoczeniu rozwiazania
˛
bazowego nie można już znaleźć rozwiazania
˛
lepszej jakości.[3]
Rozwiazanie
˛
to zostaje zwrócone jako rezultat optymalizacji. W pewnych przypadkach
proces optymalizacji może zostać zakończony, gdy spełnione zostanie określone na wst˛epie kryterium. Może nim być na przykład maksymalna dopuszczalna liczba iteracji.
Istnieje kilka metod przeszukiwania lokalnego. Różnia˛ si˛e one głównie sposobem wybierania nowego rozwiazania
˛
z otoczenia. Dwie podstawowe strategie realizujace
˛ to zadanie to metoda najwi˛ekszego spadku (steepest descent), znana również jako wspinanie si˛e
po najbardziej stromym zboczu oraz metoda pierwszego ulepszenia (first improvement).
Pierwsza z wymienionych strategii polega na przeszukaniu całego otoczenia i wybraniu rozwiazania
˛
o najlepszej wartości funkcji oceny. Jeśli rozwiazanie
˛
to jest gorsze niż
rozwiazanie
˛
bazowe, oznacza to, iż osiagni˛
˛ ete zostało lokalne optimum.
Strategia pierwszego ulepszenia nie przeszukuje całego sasiedztwa
˛
rozwiazania
˛
bazowego. Podczas każdej iteracji wybierane jest tylko jedno rozwiazanie
˛
należace
˛ do otoczenia. Jeśli rozwiazanie
˛
to jest lepsze, staje si˛e nowym rozwiazaniem
˛
bazowym.[2]
3.2
Symulowane wyżarzanie
Symulowane wyżarzanie to algorytm bazujacy
˛ na przeszukiwaniu lokalnym, należacy
˛
do klasy algorytmów niedeterministycznych. Metoda ta znajduje zastosowanie wsz˛edzie
tam, gdzie istnieje ryzyko wystapienia
˛
lokalnego minimum, z którego algorytm przeszukiwania lokalnego nie mógłby si˛e wydostać. Sposób działania algorytmu symulowanego
wyżarzania oparty jest na analogii do zjawiska zaczerpni˛etego z termodynamiki.
Podstawowa˛ cecha˛ algorytmu symulowanego wyżarzania jest to, iż poza akceptacja˛
rozwiazań
˛
lepszych w świetle funkcji oceny, w pewnych przypadkach akceptowane sa˛
również rozwiazania
˛
gorsze.[2] Poczatkowo
˛
prawdopodobieństwo akceptacji rozwiazania
˛
3
gorszego jest stosunkowo duże. W kolejnych iteracjach prawdopodobieństwo stopniowo
maleje. W rezultacie tego, w końcowej fazie działania algorytmu jedynie rozwiazania
˛
lepszej jakości moga˛ zostać zaakceptowane.
Olbrzymia˛ zaleta˛ algorytmu symulowanego wyrażania jest to, iż wynik jego działania
tylko w małym stopniu zależy od wyboru rozwiazania
˛
poczatkowego.
˛
Odpowiedni dobór
parametrów pozwala algorytmowi na ucieczk˛e z lokalnego optimum.
4
Przykład zastosowania
Działanie algorytmów należacych
˛
do biblioteki MetahLib zostało zaprezentowane na przykładzie problemu minimalizacji funkcji wielu zmiennych z ograniczeniami zaproponowango w pracy [1].
Zadanie polega na minimalizacji funkcji określonej wzorem (1)
5
G(x, y) = −10.5 · x1 − 7.5 · x2 − 3.5 · x3 − 2.5 · x4 − 1.5 · x5 − 10 · y − 0.5 · ∑ xi2
(1)
i=1
przy ograniczeniach:
6 · x1 + 3 · x2 + 3 · x3 + 2 · x4 + x5 ≤ 6.5
10 · x1 + 10 · x3 + y ≤ 20
0 ≤ xi ≤ 1
0≤y
(2)
Globalnym rozwiazaniem
˛
jest: (x∗ , y∗ ) = (0, 1, 0, 1, 1, 20)
przy czym: G(x∗ , y∗ ) = −213
4.1
Przeszukiwanie lokalne - strategia najwi˛ekszego spadku (steepest
descent)
Podstawowym elementem, który należy zdefiniować jest sposób reprezentacji rozwiaza˛
nia. W tym przypadku zastosowany został szablon klasy Solution.
Solution<double> solution(6);
Zdefiniowany w ten sposób obiekt solution przechowuje rozwiazanie
˛
za pomoca˛ wektora
zmiennych typu double. Pierwszy element tego wktora odpowiada zmiennej y, natomiast
kolejne elementy o indeksach od 1 do 5 przechowuja˛ odpowiednio zmienne x1 do x5 .
Wszystkie elementy rozwiazania
˛
zostały zainicjowane wartościa˛ 0.
Kolejny, bardzo ważny element algorytmu to funkcja oceny. Jest to jedyny element
algorytmu, który musi zostać od podstaw zdefiniowany przez użytkownika. Zadaniem
funkcji oceny jest określenie jakości alizowanego rozwiazania.
˛
Funkcj˛e oceny należy zdefiniować jako obiekt funkcyjny. Operator () powinien przyjmować jako parametr obiekt klasy reprezentuacej
˛ rozwiazanie
˛
(solution_type), natomiast
zwracać wartość oceny typu fitness_type.
Dla analizowanego problemu funkcja oceny zdefiniowana została w nast˛epujacy
˛ sposób:
4
class ObjectiveFunction
{
public:
typedef Solution<double> solution_type;
typedef double fitness_type;
fitness_type operator()(const solution_type& v)
{
double suma = 0.0;
for (int i=1; i<6; ++i){
suma+= v[i]*v[i];
}
return -10.5*v[1]-7.5*v[2]-3.5*v[3]-2.5*v[4]-1.5*v[5]
-10*v[0]-0.5*suma;
}
};
Funkcj˛e sasiedztwa,
˛
tworzac
˛ a˛ nowe rozwiazanie
˛
na podstawie rozwiazania
˛
bazowego,
należy zdefiniować również jako obiekt funkcyjny. Operator() przyjmuje jako parametr
obiekt klasy reprezentujacej
˛ rozwiazanie
˛
oraz zwraca wektor obiektów tej samej klasy
należacych
˛
do sasiedztwa
˛
rozwiazania
˛
bazowego.
Biblioteka MetahLib zawiera standardowe funkcje sasiedztwa
˛
zdefiniowane jako szablony obiektów funkcyjnych. Dla potrzeb rozważanego zadania wykorzystany został szablon klasy NeighbourVec<> zdefiniowany jako:
NeighbourVec< solution_type > ng(0.05);
Wartość przekazywana w konstruktorze określa stopień modyfikacji rozwiazania
˛
(wielkość przeszukiwanego otoczenia). Wartość 0.05 oznacza, iż poszczególne zmienne należace
˛ do rozwiazania
˛
moga˛ być zmienione o 5%.
W przypadku zadań z ograniczeniami pojawia si˛e problem generowania rozwiazań
˛
nie spełniajacych
˛
tych ograniczeń. Dwa najcz˛eściej wykorzystywane sposoby radzenia
sobie z tym problemem to odrzucanie lub naprawianie złych rozwiazań
˛
wewnatrz
˛ funkcji
sasiedztwa
˛
lub zastosowanie funkcji kary. Aby uniknać
˛ konieczności definiowania funkcji sasiedztwa,
˛
dla analizowanego przypadku zastosowana została druga z wymienionych
metod – funkcja kary. Funkcja ta przekazywana jest do algorytmu jako obiekt funkcyjny.
Operator () przyjmuje dwa parametry:
• referencj˛e do analizowanego rozwiazania
˛
• referencj˛e do zmiennej typu double, przez która˛ przekazywana jest wielkość kary
nałożonej na rozwiazanie.
˛
Wartość 0.5 oznacza, że na rozwiazanie
˛
nałożona zostanie kara równa połowie wartości zwróconej przez funkcj˛e oceny.
Wartość logiczna zwracana przez funkcj˛e określa, czy dane rozwiazanie
˛
może być dalej
brane pod uwag˛e (true), czy powinno zostać całkowicie odrzucone (false).
class Penality{
typedef Solution<double> solution_type;
5
typedef ObjectiveFunction::fitness_type fitness_type;
public:
bool operator()(solution_type & s, double & penality)
{
fitness_type tmp;
if ((tmp=6*s[1]+3*s[2]+3*s[3]+2*s[4]+s[5]-6.5)>0)
penality += tmp/6.5;
if((tmp=10*s[1]+10*s[3]+s[0]-20>0))
penality += tmp/20;
for (int i=0; i<6; ++i)
if ((s[i] < 0) || (i!= 0 && s[i]>1)) return false;
return true;
}
};
Ostatnim elementem algorytmu jest kryterium stopu, definiowane podobnie jak poprzednie elementy jako obiekt funkcyjny. Operator () przyjmuje zmienna˛ typu int, b˛edac
˛ a˛
liczba˛ iteracji, a zwraca wartość logiczna˛ true jeśli algorytm ma zakończyć działanie oraz
false w przeciwnym wypadku. Dla celów analizowanego zadania wykorzystany został
obiekt funkcyjny Iteration b˛edacy
˛ elementem biblioteki MetahLib.
Iteration it(1e5);
Wartość przekazana w konstruktorze to maksymalna dopuszczalna liczba itercji.
Po zdefiniowaniu wszystkich elementów należy utworzyć obiekt klasy SteepestDescent reprezentujacy
˛ algorytm najwi˛ekszego spadku:
SteepestDescent< solution_type ,
ObjectiveFunction,
NeighbourVec<solution_type> ,
Iteration,
less<double>,
Penality >
sd(of,ng,it, less<fitness_type>(), penality);
Przekazane w konstruktorze parametry to:
• of – funkcja oceny,
• ng – generator sasiedztwa,
˛
• it – kryterium stopu,
• less<fitness_type> – obiekt funkcyjny porównujacy
˛ oceny dwóch rozwiazań,
˛
• penality – funkcja kary.
Ostatnim krokiem jest uruchomienie algorytmu poprzez wywołanie operatora (). Jako
parametr przekazywane jest rozwiazanie
˛
poczatkowe,
˛
natomiast zwracane jest rozwiaza˛
nie zoptymalizowane. Wartość funkcji oceny dla zoptymalizowanego rozwiazania
˛
zwraca
funkcja evaluation().
6
solution_type s_opt = sd(s);
cout << sd.evaluation() << endl;
Optymalizacja przeprowadzona za pomoca˛ algorytmu steepest descent pozwoliła na
otrzymanie rozwiazania,
˛
dla którego wartość minimalizowanej funkcji (1) wynosi −141.176.
Jak widać jest to wynik dość odległy od globalnego minimum funkcji.
4.2
Przeszukiwanie lokalne - strategia pierwszego ulepszenia (first
improvement)
W celu poprawy wyniku uzyskanego za pomoca˛ algorytmu przeszukiwania lokalnego,
wykorzystujacego
˛
strategi˛e steepest descent, dokonana została zmiana algorytmu na algorytm przeszukiwania lokalnego ze strategia˛ pierwszego ulepszenia. Jednym z celów
prezentowanej biblioteki była łatwa możliwość wymiany stosowanego algorytmu.
Jedyna˛ zmiana˛ jaka jest w tym przypadku konieczna jest zmiana funkcji sasiedztwa.
˛
W opisywanym powyżej algorytmie funkcja sasiedztwa
˛
generowała wektor rozwiazań
˛
sasiednich.
˛
W przypadku strategii pierwszego ulepszenia, z otoczenia bieżacego
˛
rozwia˛
zania wybierane jest (najcz˛eściej losowo) tylko jedno rozwiazanie
˛
sasiednie.
˛
Funkcja sa˛
siedztwa zwraca wi˛ec nie wektor a pojedyńcze rozwiazanie.
˛
Podobnie jak poprzednio zastosowany został generator sasiedztwa
˛
b˛edacy
˛ cz˛eścia˛ biblioteki MetahLib.
Neighbour< solution_type > ng(0.5);
Po zmianie generatora sasiedztwa
˛
pozostaje jedynie utworzenie reprezentujacego
˛
algorytm obiektu klasy FirstImprovemnt. Obiekt ten tworzony jest identycznie jak w poprzednim przypadku.
FirstImprovement< solution_type,
ObjectiveFunction,
Neighbour<solution_type> ,
Iteration,
less<double>,
Penality >
fi(of,ng,it, less<fitness_type>(), penality);
Również identyczny jest sposób uruchomienia algorytmu i odczytania wyniku:
solution_type s_opt = fi(s);
cout << fi.evaluation() << endl;
Zmiana algorytmu znacznie poprawiła rezultaty optymalizacji. Minimalna wartość
funkcji uzyskana dla zoptymalizowanego rozwiazania
˛
wyniosła −198, 003. Ponieważ strategia first improvement sprawia, iż algorytm staje si˛e niedeterministyczny, przedstawiony
wynik to średnia z wyników uzyskanych w 5 kolejnych uruchomieniach algorytmu. Jak
widać uzyskany wynik jest już znacznie bliższy poszukiwanemu minimum funkcji.
7
4.3
Symulowane wyżarzanie
Kolejna próba poprawy uzyskanego rezultatu to zmiana algorytmu przeszukiwania lokalnego na algorytm symulowanego wyżarzania. Dodatkowym elementem, który pojawia
si˛e si˛e w symulowanym wyżarzaniu to parametr temperatury oraz funkcja chłodzenia,
która modyfikuje ta˛ temperatur˛e.
Funkcja chłodenia przekazywana jest do algorytmu jako obiekt funkcyjny, którego
operator () przyjmuje jako parametry liczb˛e iteracji i aktualna˛ temperatur˛e, a zwraca nowa˛
zmodyfikowana˛ wartość temperatury. Klasa linear_cooling, b˛edaca
˛ elementem biblioteki
MetahLib, realizuje liniowa˛ zmian˛e temperatury. Za każdym wywołaniem funkcji temperatura zmniejszana jest o wartość dT, przekazywana˛ jako parametr klasy.
simulated_annealing::linear_cooling lc(1e-4);
Pozostałe elementy algorytmu pozostaja˛ takie same jak w przypadku przeszukiwania lokalnego. Definicja obiektu klasy reprezentujacej
˛ algorytm symulowanego wżarzania wyglada
˛ nast˛epujaco:
˛
SimulatedAnnealing<solution,
ObjectiveFunction,
Neighbour<solution_type>,
simulated_annealing::linear_cooling,
Iteration,
Penality> sa (of, ng, lc, it, penality);
Aby uruchomić algorytm, poza rozwiazaniem
˛
poczatkowym,
˛
należy również podać temperatur˛e poczatkow
˛
a.˛
solution_type s_opt = sa(0.5);
cout << fi.evaluation() << endl;
Wartość funkcji dla najlepszego znalezionego rozwiazania
˛
wyniosła −212.998. Wartość
średnia dla 5 uruchomień algorytmu to −209, 89. Ponieważ uzyskany wynik różni si˛e od
wartości optymalnej jedynie o mniej niż 0.001%, można przyjać,
˛ iż globalne minimum
funkcji zostało odnalezione.
Z pewnościa˛ istnieja˛ szybsze i skuteczniejsze metody wyznaczenia minimum analizowanej funkcji. Powyższe przykłady nie maja˛ jednak na celu pokazania optymalnej metody
rozwiazania
˛
tego problemu, a jedynie zaprezentowanie sposobu wykorzystania biblioteki
MetahLib.
5
Wykorzystanie biblioteki w połaczeniu
˛
z innymi aplikacjami
Jednym z głównych zastosowań algorytmów heurystycznych jest optymalizacja kształtu. W zagadnieniach inżynierskich podczas optymalizacji kształtu najcz˛eściej jako kryterium przyjmuje si˛e pewna˛ wielkość fizyczna,˛ np. sił˛e, cz˛estotliwości itp. Istnieje wiele
programów inżynierskich umożliwiajacych
˛
symulacj˛e zjawisk fizycznych i wyznaczenie
tych wartości w zależności od zadanych parametrów. Znaczna cz˛eść z tych programów
8
umożliwia uruchomienie symulacji za pośrednictwem wiersza poleceń (bez korzystania z
interfejsu graficznego). Programy te moga˛ być z powodzeniem stosowane w połaczeniu
˛
z algorytmami heurystycznymi, w tym również z algorytmami należacymi
˛
do biblioteki
MetahLib.
Jedynym elementem bezwzgl˛ednie wymaganym przez wszystkie algorytmy biblioteki MetahLib jest funkcja oceny rozwiazania.
˛
Po zdefiniowaniu odpowiedniego interfejsu,
zapewniajacego
˛
komunikacj˛e mi˛edzy programami, programy inżynierskie moga˛ pełnić
rol˛e takiej właśnie funkcji oceny. Podczas uruchamiania programu przekazywane sa˛ parametry opisujace
˛ model, b˛edace
˛ jednocześnie zmiennymi podlegajacymi
˛
optymalizacji.
Po zakończeniu obliczeń program zwraca wynik b˛edacy
˛ wartościa˛ funkcji oceny.
Wykorzystanie algorytmów heurystycznych w połaczeniu
˛
z programem Cosmos/M
zostało przedtawione w pracy [4]. Zaprezentowana została tam optymalizacja kształtu
podpory pod półk˛e hybrydowym algorytmem heurystycznym. Celem optymalizacji była
minimalizacja maksymalnego napr˛eżenia, które wyznaczane było za pomoca˛ programu
Cosmos/M.
Połaczenie
˛
programów inżynierskich z biblioteka˛ MetahLib znacznie zmniejsza nakład pracy potrzebny do implementacji programu wykonujacego
˛
optymalizacj˛e.
6
Podsumowanie
Przedstawiona w niniejszej pracy biblioteka MetahLib może być wygodnym narz˛edziem,
ułatwiajacym
˛
korzystanie z algorytmów heurystycznych. Dzi˛eki temu, iż biblioteka poza szablonami algorytmów, zawiera również dodatkowe elementy takie jak funkcje sa˛
siedztwa, szablony klas pełniacych
˛
funkcj˛e reprezentacji rozwiazania,
˛
kryterium stopu
czy schematy chłodzenia, ilość kodu pisanego przez użytkownika zredukowana jest do
niezb˛ednego minimum. Czasami ogranicza si˛e jedynie do zdefiniowania, zależnej bezpośrednio od rozwiazywanego
˛
problemu, funkcji oceny.
W niniejszej pracy sposób wykorzystania biblioteki został zaprezentowany na przykładzie minimalizacji funkcji wielu zmiennych z ograniczeniami. Optymalizacja przeprowadzona została za pomoca˛ trzech metod. Dzi˛eki zastosowanym w bibliotece rozwiaza˛
niom, przejście pomi˛edzy poszczególnymi algorytmami wymagało jedynie niewielkich
modyfikacji. Optymalizacja ostatnim z zaprezentowanych algorytmów (symulowane wyżarzanie) przyniosła oczekiwany efekt. Uzyskany wynik różnił si˛e od znanego na wst˛epie
minimum globalnego zaledwie o 0.001%.
Sposób implementacji biblioteki pozwala na dalsza˛ jej rozbudow˛e. Możliwe jest dodanie nowych szablonów algorytmów, takich jak na przykład algorytm poszukiwania z
tabu (tabu search), wykorzystujacych
˛
te same elementy, które sa˛ stosowane w połaczeniu
˛
z instniejacycmi
˛
już szablonami.
Literatura
[1] Floudas C.A., Pardalos P.M. Recent Advantages in Global Optimization. Princeton
Series in Computer Science, Princeton University Press, Princeton, NJ, 1992r.
9
[2] Sadiq M. Sait, Habib Youssef, Iterative Computer Algorithms with Applications in
Engineering. Solving Combinatorial Optimization Problems, IEEE Computer Society, California 1999r
[3] Z.Michalewicz, D.B.Fogel How to solve it: Modern Metaheuristics, Springer- Verlag, Berlin Heidelberg 2000r
[4] Anna Bekus, Robert Bieda Optymalizacja kształtu podpory pod półk˛e hybrydowym
algorytmem heurystycznym, Studencka Konferencja Informatyczna, Cz˛estochowa
2007r.
10

Podobne dokumenty