Złożoność obliczeniowa wybranych problemów szeregowania zadań jednostkowych na równoległych procesorach

Podobne dokumenty
Efektywność Procedur Obliczeniowych. wykład 5

Struktury danych i złożoność obliczeniowa Wykład 7. Prof. dr hab. inż. Jan Magott

Struktury danych i złożoność obliczeniowa Wykład 5. Prof. dr hab. inż. Jan Magott

Algorytmy Równoległe i Rozproszone Część X - Algorytmy samostabilizujące.

LOGIKA I TEORIA ZBIORÓW

Struktury danych i złozoność obliczeniowa. Prof. dr hab. inż. Jan Magott

Zasada indukcji matematycznej

Lista 6 Problemy NP-zupełne

Kolorowanie wierzchołków Kolorowanie krawędzi Kolorowanie regionów i map. Wykład 8. Kolorowanie

Matematyka dyskretna

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

Uniwersytet im. Adama Mickiewicza w Poznaniu Wydział Matematyki i Informatyki. Marek Dębczyński

Algebrą nazywamy strukturę A = (A, {F i : i I }), gdzie A jest zbiorem zwanym uniwersum algebry, zaś F i : A F i

domykanie relacji, relacja równoważności, rozkłady zbiorów

Logika Stosowana. Wykład 1 - Logika zdaniowa. Marcin Szczuka. Instytut Informatyki UW. Wykład monograficzny, semestr letni 2016/2017

Programowanie liniowe

Sortowanie topologiczne skierowanych grafów acyklicznych

Porównanie czasów działania algorytmów sortowania przez wstawianie i scalanie

Szeregowanie zadań. Wykład nr 3. dr Hanna Furmańczyk

Matematyka dyskretna dla informatyków

TEORETYCZNE PODSTAWY INFORMATYKI

Zad. 1 Zad. 2 Zad. 3 Zad. 4 Zad. 5 SUMA

Struktura danych. Sposób uporządkowania informacji w komputerze.

Metoda tabel semantycznych. Dedukcja drogi Watsonie, dedukcja... Definicja logicznej konsekwencji. Logika obliczeniowa.

Teoria obliczeń i złożoność obliczeniowa

Układy równań i nierówności liniowych

Reprezentacje grafów nieskierowanych Reprezentacje grafów skierowanych. Wykład 2. Reprezentacja komputerowa grafów

TEORETYCZNE PODSTAWY INFORMATYKI

Algorytmy Równoległe i Rozproszone Część III - Układy kombinacyjne i P-zupełność

Obliczenia inspirowane Naturą

Graf. Definicja marca / 1

F t+ := s>t. F s = F t.

Maszyna Turinga języki

Badania operacyjne: Wykład Zastosowanie kolorowania grafów w planowaniu produkcji typu no-idle

Elementy logiki. Wojciech Buszkowski Wydział Matematyki i Informatyki UAM Zakład Teorii Obliczeń

Matematyczne Podstawy Informatyki

Indukcja. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak

Dystrybucje, wiadomości wstępne (I)

Podstawowe własności grafów. Wykład 3. Własności grafów

Metoda Tablic Semantycznych

Przykładowe zadania z teorii liczb

Paradygmaty dowodzenia

Programowanie dynamiczne i algorytmy zachłanne

Zajęcia nr. 3 notatki

Matematyka dyskretna. Andrzej Łachwa, UJ, /15

Matematyka dyskretna. Andrzej Łachwa, UJ, /14

AiSD zadanie trzecie

Wykład z równań różnicowych

Andrzej Wiśniewski Logika I Materiały do wykładu dla studentów kognitywistyki. Wykład 9. Koniunkcyjne postacie normalne i rezolucja w KRZ

MATEMATYKA DYSKRETNA - MATERIAŁY DO WYKŁADU GRAFY

5. Rozwiązywanie układów równań liniowych

Algorytmy Równoległe i Rozproszone Część V - Model PRAM II

Matematyka dyskretna. Andrzej Łachwa, UJ, B/14

1 Automaty niedeterministyczne

A i. i=1. i=1. i=1. i=1. W dalszej części skryptu będziemy mieli najczęściej do czynienia z miarami określonymi na rodzinach, które są σ - algebrami.

O pewnych związkach teorii modeli z teorią reprezentacji

Rachunek prawdopodobieństwa- wykład 2

G. Wybrane elementy teorii grafów

Funkcje liniowe i wieloliniowe w praktyce szkolnej. Opracowanie : mgr inż. Renata Rzepińska

RACHUNEK ZDAŃ 7. Dla każdej tautologii w formie implikacji, której poprzednik również jest tautologią, następnik także jest tautologią.

Ciągi komplementarne. Autor: Krzysztof Zamarski. Opiekun pracy: dr Jacek Dymel

5. Algebra działania, grupy, grupy permutacji, pierścienie, ciała, pierścień wielomianów.

1 Działania na zbiorach

9.9 Algorytmy przeglądu

Matematyka dyskretna. Andrzej Łachwa, UJ, /14

ZALICZENIE WYKŁADU: 30.I.2019

Struktury danych i złożoność obliczeniowa Wykład 6. Prof. dr hab. inż. Jan Magott

Spacery losowe generowanie realizacji procesu losowego

Digraf. 13 maja 2017

Zakładamy, że maszyna ma jeden stan akceptujacy.

Elementy logiki matematycznej

Dowód pierwszego twierdzenia Gödela o. Kołmogorowa

Teoria grafów dla małolatów. Andrzej Przemysław Urbański Instytut Informatyki Politechnika Poznańska

Logika Matematyczna (10)

Problem decyzyjny naley do klasy NP. (Polynomial), jeeli moe by rozwizany w czasie conajwyej wielomianowym przez algorytm A dla DTM.

Instrukcje dla zawodników

Wykład z modelowania matematycznego. Zagadnienie transportowe.

Klasa 1 technikum. Poniżej przedstawiony został podział wymagań na poszczególne oceny szkolne:

Logika stosowana. Ćwiczenia Złożoność obliczeniowa problemu spełnialności. Marcin Szczuka. Instytut Informatyki, Uniwersytet Warszawski

9.4 Czasy przygotowania i dostarczenia

Ciała i wielomiany 1. przez 1, i nazywamy jedynką, zaś element odwrotny do a 0 względem działania oznaczamy przez a 1, i nazywamy odwrotnością a);

0 + 0 = 0, = 1, = 1, = 0.

Imię, nazwisko, nr indeksu

Relacje. opracował Maciej Grzesiak. 17 października 2011

Elementy teorii grafów Elementy teorii grafów

Matematyczne Podstawy Informatyki

(4) x (y z) = (x y) (x z), x (y z) = (x y) (x z), (3) x (x y) = x, x (x y) = x, (2) x 0 = x, x 1 = x

Uzupełnienia dotyczące zbiorów uporządkowanych (3 lutego 2011).

VII. Elementy teorii stabilności. Funkcja Lapunowa. 1. Stabilność w sensie Lapunowa.

Problemy Decyzyjne dla Systemów Nieskończonych

Przykład: Σ = {0, 1} Σ - zbiór wszystkich skończonych ciagów binarnych. L 1 = {0, 00, 000,...,1, 11, 111,... } L 2 = {01, 1010, 001, 11}

Wykład 16. P 2 (x 2, y 2 ) P 1 (x 1, y 1 ) OX. Odległość tych punktów wyraża się wzorem: P 1 P 2 = (x 1 x 2 ) 2 + (y 1 y 2 ) 2

Teoretyczne podstawy informatyki

Algorytmiczna teoria grafów

1. Synteza automatów Moore a i Mealy realizujących zadane przekształcenie 2. Transformacja automatu Moore a w automat Mealy i odwrotnie

Indukowane Reguły Decyzyjne I. Wykład 3

Ekonometria - ćwiczenia 10

Za pierwszy niebanalny algorytm uważa się algorytm Euklidesa wyszukiwanie NWD dwóch liczb (400 a 300 rok przed narodzeniem Chrystusa).

Liczby zespolone. x + 2 = 0.

Transkrypt:

Wydział Matematyki i Informatyki Bartłomiej Przybylski Numer albumu: 362824 Złożoność obliczeniowa wybranych problemów szeregowania zadań jednostkowych na równoległych procesorach Computational complexity of selected problems of scheduling unit execution time jobs on parallel processors Praca magisterska z matematyki napisana pod kierunkiem prof. UAM dr. hab. Stanisława Gawiejnowicza Poznań, czerwiec 2015 r.

