• Nie Znaleziono Wyników

OCENA PODEJ

N/A
N/A
Protected

Academic year: 2021

Share "OCENA PODEJ"

Copied!
9
0
0

Pełen tekst

(1)

OCENA PODEJŚCIA EWOLUCYJNEGO W PROBLEMIE GNIAZDOWYM Z NIEPRZESUWALNYMI CZYNNOŚCIAMI ASYNCHRONICZNYMI

Mariusz Makuchowski

Streszczenie: W pracy rozwaŜa się problem gniazdowy z operacjami wielomaszynowymi z nieprzesuwalnymi czynnościami asynchronicznymi. Przedstawia się pewien specyficzny sposób kodowania tzw. rozwiązań permutacyjnych. Następnie na jego bazie proponuje się algorytm genetyczny oraz algorytm symulowanego wyŜarzania. Przeprowadza się badania numeryczne proponowanych algorytmów z zastosowaniem duŜej liczby literaturowych przykładów testowych. Praca zakończona jest analizą porównawczą podejścia genetycznego w stosunku do innych technik w szczególności metody symulowanego wyŜarzania.

Słowa kluczowe: problem gniazdowy, operacje wielomaszynowe, algorytm genetyczny, algorytm symulowanego wyŜarzania.

1. Wstęp

Jednym z najbardziej standardowych problemów w teorii szeregowania zadań produkcyjnych jest problem gniazdowy z kryterium celu będącym momentem zakończenia wszystkich zadań. Waga tego zagadnienia wynika zarówno z jego praktycznych jak i teoretycznych własności. Z praktycznej strony modeluje on duŜą klasę rzeczywistych procesów przemysłowych, natomiast z teoretycznego punktu widzenia naleŜy on do klasy problemów NP-trudnych [11].

PoniewaŜ w praktyce często zachodzi sytuacja, w której do wykonania danej operacji naleŜy uŜyć nie jednej, lecz większej liczby maszyn, klasyczny problem gniazdowy ewoluował do problemu gniazdowego z operacjami wielomaszynowymi [2]. W pracy [5]

przedstawiono dla niego algorytm dokładny bazujący na metodzie podziału i ograniczeń, natomiast w pracy [9][5] zaproponowano algorytmy przybliŜone wykorzystujące techniki popraw.

Dalsza dokładniejsza obserwacja i analiza rzeczywistych procesów przemysłowych doprowadziła do powstania problemu gniazdowego z nieprzesuwalnymi czynnościami asynchronicznymi [6][7][8]. W problemie tym uwzględnia się nie tylko fakt wykorzystywania kilku maszyn przez jedną operację, ale takŜe względny ustalony harmonogram wykorzystywania maszyn w ramach danej operacji. Dedykowane algorytmy konstrukcyjne przedstawiono w pracach [6], zaś algorytmy popraw w szczególności algorytm oparty na technice poszukiwania z zabronieniami w pracy [7] oraz algorytm oparty na technice symulowanego wyŜarzania w pracy[8].

Celem pracy jest ocena podejścia ewolucyjnego w stosunku do metod proponowanych w literaturze dla problemu gniazdowego z nieprzesuwalnymi czynnościami asynchronicznymi. Zaproponowane są dwa algorytmy, pierwszy genetyczny nazwany GA oraz drugi oparty na metodzie symulowanego wyŜarzania nazwany SA. W celu osiągnięcia bardziej obiektywnej oceny obydwa z porównywanych algorytmów są w miarę moŜliwości podobne do siebie. Dokładne wyjaśnienie tego podobieństwa zawarte jest w opisie algorytmu SA. Badania numeryczne przeprowadzono na 120 przykładach testowych, a jakość wyników porównano do najlepszych rozwiązań dostarczonych 22 szybkimi

(2)

algorytmami konstrukcyjnymi typu P i W opisanymi w pracy [6]. Procedurę polegającą na uruchomieniu wszystkich 22 algorytmów typu P i W oraz wybraniu najlepszego z otrzymanych rozwiązań będziemy nazywać algorytmem PW.

