Algorytmy ewolucyjne to część inteligencji obliczeniowej zajmująca się
heurystycznym rozwiązywaniem problemów optymalizacji.
Algorytmy ewolucyjne znajdują zastosowanie w rozwiązywaniu problemów
optymalizacji, dla których nie można użyć algorytmów tradycyjnych (m.in. kiedy
takie algorytmy nie istnieją lub są zbyt kosztowne obliczeniowo, kiedy problem
optymalizacji nie może być zdefiniowany matematycznie, kiedy wystarczające są
rozwiązania przybliżone lub dostatecznie dobre z praktycznego punktu
widzenia).
Przykładami rozważanych problemów optymalizacji są z jednej strony dobrze
znane problemy NP-zupełne (dla których algorytmy ewolucyjne starają się
dostarczyć rozwiązania dostatecznie dobre z punktu widzenia praktycznych
zastosowań), a z drugiej strony rozmaite problemy praktyczne trudne do
sprecyzowania w sposób matematyczny (m.in. takie w których nieznany jest
analityczny wzór funkcji celu, ale znana jest metoda liczenia jej wartości, na
przykład przez wykonanie pewnych symulacji).
Praktyczne problemy optymalizacji rozwiązywane algorytmami ewolucyjnymi
dotyczą systemów ekspertowych, systemów klasyfikacji i rozpoznawania obiektów
czy systemów wspomagania decyzji. Popularne jest stosowanie algorytmów
ewolucyjnych do analizy obrazów, w tym zdjęć satelitarnych i obrazów
medycznych, do analizy danych ekonomicznych i finansowych, zwłaszcza danych
wysokiej i ultra wysokiej częstotliwości, do konstrukcji systemów kontroli
lotów, do konstrukcji sztucznej inteligencji w grach, itp.
Pierwsza część wykładu dotyczyć będzie podstawowych algorytmów ewolucyjnych do
rozwiązywania klasycznego problemu optymalizacji, ich konstrukcji i adaptacji
do konkretnych problemów praktycznych i teoretycznych oraz implementacji.
Druga część wykładu dotyczyć będzie nowoczesnych algorytmów ewolucyjnych
przeznaczonych do rozwiązywania trudniejszych problemów, takich jak
optymalizacja wielomodalna, optymalizacja wielokryterialna i optymalizacja
dynamiczna.
Wykład wymagać będzie podstawowej wiedzy z zakresu rachunku prawdopodobieństwa
i statystyki (na przykład zaliczenie wykładu RPiS). Podczas pracowni wymagana
będzie umiejętność programowania w klasycznych językach programowania (C/C++,
Java, Python), a przydatna może okazać się też umiejętność programowania w
popularnych narzędziach używanych do analizy danych, takich jak Matlab czy
Octave (narzędzi tych będzie można nauczyć się samemu w pierwszych tygodniach
zajęć lub równocześnie uczęszczać na kurs z nowoczesnych języków przetwarzania
danych).