FET FAQ (często zadawane pytania)


tłumaczenie: Radoslaw Pasiok (zapala_at_konto_pl)


W jaki sposób zorganizowane są dane wejściowe FET?

- Studenci - zorganizowanie w grupy (oraz lata zawierające grupy, które z kolei zawierać mogą podgrupy).

- Nauczyciele.

- Przedmioty (nazwy przedmiotów, np. Matematyka, Fizyka, etc.).

- Sale (w których odbywać się mają zajęcia).

- Zajęcia: sprzężenie jednego lub więcej nauczycieli, przedmiotu i jednej bądź większej ilości grup studentów. Zwykle mówi się o tym lekcja, wykład, laboratorium itd.

- Ograniczenia. Mogą być: czasowe (przypisujące określony czas) lub miejsca (przypisujące określone miejsce). Mogą również być ograniczenia obowiązkowe lub nieobowiązkowe.


Podstawowe obowiązkowe ograniczenie czasowe (ConstraintBasicCompulsoryTime) i Podstawowe obowiązkowe ograniczenie miejsca (ConstraintBasicCompulsorySpace) to dwa niejawne ograniczenia nakładane na każdy z rozkładów zajęć. Zostają one dodane automatycznie. Automatycznie, gdy tworzymy nowe zajęcia, FET dodaje również ograniczenie Preferowany czas zajęć (ConstraintActivityPreferredTime). Każde z ograniczeń ma swoją wagę. Ograniczenia niejawne mają wagę 1.0. Możesz zmieniać wagi innych ograniczeń, do czego Cię nawet zachęcam. Jak obliczyć współczynnik konfliktu danego ograniczenia? Jest to poprostu ilość konfliktów pomnożona przez 1 dla zajęć odbywających się co 2 tygodnie lub przez 2 dla cotygodniowych, pomnożona przez wagę.


PS: Staraj się, póki co, pracować z całkowitymi wagami (pomiędzy 1 and 100).


Nowa uwaga: dane mogą zawierać również listę wyposażenia oraz wyróżniki przedmiotów.



W jaki sposób działa FET?