2. Sformułowanie problemu

Pomimo iŜ sformułowanie rozwaŜanego problemu moŜna spotkać w literaturze [6][7][8], ze względu na jego bazowe znaczenie dla niniejszej pracy zdecydowano się je przytoczyć poniŜej:

Dany jest zbiór zadań J={1,2,,r}, zbiór operacji O={1,2,,o}, zbiór czynności }

1,2 { , ,n

=

N … oraz zbiór maszyn M={1,2,,m}. Zadanie kJ składa się z ciągu

≥1

ok operacji indeksowanych kolejno przez jk +1, jk+2,…,jk+ok gdzie jk=

oi. Realizacja zadania polega na wykonaniu w powyŜszej kolejności wszystkich operacji wchodzących w jego skład. Dla kaŜdej operacji jO określony jest zbiór maszyn

M

Mj, na których jest ona wykonywana; proces wykonywania operacji j na maszynie Mj

l∈ nazywamy czynnością i oznaczamy parą ( lj,). Ponadto oznaczając przez S( lj, ) moment rozpoczęcia wykonywania czynności (j,l) przyjmujemy, Ŝe moment rozpoczęcia wykonywania operacji j jest równy S(j)=min S(j,l)

Mj

l∈ . Czynność (j,l) scharakteryzowana jest przez dwa parametry: głowę τj,l i ciało pj,l . Głowa określa, po jakim czasie od momentu S( j) rozpoczęcia wykonywania się operacji j ma rozpocząć się wykonywanie czynności ( lj, ) (zachodzi: S(j)=S(j,l)−τj,l), zaś ciało jest długością trwania tej czynności. Moment C(j) zakończenia wykonywania operacji j określamy jako

} {

max ) ( )