Poznań, 23 czerwca 2015 r. Oświadczenie Ja, niżej podpisany Bartłomiej Przybylski, student Wydziału Matematyki i Informatyki Uniwersytetu im. Adama Mickiewicza w Poznaniu oświadczam, że przedkładaną pracę dyplomową pt: Złożoność obliczeniowa wybranych problemów szeregowania zadań jednostkowych na równoległych procesorach napisałem samodzielnie. Oznacza to, że przy pisaniu pracy, poza niezbędnymi konsultacjami, nie korzystałem z pomocy innych osób, a w szczególności nie zlecałem opracowania rozprawy lub jej części innym osobom, ani nie odpisywałem tej rozprawy lub jej części od innych osób. Oświadczam również, że egzemplarz pracy dyplomowej w wersji drukowanej jest całkowicie zgodny z egzemplarzem pracy dyplomowej w wersji elektronicznej. Jednocześnie przyjmuję do wiadomości, że przypisanie sobie, w pracy dyplomowej, autorstwa istotnego fragmentu lub innych elementów cudzego utworu lub ustalenia naukowego stanowi podstawę stwierdzenia nieważności postępowania w sprawie nadania tytułu zawodowego. [TAK] wyrażam zgodę na udostępnianie mojej pracy w czytelni Archiwum UAM [TAK] wyrażam zgodę na udostępnianie mojej pracy w zakresie koniecznym do ochrony mojego prawa do autorstwa lub praw osób trzecich

Mojej Mamie. Pragnę serdecznie podziękować Panu Profesorowi Stanisławowi Gawiejnowiczowi, który z cierpliwością i wyrozumiałością wprowadził mnie w problematykę szeregowania zadań.

Streszczenie Praca poświęcona jest problemowi szeregowania zależnych zadań jednostkowych na równoległych procesorach. Z uwagi na NP-zupełność jego postaci decyzyjnej, rozważa się szczególne przypadki, w których ograniczeniu podlega liczba procesorów lub konstrukcja relacji częściowego porządku pomiędzy zadaniami. W pracy przedstawiono wybrane algorytmy wielomianowe rozwiązujące tak określone problemy. Rozważono także nowy przypadek, w którym czasy wykonania zadań opisane są przez dodatnią funkcję zależną od pozycji zadania w uszeregowaniu. Słowa kluczowe: szeregowanie zadań, równoległe procesory, jednostkowe czasy wykonywania, algorytm Hu, algorytm Coffmana-Grahama, zmienne czasy wykonywania, algorytmy wielomianowe, NP-zupełność, NP-trudność, ograniczenia kolejnościowe, złożoność obliczeniowa. Abstract This thesis is devoted to the problem of scheduling unit processing time jobs with precedence constraints on parallel processors. Due to NP-completeness of its decision version, some particular cases are considered. In these cases the number of processors or the relation of partial order between tasks are restricted. Selected polynomial algorithms for solving such problems are presented. The new case, where the processing times are described by a positive function depending on a position of a job in a schedule is also considered. Keywords: scheduling theory, parallel machines, unit processing times, Hu's algorithm, Coffman-Graham's algorithm, variable processing times, polynomial algorithms, NP-completeness, NP-hardness, precedence constraints, computational complexity.

Spis treści Wstęp............................................. 1 Rozdział 1. Preliminaria.................................. 3 1.1. Wybrane zagadnienia teorii grafów........................ 3 1.1.1. Grafy, wierzchołki, krawędzie....................... 3 1.1.2. Drogi, ścieżki, cykle............................ 5 1.1.3. Grafy spójne, grafy acykliczne, drzewa.................. 5 1.1.4. Grafy skierowane............................. 6 1.1.5. Długości, wysokości i grafy dualne.................... 7 1.2. Wybrane zagadnienia teorii algorytmów...................... 8 1.2.1. Problemy decyzyjne i optymalizacyjne.................. 8 1.2.2. Algorytmy i ich złożoność obliczeniowa................. 10 1.2.3. Maszyna Turinga.............................. 12 1.2.4. Klasy P i NP problemów.......................... 12 1.3. Wybrane zagadnienia teorii szeregowania zadań................. 14 1.3.1. Oznaczenia................................. 15 1.3.2. Notacja trójpolowa............................. 16 1.3.3. Przykłady.................................. 17 1.4. Problem szeregowania zadań jednostkowych................... 18 1.4.1. NP-zupełność problemu trójspełnialności................ 18 1.4.2. NP-zupełność problemu szeregowania zadań jednostkowych...... 21 Rozdział 2. Algorytm Hu.................................. 26 2.1. Sformułowanie problemu.............................. 26 2.2. Algorytm Hu i algorytmy pochodne........................ 26 2.2.1. Etykietowanie wierzchołków....................... 27 2.2.2. Algorytm Hu................................ 27 2.2.3. Algorytm HLF............................... 29 IV

Spis treści 2.3. Dowody optymalności............................... 29 2.3.1. Oryginalny dowód optymalności algorytmu Hu............. 30 2.3.2. Dowód optymalności algorytmu HLF oparty na przekształceniach grafu ograniczeń kolejnościowych.................... 33 2.3.3. Dowód optymalności algorytmu Hu oparty o przekształcenia izotoniczne 36 2.4. Przykład....................................... 40 2.4.1. Przypadek drzewa............................. 40 2.4.2. Przypadek dowolnego grafu ograniczeń kolejnościowych........ 41 Rozdział 3. Algorytm Coffmana-Grahama........................ 42 3.1. Sformułowanie problemu.............................. 42 3.2. Algorytm Coffmana-Grahama........................... 42 3.2.1. Etykietowanie wierzchołków....................... 43 3.2.2. Algorytm Coffmana-Grahama...................... 44 3.3. Dowód optymalności................................ 44 3.4. Przykład....................................... 48 Rozdział 4. Problem czasów zależnych od pozycji w uszeregowaniu.......... 49 4.1. Wprowadzenie................................... 49 4.2. Funkcje ϕ i Φ.................................... 50 4.3. Przekształcenia uszeregowań naturalnych..................... 50 4.3.1. Przekształcenie Λ ϕ............................. 52 4.3.2. Przekształcenie Λ 1 ϕ............................ 53 4.4. Szeregowanie zadań o czasie zależnym od pozycji w uszeregowaniu....... 54 4.5. Przypadki szczególne................................ 57 4.5.1. P in-tree, p j,r = φ(r) C max, gdy φ jest funkcją niemalejącą i niestałą.. 57 4.5.2. P out-tree, p j,r = φ(r) C max, gdy φ jest funkcją niemalejącą i niestałą.. 59 4.5.3. P in-tree, p j,r = p j φ(r) C max....................... 59 Spis rysunków........................................ 65 Bibliografia.......................................... 67 Indeks pojęć......................................... 69 V

Wstęp Szeregowanie zadań ma istotny wpływ na funkcjonowanie współczesnego świata, w którym optymalne wykorzystanie rozmaitych zasobów ma kluczowe znaczenie dla rozwoju gospodarki. Wyniki badań prowadzonych w tej gałęzi informatyki teoretycznej mogą być (i są) wykorzystywane nie tylko w projektowaniu wydajnych komputerów, ale także logistyce i w przemyśle choćby w planowaniu skomplikowanych procesów produkcyjnych. W wielu przypadkach można założyć, że czasy wykonywania zadań są identyczne. Jest tak, gdy rozważamy czynności bardzo zbliżone do siebie (np. umieszczanie przez robota różnych elementów układu scalonego na płytce drukowanej) lub istotnie różne, ale o niewielkich względnych różnicach w czasach wykonywania. Takim przypadkom poświęcona jest ta, podzielona na cztery rozdziały, praca. W rozdziale pierwszym przedstawione zostały wybrane zagadnienia dotyczące teorii grafów, teorii algorytmów oraz teorii szeregowania zadań. W szczególności wyjaśnione zostały pojęcia i symbole, które wykorzystywane są w dalszej części pracy. Przytoczono dowód faktu, że decyzyjna postać problemu szeregowania zależnych zadań jednostkowych jest problemem NP-zupełnym, co stanowi podstawę badania jego szczególnych przypadków. W rozdziale drugim rozważany jest przypadek, w którym liczba procesorów jest dowolna, a pomiędzy zadaniami występują ograniczenia kolejnościowe reprezentowane przez drzewo skierowane. Przedstawione zostały algorytmy Hu oraz HLF, które rozwiązują tak określony problem w wielomianowym czasie. Przytoczono różne dowody optymalności generowanych przez nie uszeregowań, wykorzystujące rozmaite metody dowodowe. W rozdziale trzecim rozważono przypadek dwóch równoległych procesorów wykonujących zadania o jednostkowych czasach wykonania i dowolnych ograniczeniach kolejnościowych. Dla tego problemu omówiono algorytm Coffmana-Grahama i przyto- 1

