Giter VIP home page Giter VIP logo

evo's People

Contributors

foo avatar karpiu avatar

Watchers

 avatar  avatar  avatar  avatar

evo's Issues

Cache'owanie wartości permutacji i jej f. przystosowania

Funkcja przystosowania jest używana wielokrotnie w każdej iteracji. Powinniśmy ją policzyć tylko raz na iterację i spamiętać. Najlepiej zmodyfikować sga.cpp/hpp w taki sposób, żeby dodać funkcję evaluate_population, która liczy wartości osobników i ich funkcji przystosowania i przekazuje do mutation,crossover,replacement itp.

Mutacja z pewnym prawdopodobieństwem

Modyfikacja funkcji mutation_function. Aktualnie wszscy osobnicy mutują co iterację, a chcielibyśmy żeby mutowały z pewnym prawdopodobieństwem. Prawdopodobieństwo można określić np. odwrotnie proporcjonalnie do współczynnika przystosowania.

Warunek zakończenia

Zamiast X iteracji możnaby sprawdzać, czy jest jakiś postęp przez ostatnie iteracje lub sprawdzać, czy wszyscy osobnicy to nie są kopie tego samego.

Raport z projektu

Cytuję kawałek treści naszego zadania ze strony Lipińskiego:

"Raport z wykonania projektu powinien zawierać zwięzłą dokumentację programu oraz opis wykonanych eksperymentów"

To też trzeba zrobić do środy i mu pokazać.

Proponuję wykorzystać fakt, że używamy githuba i taką dokumentację sporządzić w Wiki.

Chyba, że wolisz texa?

Duplikaty / iteracja

Zmontowanie wykresu przedstawiającego liczbę duplikatów w populacji w zależności od iteracji.

Polepszenie SGA

A raczej naprawienie. Trzeba zrobić tak, aby ładnie nam wykresiki zbiegały do optimum, a nie tak jak teraz jest. Utworzyłem nowy branch 'experimental' gdzie będę próbował znaleźć rozwiązanie tego problemu, a jednocześnie nie chcę nabroić za bardzo w oryginalnym kodzie, bo mam zamiar dużo stałych nawrzucać.

Na dobry początek zmieniłem plotowanie grafu PMX/OX/CX. Teraz są kolorki i jest wszystko widoczniejsze :)

Ewaluacja permutacji

Napisanie ciała funkcji evaluation z pliku main.cpp.
Funkcja ma symulować wykonanie N zadań na N maszynach i zwracać czas potrzebny na wykonanie wszystkich zadań.

Prezentacja na oblczenia równoległe

Dodatkowy target w doc/makefile (najlepiej orir), nowy plik orir.tex.

Dobrze by uprzatnąc poprzednie dane testowe (nie wyrzucić - tylko ponazywać tak, żeby nie były first-class), prezentacje itp.

Random brute-force

Napisanie programu przeszukującego przestrzeń permutacji, wykonującego zadaną liczbę ewaluacji. Dopisanie do programu ewolucyjnego zliczania liczby ewaluacji. Dla każdych danych testowych poza wynikiem programu ewolucyjnego znaleźć wynik, który uda się znaleźć w identycznej liczbie kroków programem brute-force.

CX = OX = PMX?

Ten sam seed => funkcje liczyły to samo. Póki co jest ok, ale jak zaczniemy porównywać operatory pod względem skuteczności i wyjdzie nam, że działają z podobną skutecznością to powinniśmy jeszcze sprawdzić, czy przypadkiem nie są to te same funkcje.

Replacement

Aktualnie w replacement odrzucamy najgorszych osobników. Takie rozwiązanie cechuje zbyt szybka zbieżność i utykanie w ekstremach lokalnych. Osobnicy powinni być usuwani z prawdopodobieństwem odwrotnie proporcjonalnym do wartości funkcji przystosowania.

Performance równoległego algorytmu

Zaprojektowanie (co mierzymy - co na x, co na y) i wykonanie wykresów dotyczących szybkości równoległego algorytmu.

Pierwsza propozycja: na x - na ile podpopulacji dzielimy - na y - jaki najlepszy wynik uzyskujemy po n sekundach, gdzie n jest parametrem programu.

Wykresy projektujemy przez dodawanie flag uruchomieniowych programu (np. --max-seconds 600) i ustalenie celu w doc/makefile, np.:

001.res: $(in_orir)/001.in
$(program) -e --max-seconds 600 --subpopulations 10 --population-size 200 < $< > $@

Zrównoleglenie algorytmu

Pomysł nr 1:

Podział populacji na stałą liczbę populacji - eval, mutation każdej w osobnym wątku i join na końcu pętli SGA.

Krzyżowanie - wybór rodziców

Modyfikacja funkcji crossover_function. Przy wyborze rodziców powinno być trochę losowości. Najlepiej wybierać rodziców z prawdopodobieństwem zależnym od funkcji przystosowania.

Wygenerowanie danych testowych i wczytanie ich do programu

Napisanie generatora dla problemu szeregowalności. Napisanie wczytywania tych danych do programu.

Format:

W pierwszej linijce znajduje się liczba N.
W następnych linijkach znajduje się macierz NxN. Komórka (i,j) zawiera informację, że i-te zadanie wykonuje się na j-tej maszynie m[i][j] jednostek czasu.

Po ilu iteracjach algorytm znajduje optimum?

Zmodyfikowanie programu tak, żeby dostawał optimum (jako argument linii komend) i kończył się dopiero po jego znalezieniu (lub przejściu --max-iter iteracji, gdzie max-iter - duże) i wypisywał ile iteracji mu to zajęło.

Prezentacja wstępna

Zbiżamy się do pierwszej daty w terminarzu:
https://github.com/foo/evo/wiki/Terminarz

Do najbliższej środy musimy wysłać maila ze składem grupy do dr Lipińskiego. W tym mailu musimy też określić, jaką odmianą problemu się zajmujemy. Ja nie za bardzo wiem, co tam napisać, bo nie zajmujemy się żadną odmianą tylko pro prostu rozwiązujemy opisany problem. Niemniej coś trzeba napisać.

Należy też zaprezentować grupie rozwiązywany przez nas problem. Proponuję prezentację złożyć na wiki:

https://github.com/foo/evo/wiki/Prezentacja-wstępna

Algorytmy krzyżowania

W treści zadania jest jeszcze CX, OX. Trzeba by je znaleźć, rozkminić, zaklepać i dopisać do pliku mutation.cpp.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.