( j,l j,l

Mj

l p

+ j S

= j

C . Zakłada się ponadto, Ŝe kaŜda maszyna moŜe wykonywać w danej chwili, co najwyŜej jedną operację oraz nie moŜna w tym samym czasie wykonywać więcej niŜ jednej operacji danego zadania. Uszeregowanie dopuszczalne definiowane jest przez momenty S(j,l)≥0,lMj,jO spełniające wszystkie powyŜsze ograniczenia.

Problem polega na znalezieniu uszeregowania dopuszczalnego minimalizującego moment wykonania wszystkich operacji Cmax =maxjOC(j).

3. Kodowanie rozwiązania

W dalszej części pracy ograniczymy się do tzw. uszeregowań permutacyjnych. W tym celu wprowadzimy najpierw definicję zbioru T={Job(o):oO} gdzie Job(o) jest numerem zadania operacji o. PoniewaŜ uszeregowanie permutacyjne jest precyzyjnie określone przez permutację π=(π(1)(2),...(o))elementów zbioru T, oraz pewną (niŜej opisaną) procedurę jego konstrukcji, rozwiązanie problemu będziemy dalej utoŜsamiać z odpowiednią permutacją π elementów zbioru T.

Procedura tworząca uszeregowanie z permutacji π składa się z o identycznych kroków.

W kaŜdym z nich identyfikowana jest pewna operacja, po czym dokładana jest ona na koniec częściowego uszeregowania tworząc nowe uszeregowanie częściowe. Procedura

(3)

zaczyna działanie z pustego uszeregowania, a po zakończeniu działania budowane uszeregowanie częściowe staje się ostatecznym rozwiązaniem. W i-tym kroku dokładaną operacją jest l-ta operacja zadania π(i), czyli operacja o numerze jk+l, gdzie l jest ilością wystąpień zadaniaπ(i), w zbiorze{π(1)(2),...(i)}. ZauwaŜmy, Ŝe kaŜda permutacja zbioru T definiuje dokładnie jedno uszeregowanie, co więcej uszeregowanie to jest zawsze dopuszczalne, co wynika bezpośrednio ze sposobu jego konstrukcji. Przedstawiona procedura uŜywana jest takŜe do wyznaczenia długości uszeregowania, a jej złoŜoność wynosi O(a) gdzie a jest sumą czynności występujących w problemie; ao*m.

4. Opis algorytmu GA

Algorytmy genetyczne są algorytmami popraw, naśladującymi ewolucję, dobór naturalny i dziedziczenie występujące w świecie przyrody. KaŜda iteracja symuluje jedno pokolenie, w którym najsłabsze osobniki (rozwiązania) giną, a najlepiej przystosowane stają się rodzicami i przekazując swoje geny (pewne atrybuty rozwiązania) potomstwu tworzącemu nowe pokolenie. Prezentowany algorytm opiera się na ogólnej idei zaproponowanej po raz pierwszy przez Holland'a w pracy [3]. Podstawowymi procedurami powtarzającymi się cyklicznie w tego typu algorytmach są kolejno selekcja, krzyŜowanie, oraz mutacja. Szczegółowa implementacja poszczególnych elementów wariantu algorytmu o najwyŜszej jakości osiąganych rozwiązań (z pośród kilkudziesięciu testowanych) opisana jest poniŜej:

selekcja: HARD, wśród childrenN nowo powstałych osobników wybieranych jest parentsN najlepszych w sensie wartości funkcji celu,

krzyŜowanie: OX wśród rodziców wybierana jest losowo para A, B, następnie dokonuje się operacji krzyŜowania polegającej na wylosowaniu punktu L i R przecięcia permutacji, utworzeniu permutacji częściowej A- zawierającej L początkowych elementów rozwiązania A, utworzeniu permutacji częściowej A+ zawierającej o-R końcowych elementów permutacji A oraz utworzeniu permutacji częściowej B' z permutacji B poprzez usunięcie wszystkich elementów występujących w A- i A+. Elementy występujące w A- usuwane są z początkowej części permutacji B, natomiast elementy z A+ z końcowej części permutacji B.

Ostatecznie otrzymanym rozwiązaniem jest ciąg A-+B'+A+. Operacja krzyŜowania powtarzana jest childrenN razy tworząc tworząc childrenN nowych osobników, mutacja: INSERT polega na przestawieniu jednego losowego elementu w losowo

wybranym rozwiązaniu tworzonego pokolenia. Operacja ta wykonywania jest childrenN*o*crossoverP razy, gdzie crossoverP jest prawdopodobieństwem mutacji.

Poza wyŜej wymienionymi implementacjami metod testowano takŜe ich inne warianty opisane poniŜej:

selekcję: SOFT1 miękką z zastosowaniem koła ruletki, SOFT2 selekcję miękką polegającą na losowym dodawaniu osobników do tych wybranych selekcją twardą HARD,

krzyŜowanie: SX działa podobnie jak opisany operator OX z tą róŜnicą, Ŝe losowany jest tylko jeden punk przecięcia permutacji,

(4)

mutacja: SWAP polegająca na zamianie dwóch elementów, SMALL_SWAP polegająca na zamianie dwóch sąsiednich elementów oraz INVERSE polegająca na odwróceniu części permutacji.

Ostatecznie parametrami algorytmu są kolejno maksymalna liczba pokoleń maxIter, liczba osobników stających się rodzicami parentsN, liczba generowanych potomków childrenN, prawdopodobieństwo mutacji crossoverP, wybrany operator krzyŜowania, wybrany operator mutacji oraz sposób selekcji.

5. Opis algorytmu SA

Opisany w tej części algorytm SA, jest dodany w celu bardziej obiektywnie oceny jakość algorytmu GA. Dlatego jego implementacja jest maksymalnie zbliŜona do algorytmu GA zarówno pod względem stylu programowania, stosowanych struktur danych, reprezentacji rozwiązań a nawet generacji rozwiązania sąsiedniego, do którego zastosowano operator mutacji z algorytmu GA. Prezentowany algorytm opary jest na ogólnej idei zaproponowanej przez Kirkpatrick'a w pracy [4]. W algorytmie stosuje się logarytmiczny model chłodzenia od temperatury początkowej Tbegin do temperatury końcowej Tend. Temperatura początkowa i końcowa dobierana jest automatycznie poprzez wykonanie próbnej serii 1000 przejść pomiędzy sąsiednimi rozwiązaniami, w której wyznacza się największą ∆max oraz najmniejszą ∆minbezwzględną zmianę wartości funkcji celu. Następnie temperaturę początkową (końcową) ustala się w taki sposób by prawdopodobieństwo akceptacji rozwiązania gorszego o∆max (∆min) wynosiło 0,5.

ln(0,5). )

