Nieformalnie algorytm to zestaw kroków, które należy wykonać, aby zrealizować pewne zadanie. Aby komputer mógł wykonać jakieś zadanie, należy najpierw opracować algorytm opisujący sposób wykonania tego zadania i przedstawić go w postaci zrozumiałej dla komputera (w postaci programu). Jedna z formalnych definicji algorytmu jest następująca: „algorytm jest uporządkowanym zbiorem jednoznacznych, wykonywalnych kroków, określającym skończony proces”[1]. Istnieją także inne próby określenia tego, czym są algorytmy, które uwypuklają m.in. możliwość ich implementowania na klasycznych komputerach cyfrowych. Tego rodzaju algorytmami niewątpliwie są algorytmy ewolucyjne.
Algorytmy ewolucyjne to jeden z kilku podstawowych nurtów rozwojowych w informatyce czerpiących inspiracje z ustaleń biologii ewolucyjnej. Określane są one zbiorczą nazwą algorytmów ewolucyjnych a należą do nich: programowanie ewolucyjne, strategie ewolucyjne, algorytmy genetyczne oraz genetyczne programowanie[2].
Istnieje wiele sposobów recepcji algorytmów ewolucyjnych. Można widzieć w nich metody sztucznej inteligencji, modele ewolucji i genetyki (tzw. sztuczne życie) lub próby rozwiązania zadania optymalizacji globalnej[3]. Najogólniej rzecz ujmując algorytm ewolucyjny realizuje proces ciągłej adaptacji symulowanej populacji do zadanego wirtualnego środowiska. Ograniczeniem tej metody symulacji jest to, że nie można zagwarantować, iż wynikiem tego procesu obliczeniowego będzie znalezienie najlepszego osobnika z teoretycznie możliwych. Jednakże wraz z upływem czasu działania takiego algorytmu prawdopodobieństwo takiego wyniku wzrasta i dąży asymptotycznie do jedności[4].
Dowolny algorytm ewolucyjny przetwarza populację osobników a każdy z nich jest jakąś propozycją rozwiązania postawionego wcześniej oraz jednoznacznie zdefiniowanego problemu badawczego[5]. Działa on w wirtualnym środowisku, które zdefiniowane jest na podstawie postawionego problemu badawczego, który próbuje się rozwiązać z użyciem tego algorytmu. W tym cyfrowym środowisku każdemu wirtualnemu osobnikowi przyporządkowana jest wartość liczbowa, która określa jakość reprezentowanego przez niego rozwiązania. Wartość tę najczęściej nazywa się przystosowaniem konkretnego osobnika do danego wirtualnego środowiska.
Standardowe działanie algorytmu ewolucyjnego polega na wykonywaniu pętli, w której następują po sobie następujące procedury: reprodukcja (preselekcja), operacje genetyczne, ocena i sukcesja (postselekcja); czasami reprodukcję i sukcesję nazywa się zbiorczo selekcją. Zanim tak opisana pętla wirtualnej ewolucji będzie mogła zadziałać, potrzebna jest faza wstępnej inicjacji, która polega na utworzeniu początkowej cyfrowej populacji bazowej poprzez losowe wygenerowanie genotypów osobników i obliczenie ich przystosowania.
Tak zarysowana cyfrowa ewolucja może zostać zakończona, gdy przystosowanie osobników jest odpowiednio duże (tj. zgodne z założonym uprzednio przez osobę inicjującą tę symulację), gdy stwierdzi się, że populacja bazowa uległa stagnacji (tj. w kolejnych cyklach nie poprawia się przystosowanie osobników) lub gdy algorytm ewolucyjny przeszedł konkretną liczbę iteracji (cykli), które były wcześniej określone.
Przedstawiony wyżej ogólny sposób działania algorytmów ewolucyjnych należałoby dookreślić i uzupełnić o istotne szczegóły z uwagi na to, o czym wspomniano już wcześniej, że algorytmy te dzielą się na cztery podstawowe typy: algorytmy genetyczne, strategie ewolucyjne, programowanie ewolucyjne oraz programowanie genetyczne.
Niezależnie od tego, którą wersję algorytmu ewolucyjnego będziemy rozpatrywać pojawia się problem jego algorytmiczności. Czy tego typu procesy obliczeniowe, z uwagi na inspiracje związane z biologią ewolucyjną, można analizować z perspektywy klasycznej algorytmiki? Czy procesy ewolucyjne, zaimplementowane w strukturze algorytmów ewolucyjnych, są algorytmizowalne? Czy zatem standardowe określenia tego, czym w swej istocie są algorytmy, są nadal adekwatne w kontekście algorytmów ewolucyjnych? Czy nie należałoby zaproponować jakiejś innej ich charakterystyki? Nasz referat poświęcony będzie zarysowaniu wstępnych odpowiedzi na powyższe pytania oraz ustaleniom potrzebnych kontekstów, aby odpowiedzi te mogły stać się bardziej precyzyjne.
Algorytmy ewolucyjne są bowiem implementowane na klasycznych komputerach cyfrowych, co niewątpliwie świadczy o ich algorytmiczności. Z drugiej jednak strony, należą do klasy indeterministycznych metod heurystycznych inspirowanych biologicznie, co może czynić je niezgodnymi z klasyczną definicją algorytmu.
[1] J.G. Brookshear, Informatyka w ogólnym zarysie, Wydawnictwa Naukowo-Techniczne, Warszawa 2003, s. 181
[2] Por. J. Arabas, Wykłady z algorytmów ewolucyjnych, Warszawa: Wydawnictwo Naukowo-Techniczne 2004, s. 17-19.
[3] Por. J. Arabas, dz. cyt., s. 21.
[4] Por. tamże, s. 20.
[5] Działanie algorytmów ewolucyjnych omawiam na podstawie dostępnej literatury przedmiotu, tj. między innymi: J. Arabas, dz. cyt., s. 15-17; M. Flasiński, Wstęp do sztucznej inteligencji, Warszawa: Wydawnictwo Naukowe PWN 2011, s. 58-72; L. Rutkowski, Metody i techniki sztucznej inteligencji, Warszawa: Wydawnictwo Naukowe PWN 2011, s. 237-307.