Stosując prosty algorytm genetyczny. Poczytaj moje artykuły, poświęcone tej tematyce (dostępne na mojej stronie - http://lalescu.ro/liviu/fet/).


W skrócie (dla przydziel godziny): każdy z możliwych rozkładów reprezentowany jest przez tablicę, powiedzmy times[i], gdzie [i] zmienia sie od 0 do liczby zajęć - 1. Ustalenie times[i] odpowiada przydzieleniu czasu dla zajęć i. Taka jest reprezentacja.


Poźniej stosuje się algorytm genetyczny (używając selekcji, crossover, mutacji itp.) w celu uzyskania optymalnego (mam nadzieję) rozwiązania.



W jaki sposób mogę otrzymać dobry rozkład i dlaczego za każdym razem dostaję inne wyniki?

Generowanie rozkładu jest procesem losowym; uruchamiaj ten proces za każdym razem, gdy nie jesteś zadowolony z wyników. Możesz zwiększyć liczbę populacji. W tej chwili liczba populacji jest ograniczona do 8192, ale jeśli masz sporo RAMu, możesz ją dowolnie zwiększyć (8192 odpowiada mniej więcej 160 megabajtom pamięci). Zmienna jest przechowywana w pliku src/engine/genetictimetable_defs.h i nazywa się MAX_POPULATION_NUMBER.


DODATEK - 18 Oct. 2004: możesz zmniejszyć wartość zmiennej MAX_ACTIVITIES do ilości zajęć prowadzonych u Ciebie, potem zwiększ MAX_POPULATION_NUMBER. Uzyskałem wyniki stosując MAX_ACTIVITIES ustawione na 400 i MAX_POPULATION_NUMBER równego 65536. Te zmienne znajdują się w pliku src/engine/genetictimetable_defs.h. Uruchom "make clean" przed "make" (myślę, że w gcc jest jakiś błąd).


DODATEK - 14 Feb. 2005: Zmienna MAX_ACTIVITIES jest teraz ustawiona domyślnie na 1250, a MAX_POPULATION_NUMBER na 8192.



Jak można pogrupować studentów w FET ?

FET został pomyślany tak, by pozwalał na dowolną strukturę szkoły :


- niezależne podgrupy (niezachodzące na siebie);


- grupy zachodzące na siebie (kilka podgrup) i lata (kilka grup).



Jak pracować z pokrywającymi się zespołami studentów?

Jeśli masz zespoły zachodzące na siebie, musisz zdefiniować najmniejsze niezależne podgrupy, które nie pokrywają się z żadna inną podgrupą. Przykład: masz 1 grupę, przedmiot sport (który prowadzony jest osobno dla chłopców i dziewcząt) i przedmiot fakultatywny, fizykę, na którą chodzić będą tylko niektórzy uczniowie (tak, FET obsługuje przedmioty fakultatywne). Musisz zdefiniować podgrupy: chłopców którzy chcą fizyki, chłopców którzy nie chcą fizyki, dziewcząt które chcą fizyki i dziewcząt które nie chcą fizyki. Tak więc, zdefiniuj :


grupa dziewcząt = podgrupa dziewcząt które chcą fizyki + podgrupa dziewcząt które nie chcą fizyki

grupa chłopców = podgrupa chłopców którzy chcą fizyki + podgrupa chłopców którzy nie chcą fizyki

grupa fizyków = chłopcy którzy chcą fizyki i dziewczęta które chcą fizyki.


Teraz możesz definiować dowolne zajęcia dla utworzonych grup:


Zajęcia1: nauczyciel A, grupa dziewcząt, przedmiot sport;

Zajęcia2: nauczyciel B, grupa chłopców, przedmiot sport;

Zajęcia3: nauczyciel C, grupa fizyków, przedmiot fakultatywna fizyka.



Czy można dodać większą ilość grup studentów do poszczególnych zajęć?

Tak, można dodać kilka grup studentów (podgrup, grup lub lat) i kilku nauczycieli do konkretnych zajęć.


DODATEK - 18 Oct. 2004: Interface pozwala na 3 nauczycieli i 4 grupy studentów w ramach pojedynczych zajęć. Ale nic nie stoi na przeszkodzie, aby zwiększyć te ilości ręcznie edytując plik wsadowy - można mieć do 6 nauczycieli w ramach jednych zajęć. Nikt nie prosił mnie o więcej niż 6 nauczycieli i 4 grupy studentów.



Co oznaczają wagi ograniczeń?

Istotność spełnienia danego ograniczenia, relatywnie do innych ograniczeń. Póki co, proszę używać jako wag liczb całkowitych (pomiędzy 1 i 100). Nigdy nie zdażyło mi się, abym musiał korzystać z wag innych niż 1, ale tobie coś takiego może się przydarzyć.



W jaki sposób mogę zwiększyć prędkość poszukiwania?

Musisz zwiększyć liczbę populacji.



Co to znaczy 'zajęcia co dwa tygodnie'?

Zajęcia odbywają się raz na dwa tygodnie (może wydaje Ci się to niezwykłe, ale musiałem wprowadzić taką koncepcję, ponieważ mój wydział potrzebuje czegoś takiego).



Dlaczego wszystkie konflikty ukazują się pomnożone przez 2?

Ponieważ odnoszą się do zajęć cotygodniowych. Będą widoczne jako pojedyncze dla zajęć odbywających się co dwa tygodnie.



Jak mogę wnieść własny wkład / wspomóc FET ?

Zarknij do pliku TODO. Możesz również podesłać autorowi swoje komentarze i sugestie.


FET to wolne oprogramowanie, a każda wpłata (donation) będzie mile widziana. Jeżeli chciałbyś się na to zdecydować, skontaktuj się z autorem.



Na podstawie jakiego algorytmu działa FET?

Jest to prosty algorytm genetyczny zastosowany do prostej reprezentacji danych.


W przyszłości chciałbym umieścić tu jakiś konkretny opis tego algorytmu. Jednak póki co, podaję podaję kilka szczegółów niezbędnych do zrozumienia programu:


- Algorytm genetyczny zaszyty w programie wydaje mi się teraz naprawdę prosty i sądzę, że mógłby być objaśniony w czasie nie dłuższym od 2 godzin. Silnik również nie jest taki trudny do zrozumienia. Prawdziwym koszmarem jest graficzny interfejs użytkownika, reprezentacja danych i sprawy związane z czytaniem i zapisywaniem.


- Alokacja czasu (godzin) i miejsc (sal) to dwie podobne do siebie fazy. Musiałbyś przeczytać mój artykuł, żeby zrozumieć dlaczego możesz najpierw alokować godziny, a potem sale.


- Do nauczycieli, przedmiotów, studentów (lat, grup i podgrup), zajęć i ograniczeń używam QptrList. Przed rozpoczęciem symulacji wszystkie te informacje kopiowane są do tablic, aby przyspieszyć obliczenia. Każdemu nauczycielowi, przedmiotowi i zajęciom przypisywane są indeksy w tych nwych tablicach (plany mają postać macierzy, indeksowanych po nauczycielu (studentach, salach), dniu i godzinie, wypełnionych liczbami całkowitymi, reprezentującymi indeksy zajęć)


- czasem używam int16, mając na uwadzę zużycie pamięci


- Gdy populacja ma wielkość 8129 i mamy maksimum 2500 zajęć, klasa GemeticTimetable ma rozmiar około 160 megabajtów (o ile dobrze zapamiętałem). W rzeczywistości zawiera ona tablicę 2500*8129*2*2 16-bitowych liczb całkowitych, co daje właśnie około 160Mb pamięci.


Modification (21 Feb. 2005) - z populacją wielkości 8192 i 1250 zajęć klasa Rules ma wielkość ~160Mb.



Czy mógłbyś opisać używanie wag w ograniczeniach ?

Waga ograniczenia może być liczbą rzeczywistą (double). ALE: wolałem aby wartość zwracana przez dowolne ograniczenie była liczbą całkowitą, będącą zaokrągleniem wartości rzeczywistej (z powodu prędkości). Póki co, proszę spróbuj pracować z całkowitymi wartościami wag (pomiędzy 1 a 100).



Dlaczego FET pracuje w dwóch fazach, najpierw czasy, a potem miejsca?

Z powodu prędkości. Ale przy dwufazowym przypisywaniu może się zdarzyć, że faza pierwsza znajdzie rozwiązanie, które nie odpowiada temu z drugiej fazy (np. pracując z przykładem 12 Marka Jaszuka nie otrzymamy dobrego rozwiązania dla drugiej fazy, choć można je znaleźć 'na piechotę').


Są dwa podejścia : 1) pracować z FET jednofazowo (czas pracy może być trochę dłuższy) lub 2) dodać trochę ograniczeń czasowych do rozwiązania pierwszej fazy, tak aby zawsze spełniało ono ograniczenia miejsca (bardzo skomplikowane: każde z ograniczeń koże być obowiązkowe lub nieobowiązkowe, a czas pracy programu może być bardzo długi).