czono dowód faktu, że generowane przez niego uszeregowania są optymalne względem kryterium długości uszeregowania. W rozdziale czwartym przedstawione zostało uogólnienie problemu szeregowania zależnych zadań jednostkowych na przypadek, w którym czasy wykonywania zadań opisane są dodatnią funkcją zależną od pozycji zadania w uszeregowaniu. Wykazane zostały pewne własności tak określonego problemu, pozwalające na wyciągnięcie wniosku, że przy pewnych założeniach algorytmy rozwiązujące problemy z zadaniami jednostkowymi rozwiązują odpowiadające im problemy ze zmiennymi czasami zależnymi od pozycji zadania w uszeregowaniu. 2

1 Preliminaria W tym rozdziale wprowadzono pojęcia i definicje wykorzystywanej w dalszej części pracy. Obejmuje on wybrane zagadnienia z teorii grafów, teorii algorytmów oraz teorii szeregowania zadań, a także rozważania dotyczące problemu szeregowania zadań jednostkowych. 1.1. Wybrane zagadnienia teorii grafów Niektóre problemy szeregowania zadań zakładają istnienie ograniczeń kolejnościowych w postaci relacji częściowego porządku określonej na zbiorze zadań. Do reprezentacji tego typu zależności wykorzystuje się acykliczne grafy skierowane. To i inne pojęcia przedstawione w tym podrozdziale zostały przedstawione w oparciu o [9]. W tej pracy będziemy przyjmować, że graf ograniczeń kolejnościowych jest tożsamy z grafem redukcji relacji częściowego porządku określonej na zbiorze zadań (zob. [23]). 1.1.1. Grafy, wierzchołki, krawędzie Definicja 1.1. Graf (graf prosty, graf nieskierowany) to uporządkowana para G = (V, E), taka że: V = {v 1, v 2,... } jest niepustym zbiorem, E jest pewną rodziną dwuelementowych podzbiorów zbioru V, to znaczy zachodzi E {{v, r} : v, r V, v r}. Zbiór V nazywać będziemy zbiorem wierzchołków, a jego elementy wierzchołkami grafu. Rodzinę E będziemy nazywać zbiorem krawędzi, a jej elementy krawędziami grafu. Dla zachowania jednolitości oznaczeń, krawędzie oznaczać będziemy symbolami e 1, e 2,.... 3

1.1. Wybrane zagadnienia teorii grafów v 1 e 1 v 2 e 3 e 2 e 4 v 3 v 4 Rysunek 1.1. Graf z czterema wierzchołkami i czterema krawędziami Aby uniknąć mnogości oznaczeń, będziemy w tej pracy stosować ogólnie przyjętą notację, zgodnie z którą wyrażenie x G będziemy interpretować jako x V, gdzie G = (V, E) jest grafem. Mówimy, że wierzchołek v i V jest związany z krawędzią e k E, jeżeli v i jest elementem krawędzi e k. Wierzchołki v i, v j V związane z krawędzią e k E nazywamy wierzchołkami końcowymi krawędzi e k. Zauważmy, że definicja 1.1 wyklucza możliwość istnienia krawędzi {v i, v i }, związanej tylko z jednym wierzchołkiem (pętli). Jest tak, ponieważ zakładamy, że elementami rodziny E są dwuelementowe podzbiory zbioru V. Jednocześnie, z definicji zbioru E jako rodziny podzbiorów zbioru V wynika, że nie mogą istnieć dwie krawędzie łączące te same wierzchołki. O ile w przypadku zbioru V zakładamy, że jest to zbiór niepusty, o tyle w przypadku rodziny E takie założenie nie występuje. Jeżeli zbiór E jest pusty, to graf z nim związany nazywamy zerowym. Jeżeli zbiór V jest skończony, to graf nazywamy grafem skończonym. Jak łatwo zauważyć, jeśli graf jest skończony, to zbiór jego krawędzi E też jest skończony. W tej pracy będziemy rozważali wyłącznie grafy skończone. Najpopularniejszym sposobem przedstawienia grafu prostego jest rysunek, na którym wierzchołki reprezentowane są na przykład przez punkty lub elipsy, a krawędzie przez odcinki (lub krzywe) łączące odpowiednie wierzchołki. Jeżeli wierzchołek v i jest wierzchołkiem końcowym krawędzi e j, to mówimy, że v i oraz e j są incydentne ze sobą (lub do siebie). Dwie krawędzie nazywamy przyległymi, jeżeli są one incydentne ze wspólnym wierzchołkiem. Na rysunku 1.1 krawędź e 1 jest incydentna z wierzchołkiem v 1, krawędzie e 1 i e 2 są przyległe, a krawędzie e 2 i e 3 nie. 4

1.1. Wybrane zagadnienia teorii grafów Liczbę krawędzi incydentnych do wierzchołka v i nazywamy stopniem tego wierzchołka i oznaczamy symbolem d(v i ). Wierzchołek, który nie jest incydentny z żadną krawędzią nazywamy wierzchołkiem izolowanym. Innymi słowy, wierzchołek izolowany to wierzchołek stopnia zerowego. Wierzchołek stopnia pierwszego nazywamy natomiast wierzchołkiem wiszącym. 1.1.2. Drogi, ścieżki, cykle Niech G = (V, E) będzie grafem skończonym. Rozważmy ciąg występujących naprzemiennie wierzchołków i krawędzi, rozpoczynający i kończący się wierzchołkiem: v i1, e j1, v i2, e j2,..., e jk 1, v ik. Jeżeli ciąg ten spełnia następujące warunki: każda krawędź w tym ciągu jest incydentna z wierzchołkiem poprzedzającym ją i następującym po niej, żadna krawędź nie pojawia się w tym ciągu więcej niż raz, to znaczy j p j q dla p q, gdzie p, q {1, 2,..., k 1}, to ciąg taki nazywamy drogą lub łańcuchem. Wierzchołki rozpoczynający i kończący drogę nazywamy wierzchołkami końcowymi drogi. Z każdym łańcuchem wiąże się pojęcie jego długości długość łańcucha to liczba krawędzi występujących w tym łańcuchu. Drogę, w której żaden wierzchołek nie pojawia się więcej niż raz, nazywamy ścieżką. Na rysunku 1.1 przykładowymi drogami pomiędzy wierzchołkami v 3 oraz v 2 są v 3, e 2, v 2 oraz v 3, e 2, v 2, e 4, v 4, e 3, v 1, e 1, v 2. Zauważmy, że pierwsza ze wskazanych dróg jest także ścieżką. Droga rozpoczynająca się i kończąca się w tym samym wierzchołku nazywana jest drogą zamkniętą. Drogą otwartą nazywamy drogę, która nie jest zamknięta. Drogę zamkniętą, w której żaden z wierzchołków (z wyjątkiem początkowego i końcowego) nie pojawia się więcej niż jeden raz, nazywamy cyklem. 1.1.3. Grafy spójne, grafy acykliczne, drzewa Graf G nazywamy spójnym, jeżeli istnieje co najmniej jedna ścieżka pomiędzy każdą parą różnych wierzchołków w tym grafie. Jeśli warunek ten nie jest spełniony, to graf G nazywamy niespójnym. 5

1.1. Wybrane zagadnienia teorii grafów v 1 e 1 e 3 e 5 v 2 v 4 v 6 e 2 e 4 v 3 v 5 Rysunek 1.2. Przykład grafu będącego drzewem Grafem acyklicznym nazywamy taki graf, który nie zawiera cykli. Graf przedstawiony na rysunku 1.1 nie jest grafem acyklicznym, gdyż zawiera cykl v 2, e 4, v 4, e 3, v 1, e 1, v 2. Acykliczny graf spójny nazywamy drzewem. Przykład takiego grafu jest widoczny na rysunku 1.2. 1.1.4. Grafy skierowane Definicja 1.2. Graf skierowany to uporządkowana para G = (V, E), taka że: V = {v 1, v 2,... } jest niepustym zbiorem, E jest pewnym zbiorem uporządkowanych par różnych elementów zbioru V, to znaczy E {(v, r) : v, r V, v r}. Podobnie jak w przypadku grafów nieskierowanych krawędź { } v i, v j przedstawiana jest na rysunku w postaci odcinka łączącego wierzchołki v i i v j, tak w przypadku grafów skierowanych krawędź (v i, v j ) reprezentowana jest przez strzałkę prowadzącą od wierzchołka v i do wierzchołka v j. Definicja 1.2 dopuszcza istnienie grafów skierowanych o nieskończonej liczbie wierzchołków. Podobnie jak w przypadku grafów prostych, w tej pracy będziemy rozważać wyłącznie skończone grafy skierowane. W grafie prostym każdy wierzchołek związany z krawędzią był jej wierzchołkiem końcowym. W przypadku grafów skierowanych będziemy mówić, że wierzchołek, z którego krawędź prowadzi jest wierzchołkiem początkowym, a ten do którego prowadzi wierzchołkiem końcowym krawędzi. Na rysunku 1.3 wierzchołek v 2 jest wierzchołkiem początkowym krawędzi e 5, a wierzchołek v 1 jej wierzchołkiem końcowym. Inaczej, wierzchołkiem początkowym krawędzi nazywamy wierzchołek zajmujący pierwszą pozycję 6

