Opis problemu
Transkrypt
Opis problemu
Techniki optymalizacji: opis zadania Przemysław Wesołek 2007-11-08 Contents 1 Opis problemu 1.1 Definicja problemu . . . . . . . . . . . . . . 1.2 Załadowanie samochodu . . . . . . . . . . . 1.3 Koszt rozwiązania . . . . . . . . . . . . . . 1 1 2 2 2 Specyfikacja formatu danych 2.1 Nazwy instancji . . . . . . . . . . . . . . . . 2 3 3 Interfejsu systemu 3.1 Środowisko uruchomieniowe . . . . . . . . . 3.2 Struktura katalogów . . . . . . . . . . . . . 3.3 Wczytywanie danych i zapis wyników . . . 3 3 3 3 4 Zmiany w dokumencie 3 – punkt początkowy i końcowy (od którego klienta podjąć towar i do którego dostarczyć); każdy punkt pojawi się w dokładnie jednym zamówieniu, dokładnie jeden raz, – okna czasowe podjęcia i dostarczenia towaru (godziny, dokładność minutowa), – wymaganą liczbę wizyt w ciągu tygodnia (1-7). • zbiór typów pojazdów V T . opisany jest: Każdy typ pojazdu – nazwą, – stałym kosztem użycia pojazdu, – kosztem wozokilometra (tj. kosztem przejazdu jednego kilometra), – stałą prędkością poruszania, 1 – zbiorem możliwości. Możliwość to para (typ produktu, ilość). Ilość jest liczbą całkowitą. Opisuje ona jaka ilość danego produktu wypełnia całkowicie samochód. Opis problemu Celem zadania jest zaplanowania realizacji wszystkich zleceń opisanych w problemie, mając do użycia nieogranic– bazą (elementem C); każdego dnia każdy pozoną flotę pojazdów o określonej charakterystyce. jazd określonego typu zaczyna i musi skończyć Każde zlecenie polega na przewiezieniu pewnej ilości swoją trasę w bazie, towaru od jednego klienta do drugiego. Każdy z klientów wymaga, aby obsługa miała miejsce w określonych godz• zbiór pojazdów V E, dostępna jest dowolna liczba inach. Dodatkowo, aby zlecenie uznać za zrealizowane, pojazdów dowolnego typu. klient musi zostać odwiedzony w określoną w zleceniu liczbę dni. Każdego z tych dni musi nastąpić przewóz Celem jest znalezienie planu realizacji wszystkich zacałości towaru przez dokładnie jeden samochód. mówień. Plan układany jest na jeden tydzień (7 dni). Spośród dopuszczalnych rozwiązań należy wskazać to, Musi on spełniać następujące warunki: które ma jak najmniejszy koszt (patrz rozdział 1.3). • każdy klient jest odwiedzony dokładnie tyle razy, ile wizyt zadeklarował w zamówieniu, nie częściej niż 1.1 Definicja problemu raz dziennie, Dane są następujące obiekty: • każdy samochód odwiedzający klienta dostarcza lub odbiera całość towaru wyspecyfikowanego w za• zbiór klientów i baz C wraz z odległościami mówieniu, pomiędzy nimi. Jeśli c , c ∈ C to w = w 1 2 12 21 jest odległością pomiędzy klientem c1 a klientem c2 . Odległość jest symetryczna i spełnia nierówność trójkąta (tj. ∀c1 , c2 , c3 ∈ C, w12 + w23 ≥ w13 ). • w żadnym punkcie swojej trasy samochód nie może wieźć łącznie więcej towarów, niż jest to przewidziane w jego specyfikacji (patrz rozdział 1.2), • zbiór typów produktów P T . Każdy typ produktu scharakteryzowany jest nazwą. • odbiór towaru musi nastąpić przed jego dostarczeniem, • zbiór zamówień. poprzez: Każde zamówienie jest opisane • przyjazd do punktu obsługi musi nastąpić nie później niż na koniec okna czasowego, – jeden rodzaj produktu pt ∈ P T i jego ilość (całkowitą) do przewiezienia, • przyjazd przed początkiem okna czasowego skutkuje oczekiwaniem do jego rozpoczęcia, 1 • każdego dnia samochód wyjeżdża z bazy na- # at least once jwcześniej o godzinie 0:00 i musi do niej powrócić # - all <ptype>-s occur before any <vtype> # - all <vtype>-s occur before any <order> najpóźniej o 23:59. # - distance between two customers is calculated as # planar Euclidean distance, # i.e. d^2 = (p1.x-p2.x)^2 + (p1.y-p2.y)^2 # - all data types (decimals, integers) will be # small enough to fit into standard Java types Zakłada się, że czas obsługi klienta jest nieistotny (zerowy). 1.2 Załadowanie samochodu <problem-definition> = "problem" <ws> <problem-name> <eol> (<empty> | <ptype> | <vtype> | <order>)* <problem-name> = <name> Możliwości samochodu są opisane poprzez typy towarów i = 1, . . . , I, jakie może przewozić z przypisaną do nich ilością ai > 0, która wypełnia cały pojazd. Dopuszczalne są załadowania towarami tylko w takich ilościach 0 ≤ ci ≤ ai , które nie przekraczają łącznie pojemności pojazdu: I X ci ≤1 a i=1 i # Product type definition # e.g. ptype karton1 <ptype> = "ptype" <ws> <ptype-name> <eol> <ptype-name> = <name> # Vehicle type definition # e.g. vtype tir 1000 4.50 60.0 (europaleta:33, # karton1:1000) (16.47, 20.3) <vtype> = "vtype" <ws> <vtype-name> <ws> <vtype-usage-cost> <ws> <vtype-kilometer-cost> <ws> <vtype-speed> <ws> <vtype-caps> <ws> <vtype-base> <eol> <vtype-name> = <name> <vtype-usage-cost> = <decimal> <vtype-kilometer-cost> = <decimal> <vtype-speed> = <decimal> <vtype-caps> = "(" <vtype-cap> ("," <vtype-cap>)* ")" <vtype-cap> = <ptype-name> ":" <integer> <vtype-base> = <point> Przykładowo, jeżeli samochód może przewozić 30 palet albo 2000 kartonów, to dopuszczalne są np. załadowania: • 0 palet, 2000 kartonów (100% wypełnienia), • 30 palet, 0 kartonów (100% wypełnienia), • 10 palet, 1000 kartonów (83% wypełnienia), • 15 palet, 1000 kartonów (100% wypełnienia). Niedopuszczalne jest natomiast załadowanie 20 palet i 1500 kartonów (142% wypełnienia). 1.3 Koszt rozwiązania # Order definition # e.g. order europaleta:20 (16.47, 20.3) (18.10, 19) # 08:00-23:59 12:00-17:00 5 <order> = "order" <ws> <order-product> <ws> <order-from> <ws> <order-to> <ws> <order-from-tw> <ws> <order-to-tw> <ws> <order-visits> <eol> <order-product> = <ptype-name> ":" <integer> <order-from> = <point> <order-to> = <point> <order-from-tw> = <time-window> <order-to-tw> = <time-window> <order-visits> = [1-7] Koszt rozwiązania jest sumą kosztów harmonogramów na każdy dzień. Koszt każdego dnia jest sumą: • sumy stałych kosztów użycia po wszystkich używanych w tym dniu pojazdach, • sumy kosztów przejechanych kilometrów po wszystkich zaplanowanych tego dnia trasach. 2 Specyfikacja formatu danych # # # # # # # # # # # # # # Regular expressions quick intro: - <a> is the non-terminal a - "abc" means "the literal string abc" - <a> = b means "a is defined as b" - between any two tokens spaces can be inserted - ( a ) means a - a b means "a and then b (with optional spaces inbetween)" - a | b means "a or b" - a* means "a zero or more times" - a+ means "a one or more times" - a? means "a zero or one time" - [abc] means "any from characters a, b or c" - [a-b] means "any character in the range a to b" ######### Result specification ######### # Additional context-dependent or semantic # assumptions: # - there must be exactly 7 different days # - the result must fulfill all constraints specified # in problem description # - problem specification will not allow for # ambiguous result file (e.g. each point will # appear only once in only one order) # - all data types (decimals, integers) will be small # enough to fit into standard Java types <result-definition> = "result" <ws> <problem-name> <eol> <days> <days> = (<day> (<route> | <empty>)*)+ <day> = "day" <ws> <day-number> <eol> <day-number> = [1-7] <route> = <vtype-name> <ws> <vtype-base> <ws> ######### Problem definition specification ######### # Additional context-dependent or semantic # assumptions: # - each of <ptype>, <vtype> and <order> must occur 2 3.1 <point>+ <ws> <vtype-base> <eol> Środowisko uruchomieniowe Programy będą uruchamiane w środowisku Java 5 lub nowszym. Dostępny będzie jeden procesor. Dostępna pamięć na stertę to 512MB. Można tworzyć wątki (np. celem regularnego zapisu najlepszego rozwiązania na wyjście), jednak będą one uruchamiane w ramach jednego procesora. ######### Common defintions ######### <empty> = <ws>? <eol> <name> = [a-zA-Z_0-9.\-]+ <integer> = [0-9]+ <decimal> = <integer> ( "." [0-9]+)? <point> = "(" <decimal> "," <decimal> ")" 3.2 <time-window> = <hour-minute> "-" <hour-minute> <hour-minute> = <hour> ":" <minute> <hour> = ([0-1] [0-9]) | ("2" [0-3]) <minute> = [0-5] [0-9] Struktura katalogów Na poziomie głównym repozytorium projektu istotny jest tylko jeden katalog, code. Żaden inny katalog nie będzie pobierany z repozytorium. W katalogu code znaczenie mają następujące pliki i katalogi: <ws> = " "+ <eol> = "\n" | "\r\n" src Katalog z kodami źródłowymi. Będzie on podlegał kompilacji podczas konkursu. Dodatkowo, wszystkie pliki nie-Javowe będą skopiowane do katalogu Używane nazwy instancji jednoznacznie wskazują na docelowego. charakterystykę instancji, a dokładniej na wartości parametrów użytych do jej wygenerowania. lib Katalog z opcjonalnymi bibliotekami. Może być Każda instancja ma nazwę postaci pusty. Sam katalog jak i wszystkie pliki z rozszerzeniem .jar będą umieszczone w ścieżce classpath klienci-rozklad-wizyty-produkty-pojazdy-okna zarówno podczas kompilacji, jak i uruchomienia progdzie: gramu. 2.1 Nazwy instancji klienci Liczbą klientów do obsłużenia. Dwukrotność liczby zleceń. Wartości od 20 do 100. pl.put.two2007.to.contest.Run Nazwa klasy (oczywiście umieszczonej w odpowiednim pliku), która będzie uruchamiana z linii poleceń. rozklad Rozkład klientów, C oznacza clustered, czyli rozkład nierównomierny, R oznacza random, czyli rozkład jednostajny. Klastry tworzone są wokół baz 3.3 Wczytywanie danych i zapis wyników pojazdów, w liczbie równej liczbie typów pojazdów Po uruchomieniu program powinien wczytać jedną in(pojazdy). stancję ze standardowego wejścia. Będzie ono przekiewizyty Oczekiwana liczba wizyt każdego z klientów. rowane, więc koniec danych będzie do wykrycia poprzez EOF. Wartość od 1 do 7. Wszystkie wyniki powinny trafiać na standardowe produkty Liczba typów produktów przydzielanych do za- wyjście. Można wypisywać wiele rozwiązań, system mówień przez generator (wynikowa liczba typów zewnętrzny sam wybierze najlepsze. Limit wypisywanych produktów w instancji może być mniejsza). Wartość rozwiązań to 10 na minutę konkursu – jeśli na wyjściu od 1 do 10. pojawi się więcej rozwiązań, to system zignoruje wszystkie rozwiązania, które wychodzą poza limit całkowity pojazdy Liczba typów pojazdów przydzielanych do za(tzn. dla konkursu dziesięciominutowego limit rozwiązań mówień przez generator (wynikowa liczba typów powynosi 100). jazdów w instancji może być mniejsza). Wartość od Przed samym zakończeniem działania system wykona 1 do 10. „przepchanie” wyjścia (flush), aby uniknąć problemu nie okna Okna czasowe, a dokładniej ich ścisłość. S (short) odczytania danych zalegających w buforze. Program nie może w sposób jawny odwoływać się do oznacza wąski okna czasowe, M (medium) – średjakichkolwiek zasobów w systemie: plików, sieci, innych nie, a L (large) – szerokie. Szerokość okien ma naprocesów, itp. Można jedynie wczytywać dane, które znajczęściej bezpośrednie przełożenie na średnią długość jdowały się w katalogu źródłowym. trasy. 3 4 Interfejsu systemu Zmiany w dokumencie Ponieważ programy uruchamiane są w warunkach konkur- 2007-12-04 sowych, muszą spełniać ścisłe wymagania dotyczące ko• dospecyfikowano czas wyjazdu i przyjazdu pojazdu munikacji ze środowiskiem, w którym są uruchamiane. z bazy Przede wszystkim, program jest kompilowany i uruchamiany w jednolity sposób, z użyciem narzędzi wspólnych dla • dospecyfikowano konieczność realizację całości zawszystkich projektów. mówienia 3 • zmieniono definicję kosztu na odległość pomiędzy klientami 2007-11-08 • dostosowano opis do nowego kursu • dopisano informację o zerowym czasie obsługi • uproszczono specyfikację formatu 2006-10-05 • dospecyfikowano środowisko • poprawienie opisu wozokilometra 2007-01-12 • uszczegółowienie liczby typów produktów w jednym zamówieniu • dodano opis nazewnictwa instancji 2006-10-27 • dodanie opisu kosztu • uproszczono format wejściowy (określono kolejność typów danych) • zastąpienie grafu zbiorem klientów i kosztów • podano specyfikę środowiska uruchomieniowego • dopisanie koncepcji bazy samochodów • uszczegółowienie okien czasowych 2006-10-19 • dopisanie realizacji całości zlecenia w każdym zaplanowanym dniu • włączono specyfikację formatu danych • dodano informację o pojedynczej wizycie w każdym punkcie 2006-09-27 • pierwsza wersja 2006-10-08 4