To jest problem do zbadania.



Jak działa ograniczenie Zajęcia zaczynają się w tym samym czasie (ConstraintActivitiesSameStartingTime) ?

- dla ograniczeń obowiązkowych rozwiązania kandydujące (robocze) są modyfikowane tak, aby spełnić wszystkie te ograniczenia, zatem pozbywamy się wszelkich konfliktów. Ta metoda jest szybsza, co udowodnił Ian Fantom w swoim przykładzie.


- dla ograniczeń nieoobowiązkowych metoda polega na uwzględnieniu konfliktów (wolniejsza, gorsza od poprzedniej).



W jaki sposób działa ograniczenie Preferowanego czasu zajęć (ConstraintActivityPreferredTime)?

- dla ograniczeń obowiązkowych rozwiązania kandydujące (robocze) są modyfikowane tak, aby spełnić wszystkie te ograniczenia, zatem pozbywamy się wszelkich konfliktów. Ta metoda jest szybsza (udowodnione w praktyce, nie w teorii).


- dla ograniczeń nieobowiązkowych, metoda polega na uwzględnieniu konfliktów. Procedura określa współczynnik konfliktów, który jest tym większy, im bardziej zajęcia oddalają się od preferowanego czasu. Może to skutkować otrzymaniem gorszych rozwiązań, jeśli chodzi Ci o dokładne spełnienie tego warunku czasowego. W takim przypadku użyj ograniczenia Preferowanych czasów zajęć z tylko jednym określonym czasem dla zajęć.


Przykład : 5 dni w tygodniu


5 zajęć dziennie (bez powtarzania tego samego zajęcia 2 razy dziennie)


zajęcia 1 - preferowane w poniedziałek

zajęcia 2 - preferowane we wtorek

zajęcia 3 - preferowane w środę

zajęcia 4 - preferowane w czwartek

zajęcia 5 - kiedykolwiek


Najlepsze z rozwiązań będzie zawierało 2 konflikty i może wyglądać następująco:


zajęcia 1 - w poniedziałek

zajęcia 2 - we wtorek

zajęcia 3 - w środę

zajęcia 4 - w czwartek

zajęcia 5 - w piątek