1.1. Wybrane zagadnienia teorii grafów v 1 e 5 v 2 e 1 v 5 e 4 e 2 e 3 v 4 v 3 Rysunek 1.3. Przykład grafu skierowanego w parze uporządkowanej reprezentującej krawędź, a wierzchołkiem końcowym ten, który zajmuje pozycję drugą. Liczbę krawędzi, dla których wierzchołek v i jest wierzchołkiem początkowym, nazywamy jego stopniem i oznaczamy symbolem d + (v i ). Zauważmy, że stopień wierzchołka w grafie skierowanym, w przeciwieństwie do stopnia wierzchołka w grafie prostym, nie musi być równy liczbie krawędzi, w których wierzchołek v i występuje. Pojęcia łańcucha, ścieżki, cyklu i acyklicznego grafu skierowanego definiuje się analogicznie jak w przypadku grafów nieskierowanych, z uwzględnieniem jednak orientacji krawędzi. Przykładowo, w grafie skierowanym z rysunku 1.3 można dostrzec cykl v 5, e 3, v 3, e 4, v 1, e 1, v 5. 1.1.5. Długości, wysokości i grafy dualne Pojęcia przedstawione w tym podrozdziale dotyczą pewnych wartości liczbowych związanych z grafami skierowanymi. Zostały one przedstawione w oparciu o [1]. Mówimy, że skończony graf skierowany G ma długość n, co zapisujemy l(g) = n, jeśli n jest najmniejszym ograniczeniem górnym długości łańcuchów występujących w tym grafie. Jeśli v G, gdzie G jest grafem skierowanym, to przez wysokość elementu v będziemy rozumieć najmniejsze z ograniczeń górnych długości łańcuchów w grafie G, kończących się w wierzchołku v. Definicja 1.3. Grafem dualnym do grafu skierowanego G będziemy nazywać taki graf G, w którym zbiór wierzchołków jest identyczny, a zbiór krawędzi spełnia warunek: (i, j) E G wtedy i tylko wtedy, gdy (j, i) E G, gdzie E G i E G oznaczają, odpowiednio, 7

1.2. Wybrane zagadnienia teorii algorytmów zbiory krawędzi w grafach G i G. Mówiąc inaczej, graf dualny do grafu skierowanego G to taki graf, w którym zwrot krawędzi jest przeciwny. Przez głębokość wierzchołka v w grafie G będziemy rozumieć wysokość elementu v w grafie dualnym do grafu G. 1.2. Wybrane zagadnienia teorii algorytmów Teoria algorytmów to rozległa gałąź teorii informatyki. Wprowadzenie podstawowych pojęć związanych z różnymi klasami problemów, zależnościami między nimi oraz złożonością obliczeniową algorytmów jest jednak kluczowe dla zrozumienia poruszanych w tej pracy zagadnień. Pojęcia i wyjaśnienia znajdujące się w tym paragrafie zostały przedstawione w oparciu o prace [2], [6], [10], [16] oraz [19]. Matematyczne definicje przedstawianych w tym podrozdziale pojęć mają w większości bardzo techniczny i rozbudowany charakter. Z tego powodu nie będą one przytaczane w całości, a jedynie w zakresie niezbędnym dla celów tej pracy. 1.2.1. Problemy decyzyjne i optymalizacyjne W klasycznej teorii algorytmów wyróżniamy trzy rodzaje problemów: decyzyjne, optymalizacyjne i przeszukiwania. Na potrzeby zagadnień poruszanych w dalszych rozdziałach wystarczy jednak znajomość pierwszych dwóch z wymienionych klas. Definicja 1.4. Problem decyzyjny π to skończony zbiór parametrów (takich jak zbiory, grafy, liczby, funkcje, itp.), nie mających nadanych wartości, oraz pytanie, na które odpowiedź brzmi tak lub nie. Definicja 1.5. Instancja problemu π, oznaczana przez I π, to każdy przypadek, w którym wszystkim parametrom nadane zostały konkretne wartości. Jeśli jasne jest, o jaki problem chodzi, jego instancję będziemy oznaczać przez I. Przykładem problemu decyzyjnego może być problem spełnialności wyrażeń logicznych, który definiujemy następująco: Problem 1.1. Niech dane będzie wyrażenie logiczne w koniunkcyjnej postaci normalnej (zapisane jako iloczyn sum zmiennych logicznych i ich negacji). Czy istnieje takie przyporządkowanie wartości prawda i fałsz zmiennym występującym w tym wyrażeniu, że przyjmuje ono wartość prawda? 8

1.2. Wybrane zagadnienia teorii algorytmów Innym przykładem problemu decyzyjnego może być z kolei przedstawiony poniżej problem szeregowania zadań. Problem 1.2. Niech dany będzie zbiór J = {J 1, J 2,..., J n } niezależnych i niepodzielnych zadań o dowolnych czasach wykonania oraz zbiór dwóch identycznych i równoległych procesorów. Czy istnieje taki przydział zadań do procesorów, że wszystkie zadania wykonają się w czasie nie większym niż ω? Definicja 1.5 pozwala nam określić problem decyzyjny jako zbiór D π wszystkich jego instancji. Wyróżniamy w nim podzbiór Y π D π, zawierający te i tylko te instancje problemu π, dla których odpowiedź brzmi tak. Konkretne wartości przyjmowane przez parametry problemu, związane z instancją I D π, koduje się za pomocą skończonego łańcucha x(i) symboli należących do z góry określonego alfabetu Σ, zgodnie z ustaloną regułą kodowania. Długość łańcucha x(i) będziemy nazywać rozmiarem instancji i oznaczać przez N(I). Rozważmy problem 1.2. Jeśli chcielibyśmy zakodować instancję tego problemu przy użyciu alfabetu Σ = {0, 1,,.}, moglibyśmy zapisać ją w postaci binarnych liczb oddzielonych znakiem spacji, odpowiadających kolejno liczbie zadań (n) oraz czasom ich wykonania (p i dla i {1, 2,..., n}). Symbol kropki oznaczałby koniec łańcucha danych. Dla instancji złożonej z zadań o długościach 2, 3, 5, 5, 1, 4, 6 otrzymalibyśmy wówczas łańcuch 111 10 11 101 101 1 100 110. Stosując tak określoną regułę kodowania, moglibyśmy wyrazić rozmiar dowolnej instancji I problemu 1.2 przez równość: k N(I) = log n + 1 + log p i + 2n + 1, i=1 gdzie log oznacza logarytm przy podstawie 2. Dla przykładowej instancji otrzymujemy wówczas N(I) = 28. Oczywiście istnieje wiele reguł kodowania, które można stosować. Istotne jest to, aby wybrana metoda była rozsądna, to znaczy nie powodowała wykładniczego wzrostu długości łańcucha opisującego dane. Jeśli reguła kodowania e powoduje powstanie łańcucha danych o długości równej N e (I) i istnieje reguła kodowania e, prowadząca do powstania łańcucha danych o długości N e (I), taka że N e (I) k N e (I) dla pewnego k > 1 oraz każdego I, to reguła kodowania e nie jest rozsądna. Przykładem takiej reguły jest kodowanie jedynkowe, w którym każda liczba całkowita k reprezentowana jest przez ciąg jedynek o długości k. 9

