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

Podobne dokumenty