Jeśli użyjesz ograniczenia Preferowanych czasów zajęć (ConstraintActivityPreferredTimes) otrzymasz tylko jeden konflikt:


zajęcia 1 - w poniedziałek

zajęcia 2 - w środę

zajęcia 3 - we wtorek

zajęcia 4 - w czwartek

zajęcia 5 - w piątek



W czym FET jest lepszy od innych aplikacji?

- FET to wolne oprogramowanie;


- obsługuje zajęcia cotygodniowe i odbywające się co dwa tygodnie (wymagał tego mój uniwersytet Craiova w Rumunii);


- obsługuje niezależne podgrupy, zachodzące na siebie lub niezależne grupy, zachodzące lub niezależne lata studentów (to umożliwia istnienie dowolnego rodzaju struktury (zbioru) studentów). Jeśli tego potrzebujesz, w FET możesz uwzględniać nawet pojedynczych studentów;


- możliwość definiowania zajęć fakultatywnych;


- wiele rodzajów ograniczeń oraz możliwość dodania nowych (czekam na sugestie!).



A jakie są wady FET w porównaniu z innymi programami?

- Jest niezbyt przyjazny (brak helpa, prosty interfejs graficzny);


- może zawierać błędy. Nie mam wystarczającej ilości przykładowych plików wsadowych do testowania FET (a poza tym, nie cierpię tego robić :-)



Czy FET daje się kompilować na systemach innych niż GNU/Linux?

FET może zostać skompilowany w każdym systemie podobnym do GNU/Linux. Służę radami, w jaki sposób kompilować FET w dowolnym systemie. W szczególności, FET może być skompilowany na Microsoft Windows, jeśli zainstalujesz Qt firmy trolltech.com.



Czy FET, podobnie jak wszystkie inne aplikacje do układania rozkładów zajęć, rości sobie prawo do bycia najlepszym programem na świecie?

Nie mam pojęcia, ponieważ nie mogłem porównać FET z innymi aplikacjami (jeśli możesz to zrobić, to byłoby fajnie). Wszystko, co mogę obecnie powiedzieć, to że nie widziałem innej aplikacji z tak wieloma rodzajami ograniczeń i tak elastycznej jak FET, będącej na dodatek wolnym oprogramowaniem.


Czy FET jest najlepszym wśród wolnych programów (GNU/GPL)? Hmmm... pierwszym był Tablix, o czym dowiedziałem się kończąc FET. Linki do tego oprogramowania znajdziesz w LINKS (na webie) lub każdej wyszukiwarce.



Jaka jest różnica między inicjalizowaniem nieprzydzielonych a losowym? które z nich jest lepsze?

Dotyczy to metody inicjalizacji populacji rozwiązań-kandydatów. Wygląda na to (co wynika z osiąganych rezultatów), że inicjalizacja nieprzydzielonych jest lepsza. Nie trafiłem nigdzie indziej na opis inicjalizacji nieprzydzielonych, ale wygląda ona na bardziej naturalną i wyjaśnienia możesz poszukać gdzieś w mojej pracy (thesis).



Pomoc dla ograniczenia Min N dni pomiędzy zajęciami (ConstraintMinNDaysBetweenActivities).

Dotyczy zbioru zajęć i wymaga podania stałej N. Dla każdej pary zajęć z tego zbioru nie pozwala się, aby zajęcia odbywały się częściej, niż co N dni. Jeśli ustawisz N=1, wówczas ograniczenie to oznacza, że żadna z par zajęć nie może odbyć się tego samego dnia. N=2 oznacza przynajmniej jeden dzień przerwy pomiędzy zajęciami.


Przykład: 3 zajęcia i N=2. Można mieć wtedy zajęcia w poniedziałek, środę i piątek (dla 5 dni w tygodniu).


Przykład2: 2 zajęcia, N=3. Wówczas możemy mieć zajęcia w poniedziałek i czwartek, poniedziałek i piątek lub wtorek i piątek (dla 5 dni w tygodniu).



Czy trudno jest dodać nowe ograniczenie do FET?

To jest bardzo proste. Mogę powiedzieć, że zaimplementowanie nowego ograniczenia jest kwestią kilku godzin. Opis tej procedury znajdziesz w pliku /.../fet-x.x.x/doc/how-to-implement-new-constraints



Pomoc dla Wczesne zajęcia dla studentów (ConstraintStudentsEarly).

