2010-06-20 11 views
6

Muszę zaimplementować algorytm, który generuje harmonogram dla uniwersytetu. Szukałem i znalazłem wiele algorytmów. Ale tutaj jest problem. Potrzebuję algorytmu, który generuje harmonogram na cały semestr, a nie na podstawie tygodniowej. Powinien także uwzględniać wstępnie zdefiniowaną kolejność części kursu, np. ćwiczenie 1 powinno być po wykładzie 2 i przed wykładem 3. Czy masz jakieś sugestie?Czy istnieje algorytm, który tworzy rozkład uniwersytecki na cały semestr?

Dzięki.

UPDATE:
Mam następujący twarde ograniczenia:
H1: Tylko jedna część kursu jest przypisany do każdego pokoju w każdej szczelinie czasowej.
H2: Sala może pomieścić wszystkich uczniów i spełnia wszystkie funkcje wymagane przez wydarzenie.
H3: Żaden uczeń nie uczęszcza na jeden kurs w tym samym czasie (przynajmniej kursy obowiązkowe)
H4: Żaden nauczyciel nie naucza więcej niż jednej części kursu w tym samym czasie.

Miękkie ograniczenia to:
S1: Część kursu nie powinna być przypisana do przedziału czasowego niewygodnego dla wykładowcy.
S2: Powinna istnieć minimalna liczba luk między klasami nauczyciela.
S3: Powinna istnieć minimalna liczba przerw pomiędzy zajęciami dla ucznia.
S4: Zajęcia powinny spełniać preferencje wykładowców - dni i przedziały czasowe.
S5: Treści kursu należy zaplanować, aby wstępnie zdefiniować kolejność.

Przykład:
Course "architektura oprogramowania"

Week No Course Room Course Part Day  Time 
--------+---------+-------+--------------+----------+----- 
Week 1: SA  435  Lecture 1  Wednesday 8.15-11 
Week 2: SA  435  Lecture 2  Wednesday 8.15-11 
Week 3: SA  47  Lab 1   Monday  13-15 
Week 3: SA  436  Lecture 3  Wednesday 11-14 
Week 4: SA  243  Exercise 1 Monday  13-15 
Week 5: SA  436  Lecture 4  Wednesday 8.15-11 
+0

Witam.Dodałem do tego ograniczenia i przykład: – Thea

+0

Koleś, za każdym razem, gdy przychodzi czas na zapisy w jednostkach, chciałbym, żeby był dla mnie skrypt/skrypt. –

Odpowiedz

0

Skończyłem ze zmodyfikowanym algorytmem sugerowanego here. Użyłem algorytmu Iterative Forward Algorithm, a następnie zastosowałem symulowane wyżarzanie dla miękkich wiązań. Zmieniłem zestaw szczelin czasowych tak, aby zawierał cały zestaw szczelin czasowych dla semestru bez weekendów i świąt. Na przykład, jeśli semestr ma 6 tygodni i dla każdego tygodnia mam 40 godzin, to mój zestaw szczelin czasowych będzie zawierał cały 240 szczelin czasowych.

Dodałem także ograniczenie dla zamówienia. Gdy to ograniczenie nie jest spełnione, oznacza to dużą wagę dla obecnego rozwiązania. W ten sposób uniemożliwiam algorytmowi wybór rozwiązania z kursami, które nie są w porządku.

1

Możecie zajrzeć do interval scheduling. Wygląda na to, że potrzebujesz zmodyfikowanej wersji, która dodała pewne ograniczenia, takie jak miejsce, w którym można umieszczać ćwiczenia. Chciwe algorytmy są zwykle raczej łatwe do modyfikacji, a istnieje podstawowy algorytm IS.

-1

IIRC taki problem nie jest całkowicie rozwiązalny przez algorytm.

+2

W każdym razie możesz wykonać pełne wyszukiwanie. –

0

Pracuję nad podobnym projektem i korzystam z dostosowanego algorytmu genetycznego, aby rozwiązać problem.

Zbadaj szczegółowo algorytm genetyczny, a następnie za pomocą swoich ograniczeń zaprojektuj schemat blokowy, aby rozwiązać problem, biorąc pod uwagę wszystkie wspomniane ograniczenia.

Powiązane problemy