Laboratorium technik optymalizacji: układanie uniwersyteckiego planu zajęć Marek Kubiak Opis problemu Rozważany problem układania uniwersyteckiego planu zajęć (ang. University Course Timetabling Problem UCTP) jest pewną redukcją typowego problemu, z którym spotykają się w swojej działalności uniwersytety. Polega on na tym, by kursy (wydarzenia) z pewnego danego zbioru przypisać do 45 przedziałów (jednostek) czasowych tygodnia roboczego (9 jednostek na każdy z 5 dni roboczych). Na każdy kurs jest zapisany pewien zbiór studentów. Do dyspozycji uniwersytetu jest pewien zbiór pomieszczeń, w których mogą się odbywać kursy, a każde pomieszczenie jest opisane przez pewien zbiór cech, które ono zapewnia (np. obecność projektora, komputerów osobistych, itp.) Do tego każde pomieszczenie posiada ograniczenie na maksymalną liczbę osób, która może pomieścić. Dopuszczalny plan zajęć to taki plan, w którym każdy kurs jest przypisany do odpowiedniej jednostki czasowej i pomieszczenia w ten sposób, że zachowane są sztywne ograniczenia: żaden student nie uczęszcza na więcej niż jeden kurs w jednym przedziale czasu; pomieszczenie przypisane do kursu jest wystarczająco duże, by pomieścić wszystkich uczęszczających studentów, a do tego zapewnia obecność wszystkich wymaganych przez kurs cech; tylko jeden kurs odbywa się w jednym pomieszczeniu w jednym przedziale czasowym. Dopuszczalny plan zajęć jest jeszcze oceniany pod kątem zachowania pewnych dodatkowych ograniczeń. Te ograniczenia sprawdzają: czy student ma zajęcia w ostatnim przedziale czasowym dnia? czy student ma więcej niż dwa kursy z rzędu? czy student ma w jednym dniu tylko jedne zajęcia? 2 Funkcja celu Ocena rozwiązania rozpoczyna się od określenia jego dopuszczalności. Gdy rozwiązanie jest niedopuszczalne, to jest bezużyteczne. Nie oznacza to oczywiście, że nie może byc takie używane w trakcie obliczeń jedynie nie powinno pojawić się jako wynik działania programu. Jeśli rozwiązanie jest dopuszczalne, to należy zliczyć:
liczbę takich przypadków, że student ma tylko jeden kurs w jednym dniu (jeśli ten sam student ma dwa takie dni, z tylko jednym kursem, to do liczby przypadków należy doliczyć 2); liczbę takich przypadków, że student ma więcej niż dwa kursy z rzędu; 3 kursy z rzędu dają przekroczenie dopuszczalnej liczby kursów z rzędu o, 4 kursy dają przekroczenie o 2, itd.; oczywiście ostatnia jednostka czasowa jednego dnia i pierwsza następnego dnia nie następują po sobie z rzędu i nie należy w ich przypadku sprawdzać tego warunku. liczbę takich przypadków, że student ma kurs w ostatniej jednostce czasowej dnia. Suma tych trzech liczb jest oceną rozwiązania dopuszczalnego i należy ją minimalizować. W przypadku używanych instancji sporą trudność obliczeniową może powodować już samo znalezienie rozwiązania dopuszczalnego. 3 Format pliku danych instancji (wejściowego) Plik tekstowy z opisem instancji problemu ma format niżej opisany; wszystkie liczby są całkowite, wszystkie separatory wewnątrz linii są spacjami. Pierwsza linia pliku zawiera cztery liczby: liczba kursów (wydarzeń), liczba pomieszczeń, liczba cech pomieszczeń, liczba studentów. Kolejne linie, jedna dla każdego pomieszczenia, zawierają rozmiary pomieszczeń (maksymalną liczbę osób dozwoloną w pomieszczeniu podczas zajęć). Kolejne linie, jedna na każdą parę student/kurs, zawierają cyfry binarne określające uczęszczanie studenta na kurs: zero () określa, że student nie uczęszcza na dany kurs, jedynka () określa, że student uczęszcza na ten kurs. Kolejność wpisów w tej części jest taka, że kursy zmieniają się szybciej (jakby były iterowane w wewnętrznej pętli). Np. dla 3 studentów i 4 kursów następujące dane: 2
kurs kurs 2 kurs 3 kurs 4 student student 2 student 3 Tablica : Tabela studenci/kursy dla przykładowych danych opisywałyby tabelę uczęszczania na kursy (tabelę studenci/kursy): Tabela oznacza, że: pierwszy student uczęszcza na kurs 2, drugi student uczęszcza na kurs i 2, trzeci student uczęszcza na kurs 3. Kolejne linie, jedna na każdą parę pomieszczenie/cecha pomieszczenia, zawierają cyfry binarne określające cechy pomieszczeń: zero () określa, że pomieszczenie nie posiada danej cechy, jedynka () określa, że pomieszczenie posiada daną cechę. Kolejność wpisów w tej części jest taka, że cechy pomieszczeń zmieniają się szybciej (jakby były iterowane w wewnętrznej pętli). Np. dla 3 pomieszczeń i 4 cech następujące dane: opisywałyby tabelę 2 cech pomieszczeń (tabelę pomieszczenia/cechy): Tabela 2 oznacza, że: pierwsze pomieszczenie posiada cechę 2, 3
cecha cecha 2 cecha 3 cecha 4 pomieszczenie pomieszczenie 2 pomieszczenie 3 Tablica 2: Tabela pomieszczenia/cechy dla przykładowych danych cecha cecha 2 cecha 3 cecha 4 kurs kurs 2 kurs 3 Tablica 3: Tabela kursy/cechy dla przykładowych danych drugie pomieszczenie posiada cechy i 2, trzecie pomieszczenie posiada cechę 3. Kolejne linie, jedna na każdą parę kurs/cecha pomieszczenia, zawierają cyfry binarne określające cechy pomieszczeń, które są wymagane przez określony kurs: zero () określa, że kurs nie wymaga danej cechy pomieszczenia, jedynka () określa, że kurs wymaga danej cechy. Kolejność wpisów w tej części jest taka, że cechy pomieszczeń zmieniają się szybciej (jakby były iterowane w wewnętrznej pętli). Np. dla 3 kursów i 4 cech następujące dane: opisywałyby tabelę 3 wymaganych przez kursy cech pomieszczeń (tabelę kursy/cechy): Tabela 3 oznacza, że: pierwszy kurs wymaga cechy 2, drugi kurs wymaga cech i 2, trzeci kurs wymaga cechy 3. 4
4 Format rozwiązania (wyjścia) Dla każdego kursu, w kolejności z pliku danych instancji, w osobnej linii wypisana powinna być para liczb: numer jednostki czasowej, numer pomieszczenia (separatorem tych liczb jest spacja). Numer jednostki czasowej jest liczbą z przedziału od do 44 i opisuje jednostkę czasową przydzieloną do kursu. Numer pomieszczenia to numer przydzielonego dla danego kursu pomieszczenia. Pomieszczenia są ponumerowane od zera i w kolejności z pliku danych instancji. 5 Źródło instancji problemu Instancje problemu można ściągnąć ze strony internetowej: http://www.cs.put.poznan.pl/mkubiak/teaching.html 6 Interfejs programu rozwiązującego problem UCTP Program rozwiązujący problem UCTP powinien przyjmować z linii poleceń następujące dwa parametry: <ściezkainstancji> <LimitSekund> Parametr pierwszy, <SciezkaInstancji>, to ścieżka dostępu (bezwzględna lub względna) do pliku instancji problemu. Parametr <LimitSekund> to dodatnia liczba całkowita określająca limit czasu działania programu. W czasie określonym przez ten limit program powinien sfinalizować obliczenia, wypisać wyniki (jedno, najlepsze znalezione rozwiązanie) do standardowego wyjścia i zakończyć się. Przekroczenie tego limitu powoduje, że bezwględnie usuwany jest proces programu. 5