Jest to ograniczenie, które wymaga, aby wszyscy studenci rozpoczynali swoje lekcje tak wcześnie, jak to tylko możliwe. Bądź ostrożny z tym ograniczeniem: jeżeli którakolwiek z grup studentów, któregoś dnia, będzie zaczynać zajęcia później, niż na pierwszej godzinie, będzie to skutkowało konfliktem.



FET nie znalazł rozkładu.

Spróbuj użyć większej liczby populacji. Potem spróbuj większej ilości symulacji. Jeśli to nie pomoże, spróbuj zmniejszyć ograniczenia, jakie narzuciłeś na rozkład. Możesz tego dokonać przez usunięcie ograniczeń obowiązkowych lub ich zamianę na nieobowiązkowe.



Czy wagi są istotne? Jak najlepiej dobrać ich wielkości?

---Ten komentarz został napisany gdy FET używał jedynie mutacji, która randomizowała czas rozpoczęcia zajęć.


Tak, wagi są istotne, ale niestety nie mogę prosto odpowiedzieć na drugie pytanie.


Na potwierdzenie pierwszej odpowiedzi przytoczę przykład: rozpatrywany przez nas plik nazywa sie sample4 (przynajmniej wtedy się tak nazywał). Jak narazie, jest to dobry przykład planu, na który narzucono znaczną ilość ograniczeń, który sprawia programowi FET sporo trudności. Wagi są tak dobrane, że podstawowe ograniczenia mają niższe wagi niż ograniczenie unikania okienek dla studentów. Chyba po 4 próbach FET znajduje plan pozbawiony konfliktów (mówię o ograniczeniach obowiązkowych). Żadna z prób nie zakończyła się z więcej niż 3 konfliktami ograniczeń obowiązkowych (zwykle był 1).


Chciałem jednak położyć nacisk na ważniejsze dla mnie ograniczenia podstawowe, więc podniosłem ich wagi, obniżając jednocześnie wagi ograniczeń okienek. Wynik był dla mnie nieprzyjemnym zaskoczeniem: w żadnej z prób nie zszedłem poniżej 3 konfliktów, a średnio miałem ich 6. Wniosek jaki się z tego wyłania: właśnie nad tym pracuję. Dopóki ktoś nie zaproponuje zadowalającego wyjaśnienia, myślę że: wagi ograniczeń wpływają na funkcję konfliktów. Funkcja ta może mieć mniej lub więcej lokalnych minimum (będących zmorą twórców algorytmów genetycznych). Zachęcam Cię do prób z różnymi wagami.

Nowy komentarz: algorytm FET faworyzuje przejścia jedno-mutacyjne, tj. otrzymujesz nowe rozwiązanie kandydujące przez przesunięcie pojedynczych zajęć w starym kandydacie. Zarówno stare jak i nowe rozwiązanie muszą być wystarczająco dobre, aby zostać wybrane w procesie ewolucji. Jest bardziej prawdopodobne, że mutacje te spełniac będą podstawowe ograniczenia, podczas gdy ograniczenia okienek wymagają większej ilości mutacji, więc przejściowe rozwiązania kandydujące nie są aż tak dobre, co obniża szanse znalezienia dobrego rozwiązania.


--- Komentarz poniższy napisałem po tym jak zdecydowałem się wprowadzić drugi rodzaj mutacji, wzajemną zamianę miejsc dwóch losowo wybranych zajęć. Ta zamiana miejsc okazała się świetna i teraz otrzymuję takie same wyniki, niezależnie od wielkości wag (odnoszę się tutaj do wspomnianego przykładu). Jest to spowodowane tym, że zamiana miejsc umożliwia przekształcenie się rozkładu nie spełniającego ograniczenia okienek do takiego, które je spełnia.



Czy mogę użyć FET do interaktywnego układania planu?

Możesz, ale to nie będzie proste. Części dotyczące reprezentacji danych i stopniowego dochodzenia do rozwiązania działają, jedynie interfejs musi zostać uaktualniony.


W każdym razie, kiedy dodajesz obowiązkowe ograniczenie Preferowany czas pojedynczych zajęć, oznacza to, że ustalasz termin tych zajęć na sztywno. Mógłbyś używać tego polecenia do półautomatycznego lub nawet ręcznego układania planu, ale nie jest to wygodne.



Pomoc dla Ograniczenia preferowanych czasów zajęć (ConstraintActivityPreferredTimes).

Możesz podać zestaw przedziałów czasu, w których odbyć się mogą zajęcia (taki rodzaj LUB dla kilku Ograniczeń preferowanego czasu zajęć /ConstraintActivityPreferredTime/).