1.2. Wybrane zagadnienia teorii algorytmów Jedna z powszechnie stosowanych reguł kodowania, spełniająca powyższe wymagania, została wprowadzona w [10]. Ze względu na jej rozbudowany charakter nie będziemy jej przytaczać. Danemu problemowi decyzyjnemu π i regule kodowania e odpowiada język L(π, e), zdefiniowany jako L(π, e) = {x(i) Σ : I Y π Σ jest alfabetem używanym przez e}, gdzie Σ jest zbiorem wszystkich skończonych łańcuchów symboli alfabetu Σ. Podstawowe definicje dotyczące złożoności obliczeniowej algorytmów opierają się na problemach decyzyjnych. Istnieje jednak dość duża klasa problemów optymalizacyjnych, które polegają na znalezieniu rozwiązania, dla którego określona z góry funkcja kryterium ulega ekstremalizacji (minimalizacji bądź maksymalizacji). Okazuje się jednak, że pomiędzy problemami decyzyjnymi a optymalizacyjnymi istnieje często pewną zależność. Na przykład, problem optymalizacyjny odpowiadający decyzyjnemu problemowi 1.2 można by sformułować następująco: Problem 1.3. Niech dany będzie zbiór J = {J 1, J 2,..., J n } niezależnych i niepodzielnych zadań o dowolnych czasach wykonania oraz zbiór dwóch identycznych i równoległych procesorów. Znajdź taki przydział tych zadań do procesorów, aby zadania wykonały się w jak najkrótszym czasie. Zauważmy, że jeśli potrafimy łatwo rozwiązać problem optymalizacyjny, to odpowiadający mu problem decyzyjny nie może być obliczeniowo trudniejszy, jeśli tylko wartość funkcji kryterium da się obliczyć łatwo. Z drugiej zaś strony, jeśli problem decyzyjny jest obliczeniowo trudny, to rozwiązanie odpowiadającego mu problemu optymalizacyjnego wymaga co najmniej takiego samego nakładu pracy. Ściślejsze definicje problemów łatwych i trudnych wprowadzone zostaną w podrozdziale 1.2.4, jednak intuicyjne ich rozumienie pozwala nam już zauważyć, że w wielu przypadkach wystarczy ograniczyć się do badania problemów decyzyjnych. 1.2.2. Algorytmy i ich złożoność obliczeniowa Algorytmy to precyzyjnie zdefiniowane procedury przeznaczone do rozwiązywania problemów. Mówimy, że algorytm rozwiązuje problem decyzyjny π, jeśli dla każdej instancji problemu I D π znajduje prawidłowe rozwiązanie. Matematyczna definicja algorytmu, oparta na pojęciach teorii mnogości, została zaprezentowana w pracy [16]. 10

1.2. Wybrane zagadnienia teorii algorytmów Celem wielu badań jest znalezienie najefektywniejszego (najbardziej wydajnego) algorytmu służącego rozwiązaniu danego problemu. Pod pojęciem efektywności rozumie się wydajność względem pewnego zasobu w konkretnym modelu obliczeń najczęściej jednak rozważa się efektywność algorytmów pod względem wykorzystania zasobu czasu i do tego zasobu ograniczymy się w tej pracy. Do opisu złożoności obliczeniowej algorytmów stosuje się notację asymptotyczną. Definicja 1.6. Jeśli f O(g(k)), gdzie O(g(k)) = {f : istnieje c > 0 takie, że f(k) c g(k) dla prawie wszystkich k}, to mówimy, że f(k) jest rzędu g(k) lub, równoważnie, że f(k) jest O(g(k)). Definicja 1.7. Funkcją złożoności obliczeniowej algorytmu rozwiązującego problem π nazywamy funkcję przyporządkowującą każdej wartości rozmiaru instancji I D π problemu π maksymalną liczbę operacji elementarnych potrzebnych do rozwiązania instancji problemu o tej długości. Mówiąc inaczej, funkcja f(n) złożoności obliczeniowej problemu π jest postaci f(n) = max{t : t jest liczbą operacji elementarnych niezbędnych do rozwiązania instancji problemu I I D π N(I) = n}. Aby funkcja f(n) była dobrze określona, należy sprecyzować reguły kodowania i model obliczeń (listę operacji elementarnych). Z punktu widzenia złożoności obliczeniowej, rozsądny wybór tych elementów (to znaczy zawierający operację dominującą, czyli najczęściej wykonywaną) nie wpływa na rozróżnienie pomiędzy dwoma zasadniczymi klasami algorytmów: wielomianowymi i wykładniczymi. Definicja 1.8. Algorytm wielomianowy to algorytm, którego funkcja złożoności obliczeniowej jest O(p(k)), gdzie p(k) jest pewnym wielomianem od rozmiaru k rozwiązywanej instancji problemu. Algorytm, który nie jest wielomianowy, nazywamy algorytmem wykładniczym. Zamiast mówić, że funkcja złożoności obliczeniowej algorytmu jest O(p(k)), będziemy mówić, że algorytm działa (lub rozwiązuje problem) w czasie O(p(k)). Będziemy mówić, że algorytmy wielomianowe rozwiązują problem efektywnie, zaś wykładnicze nieefektywnie. Wynika to ze sposobu, w jaki wzrasta maksymalna liczba operacji niezbędnych do rozwiązania instancji problemu wraz ze wzrostem jej długości. 11

1.2. Wybrane zagadnienia teorii algorytmów Z tego powodu problemy, dla których znane są algorytmy wielomianowe uważane są za łatwe, a te, dla których znane są wyłącznie algorytmy wykładnicze za trudne. 1.2.3. Maszyna Turinga Algorytmy mogą być wykonywane w różnych modelach obliczeń, będących abstrakcyjnymi modelami komputerów. Najpopularniejszymi z nich są jednotaśmowa deterministyczna maszyna Turinga (DTM) oraz jednotaśmowa niedeterministyczna maszyna Turinga (NDTM). Oba te modele opisane są w pracach [2] oraz [10]. Ze względu na rozbudowany charakter tego opisu, pominiemy go w tej pracy. Definicja 1.9. Mówimy, że jednotaśmowa deterministyczna maszyna Turinga rozwiązuje problem decyzyjny π kodowany przy użyciu e, jeśli rozstrzyga język L(π, e). Inaczej, DTM rozwiązuje problem decyzyjny π kodowany przy użyciu e, jeśli zatrzymuje się ona dla wszystkich łańcuchów wejściowych x(i) i kończy obliczenia w stanie odpowiadającym odpowiedzi tak wtedy i tylko wtedy, gdy I Y π. Deterministyczna maszyna Turinga rozwiązuje problem decyzyjny π w co najwyżej wielomianowych czasie, jeśli dla każdego I D π czas działania DTM zakończony odpowiedzią tak lub nie jest rzędu p(n(i)), gdzie p jest wielomianem. Konstrukcja NDTM sprawia, że rozważa się ją jako model pozwalający na jednoczesną (i niezależną) weryfikację wszystkich możliwych potencjalnych rozwiązań. Jeśli którekolwiek z nich spełnia warunki określone postawionym w problemie π pytaniem, maszyna zakończy obliczenia w stanie odpowiadającym odpowiedzi tak. Definicja 1.10. Mówimy, że jednotaśmowa niedeterministyczna maszyna Turinga rozwiązuje problem decyzyjny π kodowany przy użyciu e, jeśli rozpoznaje język L(π, e). Inaczej, NDTM rozwiązuje problem decyzyjny π kodowany przy użyciu e, jeśli dla każdego łańcucha x(i) kończy ona obliczenia w stanie odpowiadającym odpowiedzi tak wtedy i tylko wtedy gdy I Y π, zaś jeśli I D π Y π, to obliczenia nie kończą się lub kończą się w stanie odpowiadającym odpowiedzi nie. Niedeterministyczna maszyna Turinga rozwiązuje problem decyzyjny π w co najwyżej wielomianowych czasie, jeśli dla każdego I Y π czas działania NDTM zakończony odpowiedzią tak jest rzędu p(n(i)), gdzie p jest wielomianem. 1.2.4. Klasy P i NP problemów Do klasy P problemów decyzyjnych zaliczamy te i tylko te, które jednotaśmowa deterministyczna maszyna Turinga rozwiązuje w wielomianowym czasie. Istnieje jednak 12