,5 0 ln(

max

max −∆

; T =

=

Tbegin end (1)

Parametrami sterującymi dla opisanego algorytmu są liczba iteracji, liczba zmian temperatury oraz operator mutacji słuŜący do generowania rozwiązań sąsiednich.

6. Wyniki badań

Wszystkie badania przedstawione w tej pracy, zostały przeprowadzone na komputerze klasy PC z procesorem Athlon XP 2000+ taktowanym zegarem 1666MHz. Prezentowane algorytmy zostały zaprogramowane w języku C++ w środowisku Builder 4 i uruchamiane były w systemie operacyjnym Windows XP.

Badania zostały przeprowadzone na 120 literaturowych przykładach testowych.

Przykłady te są mocno zróŜnicowane zarówno pod względem średniej liczby uŜywanych maszyn przez operację (tworzą trzy klasy SRData, SMData oraz SVData, w których wynosi ona odpowiednio 2, 1/3m i 1/2m) jak i pod względem ilości maszyn, zadań i operacji.

KaŜda z trzech klas podzielona jest na 8 grup po 5 instancji charakteryzujących się jednakową liczbą zadań r maszyn m oraz operacji o. PoniewaŜ we wszystkich przykładach ilość operacji wynosi dokładnie m*r tak, więc rozmiar instancji danej grupy będziemy opisywać przez: m x r.

Algorytm GA uruchamiany był z następującymi parametrami sterującymi: liczba pokoleń maxIter=10’000, liczność populacji przed selekcją childrenN=50, ilość osobników po selekcji parentsN=10, prawdopodobieństwo mutacji crossoverP=0,5%, operator krzyŜowania SX, operator mutacji INSERT, rodzaj selekcji HARD. Algorytm SA

(5)

uruchamiany był z następującymi parametrami liczba iteracji maxIter=500'000, liczba zmian temperatury 99, sąsiedztwo generowane operatorem INSERT. Ilość iteracji dla algorytmu SA ustawiona została w taki sposób, aby oba algorytmy przeglądały tę samą liczbę rozwiązań. TakŜe sposób generacji sąsiedztwa został bezpośrednio zaadaptowany z procedury mutacji najlepszej badanej wersji algorytmu GA. Tak, więc jedynym punktem swobody w sterowaniu algorytmu SA jest parametr określający liczbę zmian temperatury.

Parametr ten nie ma jednak istotnego znaczenia na efektywność algorytmu (o ile nie jest skrajnie mały).

Jakość rozwiązania wygenerowanego przez algorytm GA i SA oceniano względem rozwiązaniaCPW otrzymanego algorytmem PW opisanym we wstępie. Dla kaŜdego z przykładów obliczono względną poprawę w stosunku do rozwiązania CPW ,

PW PW A

A= C C C

ρ 100%⋅( − )/ (2)

gdzie CA, A∈{GA,SA} jest wartością funkcji celu otrzymaną odpowiednim algorytmem.

Następnie dla kaŜdej z grup przykładów obliczono średnią poprawę oraz sumę czasów }