Ważne: gdy masz tylko jedno nieobowiązkowe ograniczenie preferowanego czasu, ConstraintActivityPreferredTimes może się okazać lepsze niż ConstraintActivityPreferredTime, w zależności, czy chcesz minimalizować różnice między czasem zajęć a czasem preferowanym lub czy chcesz poprostu uzyskać dokładnie czas preferowany. Zobacz dokładny opis w objaśnieniach do ConstraintActivityPreferredTime.



Pomoc dla ograniczenia Max dni w tygodniu z przedziałem dla grupy studentów (ConstraintStudentsSetIntervalMaxDaysPerWeek).

Nieco skomplikowana i przydługa nazwa. Pewien użytkownik chciał nie dopuszczać do odbywania się zajęć grupy studentów podczas więcej niż dwóch popołudni w tygodniu. To ograniczenie jest bardziej ogólne. Możesz określić dla grupy przedział czasu (godzinę początkową i końcową) i maksymalną ilość dni w tygodniu, dla których dopuszczasz odbywanie się zajęć w podanym przedziale czasu.



Pomoc dla ograniczenia 2 zajęcia kolejno (Constraint2ActivitiesConsecutive).

Pewnien użytkownik miał taką potrzebę, aby 2 zajęcia następowały po sobie, przy czym ważna była kolejność tych zajęć. Zarówno dla obowiązkowego, jak i nieobowiązkowego, uwzględnia się współczynnik konfliktów. Oblicza się go na podstawie różnicy w dniach + różnicy w godzinach.

Ilość konfliktów mnożona jest przez 2, jeśli pierwsze zajęcia odbywają się co tydzień (a nie co dwa) i powtórnie przez 2 jeśli drugie zajęcia również odbywają się co tydzień.


->added - 15 May 2004.


->modified - 20 February 2005.



Pomoc dla ograniczenia 2 zajęcia zgrupowane (Constraint2ActivitiesGrouped).

Pewnien użytkownik miał taką potrzebę, aby 2 zajęcia następowały po sobie, przy czym kolejność tych zajęć była nieistotna. Zarówno dla obowiązkowego, jak i nieobowiązkowego, uwzględnia się współczynnik konfliktów. Oblicza się go na podstawie różnicy w dniach + :


- różnica w godzinach, jeśli są zbytnio oddzielone od siebie

- stała wartość, jeśli zajęcia pokrywają się

- 0, jeśli godziny są w porządku.


Ilość konfliktów mnożona jest przez 2, jeśli pierwsze zajęcia odbywają się co tydzień (a nie co dwa) i powtórnie przez 2 jeśli drugie zajęcia również odbywają się co tydzień.


->added - 15 May 2004.



Pomoc dla ograniczenia Preferowane czasy wielu zajęć (ConstraintActivitiesPreferredTimes).

Pewien użytkownik zaproponował, aby to ograniczenie ConstraintActivitiyPreferredTimes było bardziej ogólne. Od teraz można określać filtry nauczycieli, studentów i przedmiotów dla zajęć, które powinny odbyć się w określonych przedziałach czasu.


->added - 15 May 2004.



Mam już gotowy plan, ale jeden z nauczycieli chciałby zmienić swój plan, podczas gdy inni chcą pozostać przy starym. Chciałbym zablokować zajęcia tych pozostałych nauczycieli i ponownie przydzielić im te same godziny. Czy FET poradzi sobie z taką sytuacją ?

Tak, poradzi. Poprostu dodaj wiele obowiązkowych ograniczeń preferowanego czasu zajęć, po jednym dla każdych zajęć, które chciałbyś zablokować (preferowanym czasem zajęć będzie czas przydzielony poprzednio). Nie będzie to powodwać spowolnienia symulacji, ponieważ obowiązkowe ograniczenia tego typu są traktowane w specjalny sposób (konkretnie, chodzi tu o repairing of the chromosomes).


->added - 17 November 2004.



A co z wprowadzaniem podwójnych ograniczeń dla rozkładu ?

To spowolni automatyczne generowanie rozkładu, więc lepiej tego nie robić.


-> added - 12 February 2005.



A co z automatycznym generowaniem w jednej fazie i 2 fazach?

Jeśli FET nie znajdzie rozkładu w dwóch fazach (będzie zbyt wiele niespełnionych ograniczeń miejsca), spróbuj przydzielania jednofazowego.


-> added - 14 February 2005.




dokumentacja sporządzona przez Liviu Lalescu