W poprzednim poście obiecałem Ci, Drogi Czytelniku, obszerną informację na temat projektu, który będę realizował i wytłumaczenie dlaczego akurat idę w tę stronę. Skoro wiesz już co nieco o algorytmach genetycznych, pora na założenia i opis projektu easyGALib, realizowanego w ramach konkursu #dajsiepoznac!
Czym będzie easyGALib i do czego może Ci się przydać?
Jak już dowiedziałeś się w poprzednim poście, informatyce nie są obce pojęcia pochodzące z różnych innych dziedzin nauki. W tym przypadku będziemy mieć do czynienia z próbą włożenia jakiegoś małego skrawka biologii w działający kod. Projekt easyGALib będzie biblioteką pisaną w języku C#, przy wykorzystaniu .NET Framework 4.6, a jej zadaniem będzie maksymalne uproszczenie Ci przygotowania własnego algorytmu genetycznego.
A komu to potrzebne? A dlaczego?
Jako specjalista od algorytmów genetycznych wiesz już, że rozwiązują one problemy, dla których nie jesteśmy w stanie przygotować klasycznego rozwiązania, a jedynie możemy powiedzieć jaki wynik jest dla nas w danej chwili lepszy. Takie sytuacje mogą zdarzyć się w różnych projektach – od aplikacji biznesowych optymalizujących koszty w przedsiębiorstwie, po gry komputerowe. Jeżeli więc zostaniesz postawiony pod taką ścianą, wystarczy że zrobisz 3 rzeczy:
- Załadujesz bibliotekę easyGALib
- Wybierzesz gen opisujący Twój problem (temat jeszcze omówimy w osobnym poście)
- Zaimplementujesz funkcję dopasowania, która mówi jaką wartość ma dla Ciebie dany gen
To wszystko – problem rozwiązany!
Dlaczego akurat taki wybór?
Jest kilka powodów, dla których postanowiłem zrealizować taki właśnie projekt i są one następujące:
- W czasie studiów, na jednym z przedmiotów nawiązujących do tematu algorytmów genetycznych, miałem za zadanie napisać program rozwiązujący problem przydziału wielu zadań do wielu procesorów. Okazało się, że istnieją już tego typu biblioteki dla (jako programista .NET napiszę do z wielkim trudem i bólem serca) Javy, jednak dla C# mają bardzo ograniczoną funkcjonalność. Musiałem wybrać ten pierwszy „język”, czego wstydzę się do dzisiaj…
- W ramach pracy magisterskiej poruszyłem nieco temat algorytmów genetycznych realizując serwis, który na podstawie wyników z gier edukacyjnych potrafił wyciągnąć informację w jakich godzinach dziecko najlepiej się uczy. Chciałbym kontynuować ten wątek i ewentualnie sprawdzić skuteczność takich rozwiązań, w porównaniu do innych metod optymalizacji.
- Kto wie, może w trakcie pracy nad projektem zrealizuje się scenariusz rodem z filmu Tron: Dziedzictwo – powstanie sztucznej inteligencji i takie tam… 🙂
- Będę w stanie poruszyć szereg zagadnień i tematów, z których początkujący i średnio-zaawansowani programiści powinni zdawać sobie sprawę, a tym samym przekazać co nieco wiedzy i samemu też się czegoś nauczyć.
Zagadnienia poruszane w projekcie
easyGALib będzie bardzo specyficznym projektem pod względem tematycznym jak i samej realizacji. Myślę że tworząc bibliotekę, uda się poruszyć większość tematów, które stoją na przeszkodzie między juniorem, a doświadczonym w bojach co najmniej midem. Zagadnienia, o których mowa, to:
- SOLID – cały zestaw zasad, dzięki którym nasz kod w ogóle nadaje się do czegoś, mimo ciągłych zmian założeń (codzienność programisty)
- Wstrzykiwanie zależności – temat związany z powyższym, ale że w programie studiów praktycznie się o nim nie słyszy…
- Generyczność- geny będą różnych typów, więc i to zagadnienie pojawi się prędzej czy później
- Wzorce projektowe – najlepiej uczyć się na cudzych błędach (tych już rozwiązanych)
- Ogólne zasady pisania kodu, żeby później starszy programista nie „płakał jak commitował”
Rozszerzenie możliwości easyGALib
Zdaje sobie sprawę, że może nastąpić sytuacja, w której w mniej niż 10 tygodni wyrobię się z projektem, a Ty będziesz już znał wszystkie zagadnienia wymienione powyżej. W takim wypadku mam oczywiście kilka asów w rękawie. Po pierwsze, możemy wtedy zająć się testowaniem biblioteki i tego w jakich problemach użycie jej będzie lepsze niż klasyczny algorytm. Po drugie, możemy pójść w chmurę Azure i napisać jakiś fajny serwis do analizy danych przy pomocy easyGALib. W tej kwestii ogranicza nas tylko wyobraźnia, bo jesteśmy wręcz otoczeni przez dane. Może by tak na przykład wyciągnąć ich co nieco z mojego FitBit’a i sprawdzić jak pisanie w SharePoincie wpływa na tętno? Po trzecie, co zostało zaproponowane w komentarzach pod ostatnim postem, moglibyśmy iść w kierunku rozszerzenia możliwości biblioteki o sieci neuronowe. Możliwości są nieograniczone!
Jak widać powyżej, szykuje się kilka całkiem ciekawych tygodni. Mam więc nadzieję, że będziesz mi w tej przygodzie towarzyszył i wpływał swoimi komentarzami na tworzone treści 🙂
5 marca 2016 at 16:41
Hej, pierwsze pytanie dlaczego nie .NET 4.6? razem z c# 6? c# jest przynosi wiele dobrego co szybko można zauważyć w kodzie.
6 marca 2016 at 13:43
Słuszna uwaga! Poprawiam 😉
5 marca 2016 at 23:39
Wydaje mi sie ze nie do konca prawda jest ze dla .NET nie ma takowych frameworkow, jako ze jest m.in. projekt AForge.NET: http://www.aforgenet.com/framework/samples/genetic_algorithms.html
Co do GA, zycze powodzenia. W moim projekcie sie rowniez pojawi w uproszczonej postaci do zobrazowania pracy na grafach. 🙂
6 marca 2016 at 13:54
Mówiąc że nie ma takich framework’ów, miałem na myśli proste biblioteki, które załączasz, implementujesz jedną funkcję i masz wynik 😉 AForge.NET jest super rozwiązaniem, ale też już niezłym kombajnem. Dzięki wielkie i na pewno będę śledził temat!
6 marca 2016 at 10:04
Będziesz planował genotyp jako ciąg bitów czy liczb rzeczywistych?
6 marca 2016 at 13:57
Chciałbym, żeby biblioteka była uniwersalna w tej kwestii. Na pewno będzie można działać na liczbach rzeczywistych i stringach. Być może zastosuję tutaj generyczność, aby gen mógł być reprezentowany przez dowolne klasy implementujące funkcje mutacji 🙂