1.2. Wybrane zagadnienia teorii algorytmów liczna klasa tych problemów decyzyjnych, dla których nie znamy algorytmu pozwalającego na ich rozwiązanie przez DTM w czasie wielomianowym. Wśród nich znajdują się jednak takie, dla których jesteśmy w stanie (przy użyciu NDTM) zweryfikować w czasie wielomianowym, że dane rozwiązanie spełnia warunki postawione w pytaniu. Klasę tych problemów decyzyjnych będziemy oznaczać przez NP. Formalną definicję klas P i NP można znaleźć w [19]. Zachodzi relacja P NP. Nie wiadomo natomiast, czy zachodzi relacja odwrotna. W [2] znajduje się dowód faktu, że jeśli problem π należy do klasy NP, to deterministyczna maszyna Turinga może go rozwiązać w czasie O(2 p(n(i)) ), gdzie p jest pewnym wielomianem. Najpopularniejszym podejściem związanym z klasyfikacją problemów jest wykorzystanie wiedzy o klasyfikacji innych problemów. Definicja 1.11. Transformacją wielomianową problemu π 2 do problemu π 1, oznaczaną π 2 π 1, nazywamy funkcję f: D π2 D π1, spełniającą warunki: (a) I 2 Y π2 wtedy i tylko wtedy, gdy f(i 2 ) Y π1, (b) czas obliczania funkcji f przez deterministyczną maszynę Turinga jest, dla każdego I 2 D π2, z góry ograniczony przez wielomian zależny od N(I 2 ). Definicja 1.12. Mówimy, że problem π 1 jest NP-zupełny, jeśli π 1 NP i dla każdego problemu decyzyjnego π 2 NP istnieje π 2 π 1. Piszemy wówczas, że π 1 NPC. Definicja 1.13. Mówimy, że problem π 1 jest NP-trudny, jeśli dla każdego problemu decyzyjnego π 2 NP istnieje π 2 π 1. W praktyce, do dowodzenia NP-zupełności problemów decyzyjnych nie korzysta się z definicji 1.12, lecz z poniższego twierdzenia (wykazanego w pracy [10]). Twierdzenie 1.1. Jeżeli problemy π 1 oraz π 2 należą do klasy NP, problem π 2 jest NP- -zupełny i istnieje transformacja wielomianowa π 2 π 1, to problem π 1 jest NP-zupełny. Aby możliwe było skorzystanie z powyższego twierdzenia, należało wpierw wykazać przynależność do klasy problemów NP-zupełnych pierwszego problemu. Uczynił to Cook w [5], pokazując, że problem spełnialności (zob. problem 1.1) jest NP-zupełny. Naturalną konsekwencją powyższych rozważań jest obserwacja, że jeśli istniałby wielomianowy algorytm rozwiązujący którykolwiek z problemów NP-zupełnych, to każdy problem z klasy NP dałoby się rozwiązać w wielomianowym czasie. Mimo usilnych starań nie znaleziono do dzisiaj takiego algorytmu, co pozwala przypuszczać, że problemy NP-zupełne można rozwiązać jedynie przy użyciu algorytmów o wykładniczej 13

1.3. Wybrane zagadnienia teorii szeregowania zadań złożoności obliczeniowej. Stąd wynikałoby, że P jest właściwą podklasą NP, to znaczy P NP, a P i NPC są klasami rozłącznymi. W pracy [17] wykazano ponadto, że jeśli P NP, to istnieje niepusta klasa NPI NP problemów o złożoności obliczeniowej, którą można określić jako pośrednią pomiędzy klasami P i NPC, złożona z tych problemów, które należą do NP, ale nie należą do P i nie są NP-zupełne. Jeśli problem decyzyjny odpowiadający problemowi optymalizacyjnemu jest NP- -zupełny, to o takim problemie optymalizacyjnym powiemy, że jest NP-trudny. 1.3. Wybrane zagadnienia teorii szeregowania zadań Rozważmy problem, w którym na pewnej liczbie procesorów (maszyn) realizujemy skończony zbiór zadań. Zadania te mają określony czas wykonania, a możliwość ich realizacji może być zależna od różnych czynników, np. od zakończenia wykonywania innych zadań czy dostępności określonych zasobów. W praktyce rozważa się jedynie sytuację, w której liczba procesorów jest skończona, choć w niektórych przypadkach teoretycznych bierze się również pod uwagę przypadek nieskończonej liczby maszyn. Zakładamy, że każdy z procesorów może wykonywać pracę bez przerwy, począwszy od przyjętej chwili zero, przy czym jednocześnie na danej maszynie może być wykonywane co najwyżej jedno zadanie. Rozważa się zarówno przypadki, w których przerwanie wykonywania rozpoczętego zadania jest niemożliwe, jak i takie, w których wykonanie zadania można podzielić na części (realizowane na jednej lub większej liczbie maszyn). W pracy [4] podano następującą, najczęściej spotykaną definicję uszeregowania. Definicja 1.14. Uszeregowaniem zadań J 1, J 2,..., J n nazywamy odwzorowanie, które każdemu zadaniu przyporządkowuje podprzedział lub ciąg rozłącznych podprzedziałów na osi czasu [0, ) w taki sposób, że spełnione są następujące warunki: (a) każdemu podprzedziałowi czasu przyporządkowany jest dokładnie jeden procesor, (b) suma długości podprzedziałów przyporządkowanych zadaniu jest dokładnie równa jego czasowi wykonywania, przy czym różnym podprzedziałom mogą być przyporządkowane różne procesory, (c) każde dwa podprzedziały przyporządkowane różnym zadaniom i temu samemu procesorowi są rozłączne, (d) spełnione są ograniczenia kolejnościowe oraz ograniczenia związane z dodatkowymi zasobami, 14

1.3. Wybrane zagadnienia teorii szeregowania zadań (e) nie istnieje podprzedział czasu należący do przedziału [0, max {C i }], gdzie C i oznacza czas zakończenia wykonywania i-tego zadania, w którym zadania nie są wykonywane na żadnym procesorze, pomimo że istnieje niezakończone zadanie, które można wykonać. W praktyce, uszeregowanie przedstawiane jest w postaci diagramu Gantta, którego przykład pokazano na rysunku 1.4. Takie diagramy będziemy stosować w tej pracy. P 1 J 1 J 2 J 4 P 2 J 3 J 5 0 1 2 3 4 Rysunek 1.4. Przykład diagramu Gantta reprezentującego uszeregowanie Jednym z celów, jakie stawiają sobie osoby zajmujące się teorią szeregowania zadań, jest konstruowanie algorytmów prowadzących do generowania uszeregowań optymalnych względem zadanego z góry kryterium. W praktyce kryterium to opisane jest przez pewną funkcję zależną od wartości związanych z uszeregowaniem (np. wektora czasów zakończenia zadań), a optymalizacja polega najczęściej na minimalizacji jej wartości. Mnogość rozważanych warunków i ograniczeń wymusiła powstanie spójnego i jednolitego sposobu zapisu, pozwalającego opisać rozważane problemy. W pracy [12] po raz pierwszy wprowadzono notację, która umożliwia przedstawianie teoretycznych problemów szeregowania zadań w czytelnej postaci. Ze względu na jej popularność, będzie ona stosowana w dalszej części tej pracy. 1.3.1. Oznaczenia W dalszej części tej pracy będą stosowane następujące oznaczenia związane z problemami szeregowania zadań. Oznaczenie J J i M j lub P j p i G Opis zbiór zadań i-te zadanie j-ty procesor podstawowy czas wykonania i-tego zadania graf, który opisuje zależności kolejnościowe wykonywania zadań 15

1.3. Wybrane zagadnienia teorii szeregowania zadań relacja częściowego porządku na zbiorze zadań Z każdym uszeregowaniem zadań σ wiążą się ponadto charakterystyczne dla niego wartości. Oznaczenie C i (σ) S i (σ) Opis czas zakończenia wykonywania i-tego zadania w uszeregowaniu σ czas rozpoczęcia wykonywania i-tego zadania w uszeregowaniu σ Jeżeli jasne będzie, którego uszeregowania dotyczą powyższe wartości, pominięta będzie zależność od σ, tzn. będziemy pisać odpowiednio C i oraz S i. 1.3.2. Notacja trójpolowa W celu opisania rozważanych problemów stosuje się notację trójpolową, postaci α β γ. W każdym polu umieszcza się informacje o odpowiednich warunkach, co ułatwia zwięzłe przedstawienie problemu szeregowania zadań. α opis zbioru maszyn W polu α opisujemy zbiór maszyn. Oznaczenie Opis 1 pojedyncza maszyna Pm P m równoległych i identycznych maszyn; czas wykonania i-tego zadania na dowolnej z maszyn wynosi p i jak wyżej, z tą różnicą, że liczba procesorów m jest częścią danych wejściowych β opis zbioru zadań W polu β opisujemy zbiór zadań. Oznaczenie prec Opis istnieją ograniczenia kolejnościowe 16

1.3. Wybrane zagadnienia teorii szeregowania zadań pmtn dopuszcza się możliwość przerwania wykonywania zadań γ opis funkcji kryterium W polu γ opisujemy funkcję kryterium, której wartość chcemy zoptymalizować. Wśród najpopularniejszych funkcji kryterium wyróżnia się poniższe, wykorzystywane w tej pracy. Oznaczenie C max = max Ci i C i Opis maksymalny czas zakończenia suma czasów zakończeń 1.3.3. Przykłady W tym podrozdziale zaprezentowane zostały przykładowe problemy zapisane w omawianej notacji, wraz z wyjaśnieniem ich znaczenia. P pmtn C i Zadania można dzielić na części i nie występują pomiędzy nimi ograniczenia kolejnościowe. Liczba procesorów jest częścią danych wejściowych, a kryterium optymalności jest funkcja C i. P2 p i = 1, prec C max Zadania o jednostkowej długości wykonywane są na dwóch procesorach, występują pomiędzy nimi dowolne ograniczenia kolejnościowe, zadań nie można dzielić, a kryterium optymalności jest funkcja C max. P p i = 1, in-tree C max Każde zadanie wykonywane jest w jednostkowym czasie, niedopuszczalny jest podział zadań na części, liczba procesorów jest częścią danych wejściowych, graf ograniczeń kolejnościowych pomiędzy zadaniami ma formę odwróconego drzewa skierowanego, a kryterium optymalności jest funkcja C max. 17