{GA,SA A

,

tA ∈ pracy badanych algorytmów. Otrzymane wyniki przedstawione są w tabeli 1. Ostatni wiersz tabeli „wszystkie” zawiera średnią wartość ρA z danej klasy przykładów.

Tab.1. ŚrednieρA

[ ]

% oraz sumatA

[ ]

s czasów działania algorytmów A∈{GA,SA} Grupa

przy- kładów

Klasa przykładów

SRData SMData SVData

ρGA tGA ρSA tSA ρGA tGA ρSA tSA ρGA tGA ρSA tSA

5 x 10 5,5 21 10,8 16 9,6 19 13,7 14 3,0 22 8,3 17 5 x 15 6,2 32 10,6 23 10,3 29 13,3 20 2,6 36 9,3 26 5 x 20 3,2 45 9,0 30 8,5 40 10,8 26 4,8 49 8,2 33 10 x 10 14,4 45 19,5 30 11,3 58 17,7 39 8,8 72 15,0 49 10 x 15 13,9 71 20,9 44 13,9 92 19,5 57 6,6 113 12,0 72 10 x 20 14,1 99 19,6 57 8,6 128 14,2 75 5,6 159 11,4 94 10 x 30 6,6 159 14,1 84 3,1 210 13,4 112 -2,7 261 6,9 141 15 x 15 14,1 114 22,4 64 10,8 187 17,8 108 7,7 238 12,4 139

wszystkie 9,6 15,9 9,5 15,0 4,5 10,4

Na rysunkach rys. 1, 2, 3 przedstawiony został wpływ trzech bazowych parametrów algorytmu GA na jakość generowanych przez niego rozwiązań. Są nimi kolejno operator mutacji, prawdopodobieństwo mutacji oraz liczba symulowanych pokoleń. ZauwaŜmy tu, Ŝe pozostałe z parametrów takie jak operator krzyŜowania, sposób selekcji, liczność populacji jak i ilość osobników pozostawianych do reprodukcji są nie mniej istotne od tych

(6)

prezentowanych na wykresach. Zostały one jednak świadomie pominięte, poniewaŜ analiza wpływu wszystkich parametrów na efektywność algorytmu nie jest konieczna do wyciągnięcia prawidłowych wniosków porównawczych badanych algorytmów. W testach dostarczających danych do rysunków 1, 2, 3, parametry niepodlegające zmianie były ustawione na wartości podane wcześniej. Rysunki 1, 2, 3 zawierają tylko średnie wartości parametruρGAwyliczone dla danej klasy przykładów, bez rozróŜniania poszczególnych grup jak miało to miejsce dla danych zamieszczonych w tabeli 1. Ponadto nie zawierają one Ŝadnej informacji dotyczącej czasu działania algorytmu, gdyŜ w tym miejscu wydaje się ona mniej istotna.

-2 0 2 4 6 8 10 12

Insert Invert Swap SmallSwap

SRData SEData SVData

Rys.1. Wpływ operatora mutacji na jakość rozwiązania w algorytmie GA

-5 0 5 10

0,01 0,1 1 10

SRData SEData SVData

Rys.2. Wpływ prawdopodobieństwa mutacji na jakość rozwiązania w algorytmie GA

-5 0 5 10

100 1000 10000

SRData SEData SVData

Rys.3. Wpływ ilości pokoleń na jakość rozwiązania w algorytmie GA

(7)

Z kolei na rysunku 4 przedstawiono przykładowy przebieg 1000 pierwszych iteracji algorytmu GA dla pierwszego (najmniejszego) przykładu testowego. Przedstawia on wartość funkcji celu najlepiej przystosowanego osobnika oraz średnią wartość funkcji celu wszystkich osobników danego pokolenia. Dla przedstawionego przykładu ostateczna wartość funkcji celu znalezionego rozwiązania wynosi 1102, algorytm PW znajduje rozwiązanie o wartości 1243, a algorytm SA rozwiązanie o wartości 1035.

1100 1200 1300 1400 1500

0 200 400 600 800 1000

średnie wartość Cmax w pokoleniu najlepsza wartość Cmax w pokoleniu

Rys.4. Przykładowy przebieg algorytmu GA dla przykładu SRdata01

Z wyników zamieszczonych w tabeli 1 wynika wyraźnie, Ŝe algorytm SA generuje średnio rozwiązania lepsze o ponad 5% od rozwiązań dostarczanych algorytmem GA.

Ponadto w przeprowadzonym teście nie wystąpiła sytuacja, w której algorytm GA dostarczył rozwiązania lepszego niŜ rozwiązanie dostarczone algorytmem SA. Sumaryczny czas działania algorytmu SA (1371s) jest ponad 40% krótszy niŜ całkowity czas pracy algorytm GA (2297s).

Z analizy rysunku 1 wynika, Ŝe zmieniając operator mutacji, jakość algorytmu znacznie spada, wynika to poniekąd z faktu, iŜ dobrze dobrane parametry sterujące dla jednego operatora muszą zostać ponownie dobrane dla operatora drugiego. DuŜa wraŜliwość efektywności algorytmu GA w zaleŜności od parametrów sterujących widoczna jest na rysunku 2. MoŜna na nim zaobserwować spadek efektywności algorytmu o ponad 5% przy dwukrotnej zmianie prawdopodobieństwa mutacji. Rysunek 3 pokazuje, iŜ zwiększanie liczby symulowanych pokoleń podnoś jakość generowanych rozwiązań. Oznacza to, Ŝe algorytm jest wysterowany w taki sposób, Ŝe potrafi systematycznie opuszczać minima lokalne. Efekt ten jest takŜe widoczny na rysunku 4, na którym widać około 250 kolejnych iteracji o jednakowej wartości funkcji celu najlepszego osobnika, po czym następuje nagłe zmniejszenie tej wartości (iteracje 300-550). Rysunek 4 ukazuje, takŜe zjawisko, w którym kolejne pokolenie jest gorsze (w sensie funkcji celu najlepiej przystosowanego osobnika) od pokolenia wcześniejszego (zjawisko to zachodzi w 120 pokoleniu).

(8)

7. Wnioski

Ograniczenie się tylko do rozwiązań permutacyjnych, zaprzepaszcza znalezienia naprawdę dobrych (w sensie wartości funkcji celu) uszeregowań. Praca ta jednak ma na celu wykazanie przydatności stosowania innych metod, dla rozwaŜanego problemu, poza tymi proponowanymi w literaturze (poszukiwania z zabronieniami [7], symulowane wyŜarzanie [8]) a nie znalezienie moŜliwie najlepszych rozwiązań. JednakŜe okazało się, Ŝe w przypadku analizowanego problemu, proponowany algorytm GA generuje duŜo słabsze rozwiązania, w znacznie dłuŜszym czasie niŜ “odpowiadający” mu algorytm symulowanego wyŜarzania SA. Określenie odpowiadający oznacza tutaj tyle, Ŝe obydwa z algorytmów GA i SA korzystały z tych samych struktur danych, tych samych procedur wyliczających wartość funkcji celu, a nawet rozwiązanie sąsiednie w algorytmie SA generowane było przez operator mutacji zaczerpnięty z algorytmu GA. Ponadto oba z algorytmów przeglądały identyczną liczbę rozwiązań. Ponadto z danych literaturowych wynika, Ŝe algorytm SA jest porównywalny pod względem jakości generowanych rozwiązań oraz czasu dziania z algorytmem opartym na technice poszukiwania z zabronieniami.

Podsumowując, z przeprowadzonych eksperymentów numerycznych wynika, Ŝe podejście genetyczne w jego pierwotnej formie zastosowane dla rozwaŜanego problemu jest duŜo mniej efektywne od takich metod jak symulowane wyŜarzanie czy metoda poszukiwań z zabronieniami. Jego efektywne stosowanie wymaga dalszych badań, w szczególności opracowania nowych operatorów genetycznych i stosowania dodatkowych technik zwiększających wydajność, czy łączenia go z innymi metodami.

Praca była częściowo finansowana ze środków KBN grant T11A 01624.

Literatura

1. Drozdowski M.: Scheduling multiprocessor task – An Overview, European Journal Operational Research, 94, 1996, str. 215-230.

2. Grabowski J.: Sformułowanie i rozwiązanie zagadnienia kolejnościowego z równoległym wykorzystaniem maszyn, Archiwum Automatyki i Telemechaniki, 1978, str. 91–113.

3. Holland J.H.: Genetic Algorithms, Scientific American 267, July 1992, str. 44–50.

4. Kirkpatrick S., Gelatt C.D. Vecchi M.P., Optimisation by simulated annealing, Science 220, 1983, str 671-680,

5. Kramer A.: Scheduling Multiprocessor Tasks on Dedicated Processors, PhD-Thesis, Fachbereich Mathematik/Infomatik, Universitat Osnabruck, 1995.

6. Makuchowski M., Nowicki E.: Operacje wielomaszynowe z nierównoczesnym uŜyciem maszyn w problemie gniazdowym, rozdział w ksiąŜce: Komputerowo Zintegrowane Zarządzanie, Tom II, WNT, Warszawa, 2002, str. 114–123.

7. Makuchowski M., Nowicki E., Algorytm tabu dla problemu gniazdowego z operacjami wielomaszynowymi nierównocześnie wykorzystującymi maszyny, Zeszyty Naukowe Politechniki Śląskiej, Automatyka zeszyt 134, str. 287–297, Wydawnictwo Politechniki Śląskiej, Gliwice 2002.

8. Makuchowski M., Symulowane wyŜarzanie w problemie gniazdowym z operacjami wielomaszynowymi nierównocześnie wykorzystującymi maszyny, Komputerowo Zintegrowane Zarządzanie, tom II, str. 71–78, WNT, Warszawa 2004.

(9)

9. Nowicki E.: Metoda tabu w problemach szeregowania zadań produkcyjnych, Oficyna Wydawnicza Politechniki Wrocławskiej, Wrocław 1999.

10. Sawik T.: Planowanie i sterowanie produkcji w elastycznych systemach montaŜowych, Warszawa, WNT, 1996.

11. Stoskov Y.N., Strusevich Y.A. NP-hardness of shop scheduling problem with three jobs, Discrete Applied Mathematics 1993,

Dr inŜ. Mariusz Makuchowski Instytut Cybernetyki Technicznej Politechnika Wrocławska

50-372 Wrocław, ul Janiszewskiego 11/17 tel.: (0-71) 320-28-34

e-mail: mariusz.makuchowski@pwr.wroc.pl

Cytaty

Powiązane dokumenty

Po śniadaniu zwiedzanie miasta, podczas którego zobaczą Państwo Świątynię Nieba (UNESCO), która jest symbolem Pekinu oraz najdoskonalszym przykładem architektury okresu

Stwierdzam, Ŝe liczba kopert i arkuszy egzaminacyjnych wykazana na kopertach jest zgodna z danymi zawartymi w zbiorczym protokole przekazania/odbioru dokumentacji

Studenci realizujący kurs „Technologie paszowe i nawozowe nowej generacji”, zostali zaproszeni do zrealizowania jednodniowego szkolenia w Kędzierzynie-Koźlu.. Jednym z zadań

[r]

Celu ogólnego: Stworzenie miejsca dostatniego życia wspólnoty ludzi przedsiębiorczych, skupionych wokół partnerskiej współpracy, posiadających wizję własnego

Wieczorem dla chętnych za dodatkową opłatą rejs statkiem po rzece Huangpu, podczas którego będzie można podziwiać wspaniałe widoki na ponad 20 milionowe miasto.. DZIEŃ 15

Projektowanie obiektów architektury krajobrazu - miejski park sportu i zieleń

dowolnych zajęć specjalistycznych w semestrze; warunkiem uzyskania wpisu w suplemencie do dyplomu o zrealizowaniu określonej specjalności jest zaliczenie na II i III roku