2010-12-30 10 views
7

algorytmów genetycznych zwykle geny symbolizuje tak:Jak przedstawić harmonogram problemu Timetabler w algorytmach genetycznych?

PARENT1: 101101010101001001001001110011100110101011101101 
PARENT2: 010100111011010101110101001001101011001010010110 

tak zwrotnicy, mutacje mogą być wykonane z tej reprezentacji jako takie jak:

wybrać punkt odcięcia:

PARENT1: 1011010101010010 01001001110011100110101011101101 
PARENT2: 0101001110110101 01110101001001101011001010010110 

Wykonaj rozjazd wyprodukować dziecko:

CHILD: 1011010101010010 01110101001001101011001010010110 

które następnie staje się zupełnie nowy chromosom:

CHILD: 101101010101001001110101001001101011001010010110 

Moim problemem jest to, jak do reprezentowania harmonogramu tygodniowego gen w Java?

Przykłady pochodzą z tego artykułu: http://secretgeek.net/content/bambrilg.pdf

ja wdrażających ten problem rozkładów w Javie i chce reprezentować

FIGURE 10: An Entire University Timetable 

w Javie.

+0

Nie ma to związku z pytaniem, ale jeśli masz dostęp do Matlab i masz – Nishant

+0

Nie ma to związku z twoim pytaniem, ale jeśli masz dostęp do Matlaba i nie masz ograniczeń, by używać Javy. Proponuję pójść po Matlaba. Z mojego osobistego doświadczenia Matlab ma niesamowity zestaw narzędzi GA i Soft Computing. warte odkrywania. – Nishant

+0

@Nishant Musiałem wprowadzić na rynek Java. – kamaci

Odpowiedz

2

Poniższy kod może dać ci pomysł, jak podejść do problemu. Jedno rozwiązanie (które byłoby planem uniwersyteckim) składa się z szeregu pojedynczych pokoi. Te pojedyncze pokoje mają dwuwymiarową tablicę, w której kolumny to dni, a wiersze to godziny. Ustawiłem HOURS na 16, ponieważ myślę, że w nocy nie będzie zajęć. Tak więc Godzina 1 będzie pierwszą godziną dnia ... prawdopodobnie od 7 do 8 rano. Wartości tablicy wskazują, która klasa jest zarezerwowana.

public class SingleRoom { 
    static final int DAYS = 7; 
    static final int HOURS = 16; 
    . . . 
    private int[][] timetable = new int[DAYS][HOURS]; //0 would say room is not booked, >0 indicates the booked class (english advanced (12), object oriented programming (139), etc..) 
} 

public class Solution { 
    static final int AVAILABLE_ROOMS = 26; 
    . . . 
    private SingleRoom[] university_timetable = new SingleRoom[AVAILABLE_ROOMS];  
} 

mutacje:

zmiana klasy mutacja - zmiana klasy do innej losowej klasy lub zero = brak rezerwację

przełącznik on/off klasy - jeśli godziny na dobę w określonym pomieszczeniu jest zarezerwowany, wyłącz go jeśli nie jest zarezerwowany, włącz go z losową klasą , aby dać algorytmowi możliwość nie liczenia godzin, ponieważ w mutacji zmiany klasy 0 ma małe prawdopodobieństwo, aby zostać wybranym

ograniczenia: ograniczenia: po utworzeniu rozwiązań, sprawdź wszystkie ograniczenia i zachowaj ważne rozwiązania, aby nowe ważne rozwiązania zostały włączone do twojej populacji (rozwiązań), jeśli są lepsze dla innych rozwiązań już w twojej populacji lub jeśli zwiększają różnorodność twojej populacji

Ale w dokumencie, do którego się odwołałeś, jest dość dobrze opisane, jak wdrożyć GA dla tego problemu (zaczyna się od strony 16).

Napisałem ogólny framework java dla algorytmu optymalizacji wielu celów mPOEMS (Optymalizacja prototypów wieloobiektowych z ewolucyjnymi krokami poprawy), który jest GA przy użyciu koncepcji ewolucyjnych.

można znaleźć kod here, może to daje wyobrażenie, jak podejść do problemu:

Rozwiązania, które można znaleźć z tego algorytmu zostały porównane w pracy naukowej z state-of-the- Algorytmy graficzne SPEA-2 i NSGA i udowodniono, że algorytm wykonuje porównywalną lub nawet lepszą jakość, w zależności od pomiarów, które mierzysz.

Możesz go znaleźć here.

Dalsze zasoby: mojej pracy, która dotyczy tych ram do problemu wyboru projektów: http://www.ub.tuwien.ac.at/dipl/2008/AC05038968.pdf

Dokumentacja ram: http://thomaskremmel.com/mpoems/mpoems_in_java_documentation.pdf

mPOEMS papier prezentacja: http://portal.acm.org/citation.cfm?id=1792634.1792653

Właściwie z trochę entuzjazmu można łatwo dostosować kod ogólny ram do swoich potrzeb.

Czy piszesz to GA w swojej pracy lub jako student?

+0

Nie mogłem mieć czasu, aby odpowiedzieć na ten komentarz. Postaram się znaleźć rozwiązanie zgodnie z Twoimi radami. Wdrażam go do szkoły, nie do pracy. – kamaci

+0

Zasugerowałeś dwuwymiarową tablicę dla rozkładu jazdy (wiersz, kolumna). Czy logicznie jest zmienić go w tablicę? Mam na myśli, na przykład, definiowanie różnych indeksów w poniedziałek od 7 do 8 rano, od poniedziałku 8 do 9 rano, ...., od wtorku 7 do 8 rano, od wtorku 8 do 9 rano, ... tak dalej? – kamaci

+0

Twoje oferty mutacji są ciche, ale co z crossoverami? – kamaci

Powiązane problemy