1.4. Problem szeregowania zadań jednostkowych 1.4. Problem szeregowania zadań jednostkowych Rozważmy problem postaci P prec C max. Nie zaproponowano do tej pory algorytmu, który dla każdej instancji tego problemu generowałby w czasie wielomianowym uszeregowanie optymalne. Z tego powodu zaczęto rozważać szczególne przypadki tego problemu ze względu na liczbę procesorów. Pokazano, że w przypadku ograniczenia liczby procesorów do jednego, a więc dla problemu 1 prec C max, uszeregowanie optymalne można wygenerować w wielomianowym czasie, używając algorytmu sortowania topologicznego. Naturalnym krokiem stała się próba znalezienia wielomianowego algorytmu dla problemu P2 prec C max. Okazało się jednak, że tak postawiony problem jest NP-trudny (nawet jeśli prec = ). Do dzisiaj nie wiadomo, jak jest w przypadku, gdy liczba procesorów jest większa zaczęto więc modyfikować inne kryteria. Zauważono, że jeśli przyjmiemy jednostkowe czasy wykonania zadań, to P p i = 1, prec C max jest nadal problemem NP-trudnym. Pokazano jednak, że w przypadku, gdy graf ograniczeń kolejnościowych jest drzewem skierowanym lub odwróconym drzewem skierowanym, a więc dla problemu P p i = 1, tree C max, uszeregowanie optymalne da się wygenerować w wielomianowym czasie, korzystając z algorytmu Hu. Jeśli z kolei nie nałożymy dodatkowych warunków na ograniczenia kolejnościowe, ale ograniczymy liczbę procesorów do dwóch, to tak otrzymany problem P2 p i = 1, prec C max da się rozwiązać w wielomianowym czasie przy użyciu choćby algorytmu Coffmana-Grahama. Zarówno algorytm Hu, jak i algorytm Coffmana-Grahama zostały omówione w tej pracy. W tym paragrafie jednak wykażemy NP-zupełność ogólnego problemu szeregowania zadań jednostkowych (a więc problemu P p i = 1, prec C max ), co dowodzi zasadności rozważania jego przypadków szczególnych. 1.4.1. NP-zupełność problemu trójspełnialności Definicja 1.15. Literałami zmiennej logicznej p nazywamy tę zmienną logiczną (p) oraz jej negację (p). Definicja 1.16. Niech dany będzie zbiór U = {u 1, u 2,..., u m } zmiennych logicznych. Wyrażenie logiczne postaci C = (c 11 c 1k1 ) (c 21 c 2k2 ) (c n1 c nkn ), 18

1.4. Problem szeregowania zadań jednostkowych zbudowane z literałów zmiennych ze zbioru U nazywamy wyrażeniem w koniunkcyjnej postaci normalnej nad zbiorem U i zapisujemy równoważnie C = {{c 11,..., c 1k1 }, {c 21,..., c 2k2 },..., {c n1,..., c nkn }} lub C = {c 1, c 2,..., c n }, gdzie c i = {c i1,..., c iki }, dla 1 i n. Problem 1.4 (Problem spełnialności SAT). Dany jest zbiór U zmiennych logicznych oraz wyrażenie logiczne C = {c 1, c 2,... c m } w koniunkcyjnej postaci normalnej nad U. Czy istnieje takie przyporządkowanie wartości logicznych zmiennym ze zbioru U, aby wyrażenie C było spełnione (prawdziwe)? W pracy [5] udowodniona została NP-zupełność tak zdefiniowanego problemu. Ze względu na techniczny charakter, dowód ten pominiemy. W dowodzie NP-zupełności problemu szeregowania zadań jednostkowych korzystać jednak będziemy ze szczególnego przypadku problemu spełnialności. Problem 1.5 (Problem trójspełnialności 3SAT). Dany jest zbiór U zmiennych logicznych oraz wyrażenie logiczne C = {c 1, c 2,... c m } w koniunkcyjnej postaci normalnej nad U. Ponadto, dla 1 i m, zachodzi c i = 3. Czy istnieje takie przyporządkowanie wartości logicznych elementom zbioru U, aby wyrażenie C było spełnione (prawdziwe)? W oparciu o wcześniejsze rozważania, wykażemy NP-zupełność problemu trójspełnialności, przekształcając w niego wielomianowo NP-zupełny problem spełnialności. Odpowiednia transformacja została pokazana w [5] i [10]. Twierdzenie 1.2. Problem trójspełnialności (3SAT) jest NP-zupełny. Dowód. Łatwo zauważyć, że 3SAT NP, ponieważ algorytm niedeterministyczny przydziela wartości zmiennym logicznym ze skończonego zbioru U i weryfikuje w wielomianowym czasie, że w wyniku takiego przydziału każda z występujących w wyrażeniu trójliterałowych sum logicznych jest spełniona. Pokażemy, że problem spełnialności transformuje się wielomianowo w problem trójspełnialności. Niech U = {u 1, u 2,..., u n } będzie zbiorem zmiennych logicznych, a C = {c 1, c 2,..., c m } wyrażeniem logicznym w koniunkcyjnej postaci normalnej nad U, dla pewnej danej z góry instancji problemu SAT. Naszym celem jest skonstruowanie zbioru C trójliterałowych sum logicznych nad zbiorem zmiennych logicznych U, takiego że C jest spełnione wtedy i tylko wtedy, gdy spełnione jest C. 19

1.4. Problem szeregowania zadań jednostkowych Konstrukcja zbioru C oparta jest na zamianie każdego wyrażenia c j C na równoważne mu (w sensie logicznym) wyrażenie C j w koniunkcyjnej postaci normalnej. Każde z wyrażeń C j zbudowane jest z trójliterałowych sum logicznych, opartych na zmiennych logicznych ze zbioru U oraz dodatkowych zmiennych logicznych ze zbioru U j, których wykorzystanie ogranicza się do wyrażenia C j. W konsekwencji otrzymamy oraz m U = U m C = C j. j=1 U j j=1 Musimy jedynie pokazać, jak skonstruować zbiory C j oraz U j z odpowiedniego wyrażenia c j C. Niech c j będzie wyrażeniem {z 1, z 2,..., z k } (rozumianym jako z 1, z 2 z k ), zbudowanym z literałów zmiennych ze zbioru U. Sposób, w jaki konstruuje się zbiory C j oraz U j zależy od wartości k. Przypadek 1: k = 1: U j = { y 1 j, y 2 j } C j = {{ } { } { } { z 1, y 1 j, y 2 j, z1, y 1 j, y 2 j, z1, y 1 j, y 2 j, z1, y 1 j, y 2 j Przypadek 2: k = 2: U j = { } y 1 j, C j = {{ } { }} z 1, z 2, y 1 j, z1, z 2, y 1 j Przypadek 3: k = 3: U j =, C j = { } c j Przypadek 4: k > 3: U j = { y i j : 1 i k 3 } C j = {{ }} {{ } } z 1, z 2, y 1 j y i j, z i+2, y i+1 j : 1 u k 4 {{ }} y k 3 j, z k 1, z k Aby udowodnić, że jest to pożądana transformacja, musimy pokazać, że wyrażenie C jest spełnione wtedy i tylko wtedy, gdy spełnione jest wyrażenie C. Załóżmy wpierw, że t : U {T, F} jest przyporządkowaniem zmiennym logicznym ze zbioru U wartości spełniających wyrażenie C (powiemy, że t spełnia wyrażenie C). Pokażmy, że t może być rozszerzone do przyporządkowania t : U {T, F}, spełniającego wyrażenie C. Ze względu na to, że zmienne logiczne w zbiorze U U są podzielone na rozłączne zbiory U j i ze względu na to, że zmienne logiczne z każdego z tych zbiorów występują tylko w odpowiadających im wyrażeniach C j, musimy jedynie pokazać, jak t może być rozszerzone o zbiory U j pojedynczo i, w każdym przypadku, zweryfikować, że wszystkie sumy logiczne, z których zbudowane jest wyrażenie C j, są spełnione. }} 20

