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?
Nie ma to związku z pytaniem, ale jeśli masz dostęp do Matlab i masz – Nishant
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
@Nishant Musiałem wprowadzić na rynek Java. – kamaci