2010-02-21 12 views
5

Pracuję nad prostą aplikacją, która wygeneruje tabelę czasu (dzienny planer) dla szkół. Przeczytałem podstawy algorytmów, ale nie wiem, od czego zacząć.
Który algorytm używany do generowania tabeli czasu dla szkół

Problem:
Przydzielanie nauczycielom klas biorących pod uwagę wiele ograniczeń, takich jak:
1) Z zastrzeżeniem
2) Ekspertyza nauczyciela
3) nie więcej niż 2 zajęcia stale .. itp

Jest rzeczą oczywistą, że nie powinno dojść do nakładania się. Zasadniczo muszę przypisać N nauczycieli do klas M o stałej liczbie godzin pracy każdego dnia (8).

Wejścia:
1) liczbę klas
2) nauczycieli ogółem wraz z ich wiedzy zastrzeżeniem
3) Tematy/Kursy dla każdej klasy
4) Liczba wykładów w klasie dziennie
5) Inne elastyczne ograniczenia, takie jak minimalny/maksymalny czas pracy nauczyciela na dzień, całkowity czas pracy na nauczyciela na tydzień itp.

Moje pytania:
1) Czy to prawda? spojrzeć na to jako na problem z wieloma ograniczeniami?
2) Który algorytm powinienem użyć? (Węgierski algorytm?)
3) Czy powinienem zacząć od zebrania całego zestawu wiązań za jednym razem, a następnie wygenerować tabelę, czy też należy to zrobić w pośrednich krokach?

Jestem początkujący w nauczaniu/wdrażaniu algorytmów, więc każda pomoc wskazuje na mnie we właściwym kierunku docenionym! Dzięki.

+0

Znalazłem plik PostScript mówiący o algorytmie ** Tabu Search ** (http://en.wikipedia.org/wiki/Tabu_search) do przypisywania nauczycieli do zajęć (http://www.uv.es/sestio /TechRep/tr01-01.ps). To głównie heurystyka matematyczna. Mam nadzieję, że da ci to jakiś kierunek. –

+3

To jest duplikat. Odpowiedziałem na to pytanie kilka tygodni temu: http://stackoverflow.com/questions/2177836/algorithm-for-creating-a-school-timetable –

+0

@Stefano, nieoceniony link! Dzięki – Checksum

Odpowiedz

6

Na początek wybrałeś problem. Planowanie optymalizacji, takie jak to, jest NP complete. Istnieje mnóstwo dokumentów na temat tego, jak radzić sobie z takimi problemami. Klasa problemu jest znana jako satysfakcja z ograniczeń. Możesz wykonać wyczerpujące wyszukiwanie, które jest najłatwiejsze, ale jest również bardzo czasochłonne, jeśli masz więcej niż kilka klas, to nie będzie działać. Możesz rzucić okiem na podstawę solver, która jest zestawem narzędzi .net do rozwiązywania tego typu rzeczy. Scott Hanselman zrobił podcast o tym numerze: tutaj http://www.hanselminutes.com/default.aspx?showID=209. Więcej informacji na ten temat można znaleźć tutaj: http://code.msdn.microsoft.com/solverfoundation. Jeśli masz ochotę zrobić to sam, spróbuj spojrzeć na GSAT lub w inny sposób niektóre z tych algorytmów ewolucyjnych wyglądają interesująco http://www.springer.com/engineering/book/978-3-540-48582-7.

0

To pytanie pojawia się co najmniej raz w tygodniu tutaj, a odpowiedzi (w tym moje) są zawsze takie same. Myślę, że powinniśmy stworzyć konkretny znacznik algorytmów planowania, jeśli taki nie istnieje.

Powtórzę, że najodpowiedniejszą techniką rozwiązywania problemów, takich jak ta, jest programowanie ograniczeń. Podczas gdy inne techniki optymalizacji są dobre dla małych problemów, formułowanie często jest bolesne z powodu pewnych ograniczeń. Weź pod uwagę wszystkie zmienne całkowite, które musisz utworzyć dla niektórych prostych ograniczeń. Ponieważ problem często wymaga mnóstwa wykonalnych harmonogramów (lub określenia niedorzeczności), a nie optymalnego rozwiązania, preferowanym podejściem jest CP, ponieważ właśnie to zaprojektowano. Większość innych podejść wymaga od użytkownika, aby "wymusił" warunek optymalności na problemie, w którym tak naprawdę nie istnieje.

Powiązane problemy