1.4. Problem szeregowania zadań jednostkowych Jeśli zbiór U j powstał w wyniku zastosowania Przypadku 1 lub Przypadku 2 opisanego powyżej, wówczas wyrażenia w zbiorze C j są spełnione przez t. Możemy więc rozszerzyć t do U j, przyjmując t (y) = T dla każdego y U j. Jeśli zbiór U j powstał w wyniki zastosowania Przypadku 3, to zbiór U j jest pusty, a wyrażenie C j jest spełnione w oparciu o t. Jedynym przypadkiem, który należałoby jeszcze rozważyć jest Przypadek 4. Przyporządkowanie t spełnia wyrażenie C, a zatem istnieje najmniejsza liczba całkowita l taka, że literał z l jest prawdziwy względem t. Jeśli l jest równe 1 albo 2, wówczas definiujemy t (y i j) = F dla 1 i k 3. W innym przypadku definiujemy t (y i j) = T dla 1 i l 2 oraz t (y i j) = F dla l 1 i k 3. Łatwo sprawdzić, że tak zdefiniowane wartości spełnią wszystkie sumy logiczne wewnątrz C j, a więc przyporządkowanie t spełni wyrażenie C. Odwrotnie, jeśli t spełnia wyrażenie C, łatwo zweryfikować, że obcięcie funkcji t do zbioru U spełnia wyrażenie C. To zaś oznacza, że C jest spełnione wtedy i tylko wtedy, gdy spełnione jest C. Aby pokazać, że ta transformacja może być wykonana w wielomianowym czasie, wystarczy zauważyć, że liczba trójliterałowych czynników w wyrażeniu C jest ograniczona przez wielomian zależny od mn. Stąd rozmiar instancji problemu 3SAT jest ograniczony z góry przez funkcję wielomianową rozmiaru instancji problemu spełnialności. Ponadto, wszelkie przekształcenia wykorzystane w dowodzie da się wykonać w wielomianowym czasie. Pokazaliśmy więc, że problem spełnialności jest NP-zupełny, nawet jeśli dla każdego c C zachodzi c = 3. 1.4.2. NP-zupełność problemu szeregowania zadań jednostkowych W pracy [4] podany został dowód NP-zupełności decyzyjnej postaci problemu szeregowania zadań jednostkowych. Fakt ten ma kluczowy wpływ na rozważania zawarte w tej pracy. Problem 1.6 (Problem szeregowania zadań jednostkowych). Niech danych będzie n niepodzielnych zadań o jednostkowych czasach wykonania (to znaczy p j = 1 dla 1 j n). Pomiędzy zadaniami zdefiniowane są ograniczenia kolejnościowe w postaci relacji częściowego porządku. Czy istnieje uszeregowanie dopuszczalne o długości mniejszej lub równej ω, jeśli dostępnych jest m procesorów? W dalszych rozważaniach korzystać będziemy ze zmodyfikowanej wersji problemu szeregowania zadań jednostkowych. 21

1.4. Problem szeregowania zadań jednostkowych Problem 1.7 (Zmodyfikowany problem szeregowania zadań jednostkowych). Niech danych będzie n niepodzielnych zadań o jednostkowych czasach wykonania (to znaczy p j = 1 dla 1 j n). Pomiędzy zadaniami zdefiniowane są ograniczenia kolejnościowe z postaci relacji częściowego porządku. Czy istnieje uszeregowanie dopuszczalne o długości mniejszej lub równej ω, jeśli w chwili i (gdzie i N oraz 0 i < ω) dostępnych jest m(i) procesorów? Rozumiemy, że jeśli w chwili i N dostępny jest jakikolwiek procesor, to może on posłużyć do wykonania zadania rozpoczynającego się w chwili i i kończącego się w chwili i + 1. Lemat 1.1. Zmodyfikowany problem szeregowania zadań jednostkowych jest problemem NP-zupełnym. Dowód. Z twierdzenia 1.2 wiemy, że problem trójspełnialności jest problemem NP-zupełnym. Niech zatem C = {c 1, c 2,..., c k } będzie wyrażeniem logicznym w koniunkcyjnej postaci normalnej i niech dla 1 i k zachodzi c i = 3. Ponadto, niech c i = x i y i z i = {x i, y i, z i }, gdzie x i, y i oraz z i są literałami zmiennych logicznych ze zbioru U = { } u 1, u 2,..., u p. Dla takiego wyrażenia C konstruujemy zmodyfikowany problem szeregowania zadań jednostkowych w następujący sposób. Zadaniami są: 1. T ij oraz T ij dla 1 i p oraz 0 j p, 2. S i oraz S i dla 1 i p, 3. D ij dla 1 i k oraz 1 j 7. Zadania oznaczone literami T i S odpowiadają zmiennym logicznym, zaś zadania oznaczone symbolem D alternatywom w wyrażeniu logicznym C. Ograniczenia kolejnościowe między zadaniami definiujemy w następujący sposób: 1. T ij T i,j+1 oraz T ij T i,j+1 dla 1 i p oraz 0 j p 1, 2. T i,i 1 S i oraz T i,i 1 S i dla 1 i p, 3. Weźmy pod uwagę zadanie D ij, gdzie wskaźnik j reprezentowany jest binarnie w postaci a 1 a 2 a 3. Z założenia j 1, zatem nie może zachodzić sytuacja, w której a 1 = a 2 = a 3 = 0. Rozważmy c i = x i y i z i, gdzie x i, y i oraz z i są literałami zmiennych logicznych, odpowiednio u r1, u r2 oraz u r3 ze zbioru U. Przyjmujemy, że T r1,p D ij, jeżeli x i = u r1 oraz a 1 = 1 lub x i = u r1 oraz a 1 = 0. W przeciwnym przypadku przyjmujemy, że T r1,p D ij. Podobnie, T r2,p D ij, jeżeli y i = u r2 oraz a 2 = 1 lub y i = u r2 oraz a 2 = 0. Jeśli tak nie jest, przyjmujemy, że T r2,p D ij. W końcu, 22

1.4. Problem szeregowania zadań jednostkowych przyjmujemy T r3,p D ij, jeżeli z i = u r3 oraz a 3 = 1 lub z i = u r3 oraz a 3 = 0. W przeciwnym przypadku przyjmujemy, że T r1,p D ij. Jako długość uszeregowania przyjmujemy ω = p + 3. Liczbę procesorów m(i), dostępnych w chwili i, definiujemy zgodnie z zasadą: m(0) = p, m(1) = 2p + 1, m(i) = 2p + 2 dla 2 i p, m(p + 1) = k + p + 1, m(p + 2) = 6k. Udowodnimy teraz, że tak określony zmodyfikowany problem szeregowania zadań jednostkowych ma rozwiązanie wtedy i tylko wtedy, gdy dane początkowo wyrażenie logiczne C jest spełnialne. Dowód oprze się na obserwacji, że (dla 1 i p) u i (lub u i ) przyjmuje wartość 1 (prawda) wtedy i tylko wtedy, gdy zadanie T i0 (lub odpowiednio T i0 ) jest wykonywane od chwili t = 0. Pokażemy, że przez obecność zadań typu S i S, jedno z zadań T i0 i T i0 jest wykonywane od chwili t = 0, drugie zaś od chwili t = 1. Żądanie, aby w chwili p + 1 rozpoczynało się k + p + 1 zadań jest równoważne żądaniu, aby dla każdego i istniało dokładnie jedno j takie, że zadanie D ij rozpoczyna się w tym samym czasie (więcej takich j nie może istnieć). Ten warunek jest zaś równoważny stwierdzeniu, że alternatywa, której odpowiada zadanie D ij, przyjmuje wartość logiczną 1 (prawda), wtedy gdy wartość logiczna 1 przyporządkowana jest tym literałom u i i u i, które odpowiadają zadaniom T i0 i T i0 rozpoczynającym się w chwili t = 0. Pokażemy wpierw, że dla dowolnego rozwiązania określonego powyżej zmodyfikowanego problemu szeregowania zadań jednostkowych, nie może zachodzić sytuacja, w której dla każdego i zadania T i0 oraz T i0 są wykonywane równocześnie od chwili t = 0. Załóżmy, dla dowodu nie wprost, że jest to możliwe. Ze względu na to, że m(0) = p, istnieje j takie, że żadne z zadań T j0 i T j0 nie rozpoczyna się w chwili t = 0. To zaś oznacza, że żadne z zadań S j i S j nie może rozpocząć się ani w chwili j, ani wcześniej. Zadanie S j może się wykonać dopiero po wykonaniu j zadań T j0, T j1,, T j,j 1, które ponadto muszą wykonać się w dokładnie w takiej kolejności. Stąd wnioskujemy, że liczba zadań mogących rozpocząć się w chwili j lub wcześniej jest równa: 1. co najwyżej (2j+1)p zadań typu T i T są nimi zadania T i0, T i1,, T ij, jeżeli wykonywanie zadania T i0 rozpoczęło się w chwili t = 0 lub T i0, T i1,, T i,j 1 w przeciwnym przypadku, 23