16.11.2014 Views

Anotace Annotation

Anotace Annotation

Anotace Annotation

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

5<br />

<strong>Anotace</strong><br />

V této diplomové práci je provedena analýza a srovnání několika přístupů<br />

k výpočtu optimálních, časově invariantních výrobních dávek v systémech se síťovou<br />

strukturou a periodickou výrobou s užitím principů dynamického programování a<br />

stochastické heuristické metody. Tato práce je zaměřena na vícevýrobkové systémy,<br />

v jejichž struktuře se vyskytují kružnice, a v nichž každý stupeň zpracovává právě jeden<br />

druh komponenty finálních výrobků.<br />

Cílem práce je vytvořit dodatek k existujícímu programovému systému, který<br />

bude schopen provést výpočet tohoto problému pomocí popsaných metod. První část<br />

pojednává o možných přístupech k řešení naznačeného problému. Druhá část se zabývá<br />

popisem samotného programu. Diplomová práce pak končí srovnáním použitých<br />

přístupů.<br />

<strong>Annotation</strong><br />

In this final thesis, an analysis and comparison of several approaches to optimal,<br />

time-invariant lot sizes determination in net-structured systems with a periodical<br />

manufacturing process is completed, using the principles of dynamic programming and<br />

a stochastic heuristic technique. This work is focused on multi-product multi-stage<br />

systems, in which structure circuits are included and each stage processes just one kind<br />

of component of final products.<br />

The aim of this work is to create an additional plug-in to the existing application<br />

which will be capable of computing this problem by means of the described techniques.<br />

First part of this paper deals with possible approaches to solving the problem mentioned<br />

above. Second part describes the application itself. Finally, the work compares the<br />

approaches that have been used.


Strana<br />

6<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

7<br />

Poděkování<br />

Mé díky náleží vedoucímu této práce RNDr. Jiřímu Dvořákovi, CSc. za velmi<br />

fundované vedení, vhodné a cenné připomínky, projevenou vstřícnost a za čas, který mi<br />

při tvorbě této práce věnoval. Zároveň děkuji všem, kteří mi svými cennými radami<br />

pomáhali při řešení problémů s touto prací spojených.


Strana<br />

8<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

9<br />

OBSAH<br />

ANOTACE .............................................................................................................. 5<br />

1 ÚVOD ............................................................................................................... 13<br />

2 ROZBOR PROBLÉMU..................................................................................... 15<br />

2.1 Systém s desarborescentní strukturou................................................................................................18<br />

2.1.1 Struktura výrobního systému ..........................................................................................................18<br />

2.1.2 Popis výroby výrobními funkcemi..................................................................................................20<br />

2.1.3 Náklady na výrobní proces..............................................................................................................21<br />

2.1.4 Formulace problému optimalizace výrobních dávek ......................................................................21<br />

2.1.5 Výpočet přesného řešení .................................................................................................................22<br />

2.1.6 Dolní hranice optimálních nákladů .................................................................................................23<br />

2.1.7 Horní hranice optimálních nákladů .................................................................................................24<br />

2.1.8 Heuristická metoda řešení problému...............................................................................................25<br />

2.2 Systém se strukturou bez kružnic.......................................................................................................25<br />

2.2.1 Struktura výrobního systému ..........................................................................................................25<br />

2.2.2 Popis výroby výrobními funkcemi..................................................................................................26<br />

2.2.3 Náklady na výrobní proces..............................................................................................................27<br />

2.2.4 Formulace problému optimalizace výrobních dávek ......................................................................27<br />

2.2.5 Výpočet přesného řešení .................................................................................................................28<br />

2.2.6 Heuristické metody řešení problému...............................................................................................29<br />

2.2.7 Transformace na světvující se strukturu..........................................................................................30<br />

2.3 Obecný (síťový) výrobní systém..........................................................................................................31<br />

2.3.1 Struktura obecného výrobního systému ..........................................................................................32<br />

2.3.2 Formulace problému .......................................................................................................................32<br />

3 NÁVRH ŘEŠENÍ............................................................................................... 35<br />

3.1 Metody řešení obecného výrobního systému......................................................................................35<br />

3.1.1 Nástin řešení pomocí simulovaného žíhání.....................................................................................36<br />

3.1.2 Nástin řešení pomocí genetického algoritmu ..................................................................................36<br />

3.2 Transformace problému s kružnicemi na problém bez kružnic ......................................................37<br />

3.3 Řešení transformovaného problému pomocí dynamického programování ....................................40<br />

3.4 Vyjádření problému pro metody HM1 a HM2..................................................................................41<br />

4 STOCHASTICKÉ HEURISTICKÉ METODY.................................................... 43<br />

4.1 Metoda simulovaného žíhání...............................................................................................................44<br />

4.2 Genetický algoritmus ...........................................................................................................................46<br />

5 POPIS PROGRAMŮ ........................................................................................ 49<br />

5.1 Uživatelské prostředí programu OVD................................................................................................49<br />

5.1.1 Hlavní okno.....................................................................................................................................49<br />

5.1.2 Editační okno ..................................................................................................................................50


Strana<br />

10<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

5.1.3 Okno pro volbu výpočetních metod a nastavení parametrů pro stochastické heuristické metody...50<br />

5.2 Formát vstupního souboru ..................................................................................................................51<br />

5.3 Program OVD z hlediska programátora ............................................................................................53<br />

5.3.1 Struktura programu..........................................................................................................................53<br />

5.3.2 Objekty a datové typy......................................................................................................................53<br />

5.4 Program pro generování dat................................................................................................................57<br />

5.4.1 Uživatelské rozhraní........................................................................................................................57<br />

5.4.2 Vstupní data.....................................................................................................................................58<br />

5.4.3 Generování procesů.........................................................................................................................59<br />

5.4.4 Generování struktury.......................................................................................................................59<br />

5.4.5 Generování dat ................................................................................................................................61<br />

5.4.6 Výstup programu.............................................................................................................................62<br />

6 EXPERIMENTY A JEJICH VYHODNOCENÍ ................................................... 63<br />

6.1 Experimenty s optimalizací pomocí simulovaného žíhání.................................................................63<br />

6.2 Experiment s více procesy v jedné dávce............................................................................................68<br />

7 ZÁVĚR.............................................................................................................. 71<br />

8 SEZNAM POUŽITÉ LITERATURY .................................................................. 73


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

11<br />

Přehled nejdůležitějších symbolů<br />

a i<br />

dolní mez výrobní dávky, vyjádřená v jednotkách finálního výrobku<br />

a(i) množina indexů všech bezprostředních následníků stupně F i<br />

b i<br />

horní mez výrobní dávky, vyjádřená v jednotkách finálního výrobku<br />

b(i) množina indexů všech bezprostředních předchůdců stupně F i<br />

C 1i<br />

náklady na přípravu výroby jedné dávky (seřizovací náklady)<br />

C 2i náklady na skladování jednoho ekvivalentu jednotky finálního výrobku<br />

po dobu jednotky času (skladovací náklady)<br />

E optimální hodnota nákladů, daná přesnou strategií<br />

E D<br />

dolní hranice optimálních nákladů<br />

E GA hodnota nákladů získaná pomocí genetického algoritmu<br />

E H<br />

horní hranice optimálních nákladů<br />

E HM hodnota nákladů získaná heuristickou metodou<br />

e i,j<br />

F i<br />

ekvivalent jednotky komponenty j-tého stupně<br />

označení i-tého výrobního stupně<br />

k i ki = xi / xa( i)<br />

N<br />

počet výrobních stupňů<br />

s i (x i ) množina přípustných hodnot k i pro dané x i<br />

X<br />

x i<br />

množina přípustných hodnot výrobní dávky x i<br />

velikost výrobní dávky na stupni F i , vyjádřená v ekvivalentech jednotky<br />

finálního výrobku<br />

x′<br />

i<br />

perioda výrobního stupně i<br />

y i<br />

z i<br />

∆<br />

výrobní rychlost stupně F i , vyjádřená v ekvivalentech jednotky finálního<br />

výrobku za jednotku času<br />

rychlost odběru finálního výrobku ze stupně F i , vyjádřená v jednotkách<br />

finálního výrobku za jednotku času<br />

elementární přírůstek výrobní dávky, vyjádřený v jednotkách finálního<br />

výrobku


Strana<br />

12<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

13<br />

1 Úvod<br />

Předmětem zkoumání této diplomové práce je problém optimalizace časově<br />

invariantních výrobních dávek vícestupňových procesů ve výrobním systému se<br />

síťovou strukturou, která může obsahovat kružnice a jejich shluky, a periodickou<br />

výrobou, jenž může mít více vstupních i výstupních stupňů. Jeden druh komponenty<br />

finálních výrobků je zpracováván právě jedním stupňem struktury. K řešení problému<br />

je použito dynamické programování s tím, že kritériem optimality se uvažuje součet<br />

středních hodnot seřizovacích a skladovacích nákladů. Výpočet je proveden za pomoci<br />

metody přesného výpočtu a některé ze stochastických heuristických metod.<br />

Práce je především zaměřena na úpravu stávajícího programového systému, který<br />

pak umožní zpracování síťové struktury popsané v této práci, rozvětvující se struktury<br />

podle [3] a stromové struktury popsané v [4]. Další úkol je pak návrh metody řešení<br />

tohoto problému pomocí některé ze stochastických heuristických metod a její následná<br />

implementace do programového systému.<br />

Výpočty uvedených metod uvažují nekonečný plánovací horizont, odběry<br />

výrobků s konstantní rychlostí na výstupech ze systému, konečné konstantní rychlosti<br />

práce ostatních stupňů, časově invariantní výrobní dávky, pevné seřizovací náklady a<br />

proporcionální skladovací náklady. Předpokládá se, že pro každý stupeň, jenž není<br />

výstupní, se časové intervaly jeho činnosti a nečinnosti střídají periodicky. Dále se<br />

předpokládá, že kružnice a jejich shluky (shluk je struktura, ve které dvě kružnice mají<br />

alespoň jeden společný uzel) ve struktuře jsou agregovány na uzly představující stupně<br />

struktury. Každý stupeň provádí pouze jedinou operaci na jediném druhu výrobku nebo<br />

komponenty.<br />

V kapitole druhé tato práce definuje základní pojmy a vztahy, které se úzce týkají<br />

řešení daného problému. Kapitola dále obsahuje analýzu problému a je zde proveden<br />

popis světvující se a stromové struktury výrobního systému a jsou zde formulovány<br />

metody řešení pro uvedenou strukturu. Dále se tato kapitola zmiňuje o obecné struktuře,<br />

kde každý stupeň může mít několik předchůdců a několik následníků. U této struktury<br />

se předpokládádá, že může mít několik počátečních a několik koncových stupňů a při<br />

zanedbání orientace hran nebude obsahovat kružnice [6]. Posledním zmiňovaným<br />

typem struktury je struktura síťová, která je také předmětem zkoumání této práce. Tato<br />

struktura už existenci kružnic a jejich shluků uvažuje.


Strana<br />

14<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Ve třetí kapitole se zabýváme návrhem metod a řešení obecného výrobního<br />

systému. Konkrétně se jedná o řešení problému pomocí simulovaného žíhání a<br />

genetického algoritmu. Následuje otázka transformace (agregace) shluků v síťové<br />

struktuře na problém bez kružnic (shluků) pro řešení problému pomocí dynamického<br />

programování.<br />

Kapitola čtvrtá stručně seznamuje s problematikou stochastických heuristických<br />

metod, podrobněji popsaných v [8] a [9]. Jedná se o simulované žíhání a genetický<br />

algoritmus, které jsou použity jako jedny z metod řešení optimalizace výrobních dávek.<br />

Program a jeho stručný popis lze nalézt v kapitole číslo pět. Náhled na daný<br />

problém je jak z hlediska uživatele tak programátora. Podkapitola o uživatelském<br />

prostředí pojednává o funkcích, které jsou programem pro výpočet optimálních dávek<br />

nabízeny. Dále je popisován program pro generování výrobních struktur a jejích<br />

parametrů.<br />

Kapitola s číslem šest je pak srovnáním jednotlivých implemetovaných metod na<br />

základě provedených výpočtů. Jsou zde také uvedeny parametry, s jakými byly výpočty<br />

prováděny. Dále je popsán způsob hodnocení jednotlivých metod včetně jejich<br />

finálního zhodnocení.<br />

A konečně závěrečná, sedmá kapitola zahrnuje dosažené závěry v této diplomové<br />

práci.<br />

Program pro výpočet optimálních výrobních nákladů, jeho zdrojový kód, program<br />

pro generování výrobních struktur a další programové části nutné pro hladký běh<br />

programu jsou k dispozici na přiloženém CD.


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

15<br />

2 Rozbor problému<br />

Prvním pojmem důležitým pro další porozumění je výrobní dávka. Je definována<br />

jako množství výrobku vyráběné na témže zařízení s jednorázovými náklady<br />

vynaloženými na přípravu výrobní dávky. Při přípravě výroby každé dávky se tyto<br />

náklady zvyšují a jejich úhrn se za dané období s klesajícím rozsahem dávky zvyšuje.<br />

Hlavní složkou těchto nákladů jsou náklady seřizovací (náklady na seřízení strojů).<br />

Často se upozorňuje na nepřesnost toho termínu z důvodu možnosti započítání dalších<br />

nákladů do seřizovacích nákladů, proto se v různých pracech zmiňuje pojem náklady<br />

pořizovací. V rámci této práce se autor nadále přiklání k termínu seřizovací náklady.<br />

Náklady zásobovací také úzce souvisí s problematikou výrobních dávek, protože<br />

zvyšují-li se výrobní dávky, narůstá i úroveň zásob rozpracované výroby, tedy náklady<br />

na udržování zásob.<br />

Mění-li se velikosti výrobní dávky v rámci jednotlivých period, mluví se o<br />

takzvané dynamické výrobní dávce. Pokud je ale velikost výrobní dávky neměnná<br />

(konstantní), nazývá se tato výrobní dávka časově invariantní. Předpokládá se u ní<br />

nekonečný plánovací horizont.<br />

U optimalizace výrobních dávek je obvykle základním kritériem výše nákladů,<br />

které je možno ovlivnit právě velikostí dávek. Pokud se čtenář vrátí o kousek zpět, bude<br />

zřejmé, že tyto náklady jsou sestaveny z nákladů seřizovacích, které jsou vlastně<br />

náklady spojenými s přípravou výroby dané dávky, a zásobovacích nákladů (náklady na<br />

udržování zásob). Výrobní dávka je tehdy optimální, když zaručí minimální<br />

ovlivnitelné náklady.<br />

Pokud jde o klasifikaci modelů rozvrhování výroby, pak jedno z hledisek může<br />

být struktura výrobního systému, která je reprezentovatelná jako souvislý graf<br />

s orientovanými hranami. Přičemž vrcholy grafu V znázorňují jednotlivé výrobní<br />

stupně, což jsou vlastně pracoviště, kde se provádí výroba, a hrany H, které slouží<br />

k přenosu hmotných toků mezi výrobními stupni. Posloupnost vrcholů a hran v 0 , h 1 , v 1 ,<br />

..., h n , v n taková, že hrana e i pro i=1, 2, ... má koncové vrcholy v i-1 , v i , se nazývá sled.<br />

Tahem se pak rozumí sled, kde se žádná hrana nevyskytuje víc než jednou a cesta je<br />

chápána jako sled, kde se žádný vrchol nevyskytuje víc než jednou. Cyklus se nazývá<br />

cesta, ve které je první vrchol stejný jako vrchol výchozí. Bavíme-li se o grafu<br />

neorientovaném, je pojem cyklus nahrazen pojmem kružnice. Graf neobsahující cyklus


Strana<br />

16<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

pojmenujeme grafem acyklickým. Pokud je takový graf zároveň i souvislý, mluví se o<br />

grafu se stromovou strukturou.<br />

Pokud by se uvažovaly jednotlivé struktury podle složitosti, pak by byl zřejmě<br />

jako nejjednodušší případ zvolen jednostupňový model.<br />

Vícestupňový model v nejjednodušším sestavení je systém sériový, kde jednotlivé<br />

výrobní stupně následují jeden druhý v sérii. Podrobnější popis problému je k naleznutí<br />

v pracech [2] a [7].<br />

F 1 F 2 F 3 F 4<br />

Obr. 1 Sériová struktura výrobně-montážního systému.<br />

Má-li výrobně-montážní systém takovou strukturu, že každý stupeň má nanejvýš<br />

jednoho následníka, ale jednoho nebo více předchůdců, definujeme tento systém jako<br />

desarborescentní. Z obr. 2 je zřejmé, že tato struktura má několik vstupních stupňů a<br />

jeden stupeň výstupní. Viz. [5] a [7].<br />

F 1<br />

F 4<br />

F 6 F 7<br />

F 2<br />

F 5<br />

F 3<br />

Obr. 2 Desarborescentní struktura výrobního systému.<br />

Čtenáři je zajisté jasné, že existuje i opačný případ, tedy rozvětvující se struktura<br />

(tzv. arborescentní sktruktura), která na každém stupni má nanejvýš jednoho<br />

předchůdce, ale naopak zase může mít každý stupeň více následníků. Více možných<br />

následníků implikuje fakt, že arborescentní struktura může končit více výstupními<br />

stupni (viz. obr. 3). Bližší popis čtenář nalezne v [3].


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

17<br />

F 1<br />

F 2<br />

F 4 F 7<br />

F 5 F 8<br />

F 3<br />

F 6<br />

F 9<br />

Obr. 3 Arborescentní struktura výrobně-distribučního systému.<br />

Už složitější případ je obecná struktura, kde stupně mohou mít více předchůdců i<br />

následníků, která je zobrazena na následujícím obrázku a popsána v [4]. U obecné<br />

struktury je možné mít více vstupů i výstupů.<br />

F 1<br />

F 2<br />

F 3<br />

F 6<br />

F 8 F 10 F 13<br />

F 5 F 7<br />

F 9<br />

F 11<br />

F 12<br />

F 4<br />

Obr. 4. Obecná struktura výrobně-montážního systému bez kružnic.<br />

Hlavním předmětem zkoumání této práce je ale struktura síťová. V této struktuře<br />

se mohou vyskytovat jak kružnice, tak i jejich shluky. Shluk obsahuje alespoň dvě<br />

kružnice, které mají společný alespoň jeden vrchol. Kružnice a shluky bude nutno<br />

detekovat a případně je pak agregovat do jednotlivých uzlů. Počet vstupů i výstupů


Strana<br />

18<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

může být – stejně jako u obecné struktury – více než jeden. Výrobní stupně mohou být<br />

předcházeny a následovány stupni s počtem vyšším než 1.<br />

F 14<br />

F 1<br />

F 5 F 8 F 11<br />

F 2<br />

F 3<br />

F 6<br />

F 7<br />

F 9<br />

F 10<br />

F 12<br />

F 13<br />

F 15<br />

F 16<br />

F 4<br />

Obr. 5 Síťová struktura výrobně-montážního systému s kružnicemi a shlukem.<br />

Doposud se problematice optimalizace výrobních dávek v systémech<br />

s arborescentní, desarborescentní a obecnou strukturou bez kružnic věnovali ve svých<br />

diplomových pracích T. Crhák a J. Adam. Konkrétně se jedná o práce [5] a [6], které<br />

byly použity jako podklady pro tuto práci, spolu s existujícím zdrojovým kódem<br />

aplikace OVD.<br />

V práci Crhák, T. Optimalizace výrobních dávek se autor zabýval<br />

desarborescentní strukturou výrobního systému. J. Adam se zaměřil na řešení<br />

Optimalizace výrobních dávek v periodické výrobě se strukturou bez kružnic.<br />

2.1 Systém s desarborescentní strukturou<br />

Jak již bylo řečeno dříve, v systému se světvující se strukturou (tzv.<br />

desarborescentní) může každý stupeň—s výjimkou výstupního—mít více předchůdců,<br />

ale pouze jednoho následníka.<br />

2.1.1 Struktura výrobního systému<br />

Je dán výrobně montážní systém s N stupni očíslovanými od 1 do N. Výrobní<br />

systém se skládá z výrobních stupňů F 1 , F 2 , ..., F N-1 (N ≥ 2), kde každý stupeň je<br />

samostatnou výrobní jednotkou F i (i = 1, 2, ..., N-1) schopnou provádět jen jediný


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

19<br />

specializovaný výrobně-montážní úkon, závislý na technologii výroby. Do stupně<br />

označeného F i přicházejí prvotní vstupy (např. materiál, polotovary, nebo suroviny)<br />

nebo výstupy ze všech bezprostředních předchůdců F j (j ∈ {1, 2, …, N-1}, j ≠ i) stupně<br />

F i . Bezprostřední předchůdce stupně F i , tedy stupně F j , se budou dále nazývat<br />

predecesory. Množina b(i) nechť je pak množinou indexů všech predecesorů stupně F i .<br />

Platí-li b(i) = ∅, stupeň F i nemá predecesory a vstupy jsou prvotní. Výstup z F i slouží<br />

podle předepsaného technologického postupu jako vstup do stupně F k (k ∈ {1, 2, …,<br />

N}, k ≠ i), který se nazývá sukcesor stupně F i . Každý výrobní stupeň má právě jeden<br />

sukcesor. Index sukcesoru F i se v této práci bude značit jako a(i).<br />

Stupeň F N slouží jen k výstupu výrobku ze systému.<br />

S konstantní rychlostí y N (0 < y N < ∝) je finální výrobek odebírán ze stupně F N .<br />

Je-li stupeň F i (i = 1, 2, ..., N-1) v akci, pracuje s konečnou konstantní výrobní rychlostí<br />

y i (y N ≤ y i < ∝), která se vyjadřuje v ekvivalentech jednotky finálního výrobku za<br />

jednotku času. Výroba na stupni F i (i = 1, 2, ..., N-1) probíhá periodicky v opakujících<br />

se výrobních dávkách, přičemž průměrná výrobní rychlost stupně F i za jednu periodu<br />

výrobního procesu (doba prostoje je také započítána) je rovna rychlosti na výstupu y N .<br />

Pozn. 1 Předpokládá se i nadále, že číslování stupňů F i je i = 1, 2, ..., N-1 a platí<br />

pro něj<br />

( )<br />

i < a i . (1)<br />

Stupeň F i (i = 1, 2, ..., N-1) lze tedy definovat jen tehdy, když jeho všechny nejen<br />

bezprostřední predecesory byly již definovány.<br />

Def. 1 Množina R N je definována jako množina všech vektorů x N = [x1, x2, ..., x N ]<br />

takových, že pro dané a i , b i , ∆ (0 < a i < a i < ∝, 0 < ∆ < b i – a i , ∆ je celočíselné), platí<br />

{ } ( )<br />

x ∈ X = a , b ∩ ∆, 2 ∆,3 ∆ ,... i = 1, 2,..., N (2)<br />

i i i<br />

kde pak<br />

přičemž je<br />

xa( i) = Kixi<br />

( i = 1,2,..., N ),<br />

(3)<br />

K ∈ S ∩ P (4)<br />

i<br />

i<br />

⎧ 1 1 1 ⎫<br />

S = ⎨1, 2,3,...; , , ,... ⎬<br />

(5)<br />

⎩ 2 3 4 ⎭


Strana<br />

20<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

a = ( 0, ∞ ) ( = 1,2,..., − 2 ), = { 1}<br />

P i N P .<br />

i<br />

N −1<br />

Vektor x N ∈ R N se bude nadále nazývat přípustnou strategií výrobních dávek.<br />

Pozn. 2 a i je minimální, b i maximální a ∆ je elementární výrobní dávka (dáno<br />

technologií výroby).<br />

2.1.2 Popis výroby výrobními funkcemi<br />

Průběh výrobního procesu na jednotlivých stupních je popsán pomocí výrobních<br />

funkcí V i (t) (i = 1, 2, ..., N).<br />

Def. 2 Pro každé x N = [x1, x2, ..., x N ] ∈ R N , t ∈ (-∝, +∝) se definuje posloupnost<br />

funkcí { i }<br />

i 1<br />

V ( t ) N<br />

vztahem<br />

=<br />

yN<br />

kde pak pi = ( t + τ<br />

i<br />

) , ⎢⎣<br />

pi<br />

⎥⎦<br />

x<br />

znamená začátek aktivity stupně i.<br />

⎧⎪<br />

⎛ ⎢ x ⎥ ⎞⎫<br />

i ⎪<br />

Vi ( t) = ⎢⎣ pi ⎥⎦ xi + min ⎨xi , t − ⎢ p + τ ⎥<br />

⎬,<br />

⎜<br />

i i<br />

yi<br />

⎟<br />

⎪⎩<br />

⎝ ⎣ zi<br />

⎦ ⎠⎪⎭<br />

i<br />

(6)<br />

je největší celé číslo menší nebo rovné p i , -τ i<br />

V i (t) jsou definovány tak, aby byly splněny následující podmínky:<br />

• v průběhu časového intervalu t, t + a pro a ≥ 0, t ∈ (-∝, +∝) vystoupí ze<br />

stupně F i (i = 1, 2, ..., N-1) tolik finálního výrobku (komponenty) jako<br />

i<br />

( ) - ( )<br />

V t + a V t ,<br />

i<br />

• v čase t je v meziskladu za stupněm F i (i = 1, 2, ..., N-1) množství<br />

i<br />

( ) - ( )<br />

V t V t konečného výrobku, popřípadě jeho komponenty.<br />

a( i)<br />

Pro lepší představu je výrobní funkce vykreslena na obr. 6.<br />

Obr. 6 Průběh výrobní funkce V i (t)


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

21<br />

Pozn. 3 Funkce V i (t) – V a(i) (t), která definuje velikost zásoby za stupněm F i (i = 1,<br />

2, ..., N-1), se opakuje s periodou<br />

1<br />

T = max { x , x<br />

( )}<br />

.<br />

y<br />

i i a i<br />

N<br />

Perioda zásoby T za každým stupněm F i (i = 1, 2, ..., N-1) je pak dána<br />

(7)<br />

T = 1 max { x , ,..., 1<br />

x2<br />

x } . N<br />

(8)<br />

y<br />

N<br />

2.1.3 Náklady na výrobní proces<br />

Pro začátek výroby každé výrobní dávky na stupni F i je třeba vynaložit seřizovací<br />

náklady C 1i . Přítomnost jednoho ekvivalentu jednotky finálního výrobku v meziskladu<br />

za stupněm F i po dobu jednotky času žádá o vynaložení skladovacích nákladů C 2i .<br />

Předpokládejme, že C 1i a C 2i jsou danými konečnými konstantami, kdy<br />

a<br />

1i<br />

≥ 0<br />

C (9)<br />

( )<br />

C2 a( i) ≥ C2i<br />

≥ 0 i = 1,2,..., N −1 .<br />

(10)<br />

2.1.4 Formulace problému optimalizace výrobních dávek<br />

Optimální strategie výrobních dávek pro uvažovaný výrobně-montážní proces<br />

nalezneme řešením<br />

min F<br />

xN<br />

∈RN<br />

( )<br />

x (11)<br />

s kriteriální funkcí<br />

N −1<br />

t+<br />

T<br />

⎡ y<br />

⎤<br />

2<br />

( ) = ∑ ⎢ 1<br />

+ ∫ i<br />

N<br />

C<br />

i<br />

F x N<br />

C<br />

i ( Vi ( τ ) −Va ( i)<br />

( τ ))<br />

dτ<br />

⎥.<br />

i=<br />

1 ⎢⎣<br />

xi T<br />

(12)<br />

i t<br />

⎥⎦<br />

Minimalizaci střední hodnoty ovlivnitelných nákladů, vztažené na jednotku času,<br />

pomocí volby výrobních dávek, nalezneme v (11). Jako optimální hodnotu těchto<br />

nákladů označíme E:<br />

E = min F<br />

xN<br />

∈RN<br />

N<br />

( x )<br />

Ke zjednodušení (12) zavedením funkce G i (x i , x a(i) ) pro x i , x a(i) ∈(0, ∝), i = 1, 2, ...,<br />

N–1 tak, že<br />

C1<br />

( ( ) ) = i +<br />

2<br />

+<br />

( ) ( )<br />

−<br />

a i a i a i a( i)<br />

N<br />

( { })<br />

Gi xi , x C<br />

i<br />

Bi xi B x M<br />

i.min xi<br />

, x ,<br />

x<br />

i<br />

(13)


Strana<br />

22<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

kde<br />

1 ⎛ 1 1 ⎞<br />

Bi<br />

= ⎜ − ⎟ ,<br />

(14)<br />

2 ⎝ yN<br />

yi<br />

⎠<br />

{ ( )}<br />

M = 2min B , B .<br />

(15)<br />

i i a i<br />

Střední hodnotu seřizovacích a skladovacích nákladů vztaženou na jednotku času<br />

( )<br />

pro stupeň F i (i = 1, 2, ..., N-1) odvodíme jako yNGi xi , x<br />

a( i)<br />

. Kriteriální funkce (11) je<br />

( )<br />

−1<br />

= ∑ N<br />

F x y G x , x .<br />

(16)<br />

( N ) N i i a( i)<br />

Kriteriální funkce ve tvaru (12) umožní nalezení metody řešení ve větě 1.<br />

i=<br />

1<br />

Věta 1 Mějme E jako minimální hodnotu funkce F(x N ) pro x N ∈ R N a F(x N ) danou<br />

vztahem dle (16). Potom bude platit, že<br />

( )<br />

E = y min Φ x ,<br />

(17)<br />

N N N<br />

xN<br />

∈X<br />

kde jsou funkce Φ i (x i ) (i = 1, 2, ..., N; x i ∈ X) definovány rekurentně podle<br />

kdy<br />

( x )<br />

∑<br />

j i i<br />

( ) ( )<br />

( ) ⎣ j i j j j i<br />

( ( ) )<br />

⎧ min ⎡h x , k + Φ k x ⎤ ≠ ∅<br />

⎪ k ∈s x<br />

⎦<br />

b i<br />

Φ =<br />

j∈b ( i)<br />

i i ⎨<br />

⎪ b i = ∅<br />

( ( ) )<br />

⎩<br />

0 ,<br />

( ( )), ( , ) ( , )<br />

j<br />

j j i j j j i i<br />

xi<br />

(18)<br />

x<br />

k = i = a j h x k = G k x x<br />

(19)<br />

za Q i dosadíme<br />

Q<br />

a ⎧ 2 3 ⎫<br />

i<br />

bi<br />

∆ ∆ ∆<br />

si ( xi ) = S ∩Qi<br />

∩ ; ∩ ⎨ , , ,... ⎬,<br />

(20)<br />

xi xi ⎩ xi xi xi<br />

⎭<br />

i<br />

{ 1 } ( i N )<br />

( 0, ∞) ( i ≠ N )<br />

⎪⎧ =<br />

= ⎨<br />

⎪⎩<br />

a za S viz (5) a za G j (x j , x i ) podle (13).<br />

2.1.5 Výpočet přesného řešení<br />

Obecné řešení problému (11) dynamickým programováním popsala věta 1.<br />

Výpočet bude probíhat tak, že se pro i = 1, 2, ..., N a každé x i ∈ X řeší rovnice(18).<br />

0<br />

Vytváří se tabulka hodnot Φ i (x i ) a také tabulky optimálních hodnot ( )<br />

k x (j ∈ b(i)),<br />

j<br />

i


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

23<br />

kdy b i ≠ ∅. E a<br />

0<br />

x<br />

N<br />

se spočtou podle(17). Pro i = N – 1, N – 2, ..., 1 jsou další optimální<br />

( ) ( )<br />

0 0 0 0<br />

výrobní dávky xi = ki x<br />

( )<br />

. x .<br />

a i a i<br />

2.1.6 Dolní hranice optimálních nákladů<br />

Dolní hranice optimálních nákladů se počítá tím způsobem, že modely (17) a (18)<br />

se řeší na spojitém oboru—intervaly nahradí diskrétní množiny stavových a<br />

rozhodovacích proměnných (viz [7]).<br />

K usnadnění zápisu vzorců jsou zavedeny pomocné veličiny. Nejdříve je pro i =<br />

1, 2, ...,N – 1 definováno<br />

α<br />

β<br />

( 1) ( 2)<br />

i<br />

= C2iBi , αi = C2i ( Bi − 2 min { Bi , B<br />

( )}),<br />

a i<br />

( 1)<br />

( 2)<br />

i<br />

= C2i ( Ba( i) − { Bi Ba( i)<br />

}) βi = C2iBa( i)<br />

2 min , , .<br />

Dolní hranici optimálních nákladů definuje následujícího vztah<br />

( 1) ( 1)<br />

( − − )<br />

E y A B (21)<br />

.<br />

D<br />

=<br />

N N 1<br />

+<br />

N 1<br />

Počítá se pro i = 1, 2, ..., N–1; v ∈ {1, 2} a minimalizuje funkce ϑ i (v) (x) a počítá se<br />

Dále platí, že<br />

( ) ( )<br />

( )<br />

( )<br />

v v v v v<br />

i i i i i<br />

x∈[ ai , bi ]<br />

x∈[ ai , bi<br />

]<br />

( )<br />

( )<br />

( )<br />

A + B = min ϑ x a γ = arg min ϑ x . (22)<br />

( v)<br />

( v)<br />

ξi<br />

( v) ( v<br />

A = + η γ<br />

) i<br />

,<br />

( v)<br />

i i<br />

(23)<br />

γ<br />

i<br />

γ<br />

( )<br />

⎧ ⎛ ( v)<br />

ξ<br />

⎞<br />

⎪ ⎜<br />

i<br />

( v)<br />

a<br />

< ∧ η > 0⎟<br />

i<br />

a<br />

( v)<br />

i i<br />

⎪ ⎜ η<br />

⎟<br />

⎝<br />

i<br />

⎪<br />

⎠<br />

( v)<br />

( )<br />

ξ ⎛ v<br />

⎪<br />

ξ ⎞<br />

= ⎨ ⎜ a ≤ ≤ b ⎟<br />

( v)<br />

( v)<br />

⎪ η ⎜ η ⎟<br />

i ⎝ i ⎠<br />

⎪<br />

⎛<br />

( v<br />

⎪<br />

)<br />

ξ<br />

⎞<br />

i<br />

⎜<br />

( v)<br />

⎪b<br />

< ∨η<br />

≤ 0 ⎟<br />

i<br />

bi .<br />

⎜<br />

( v)<br />

i<br />

⎪ η<br />

⎟<br />

⎩ ⎝<br />

i<br />

⎠<br />

v i i<br />

i i i<br />

(24)<br />

Nyní se definuje množina na i = 1, 2, ..., N – 1<br />

( v)<br />

( 1) ( 2)<br />

( 1) ( 2)<br />

{ γ ( ) { } γ γ } γ γ γ γ<br />

j∈b i<br />

Γ<br />

i<br />

= { ai , bi } ∪<br />

j<br />

j ∈b i ∧ v ∈ 1, 2 ∧<br />

j<br />

≠<br />

j<br />

∪ ∪ ∈Γ<br />

j j<br />

< <<br />

j<br />

, (25)<br />

kde Γ i = {γ i,0 , γ i,1 , ..., γ i,m(i) + 1 } a γ i,r < γ i,r + 1 .<br />

Pro x ∈ 〈γ i,r , γ i,r + 1 〉 a r = 0, 1, ..., n(i) se vyjádří<br />

( ){ }


Strana<br />

24<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

kde ( ) = Γ − 2<br />

n i .<br />

i<br />

( v ) ξi,<br />

r ( v)<br />

ϑ<br />

i ( x) = + µ<br />

i, r<br />

x + Bi , r<br />

,<br />

x<br />

Koeficienty ξ i , r<br />

,<br />

( )<br />

η v<br />

, i,<br />

r i,<br />

r<br />

B se zjišťují podle [7].<br />

V [7] byla dokázána spojitost a konvexnost funkce ϑ (v) i (x) v intervalu 〈a i , b i 〉,<br />

proto také tato funkce zde nabývá minima. Minimum se objevuje buď v bodě, nebo na<br />

subintervalu x ∈ 〈γ i,r , γ i,r + 1 〉.<br />

Optimální strategie stavových a rozhodovacích proměnných ( * * *<br />

1<br />

,<br />

2,..., N )<br />

se týkají dolní hranice E D , se určí tak, že<br />

kam se dosadí<br />

( 1)<br />

* * * * * *<br />

N N −1 N −1 i i a i a i<br />

( ( ) ) ( ) ( )<br />

x x x , které<br />

x = x = γ , x = k x x i = N − 2, N − 3,...,1 , (26)<br />

( 1)<br />

( 1)<br />

( x<br />

( )<br />

< γ<br />

a i i )<br />

⎧ γ<br />

i<br />

⎪<br />

⎪ xa( i)<br />

⎪<br />

k ( x<br />

( ) ) = 1<br />

≤ x <<br />

a i<br />

⎪<br />

( 2)<br />

⎪γ<br />

i<br />

( 2)<br />

⎪ ( γ<br />

i<br />

≤ x<br />

( ) ).<br />

a i<br />

x<br />

⎩ a( i)<br />

( 1)<br />

( 2)<br />

( γ<br />

( )<br />

γ<br />

a i )<br />

* *<br />

i ⎨<br />

i i<br />

2.1.7 Horní hranice optimálních nákladů<br />

Horní hranice optimálních nákladů byla určena jednoduchým přístupem<br />

s předpokladem, že horní hranice E H vychází ze vztahu<br />

*<br />

x∈X<br />

( )<br />

E ≤ E = min Φ x ,<br />

kde funkci Φ(x) definujeme tak, že<br />

⎛ ξ ⎞<br />

Φ ( x) = yN<br />

⎜ + η x⎟<br />

⎝ x ⎠ ,<br />

kde<br />

H<br />

(27)<br />

a<br />

N −1<br />

ξ = ∑ C<br />

i=<br />

1<br />

1i<br />

Množina X * se vypočte podle vztahu<br />

N −1<br />

∑ C2i Bi Ba( i)<br />

.<br />

η = −<br />

i=<br />

1


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

25<br />

X<br />

*<br />

⎧⎢ γ ⎥ ⎛ ⎢ γ ⎥ ⎞ ⎫<br />

= ⎨⎢ ⎥ ∆ , ⎜ ⎢ ⎥ + 1 ⎟ ∆⎬<br />

∩ ai<br />

, bi<br />

⎩⎣ ∆ ⎦ ⎝ ⎣ ∆ ⎦ ⎠ ⎭<br />

.<br />

2.1.8 Heuristická metoda řešení problému<br />

Těžiště této heuristické metody spočívá v nahrazení množin s(i) z (20), použitých<br />

∗<br />

v rekurentním vztahu (18), redukovanými množinami<br />

j ( i ) ( ∈ ( ) ≠ ∅)<br />

počet rozhodovacích proměnných.<br />

kam se dosadí<br />

s x j b i — omezí se<br />

⎧ ( 1)<br />

{ 1, u<br />

j ( xi ), u<br />

j ( xi ) + 1} ∩ si ( xi ) ( xi < γ<br />

j )<br />

⎪<br />

∗ ⎪<br />

( 1) ( 2)<br />

j ( i ) = ⎨{ 1}<br />

( γ<br />

j<br />

≤<br />

i<br />

< γ<br />

j )<br />

s x x<br />

⎪<br />

( 2)<br />

⎪{ ν<br />

j ( xi ), wj ( xi ),1} ( γ<br />

j<br />

≤ xi<br />

),<br />

⎩<br />

ν<br />

( i)<br />

( ) ⎢γ<br />

u x = ⎥ ⎣<br />

x ⎦<br />

,<br />

j i j i<br />

( 2)<br />

j ( xi ) = max { k<br />

j<br />

∈ si ( xi ) k<br />

j<br />

< γ<br />

j<br />

xi}<br />

,<br />

( 2)<br />

j ( i ) = min { j<br />

∈<br />

i ( i ) j<br />

≥ γ<br />

j i}<br />

.<br />

w x k s x k x<br />

( )<br />

( )<br />

ν<br />

Vztah (20) určí množinu s i (x i ) a veličiny γ<br />

j<br />

j = 1, 2, ..., N − 1; ν = 1, 2 vycházejí<br />

ze zápisu (24).<br />

∗<br />

Časová redukce spočívá v omezení počtu prvků množiny s ( x )<br />

j<br />

i<br />

(28)<br />

(29)<br />

na maximálně tři<br />

prvky. Výsledkem je E HM (výrobní náklady jako řešení (11) heuristickou metodou).<br />

2.2 Systém se strukturou bez kružnic<br />

V této podkapitole je uvažován výrobně-montážní systém s více stupni, kde každý<br />

ze stupňů může mít několik bezprostředních predecesorů a několik bezprostředních<br />

sukcesorů. Celý systém může obsahovat více vstupů i výstupů. Po zanedbání orientace<br />

hran struktura systému neobsahuje kružnice.<br />

2.2.1 Struktura výrobního systému<br />

Bude se uvažovat N-stupňový výrobní systém se stupni očíslovanými od 1 do N<br />

podle obr. 4. Tedy:<br />

a(i) = množina bezprostředních sukcesorů stupně i, i = 1, 2, ... , N;<br />

b(i) = množina bezprostředních predecesorů stupně i, i = 1, 2, ... , N; Je-li<br />

a( i ) = ∅ , mělo by platit |b(i)| = 1.


Strana<br />

26<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

a(i) = ∅;<br />

C 1 ,i = pevné seřizovací náklady na stupni i, i = 1, 2, ... , N; C<br />

1,i<br />

= 0 pro a(i) = ∅;<br />

C<br />

2,i<br />

= skladovací náklady za jednotku času na stupni i, i = 1, 2, ... , N; C<br />

2,i<br />

e i , j<br />

= 0 pro<br />

= ekvivalent jednotky komponenty j-tého stupně, j ∈ a(i) (je to počet jednotek<br />

i-té komponenty vstupujících do jedné jednotky j-té komponenty);<br />

z i = rychlost odběru ze stupně i když a(i) = ∅; průměrná výrobní rychlost na<br />

stupni i, když a(i) ≠ ∅,<br />

y<br />

i<br />

≥<br />

z = ∑ e z ;<br />

i i,<br />

j j<br />

j∈a i<br />

( )<br />

y<br />

i<br />

= výrobní rychlost na stupni i, když stupeň i je aktivní; y<br />

i<br />

= z i pro a(i) = ∅;<br />

z<br />

i<br />

pro a(i) ≠ ∅;<br />

x<br />

i<br />

= výrobní dávka na stupni i, i = 1, 2, ... , N; x<br />

i<br />

∈ [ a i<br />

, b<br />

i<br />

], kde a<br />

i<br />

, b<br />

i<br />

jsou dané<br />

meze výrobní dávky na stupni i (0 < a<br />

i<br />

< b i<br />

< ∞);<br />

[ ]{ }<br />

x ∈ a , b z , 2 z , ... .<br />

(30)<br />

i i i i i<br />

Struktura výrobního systému může být vyjádřena orientovaným acyklickým<br />

<br />

= ,<br />

V = 1,2,..., N , a W představuje<br />

grafem G ( V W ) , kde je V množinou stupňů, { }<br />

množinu orientovaných hran ⊂ ×<br />

{ }<br />

W V V , W ( i, j) i V , j a ( i)<br />

= ∈ ∈ .<br />

Hrana (i, j) existuje jen tehdy, když stupeň i zásobuje stupeň j. Stupně jsou<br />

očíslovány tak, že pro každou hranu ( i j)<br />

, ∈W platí i > j. Dále se předpokládá, že<br />

výstupy ze systému jsou číslovány 1,...,m . Neorientovaný graf G neobsahuje kružnice.<br />

2.2.2 Popis výroby výrobními funkcemi<br />

Funkce V i (t) charakterizuje všechny stupně v systému pro t ∈ (−∞, +∞). Pro<br />

výstupy i = 1, ... , m funkce V i (t) představuje kumulovanou poptávku<br />

( ) ( )<br />

V t = z t − τ .<br />

i i i<br />

Ve vztahu k ostatním stupňům funkce V i (t) vyjadřuje kumulovanou výrobu a platí,<br />

že<br />

kde<br />

⎧⎪<br />

⎛ x ⎞ ⎫<br />

i ⎪<br />

Vi ( t) = ⎢⎣ pi ⎥⎦ xi + min ⎨xi , ⎜t − ⎢⎣ pi ⎥⎦<br />

−τ<br />

i ⎟ yi<br />

⎬,<br />

⎪⎩<br />

⎝ zi<br />

⎠ ⎪⎭<br />

( τ )<br />

p = t − z x ,<br />

i i i i


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

27<br />

τ i označuje bod na časové ose, pro které je V i (τ i ) = 0. Pro všechna (i, j) ∈ W a<br />

všechna t musí platit, že V i (t) ≥ V j (t).<br />

Kooperace stupně i s jeho bezprostředními sukcesory j ∈ a(i) se modeluje tak,<br />

jakoby byl stupeň i složen z ⎪a(i)⎪ paralelně pracujících podstupňů. Nechť x i,j je<br />

výrobní dávka na j-tém podstupni stupně i určená pro stupeň j ∈ a(i). Platí<br />

e z e x z x ⎧ 1 1 ⎫<br />

xi,<br />

j<br />

= x , = ∈ S = ⎨1, 2, ...; , , ... ⎬<br />

⎩ 2 3 ⎭ .<br />

i, j j i,<br />

j j i j<br />

i<br />

zi xi,<br />

j<br />

z<br />

j<br />

xi<br />

Předpokládá se, že stupeň i začíná činnost s minimálním předstihem oproti stupni<br />

j ∈ a(i) (tento předstih je určen pouze stupni i a j a je roven τ<br />

j<br />

− τ<br />

i<br />

). Symbol V i,j (t) bude<br />

značit kumulovanou výrobu j-tého podstupně stupně i. Pak<br />

e z<br />

V t V t<br />

,<br />

( ) = i j j<br />

( )<br />

i, j<br />

i<br />

.<br />

zi<br />

V čase t je množství i-té komponenty ve skladu na hraně (i, j) rovno<br />

Vi, j ( t)<br />

− ei,<br />

jV<br />

j ( t)<br />

. Funkce Vi, j ( t)<br />

− ei,<br />

jV<br />

j ( t)<br />

je periodická s periodou<br />

2.2.3 Náklady na výrobní proces<br />

1<br />

⎧⎪<br />

x x ⎫<br />

i j ⎪<br />

Ti , j<br />

= max { xi, j<br />

, ei , j<br />

x<br />

j}<br />

= max ⎨ , ⎬ .<br />

ei , j<br />

z<br />

j ⎪⎩<br />

zi z<br />

j ⎪⎭<br />

Průměrné skladovací náklady na hraně (i, j) za jednotku času určuje funkce<br />

t+<br />

T i j<br />

C<br />

g x x = V τ − e V τ dτ<br />

=<br />

,<br />

2, i<br />

( , ) ∫ ( ( ) ( ))<br />

i, j i j i, j i,<br />

j j<br />

Ti , j t<br />

( { } { })<br />

= C e z B x + B x − 2 min B z , B z min x / z , x / z ,<br />

2, i i,<br />

j j i i j j i i j j i i j j<br />

(31)<br />

kde<br />

1 ⎛ 1 1 ⎞ 1 ⎛ 1 1 ⎞<br />

Bi<br />

= ⎜ − ⎟,<br />

Bj<br />

= −<br />

.<br />

2 zi yi 2 ⎜ z<br />

j<br />

y ⎟<br />

⎝ ⎠ ⎝ j ⎠<br />

Průměrné seřizovací náklady na i-tém stupni za jednotku času určuje výraz<br />

C z<br />

1,i i<br />

x<br />

i<br />

(32)<br />

2.2.4 Formulace problému optimalizace výrobních dávek<br />

problému<br />

Optimální strategie výrobních dávek se dosáhne řešením minimalizačního


Strana<br />

28<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

s podmínkami<br />

C z<br />

F x x x g x x<br />

x<br />

N<br />

1, i i<br />

( 1, 2<br />

, ...,<br />

N ) = ∑ + ∑ i,<br />

j ( i,<br />

j )<br />

i= 1 i ( i,<br />

j)<br />

∈W<br />

[ ] { }<br />

(33)<br />

x ∈ a , b ∩ z ,2 z ,... i = 1,..., N , (34)<br />

i i i i i<br />

kde<br />

S<br />

z<br />

jxi<br />

∈ S ∩ H<br />

j ( i,<br />

j)<br />

∈W<br />

, (35)<br />

z x<br />

i<br />

j<br />

( )<br />

( )<br />

( 0, ) a( j)<br />

{ } a ( i)<br />

⎧ 1 1 ⎫<br />

⎧<br />

⎪ ∞ ≠ ∅<br />

= ⎨1, 2, ...; , , ... ⎬,<br />

H<br />

j<br />

= ⎨<br />

.<br />

⎩ 2 3 ⎭ ⎪⎩<br />

1 = ∅<br />

2.2.5 Výpočet přesného řešení<br />

Graf struktury systému neobsahuje kružnice a je tudíž možno stupně přečíslovat a<br />

uspořádat do stromové výpočetní struktury, ve které každý stupeň s výjimkou<br />

posledního má právě jeden bezprostřední sukcesor. Jeho nové číslo je větší nebo rovné<br />

číslu tohoto stupně. Nechť je n(i) novým číslem stupně i, pak bude ã ( i)<br />

sukcesor<br />

stupně i a b̃ ( i)<br />

bude množina predecesorů stupně i v novém uspořádání.<br />

Nové uspořádání má následující vlastnosti:<br />

• pro stupeň s číslem n(i) = N je a(i) = ∅; ã ( i)<br />

není definováno,<br />

b̃ ( i)<br />

= b(i) a pro j ∈ b̃ ( i)<br />

je ã ( j)<br />

= i;<br />

• pro stupeň s číslem n(i) < N musí být n(i) < n( ã ( i)<br />

);<br />

b̃ ( i)<br />

= b(i) ∪ a(i) − { ã ( i)<br />

} a pro j ∈ b̃ ( i)<br />

je ã ( j)<br />

= i.<br />

Nechť je nová proměnná x′ = x / z , i = 1,..., N reprezentací periody stupně i.<br />

i i i<br />

Bellmanovým principem optimality lze daný problém (33) – (35) transformovat do<br />

( ′ )<br />

min Φ x ,<br />

′ ∈ ⎡ ′,<br />

′ ⎤<br />

i i<br />

x a b<br />

i ⎣ i i ⎦<br />

kde n(i) = N a funkce Φ ( x′ ) pro n(i) = N, N−1, ... , 1 jsou dány soustavou<br />

rekurentních rovnic<br />

( x′<br />

)<br />

i<br />

i<br />

( )<br />

⎧<br />

min<br />

⎡<br />

,<br />

⎤<br />

⎪<br />

+ Φ ≠ ∅<br />

k ∈s x ⎣ ⎦<br />

( ′ ) ( ′) ( )<br />

( ′) ⎢h ̃<br />

j<br />

xi k<br />

j j<br />

k<br />

j<br />

x<br />

i ⎥ b i<br />

j j<br />

Φ = j∈b ⎨<br />

( i)<br />

i<br />

i i<br />

⎪ b̃<br />

i = ∅<br />

⎩<br />

∑̃<br />

( ( ) )<br />

0 ,<br />

(36)<br />

(37)


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

29<br />

kde<br />

( )<br />

h<br />

⎧ C<br />

( ′,<br />

′) ( )<br />

1, j<br />

⎪<br />

j,<br />

i j j i i i<br />

⎪k ′<br />

j<br />

xi<br />

( ′<br />

j<br />

xi , k<br />

j ) = ⎨<br />

⎪ C1,<br />

j<br />

′ ′<br />

i,<br />

j i i j j i<br />

⎪ k ′<br />

j<br />

xi<br />

⎩<br />

+ g z k x z x i ∈ a j<br />

( ) ( )<br />

+ g z x , z k x i ∈b j ,<br />

s ′ ⎡ ′ / ′ , ′ / ′ ⎤ , ′ / ′, ′ / , ′<br />

j<br />

xi = S ∩ ⎣a j<br />

xi bj xi ⎦ k<br />

j<br />

= x<br />

j<br />

xi a<br />

j<br />

= a<br />

j<br />

z<br />

j<br />

bj = bj / z<br />

j.<br />

h x′ , k ) je střední hodnota seřizovacích a skladovacích nákladů na j-tém stupni.<br />

j ( i j<br />

Dvojí vyjádření této funkce reprezentuje případy, kdy se při transformaci struktury<br />

změnila nebo nezměnila orientace hrany (i, j).<br />

Problém (36) – (37) lze řešit enumerační metodou pro každý jednodimenzionální<br />

podproblém, když platí<br />

[ , ] ∩{ 1, 2,... }<br />

x′ ∈ a′ b ′<br />

i i i<br />

a ∆ > 0 je vhodná konstanta. Rovnice (37) se řeší sekvenčně pro n(i) = 1, 2, ..., N<br />

<br />

a odpovídající optimální hodnoty k ( x′ )<br />

j<br />

i<br />

se vkládají do tabulek. Řešením problému (36)<br />

se určí optimální náklady E a optimální perioda x′ i<br />

pro n(i) = N. Ostatní optimální<br />

periody pro n(i) = N – 1, N −2, ... , 1 se určí podle vzorce<br />

x′ k x′ x′<br />

<br />

i<br />

=<br />

i<br />

(<br />

ã ( i) )<br />

ã ( i)<br />

.<br />

2.2.6 Heuristické metody řešení problému<br />

Model dynamického programování pro případ výrobně-montážního systému s<br />

totožnou strukturou jako problém (36) − (37), je možno efektivně řešit také<br />

heuristickými metodami, které jsou založeny na užití vzorců pro výpočet dolní hranice<br />

optimálních nákladů.<br />

Řešením problému dynamického programování (36) − (37) lze určit dolní hranici<br />

E L optimálních nákladů E pro x′ ∈ [ a′ , b′<br />

] a k ∈ [ a′ / x′ , b′ / x′<br />

] .<br />

i i i<br />

j j i j i<br />

Analytické řešení tohoto problému bylo nalezeno za podmínek, že střední hodnota<br />

nákladů na stupni j se dá vyjádřit tvarem<br />

kde platí i = ã ( j)<br />

, C1, ≥ 0 a α<br />

Funkce hj ( xi , k<br />

j )<br />

C<br />

h ( x′ , k ) = + α k x′ + α − α min k ,1 x′ + β x′<br />

, (38)<br />

( ) { }<br />

1, j (1) (2) (1) (2)<br />

j i j j j i j j j i j i<br />

k<br />

j<br />

x′<br />

i<br />

j<br />

≥ α .<br />

(1) (2)<br />

j j<br />

′ jde vyjádřit ve tvaru (38), kde pro i a ( j)<br />

∈ jsou


Strana<br />

30<br />

ÚAI FSI VUT<br />

α<br />

β<br />

a pro i b( j)<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

, α<br />

( 2 min { , })<br />

( 2 min { , }),<br />

β<br />

= C e z B z = C e z B z − B z B z<br />

(1) (2)<br />

j 2, j j, i i j j j 2, j j,<br />

i i j j j j i i<br />

= C e z B z − B z B z = C e z B z<br />

(1) (2)<br />

j 2, j j, i i i i j j i i j 2, j j,<br />

i i i i<br />

∈ jsou<br />

α<br />

β<br />

, α<br />

( 2 min { , })<br />

( 2 min { , }),<br />

β<br />

.<br />

= C e z B z = C e z B z − B z B z<br />

(1) (2)<br />

j 2, i i, j j j j j 2, i i,<br />

j j j j i i j j<br />

= C e z B z − B z B z = C e z B z<br />

(1) (2)<br />

j 2, i i, j j i i i i j j j 2, i i,<br />

j j i i<br />

Uvedené podmínky splněny, a tedy že je možné použít vzorce pro výpočet dolní<br />

hranice, odvozené pro případ výrobně-montážního systému, a na nich založené<br />

heuristické metody HM1 a HM2.<br />

2.2.7 Transformace na světvující se strukturu<br />

Algoritmus transformace na světvující se strukturu a následný algoritmus<br />

přečíslování byl popsán v [6]. Pro lepší porozumění problému zde bude na příkladu<br />

(obr. 7) graficky znázorněno, jak dané algoritmy pracují v praxi. Transformace na<br />

světvující se strukturu umožňuje aplikaci výpočtu pomocí dynamického programování i<br />

na případ síťového výrobního systému, který po agregaci shluků neobsahuje kružnice.<br />

Jednotlivé kroky příkladu postupují „po řádcích“ a jsou okomentovány pod<br />

aktuálním obrázkem.


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

31<br />

1<br />

4<br />

7<br />

9<br />

1<br />

4<br />

7<br />

i 3<br />

9<br />

2<br />

5<br />

8<br />

10<br />

2<br />

5<br />

8<br />

10<br />

i 2<br />

i 1<br />

i 2<br />

3<br />

6<br />

11<br />

Nalezení stupně i 2 V N , kde existuje<br />

hrana (j, i 2 ) a j V O ; otočení hrany;<br />

vložení do V O ; odstranění z V N .<br />

i 1<br />

3<br />

6<br />

11<br />

Nalezení stupně i 3 V N , kde existuje<br />

hrana (j, i 3 ) a j V O ; otočení hrany;<br />

vložení do V O ; odstranění z V N vč.<br />

předchůdců.<br />

Obr 7. Grafické znázornění algoritmu transformace na světvující se strukturu a<br />

algoritmus přečíslování.<br />

2.3 Obecný (síťový) výrobní systém<br />

Náplní této práce je zkoumání vícevýrobkového vícestupňového výrobněmontážního<br />

systému se síťovou (obecnou) strukturou, kde každý stupeň (zařízení)<br />

může být zásobován několika bezprostředními předchůdci a jeho výstup může sloužit<br />

jako vstupy pro několik bezprostředních následníků.


Strana<br />

32<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

2.3.1 Struktura obecného výrobního systému<br />

obr 5.<br />

Uvažuje se N-stupňový výrobní systém se stupni očíslovanými od 1 do N podle<br />

Nechť<br />

A(i) = množina všech následníků stupně i;<br />

B(i) = množina všech předchůdců stupně i;<br />

Spolupráce stupně i s jeho bezprostředními následníky j a ( i)<br />

totožně jako v předcházející podkapitole. Definují se nové proměnné<br />

x′ = x / z , i = 1,..., N .<br />

i i i<br />

x′<br />

i<br />

je reprezentací periody stupně i. Platí ai xi bi<br />

Potom tedy Ti , j<br />

max { x′ i,<br />

x′<br />

j}<br />

′ < ′ < ′ , kde pak<br />

[ ] { }<br />

a′ = a / z , b′ = b / z , x′ ∈ a′ , b′<br />

∩ 1, 2, ... .<br />

i i i i i i i i i<br />

∈ je modelována<br />

= a pro celý proces je perioda { x′ x′ x′<br />

}<br />

Předpokládá se, že každý stupeň začne svoji aktivitu co nejdříve.<br />

max<br />

1, 2, ,<br />

N<br />

… .<br />

ν<br />

ij<br />

= ideální nejmenší možný předstih stupně i oproti stupni j určený pouze těmito<br />

stupni bez vlivu ostatních stupňů;<br />

µ<br />

ij<br />

= skutečný nejmenší možný předstih stupně i oproti stupni j; je zřejmé, že<br />

µ i, j závisí nejen na x′a i<br />

x′ , ale také na x , s A( i)<br />

j<br />

′ ∈ .<br />

S<br />

Pak<br />

{ } { }<br />

ν<br />

i, j<br />

= 2B j<br />

z<br />

j<br />

x′ j<br />

− 2 min Bi zi, Bj z<br />

j<br />

min x′ i,<br />

x′<br />

j<br />

, (39)<br />

µ = τ − τ . (40)<br />

i,<br />

j j i<br />

A musí platit µ<br />

i, j<br />

≥ ν<br />

i,<br />

j<br />

.<br />

Pro koncové stupně mohou být zadány hodnoty τ i (např. mohou být nulové). Pro<br />

ostatní stupně ( i m 1, m 2,..., N )<br />

= + + je lze určit:<br />

( , )<br />

τ = min τ − ν .<br />

i j i j<br />

j∈a ( i)<br />

2.3.2 Formulace problému<br />

Nechť<br />

C , i<br />

1 jsou pevné seřizovací náklady na stupni i a C 2 , i skladovací náklady za<br />

jednotku času na stupni i. Průměrné seřizovací náklady na i-tém stupni za jednotku času<br />

se určí jako


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

33<br />

C<br />

1, i<br />

x′<br />

i<br />

.<br />

Funkce<br />

t+<br />

T i j<br />

C<br />

g x V τ e V τ dτ<br />

,<br />

2, i<br />

( ′, x ′ ) = ∫ ( ( ) − ( ))<br />

i, j i A, i i, j i,<br />

j j<br />

Ti , j t<br />

určí průměrné skladovací náklady na hraně (i, j) ∈ W za jednotku času, kde<br />

Platí, že<br />

( xs<br />

s A( i)<br />

)<br />

x ′ = ′ ∈ .<br />

A, i<br />

;<br />

( ′,<br />

′ ) = ( µ + ′ − ′ )<br />

g x x C e z B z x B z x . (41)<br />

i, j i A, i 2, i i, j j i,<br />

j i i i j j j<br />

Celkový součet průměrných seřizovacích a skladovacích nákladů udává funkce<br />

Problém lze formulovat jako:<br />

za podmínek, že<br />

N<br />

C<br />

F( x′ , x′ , ... , x′ ) = + g x′ , ′<br />

′<br />

1, i<br />

∑ ∑ ( x )<br />

(42)<br />

1 2 N i, j i A,<br />

i<br />

i= 1 xi<br />

( i, j)<br />

∈W<br />

minimalizaci F ( x x x )<br />

[ a , b ] { 1, 2,... }<br />

i i i<br />

′<br />

1, ′<br />

2, ... , ′<br />

N<br />

(43)<br />

x′ ∈ ′ ′ ∩ pro i = 1,..., N , (44)<br />

′ ′ ∈ ∩ pro ( i,<br />

j)<br />

xi x<br />

j<br />

S H<br />

j<br />

kde S a H j jsou definovány v podkapitole 2.2.4.<br />

∈ W , (45)


Strana<br />

34<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

35<br />

3 Návrh řešení<br />

V této kapitole bude na základě práce [10] vysvětlen postup pro řešení obecného<br />

výrobního systému se síťovou strukturou.<br />

3.1 Metody řešení obecného výrobního systému<br />

Přístup, který byl popsán v 2.3.2, lze aplikovat za předpokladu, že graf struktury<br />

výrobního systému neobsahuje kružnice. Jestliže tento předpoklad neplatí, problém se<br />

komplikuje tak, že:<br />

• předstih stupně i před stupněm j na hraně ( i,<br />

j ) není určen pouze stupni i a<br />

j a proto funkce<br />

g , závisí na více než dvou proměnných,<br />

i j<br />

• stavové a rozhodovací proměnné v úloze dynamického programování<br />

mohou být vektory, což zvyšuje časovou složitost,<br />

• je nemožné bezprostřední použití heuristických metod HM1 a HM2.<br />

Existují-li kružnice ve struktuře výrobního systému, lze zmíněné metody použít za<br />

podmínky, že na vazbách mezi stupni nacházejícími se v kružnici se výrobní dávky<br />

nebudou měnit, tzn. že xi<br />

= x pro vazbu ( i,<br />

j ) . Aby byla tato podmínka splněna, je<br />

j<br />

možné upravit strukturu systému tak, že ve výpočtu se každý shluk kružnic (tj. množina<br />

kružnic majících neprázdný průnik) nahradí jedním agregovaným stupněm. Tímto se<br />

dosáhne struktury bez kružnic, pro niž po vhodném přečíslování uzlů, lze použít dříve<br />

zmíněné heuristické metody. E U použijeme pro označení hodnoty nákladů určených<br />

tímto přístupem symbolem. E U je pak horní mezí optimálních nákladů E.<br />

Podstatně hrubší horní hranici optimálních nákladů lze získat řešením<br />

N<br />

⎧<br />

⎫<br />

min ⎨ f ( x′ ) = F ( x′ , x′ , ..., x′ ) x′ ∈∩ [ a′ i,<br />

b′<br />

i ] ⎬ .<br />

⎩<br />

i=<br />

1 ⎭<br />

V případě selhání klasických přístupů je třeba se pokusit o konstrukci problémově<br />

specifické účinné heuristiky nebo použít nějakou moderní obecnou heuristickou<br />

metodu, kupříkladu genetické algoritmy, simulované žíhání nebo zakázané hledání.<br />

V následující podkapitole budou zkoumány možnosti použití genetických algoritmů a<br />

simulovaného žíhání.


Strana<br />

36<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

3.1.1 Nástin řešení pomocí simulovaného žíhání<br />

Řeší se problém (43) − (45). Podmínky (44) − (45) určují prostor řešení S tohoto<br />

problému. Pro redukci výpočtů hodnot nákladové funkce F se zdá vhodné definovat<br />

sousedství aktuálního řešení jako množinu přípustných řešení, které se liší od<br />

aktuálního řešení pouze v jedné složce. Změna hodnoty x ′<br />

i<br />

může působit na následující<br />

části nákladové funkce: členy odpovídající stupni i, členy odpovídající hranám ( i,<br />

j ) a<br />

( l,<br />

i ) pro j ∈ a ( i)<br />

, l ∈ a ( i)<br />

a členy odpovídající hranám ( r,<br />

s ) , kde r B( i)<br />

a ( r ) > 1 a s ∈ a ( r)<br />

. Na intervalu [ ]<br />

∈ ,<br />

0,1 může být sousední řešení vybráno pomocí<br />

rovnoměrného rozdělení ve dvou krocích. Nejprve je vybrán stupeň i a pak se generuje<br />

hodnota x ′<br />

i<br />

, jenž splňuje podmínky (44) − (45).<br />

Komplikacím spojeným s podmínkou (36) se lze vyhnout tak, že se rozšíří prostor<br />

řešení odstraněním této podmínky (poznamenejme, že to neznamená porušení<br />

požadavku periodicity procesu). Předstihy v<br />

i,<br />

j<br />

ze (45) jsou pak určeny vzorcem<br />

{ } ( )<br />

ν<br />

,<br />

= 2 ⎡ ′ − min , gcd ′,<br />

′ ⎤<br />

i j ⎣<br />

B<br />

j<br />

x<br />

j<br />

z<br />

j<br />

Bi zi B<br />

j<br />

z<br />

j<br />

xi x<br />

j ⎦<br />

,<br />

kde gcd je největší společný dělitel. Z důvodu redukce výpočetního času se musí<br />

tabelovat hodnoty gcd před zahájením algoritmu simulovaného žíhání.<br />

3.1.2 Nástin řešení pomocí genetického algoritmu<br />

Během návrhu genetického algoritmu pro řešení nějakého problému musí být<br />

určeno schéma kódování prostoru řešení, zkonstruována funkce fitness, vybrány resp.<br />

zkonstruovány vhodné genetické operátory a nalezen způsob zohlednění omezujících<br />

podmínek.<br />

Základním kódovacím schématem v genetických algoritmech je binární kódování.<br />

Pro problém (43) − (45) bude však vhodnější nebinární kódování. Chromozóm<br />

reprezentuje vektor<br />

( x x x )<br />

x ′ = ′<br />

1, ′<br />

2, ... , ′<br />

N<br />

.<br />

Použije-li se ruletová selekce, funkce fitness pak bude<br />

( ′) ( ′)<br />

fit x = E − F x + ε ,<br />

P


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

37<br />

kde je ε kladná konstanta a<br />

turnajové selekci může být fit ( x ′) = F( x′<br />

)<br />

nejmenší.<br />

E P je maximální hodnota nákladů v populaci. Při<br />

, s tím, že nejlepší hodnota fitness je ta<br />

Hlavní obtíže při návrhu genetického algoritmu pro problém (43) − (45) způsobují<br />

omezující podmínky (45). Tyto lze obejít takovým způsobem, že se rozšíří množina<br />

přípustných řešení nahrazením množiny S množinou Q racionálních čísel. Vzorcem<br />

s periodou<br />

se pak určí předstihy<br />

{ } ( )<br />

ν<br />

i, j<br />

= 2 ⎡B j<br />

x′ j<br />

z<br />

j<br />

min Bi zi, B<br />

j<br />

z<br />

j<br />

gcd x′ i,<br />

x′<br />

⎤<br />

⎣<br />

−<br />

j ⎦<br />

ν . Funkce zásob V ( τ ) e V ( τ )<br />

i, j<br />

( ′ ′ )<br />

Ti , j<br />

= lcm xi , x<br />

j<br />

.<br />

− je periodická<br />

i, j i,<br />

j j<br />

gcd je největší společný dělitel a lcm je nejmenší společný násobek. Před<br />

zahájením genetického algoritmu je nutné tabelovat hodnoty gcd, aby se redukoval<br />

výpočetní čas.<br />

3.2 Transformace problému s kružnicemi na problém bez kružnic<br />

Aby bylo možno řešit problém s kružnicemi, je nutné, aby byl převeden na<br />

problém bez kružnic. Transformace bude popsána v této kapitole.<br />

<br />

Z grafu původní struktury G = ( V , W ) vytvoříme následujícím způsobem graf<br />

⌢ ⌢ ⌢<br />

G = ( V , W ) , tedy strukturu, která kružnice neobsahuje.<br />

⌢<br />

⌢<br />

Množina uzlů v transformované struktuře je V = { 1, ... , M}<br />

. Každému uzlu i ∈ V<br />

odpovídá právě jedna množina v(i) ⊂ V. Množina v(i) může být buď jednoprvková<br />

(obsahuje uzel původního grafu neležící v žádné kružnici) nebo víceprvková (prvky<br />

vytvářejí shluk, což je kružnice nebo sjednocení kružnic s neprázdným průnikem). Pro<br />

zjednodušení bude jednoprvková množina uvažována jako zvláštní případ shluku.<br />

Sjednocením množin v(i) vznikne množina V. Množiny v(i) jsou tedy navzájem<br />

disjunktní.<br />

⌢<br />

⌢<br />

Množina hran transformovaná W = {( i,<br />

j)<br />

| i,<br />

j ∈V<br />

, ∃k<br />

∈ v(<br />

i),<br />

l ∈ v(<br />

j)<br />

: ( k,<br />

l)<br />

∈W}<br />

.<br />

Tedy hrana (i, j) je spojnicí uzlů (shluků) i a j právě tehdy, existují-li uzly k ∈ v(i),<br />

l ∈ v(j) takové, že existuje hrana (k, l) v původní struktuře. Tato hrana z původní<br />

struktury bude označena symbolem e(i, j), její počáteční uzel k symbolem p(i, j) a její<br />

koncový uzel l symbolem q(i, j). Mezi dvěma shluky může existovat nejvýše jedna


Strana<br />

38<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

hrana (v případě více hran by to znamenalo, že existuje kružnice, která prochází oběma<br />

shluky, což je spor).<br />

a ⌢ (i) = množina bezprostředních následníků stupně i v grafu G ⌢ , i = 1, 2, ... , M;<br />

b ⌢ (i) = množina bezprostředních předchůdců stupně i v grafu G ⌢ , i = 1, 2, ... , M.<br />

Pro každý shluk v(i) se předpokládá, že všechny jeho uzly k ∈ v(i) mají stejnou<br />

výrobní periodu<br />

x k′ = Xi′<br />

. Kriteriální funkce pak bude vyjádřena jako:<br />

⌢<br />

⌢ M ⎛ C ⌢ ⎞<br />

1, i<br />

⌢<br />

F( X ′<br />

1, X ′<br />

2<br />

,..., X ′<br />

M<br />

) = ∑<br />

+ Di X ′<br />

i<br />

+ gi,<br />

j<br />

X ′<br />

i,<br />

X ′<br />

⎜<br />

j<br />

i= 1 X ′ ⎟ ∑ ⌢<br />

⎝ i ⎠ ( i, j)<br />

∈W<br />

⌢<br />

C1, i<br />

= ∑ C1,<br />

k<br />

k∈v ( i)<br />

( )<br />

⌢ ⎧0 (množina v( i) je jednoprvková)<br />

⎪<br />

Di<br />

= ⎨ C2, k<br />

ek , l<br />

zl ( µ<br />

k , l<br />

+ Bk zk − Bl zl<br />

) ( jinak)<br />

⎪⎩<br />

∑<br />

⌢<br />

( k , l ) ∈w( i)<br />

w(i) = množina hran původního grafu, patřících do i-tého shluku.<br />

kde<br />

⌢ τ<br />

k<br />

a ⌢ τ<br />

l<br />

( ) = {( , ) | , ∈ ( ),( , ) ∈ }<br />

w i k l k l v i k l W<br />

⌢ ⌢ ⌢<br />

µ = τ −τ<br />

,<br />

k , l l k<br />

jsou termíny uzlů relativní vhledem k termínu koncového uzlu<br />

příslušného shluku při jednotkové velikosti výrobní periody.<br />

⌢ ⌢ ⌢ ⌢ ⌢<br />

X ′, X ′ = C B X ′ + B X ′ − 2 min B , B min X ′,<br />

X ′<br />

( i j ) 2, i, j ( 1, i, j i 2, i, j j { 1, i, j 2, i,<br />

j} { i j})<br />

Postup výpočtu termínů<br />

⌢ τ k<br />

⌢<br />

C = C e z<br />

⌢<br />

B1, i, j<br />

= Bp( i, j) z<br />

p( i, j)<br />

⌢<br />

B = B z<br />

2, i, j 2, p( i, j ) p( i, j), q( i, j ) q( i, j)<br />

2, i, j q( i, j) q( i, j)<br />

očíslovány tak, že pro libibovolnou hranu (k, l) platí k > l):<br />

(nutno poznamenat, že uzly původního grafu jsou<br />

ω(i) = číslo koncového uzlu i-tého shluku (uzel bez následníků v rámci shluku;<br />

takový uzel je právě jeden)<br />

⌢<br />

τ : 0 ( i) =<br />

ω<br />

pro k = ω(i) + 1, ... , N proveď:<br />

⌢<br />

τ = min<br />

⌢ ⌢<br />

je-li k ∈ v(i), pak ( τ −ν<br />

)<br />

kde<br />

k l k l<br />

l∈a(<br />

k)<br />

∩v(<br />

i)<br />

,<br />

,


problém:<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

⌢<br />

ν<br />

,<br />

= 2 − min ,<br />

( B z { B z B z })<br />

k l l l k k l l<br />

Radek Lošťák<br />

.<br />

Strana<br />

39<br />

Pro nalezení optimální strategie výrobních dávek se musí řešit následující<br />

Minimalizace<br />

⌢<br />

⌢ ⎛ C ⌢ ⎞ ⌢<br />

F( X , X ,..., X ) D X g X , X<br />

⎝ ⎠<br />

s podmínkami<br />

kde<br />

A′ = max a′<br />

a<br />

i<br />

k∈v ( i)<br />

S<br />

k<br />

( )<br />

M<br />

1, i<br />

′ ′ ′<br />

1 2 M<br />

= ∑<br />

+ ′<br />

i i<br />

+<br />

′ ′<br />

⎜<br />

i,<br />

j i j<br />

i= 1 X ′ ⎟ ∑ ⌢<br />

i<br />

( i, j)<br />

∈W<br />

[ ] { }<br />

X ′ ∈ A′ , B′<br />

∩ 1, 2, ... , i = 1, ... , M ,<br />

i i i<br />

B′ = min b′<br />

.<br />

i<br />

k<br />

k∈v ( i)<br />

X ′ ⌢<br />

i ∈ S ∩ H<br />

j<br />

, ( i, j) ∈ W ,<br />

X ′<br />

j<br />

⌢<br />

⎧ 1 1 ⎫ ⎧(0, ∞) ( a( j) ≠ ∅)<br />

= ⎨1, 2, ...; , , ... ⎬,<br />

H<br />

j<br />

= ⎨ ⌢<br />

⎩ 2 3 ⎭ ⎩{1} ( a( j) = ∅)<br />

Zjednodušeně graficky je možné transformaci problému s kružnicemi na problém<br />

bez kružnic provést tak, jak je znázorněno níže na obr. 8. Pod jednotlivými kroky<br />

příkladu se nachází stručný popis řešené situace.<br />

9<br />

9<br />

T<br />

10<br />

3 T<br />

10<br />

3<br />

Stupně ve shluku agregovány do<br />

jednoho stupně T.<br />

11<br />

11<br />

i1<br />

Výběr stupně i 1 bez následníků a s<br />

maximálním počtem všech předchůdců;<br />

vložení do množiny označených uzlů V O ;<br />

odstranění z V N vč. předchůdců.


Strana<br />

40<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

i 3<br />

1<br />

9<br />

3<br />

10 T 11<br />

i1<br />

i 2<br />

2 4 5<br />

3<br />

Výsledná světvující se struktura s<br />

upravenými orientacemi hran před<br />

přečíslováním.<br />

Výsledná světvující se struktura s<br />

upravenými orientacemi hran po<br />

přečíslování.<br />

Obr 7. Grafické znázornění algoritmu transformace systému se shluky na<br />

světvující se strukturu bez shluků a algoritmus přečíslování.<br />

3.3 Řešení transformovaného problému pomocí dynamického<br />

programování<br />

Agregace shluků převede původní strukturu s kružnicemi na novou strukturu,<br />

která už neobsahuje žádnou kružnici. Pak je tedy možné stupně přečíslovat a uspořádat<br />

do stromové výpočetní struktury, ve které každý stupeň s výjimkou posledního má<br />

právě jednoho bezprostředního následníka jehož nové číslo je větší nebo rovné číslu<br />

tohoto stupně. Závádí se:<br />

n(i) = nové číslo stupně i (tato čísla určují pořadí zpracování stupňů při výpočtu),<br />

ã<br />

( i)<br />

= bezprostřední „následník“ i-tého stupně v novém uspořádání,<br />

b̃<br />

( i)<br />

= množina bezprostředních „předchůdců“ i-tého stupně v novém uspořádání.<br />

Nová struktura má následující vlastnosti:<br />

• pro stupeň s číslem n(i) = M je a ⌢ (i)<br />

= ∅; ã ( i)<br />

není definováno,<br />

b̃ ( i)<br />

= b ⌢ (i)<br />

a pro j ∈ b̃ ( i)<br />

je ã ( j)<br />

= i;


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

41<br />

• pro stupeň s číslem n(i) < M musí být n(i) < n( ã ( i)<br />

);<br />

b̃ ( i)<br />

= b ⌢ (i)<br />

∪ a ⌢ (i)<br />

− { ã ( i)<br />

} a pro j ∈ b̃ ( i)<br />

je ã ( j)<br />

= i.<br />

Po uspořádání do stromové struktury a přečíslování uzlů lze tento problém<br />

aplikací Bellmanova principu optimality transformovat do tvaru<br />

min Φ ( X ′ ) ,<br />

X i′ ∈[ Ai′ , Bi′<br />

]<br />

M M M<br />

kde n(i M ) = M a funkce Φ ( x ′)<br />

pro n(i) = M, M−1, ... , 1 jsou dány soustavou<br />

rekurentních rovnic<br />

přičemž<br />

i<br />

i<br />

iM<br />

⎧<br />

⌢<br />

min ⎡h ( X , K ) ( K X ) ⎤<br />

⎣<br />

′ + Φ ′<br />

⎦ b( i)<br />

≠ ∅<br />

⎪<br />

iM<br />

( ̃ )<br />

j i j j j i<br />

K j∈s j ( X i′<br />

)<br />

( )<br />

j b( i)<br />

i<br />

X<br />

∈<br />

∑̃<br />

Φ ′<br />

i<br />

= ⎨<br />

⎪ = ∅<br />

⎩<br />

( b̃<br />

i )<br />

0 ( ) ,<br />

⌢ ⌢ ⌢<br />

+ D K X ′ + g ( K X ′, X ′) i ∈ a( j)<br />

1, j<br />

⎪<br />

j j i j,<br />

i j i i<br />

⎪ K<br />

j<br />

X ′<br />

i<br />

j<br />

( ′<br />

i, j<br />

) = ⎨ ⌢<br />

⎪ C ⌢<br />

1, j<br />

⌢<br />

⎪<br />

′ ′ ′<br />

j j i i,<br />

j i j i<br />

K<br />

j<br />

X ′<br />

i<br />

⌢<br />

h X K<br />

⌢<br />

⎧ C<br />

⎩<br />

( )<br />

⌢<br />

+ D K X + g ( X , K X ,) i ∈b( j) ,<br />

s ( X ′) = S ∩[ A′ / X ′ , B′ / X ′]<br />

∩ H ,<br />

j i j i j i j<br />

K<br />

j<br />

X ′<br />

j<br />

=<br />

X ′ ,<br />

i<br />

( )<br />

⌢ ⌢<br />

⎧ 1 1 ⎫ ⎧⎪ { 1 } ( a( j) = ∅ ∨ a( i)<br />

= ∅)<br />

S = ⎨1, 2, ...; , , ... ⎬,<br />

H<br />

j<br />

= ⎨<br />

⎩ 2 3 ⎭ ⎪⎩ ( 0, ∞) ( jinak)<br />

⌢<br />

Dvě vyjádření funkce h X ′,<br />

K ) odpovídají případům, kdy při transformaci<br />

j( i j<br />

⌢<br />

⌢<br />

struktury nedošlo ( i ∈ a( j)<br />

) resp. došlo ( i ∈ b( j)<br />

) ke změně orientace hrany (j, i).<br />

3.4 Vyjádření problému pro metody HM1 a HM2<br />

Pro i ∈ a ⌢ ( j)<br />

je<br />

⌢<br />

⌢<br />

C ⌢<br />

h X K = + D K X +<br />

1, j<br />

( ′, )<br />

′<br />

j i j j j i<br />

K ′<br />

j<br />

X<br />

i<br />

⌢ ⌢ ⌢ ⌢ ⌢<br />

+ C B K X + B X − B B X K X =<br />

( ′ ′ 2 min { , } min { ′,<br />

′})<br />

2, j, i 1, j, i j i 2, j, i i 1, j, i 2, j,<br />

i i j i


Strana<br />

42<br />

DIPLOMOVÁ PRÁCE<br />

ÚAI FSI VUT<br />

Radek Lošťák<br />

⌢<br />

C<br />

⌢<br />

( 2, , 1, , ) 2<br />

2, ,<br />

min { 1, ,<br />

,<br />

2, , } min{ 1, }<br />

1, j<br />

= + C<br />

j iB j i<br />

+ Dj K<br />

j<br />

X<br />

i<br />

− C<br />

j i<br />

B<br />

j i<br />

B<br />

j i<br />

K<br />

j<br />

X<br />

i<br />

+<br />

K ′<br />

j<br />

X<br />

i<br />

⌢ ⌢<br />

+ C B X ′<br />

2, j, i 2, j,<br />

i i<br />

⌢ ⌢ ⌢ ⌢ ⌢<br />

′ ′<br />

Pro i ∈ b ⌢<br />

( j)<br />

je<br />

⌢<br />

⌢<br />

C ⌢<br />

h ( X ′, K ) = + D K X ′ +<br />

1, j<br />

j i j j j i<br />

K<br />

j<br />

X ′<br />

i<br />

⌢ ⌢ ⌢ ⌢ ⌢<br />

+ C B X + B K X − B B X K X =<br />

⌢<br />

C<br />

j ( i j<br />

( ′ ′ 2 min { , } min { ′,<br />

′})<br />

2, i, j 1, i, j i 2, i, j j i 1, i, j 2, i,<br />

j i j i<br />

⌢<br />

( 2, , 2, , ) 2<br />

2, ,<br />

min { 1, ,<br />

,<br />

2, , } min{ 1, }<br />

1, j<br />

= + C<br />

i jB i j<br />

+ Dj K<br />

j<br />

Xi − C<br />

i j<br />

B<br />

i j<br />

B<br />

i j<br />

K<br />

j<br />

Xi<br />

+<br />

K<br />

j<br />

X ′<br />

i<br />

⌢ ⌢<br />

+ C B X ′<br />

2, i, j 1, i,<br />

j i<br />

⌢<br />

Funkci h X ′,<br />

K ) pak lze vyjádřit ve tvaru<br />

kde i = a ~ ( j ) ;<br />

pro i ∈ ( j)<br />

a pro i ∈ ( j)<br />

Platí, že<br />

⌢ ⌢ ⌢ ⌢ ⌢<br />

′ ′<br />

⌢<br />

⌢<br />

C<br />

h ( X ′, K ) = + α K X ′ + α − α min K ,1 X ′ + β X ′<br />

( ) { }<br />

1, j (1) (2) (1) (2)<br />

j i j j j i j j j i j i<br />

K<br />

j<br />

X ′<br />

i<br />

a ⌢ ⌢ ⌢ ⌢<br />

(1)<br />

α<br />

j<br />

= C2, j, iB1, j,<br />

i<br />

+ Dj<br />

(2)<br />

α<br />

2, , ( 1, ,<br />

2min { 1, ,<br />

,<br />

2, , })<br />

⌢ ⌢ ⌢ ⌢<br />

(1)<br />

β<br />

j<br />

= C2, j, i ( B2, j, i<br />

− 2 min { B1, j, i,<br />

B2, j,<br />

i}<br />

)<br />

β<br />

⌢ ⌢ ⌢ ⌢ ⌢<br />

= C B − B B + D<br />

j j i j i j i j i j<br />

⌢<br />

= C<br />

⌢<br />

B<br />

(2)<br />

j 2, j, i 2, j,<br />

i<br />

b ⌢ ⌢ ⌢ ⌢<br />

(1)<br />

α<br />

j<br />

= C2, i, jB2, i,<br />

j<br />

+ Dj<br />

(2)<br />

α<br />

2, , ( 2, ,<br />

2min { 1, ,<br />

,<br />

2, , })<br />

⌢ ⌢ ⌢ ⌢<br />

(1)<br />

β<br />

j<br />

= C2, i, j ( B1, i, j<br />

− 2min { B1, i, j<br />

, B2, i,<br />

j}<br />

)<br />

β<br />

⌢ ⌢ ⌢ ⌢ ⌢<br />

= C B − B B + D<br />

j i j i j i j i j j<br />

⌢<br />

= C<br />

⌢<br />

B<br />

(2)<br />

j 2, i, j 1, i,<br />

j<br />

.<br />

C ⌢ 0 ,<br />

1,<br />

j ≥<br />

HM1 a HM2.<br />

(1) (2)<br />

j α j<br />

α ≥ a<br />

(1)<br />

j<br />

(1)<br />

j<br />

(2)<br />

j<br />

(2)<br />

j<br />

α + β = α + β , proto je možno použít metody


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

43<br />

4 Stochastické heuristické metody<br />

Teprve s rozmachem počítačů byly vyvinuty a jsou rozvíjeny heuristické metody<br />

pro řešení složitých optimalizačních problémů. Heuristické metody sice nezaručují<br />

nalezení globálně optimálního řešení, ale jsou schopny v přiměřené době poskytnout<br />

řešení, jenž je uspokojivé. Heuristické optimalizační metody se používají pro<br />

optimalizaci mnohaparametrových funkcí s divokým průběhem, tj. s mnoha extrémy<br />

nebo neznámým gradientem. Takovými funkcemi je i většina účelových funkcí<br />

problémů rozvrhování výroby.<br />

Standardní gradientové metody (např. nejprudšího spádu, sdružených gradientů,<br />

proměnné metriky) nebo negradientové metody (např. simplexová) nejsou vhodnými<br />

přístupy, protože je požadováno nalezení globálního extrému funkce s mnoha lokálními<br />

extrémy. Tyto metody obvykle konvergují jen k extrému blízko startovního bodu a<br />

tento extrém už nejsou schopné opustit. Tento nedostatek lze odstranit jejich<br />

randomizací tak, že se opakovaně spustí z různého počátečního řešení a za výsledné<br />

optimum se vezme nejlepší výsledek. Stochastičnost tohoto postupu spočívá pouze v<br />

náhodném výběru počátečního řešení, ale následovně použitý optimalizační algoritmus<br />

je striktně deterministický.<br />

Tato práce se dále bude soustředit pouze na tzv. stochastické heuristické<br />

optimalizační metody, které si svoji stochastičnost zachovávají v celém průběhu<br />

optimalizačního procesu a ne jen ve výběru počátečního řešení. Programová<br />

implementace heuristických metod je poměrně jednoduchá. Stochastické heuristické<br />

optimalizační metody však mají i své zásadní výhody: jsou velmi obecně formulované a<br />

tedy aplikovatelné na širokou množinu problémů a mají schopnost se dostat z lokálního<br />

extrému.<br />

Proces prohledávání prostoru potenciálních řešení vyžaduje rovnováhu dvou cílů:<br />

1. co nejrychleji najít nejbližší (většinou lokální) optimum v okolí výchozího<br />

bodu,<br />

2. co nejlépe prohledat prostor všech řešení.<br />

Tato práce si klade za úkol zabývat se stochastickou heuristickou metodou<br />

simulované žíhání pro řešení optimalizace časově invariantních výrobních dávek<br />

vícestupňových procesů ve výrobním systému se síťovou strukturou. Tato metoda bude<br />

i popsána v následující podkapitolách spolu s metodou genetický algoritmus.


Strana<br />

44<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

4.1 Metoda simulovaného žíhání<br />

Simulované žíhání (simulated annealing) je variantou horolezeckého algoritmu,<br />

v němž heuristické kroky směřující k horšímu řešení jsou řízeny určitou<br />

pravděpodobností. Přístup simulovaného žíhání je založen na simulování fyzikálních<br />

procesů probíhajících při odstraňování defektů krystalické mřížky. Krystal se zahřeje na<br />

určitou (vysokou) teplotu a potom se pomalu ochlazuje (žíhá). Defekty krystalické<br />

mřížky mají při vysoké teplotě vysokou pravděpodobnost zániku. Pomalé ochlazování<br />

systému zabezpečí, že pravděpodobnost vzniku nových defektů klesá. Při žíhání se<br />

soustava snaží dostat do takového stavu, ve kterém je její energie minimální – tj. krystal<br />

bez defektů. Existuje určitá analogie tohoto přírodního procesu s procesem řešení<br />

optimalizačních problémů.<br />

V aplikaci na řešení minimalizačního problému je krystal reprezentován nějakým<br />

přípustným řešením x tohoto problému. Každému přípustnému řešení lze přiřadit<br />

„energii krystalu“ – funkční hodnotu f(x). Důležitý je rovněž parametr T, který je<br />

formální analogií teploty krystalu.<br />

Aktuální řešení x je přeměněno náhodnou transformací t ∈ S na nové řešení x' z<br />

okolí U(x). Vzhledem k tomu, že nyní nepotřebujeme prohledávat celé sousedství,<br />

může být sousedství definováno více ze široka, než tomu bylo třeba u horolezeckého<br />

algoritmu. Původní řešení se nahradí novým x' v následném procesu simulovaného<br />

žíhání s pravděpodobností dle Metropolisova vzorce:<br />

f ( x′ ) − f ( x)<br />

⎧ − ⎫<br />

T<br />

Pravděpodobnost ( x → x′<br />

) = min ⎨1,<br />

e ⎬<br />

(46)<br />

⎩ ⎭<br />

Jestliže funkční hodnota nového řešení x' je stejná nebo lepší než funkční hodnota<br />

původního řešení x, f ( x')<br />

≤ f ( x)<br />

, pravděpodobnost nahrazení je rovna jedné. V tomto<br />

případě je nové řešení automaticky akceptováno do dalšího procesu simulovaného<br />

žíhání. V případě, že funkční hodnota nového řešení x' není lepší než funkční hodnota<br />

původního řešení x, f ( x')<br />

> f ( x)<br />

, pravděpodobnost akceptování je menší než<br />

jednotková, ale i v tomto případě má nové řešení šanci pokračovat v simulovaném<br />

žíhání.


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

45<br />

Algoritmus simulovaného žíhání má následující jednoduchou formu:<br />

x:=náhodně vygenerované řešení;<br />

T:=T max ;x * :=x;k:=1;<br />

while (T>T min and k>0) do<br />

begin t:=0;k:=0;<br />

while(t


Strana<br />

46<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Reálná proměnná random je náhodně generované číslo z intervalu (0,1).<br />

Proměnná x * zaznamenává nejlepší řešení v průběhu provádění celého algoritmu. Ve<br />

všeobecnosti proměnná x nemusí po skončení simulovaného žíhání obsahovat nejlepší<br />

řešení.<br />

4.2 Genetický algoritmus<br />

Genetické algoritmy (genetic algorithms) jsou inspirovány Darwinovými zákony<br />

přirozeného výběru. V evolučním vývoji nebo při šlechtění rostlin či živočichů se<br />

prosazují jedinci, kteří mají jisté žádoucí charakteristiky, které jsou na genetické úrovni<br />

determinovány kombinací rodičovských chromozómů. U zrodu genetických algoritmů<br />

stála myšlenka, že při hledání lepších řešení složitých problémů by bylo možno<br />

obdobným způsobem kombinovat části existujících řešení.<br />

Ačkoli genetické algoritmy nemají již prakticky s biologií nic společného, udržují<br />

si biologickou terminologii. Evolucí jsou míněny postupné změny proměnných vedoucí<br />

k nalezení extrému funkce. Soubor proměnných vstupních veličin funkce tvoří jedince<br />

(někdy je formálně jedinec nazýván chromozómem). Není zde však tak důležitý<br />

samotný jedinec, jako postupný vývoj, kooperace a fungování populace - souboru<br />

jedinců. Neúspěšní jedinci vymírají, úspěšní přežívají a množí se. Při aplikaci<br />

genetických algoritmů na problémy operačního výzkumu každý jedinec v algoritmu<br />

nějakým způsobem kóduje jedno řešení x problému. V případě rozvrhování výroby<br />

bude jedincem zřejmě jeden přípustný rozvrh. Hodnota zdatnosti (fitness) jedince<br />

odpovídá hodnotě účelové funkce f(x) v tomto řešení.<br />

Pro manipulace s chromozómy se používají genetické operátory selekce<br />

(selection), křížení (crossover) a mutace (mutation). Při selekci se jedná o výběr jedinců<br />

z celkové populace, kteří se stanou rodiči. Důležitým hlediskem, jenž se přímo či<br />

nepřímo uplatňuje při výběru alespoň jednoho z rodičů, je právě jeho zdatnost.. Hybnou<br />

silou změn jsou křížení (výměna genetické informace mezi jedinci) a mutace (velmi<br />

málo pravděpodobné provedení náhodné změny chromozómu, zabraňující<br />

zdegenerování populace).<br />

Genetické algoritmy pracují tím způsobem, že nejprve se vytvoří počáteční<br />

populace o velikosti p jedinců a pak se tato populace mění pomocí genetických<br />

operátorů tak dlouho, dokud není splněna nějaká podmínka ukončení.<br />

Volně lze kostru genetického algoritmu definovat takto:


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

47<br />

P:=počáteční_populace_chromozómů(p);<br />

REPEAT<br />

R:=selekce(P);<br />

Q:=křížení(R);<br />

Q:=mutace(Q);<br />

P:=vytvořit_novou_populaci(P,Q);<br />

UNTIL (podmínka_ukončení);<br />

Počáteční populace se většinou získá náhodným generováním. Byly provedeny<br />

také pokusy nasadit do počáteční populace kvalitní řešení, získaná jinými heuristickými<br />

metodami, ale při tomto způsobu se ukázalo nebezpečí předčasné konvergence do<br />

nějakého ještě ne dost dobrého lokálního optima. Pokud jde o velikost p populace, je<br />

jasné, že příliš malá populace může zavinit špatné pokrytí prostoru řešení, zatímco<br />

velká populace zvyšuje výpočetní náročnost. Zkušenosti ukazují, že pro většinu<br />

problémů je dostačující populace o velikosti 50 až 200 jedinců.<br />

Selekcí je třeba z populace vybrat zdatné jedince (s dobrou hodnotou fitness),<br />

kteří se potom stanou rodiči. Rodiče se vybírají pseudonáhodně. Zdatnější jedinci mají<br />

větší šanci být vybráni než méně zdatní jedinci. Čím je jedinec zdatnější (čím má lepší<br />

hodnotu fitness), tím je pravděpodobnost jeho výběru ke křížení větší. Pokud se výběr<br />

uskutečňuje v souladu s rozdělením pravděpodobnosti, počítané jako podíl hodnoty<br />

fitness chromozómu k celkové hodnotě fitness populace, označujeme tento způsob<br />

výběru jako „ruleta“. Jiným způsobem selekce je například soutěžení (tournament).<br />

Soutěže se účastní jen část populace a její vítěz, nejzdatnější účastník soutěže, se pak<br />

stane rodičem.<br />

Křížení se pro vybranou skupinu rodičovských chromozómů může uskutečňovat<br />

několika způsoby. Například pro případ, kdy je jedinec reprezentován sekvencí čísel<br />

úloh, představuje nejjednodušší přístup tzv. jednobodové křížení, při němž se zvolí<br />

náhodně nějaký bod, dělící oba rodičovské chromozómy na dvě části. Jeden potomek<br />

pak zdědí levou část z prvního rodiče a na zbývající pozice se mu doplní chybějící<br />

prvky v tom pořadí, v jakém se vyskytují ve druhém rodiči, druhý potomek vznikne<br />

analogicky s obráceným pořadím rodičů. Např. jestliže řetězce BACDEF a DCABEF<br />

jsou rodičovské chromozómy a dělící bod se nachází za druhou pozicí, pak dostaneme<br />

potomky BADCEF a DCBAEF.<br />

Mutace je v obecnosti malá náhodná změna jedné, či několika proměnných (prvků<br />

chromozómu), která ovlivní řešení, ať už kladně nebo záporně. Pravděpodobnost<br />

uskutečnění mutace je nízká (obvykle menší než 1%). Mutace je nutná k tomu, aby se


Strana<br />

48<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

zamezilo přílišné specializaci - zapadnutí celé populace do jednoho lokálního minima;<br />

aby vždy byla možnost vytvoření zásadně nových chromozómů odpovídajících lepšímu<br />

řešení. Mutace přinášejí do chromozómů novou genetickou informaci. Pro mutaci<br />

mohou být použity stejné operátory, jakými lze generovat sousední řešení<br />

v předchozích popsaných metodách.<br />

Jednou z možností změny p-členné populace je vygenerovat pomocí křížení a<br />

mutace novou generaci p potomků a nahradit jí rodičovskou generaci en bloc. Jiné<br />

způsoby umožňují nějaké překrývání populace rodičů a potomků a populaci tedy mění<br />

inkrementálně. Např. vygenerovaný potomek nahrazuje pseudonáhodně vybraného<br />

slabého příslušníka aktuální populace.


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

49<br />

5 Popis programů<br />

Stávající program OVD byl upraven tak, aby byla ponechána stávající<br />

funkcionalita a byl rozšířen o výpočet optimálních výrobních dávek a optimálních<br />

výrobních nákladů pro vícestupňový výrobní systém, který má po agregaci shluků<br />

stromovou strukturu a neobsahuje kružnice. Výpočet probíhá dvěma způsoby: přesnou<br />

metodou a pomocí simulovaného žíhání. V případě simulovaného žíhání se počítá ve<br />

struktuře, která obsahuje kružnice, se shluky. Program navíc umožňuje měřit dobu<br />

výpočtu jednotlivých způsobů výpočtu, generovat zprávu o výsledcích do souboru. Pro<br />

realizaci programového systému bylo zvoleno vývojové prostředí Delphi 2006 od firmy<br />

Borland.<br />

5.1 Uživatelské prostředí programu OVD<br />

Program byl navržen s ohledem na standardy aplikací provozovaných v prostředí<br />

Microsoft Windows. Oproti předchozím verzím z prací [5] a [6] nedoznalo GUI<br />

(graphical user interface) zásadních změn.<br />

5.1.1 Hlavní okno<br />

Hlavní okno je tvořeno čtyřmi základními komponentami:<br />

• Menu,<br />

• Nástrojová lišta,<br />

• Seznam procesů,<br />

• Stavová lišta.<br />

Náhled aplikace pro lepší představu čtenáře je na obr. 9.<br />

Obr. 9 Hlavní okno programu OVD.


Strana<br />

50<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Seznam procesů se zobrazuje v pořadí, v jakém byly procesy načteny ze<br />

vstupního souboru. Je-li okno prázdné, nebyl ještě načten žádný soubor s projektem. Po<br />

volbě procesu a stisku klávesy Enter (příp. poklepání myší) se zobrazí editační okno.<br />

V menu Proces – Hromadné zpracování lze spustit výpočet nad označenými procesy.<br />

Výsledky se ukládají přímo do pracovního sešitu aplikace Microsoft Excel, kterou tato<br />

funkce vyžaduje pro svůj chod.<br />

5.1.2 Editační okno<br />

Okno se vyvolá při editaci procesu (viz obr. 10). V horní části se editují a<br />

zobrazují parametry společné pro celý výrobní proces, konkrétně minimální, maximální<br />

a elementární výrobní dávka. Dolní část slouží k zobrazení výsledků výpočtů: optimální<br />

náklady vypočítané jednotlivými metodami a časy výpočtů.<br />

Obr. 10 Editační okno programu OVD.<br />

Detailní popis způsobu práce s editačním oknem je popsán v [6]. Ovládání je<br />

jednoduché, přehledné a intuitivní.<br />

5.1.3 Okno pro volbu výpočetních metod a nastavení parametrů pro<br />

stochastické heuristické metody<br />

Nastavení parametrů pro výpočet optimálních dávek pomocí simulovaného žíhání<br />

zásadně ovlivňuje výsledky výpočtů. Po klepnutí na ikonu pro spuštění výpočtu se


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

51<br />

zobrazí okno (obr. 11) pro volbu metod, které mají být při výpočtu použity. V případě,<br />

že uživatel zatrhne CheckBox simulované žíhání nebo genetický algoritmus, aktivuje se<br />

pravá část okna, ve které je možné nastavit konkrétní parametry.<br />

Obr. 11 Okno pro volbu metody výpočtu a jejích parametrů.<br />

5.2 Formát vstupního souboru<br />

Všechny procesy, které jsou zobrazené v seznamu procesů v hlavním okně<br />

programu, lze uložit do souboru s příponou .STG. Soubor byl navržen jako textový,<br />

aby jej bylo možno editovat v prakticky jakémkoli konvenčním textovém editoru<br />

(Poznámkový blok apod.). Je však nutno dodržovat danou šablonu pro zápis, aby byl<br />

čitelný pro aplikaci OVD. Účelem souboru je pouze poskytování vstupních dat,<br />

výstupní data (výsledky výpočtu) mohou být exportována do textového souboru<br />

s příponou .TXT.<br />

Soubor se vstupními daty musí začínat řetězcem „OVD file“, z čehož program<br />

indikuje kompatibilní soubor. Do souboru lze vkládat komentáře ve formě textových<br />

poznámek, které jsou na řádku uvozeny znakem středníku „ ; “. Uloží-li uživatel<br />

změny do otevřeného projektu s komentáři, dojde ke ztrátě těchto komentářů.<br />

V hranatých závorkách jsou názvy jednotlivých procesů, za kterými následují<br />

minimální výrobní dávka ve tvaru „a=číslo“, maximální výrobní dávka „b=číslo“ a<br />

elementární výrobní dávka „d=číslo“.<br />

Dále jsou definovány jednotlivé výrobní stupně, kde každý stupeň obsahuje<br />

následující položky:<br />

od. od. od. od.<br />

od. od. od.<br />

od. , od. je libovolný


Strana<br />

52<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

počet oddělovacích znaků „mezera“ nebo „tabulátor“. Pokud má výrobní stupeň více<br />

následníků, je nutné jejich čísla také oddělit mezerou nebo tabulátorem. Za<br />

oddělovačem po uvedení skladovacích nákladů jsou uvedeny ekvivalenty jednotky<br />

komponenty j-tého stupně, j ∈ a ( i)<br />

, což je počet jednotek i-té komponenty<br />

vstupujících do jedné jednotky j-té komponenty. Jednotlivé ekvivalenty jsou opět<br />

odděleny oddělovačem. Pořadí jednotlivých údajů je nutno dodržet.<br />

Výstupní stupně bez sukcesoru mají položku nastavenu na<br />

„OUT“. U těchto stupňů je také rychlost odběru z rovna položce výrobní rychlost.<br />

Reálná čísla je možné zadávat jak v klasickém formátu, tak v semilogaritmickém<br />

tvaru, počítá se prvních patnáct platných číslic za desetinnou tečkou.<br />

Příklad výpisu ze vstupního souboru:<br />

OVD file<br />

; úvodní řádek zde musí být<br />

; poznámky ...<br />

; ...<br />

;název prvního procesu<br />

[Proces XXX]<br />

;minimální výrobní dávka<br />

A=1<br />

;maximální výrobní dávka<br />

B=100<br />

;elementární výrobní dávka<br />

D=1<br />

;parametry jednotlivých výrobních stupňů<br />

1 2 5 : 20.45 150.78 7.7534E-3 2 20 1 1<br />

2 3 7 : 17.38 240.92 0.0096403 3 30 1 1<br />

.<br />

.<br />

.<br />

39 OUT : 2 0 0 2 20<br />

40 OUT : 2 0 0 3 20


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

53<br />

5.3 Program OVD z hlediska programátora<br />

Vývoj a odladění programu bylo provedeno ve vývojovém prostředí Borland<br />

Delphi 2006. Při vývoji systému bylo také nutné vyřešit otázku reprezentace stromové<br />

struktury za účelem nalezení kružnic a shluků ve strukturách. Vzhledem k metodě,<br />

kterou je test kružnic proveden, bylo potřeba použít i reprezentaci struktury pomocí<br />

matic. Pro tyto účely byla vytvořena knihovna Matrix nahrazující v předchozích verzích<br />

použitý produkt SDL Component Suite for Delphi 6.0 od vývojářské firmy Epina.<br />

5.3.1 Struktura programu<br />

Program byl navržen objektově. Každý proces je v programu chápán jako objekt,<br />

což znamená, že všechny operace s jeho daty jsou prováděny prostřednictvím metod<br />

objektu (např. výpočet přesnou metodou, simulovaným žíháním, … jsou metodami<br />

objektu), vlastnosti výrobního procesu a , b , … a vypočtené hodnoty jsou vlastnostmi<br />

i<br />

tohoto objektu.<br />

Při tvorbě jakéhokoliv software je nutné volit kompromis mezi dvěma dvěma<br />

krajními stavy, maximální rychlostí a minimální délkou kompilovaného kódu. Program<br />

byl navržen tak, aby byla zachována především dobrá čitelnost zdrojového kódu.<br />

5.3.2 Objekty a datové typy<br />

Základním stavebním kamenem programu, ve kterém jsou uchovávána všechna<br />

data, je objekt TList, patřící do standardního vybavení Delphi. Tento objekt bude dále<br />

nazýván kolekce (dle podobného objektu TCollection).<br />

TList je v podstatě seznam, který je schopen v sobě uchovávat ukazatele na<br />

libovolné struktury (objekty, záznamy, řetězce aj.). Tento objekt je vybaven metodami<br />

pro přístup k libovolným položkám, k jejich přidávání, mazání apod., z čehož plyne, že<br />

je zajištěna pohodlná manipulace s nimi.<br />

Specifikaci problému v kapitole 2 přímo vybízí k využití kolekce jako vhodného<br />

prostředku k vnitřní datové reprezentaci. Při navrhování struktury programu byl<br />

vytvořen potomek typu TList, který byl nazván TCelyProces. Tento objekt reprezentuje<br />

jeden proces a má následující stavbu:<br />

TCelyProces = class(TList)<br />

private<br />

MainName: string; {název procesu}<br />

Change: boolean; {indikátor změny}<br />

i


Strana<br />

54<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Actual: boolean; {aktuálnost hodnot}<br />

FVystStupen: word;<br />

{doba trvání výpočtu jednotlivých metod}<br />

ElapsedExactTime: longint;<br />

ElapsedHeurTime: longint;<br />

ElapsedGenTime: longint;<br />

public<br />

ShlukyKruznic: array of TIntVector; {pole shluků}<br />

ShlukyKruznic_count: integer; {počet shluků}<br />

A, B, Delt: longint; {charakteristiky procesu}<br />

ym: double;<br />

Ee, Eh1, Eh2, EGA: double; {optimální výr. nákl.}<br />

EL, EH: double; {dolní a horní hranice}<br />

MaticeEkviv: TMatrix; {matice ekvivalentů}<br />

{matice s daty agregované struktury}<br />

C2ijMatrix, Bij1Matrix, Bij2Matrix: TMatrix;<br />

PrecislInd: TIntVector; {vektor pro přečíslování}<br />

DefinZ: boolean; {indikátor defin. rychl. odběru}<br />

procedure KontrolaKruznic(var aNeobsahujeKruznice: Boolean);<br />

end;<br />

Protože program umožňuje zpracovat více než jeden výrobní proces, jsou<br />

jednotlivé ukazatele na instance objektů TCelyProces uloženy ve zvláštní tabulce.<br />

Spustí-li uživatel akci editace dat, je z této tabulky editačnímu oknu předán ukazatel na<br />

příslušnou instanci, čímž okno získá možnost přístupu ke všem datům konkrétního<br />

procesu.<br />

V instanci objektu TCelyProces jsou uloženy ukazatele na instance objektu<br />

TJedenStupen nebo TJedenShluk, které definují jeden výrobní stupeň resp. shluk.<br />

TJedenStupen ve zdrojovém kódu pak vypadá následovně:<br />

TJedenStupen = class(TObject)<br />

private<br />

VZaklStromu: boolean;<br />

public<br />

{charakteristiky výrobního stupně}<br />

shluk_id: integer; {identifikátor shluku}<br />

v_kruznici: boolean; {příznak je/není v kružnici}<br />

Z_calculated: boolean; {příznak spočítání z}<br />

{výrobní rychlost, seřizovací a skladovací nákl.}<br />

y, C1, C2: double;<br />

tau: double; {termín uzlu}


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

55<br />

z: longint; {rychlost odběru}<br />

xe, xh, xga: longint; {vypočtené výrobní dávky}<br />

Name: string; {název stupně}<br />

Sukc: TIntVector; {tabulka následníků}<br />

Ai, Bi, B1, B2: longint; {výrobní dávka max a min}<br />

end;<br />

A TJedenShluk jako potomek třídy TJedenStupen má tvar:<br />

TJedenShluk = class(TJedenStupen)<br />

public<br />

{seznam původních stupňů shluku}<br />

puvodni_stupne: TIntVector;<br />

D: double;<br />

end;<br />

Při výpočtech bylo nutné uchovávat tabulky hodnot, které byly třeba pro výpočet<br />

(např. tabulka hodnot Φ ( x ), k , atd.). Tabulky hodnot mohou být reprezentovány<br />

i i i<br />

vektory, které musí být schopny dynamicky měnit svůj rozsah, protože jejich velikost je<br />

známá až při běhu programu. Pro takové účely byly použity objekty TIntVector,<br />

TdoubleVector a TMatrix, které dynamickou změnu rozsahu umožňují. Pro snadnější<br />

manipulaci s objekty při výpočtech jsou stupně označovány číselně. Každý stupeň lze<br />

identifikovat pomocí jeho pořadí v kolekci TCelyProces.<br />

V načteném procesu obsahujícím seznam instancí třídy TJedenStupen jsou<br />

nejprve zjištěny kružnice a z nich vytvořeny shluky (je volána procedura<br />

KontrolaKruznic). Následuje vytvoření druhé instance třídy TJedenProces, který<br />

obsahuje seznam instancí třídy TJedenShluk (volá se funkce AggregateFrom)<br />

reprezentující agregovanou strukturu bez kružnic. Poté je takto nově vytvořený proces<br />

převeden do objektu pro výpočet (TStages, TOneStage), kde je přečíslován a jsou<br />

volány metody objektu SetSuc, SetPred. Pokud byl vybrán přesný výpočet, je<br />

volána metoda Calculate.<br />

Pro výpočet výrobních nákladů v neagregované obecné struktuře byla vytvořena<br />

nová třída TGeneralStruct obsahující seznam stupňů třídy TStage. TGeneralStruct je ve<br />

zdrojovém kódu definována následovně:<br />

TGeneralStruct = class<br />

private<br />

Stages: array of TStage; {pole výrobních stupňů}<br />

EkvivMatrix: TMatrix; {matice ekvivalentů}


Strana<br />

56<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

{matice největších společných dělitelů}<br />

GCDMatrix: TMatrix;<br />

{matice vij a uij}<br />

vijMatrix, uijMatrix: TMatrix;<br />

{výpočet ideálního min možného předstihu}<br />

function v_ij(i,j: integer): double;<br />

{největší společný dělitel}<br />

function GCD(i,j:integer): integer;<br />

public<br />

{celková suma průměrných seřiz. a sklad. nákladů}<br />

function F(periodVect: TIntVector): double;<br />

end;<br />

Pro metodu simulovaného žíhání byla vytvořena třída TSAProcessor:<br />

TSAProcessor = class<br />

private<br />

alpha: double; {koef. pro snižování teploty}<br />

{teplota, teplota minimální a maximální}<br />

Temperature, Temp_min, Temp_max: double;<br />

{fční hodnota původ. řeš., nová fční hodnota, nejlepší řeš.}<br />

F_x, F_newx, F_Opt: double;<br />

{max. počet pokusů pro dané T, max. počet úspěšných pokusů}<br />

tmax, kmax: integer;<br />

StagesCount: integer; {počet stupňů}<br />

Process: TGeneralStruct; {struktura pro výpočet nákladů}<br />

OutsVect, Ai_vect, Bi_vect, x_in, x, x_out, x_opt:<br />

TIntVector;<br />

procedure InitialState(stat:TIntVector); {výchozí dávky st.}<br />

{nastaví aktuálnímu stupni novou dávku}<br />

procedure ModifyState(origState, newState: TIntVector);<br />

{vnitřní cyklus SA; metropolisův vzorec}<br />

procedure Metropolis(input,output: TIntVector);<br />

public<br />

procedure SetParameters(TemperatureMin, TemperatureMax,<br />

alfa: double; t_max, k_max: integer); {vstupní parametry SA}<br />

procedure RunSA; {vnější cyklus SA}<br />

function ResultState(): TIntVector; {nejlepší řešení SA}<br />

end;<br />

Instance objektu TSAProcessor se vytvoří na základě už načtené a vytvořené<br />

struktury v instanci objektu TCelyProces. Parametry žíhání se nastaví procedurou<br />

SetParameters a pak se spustí procedurou RunSA. Samotné žíhaní pak běží


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

57<br />

nezávisle na tomto objektu, jen se zde po skončení uloží výsledky, které se pak zobrazí<br />

ve formuláři. Funkce ResultState vrací vektor period. Implementace žíhání je<br />

zobrazena v diagramu na obr. 12.<br />

TCelyProces<br />

TSAProcessor<br />

Soubor<br />

*.STG<br />

Vstupní<br />

data<br />

Stupně<br />

Zjištění kružnic a<br />

shluků<br />

Proces,<br />

kružnice<br />

Simulované žíhání<br />

TGeneralStruct<br />

Výpočet<br />

nákladů F<br />

Rychlosti na<br />

stupních<br />

Výstupní<br />

data<br />

Formulář, tabulka...<br />

Obr. 12 Diagram implementace simulovaného žíhání.<br />

5.4 Program pro generování dat<br />

Součástí této práce bylo i vytvořit generátor procesů pro snadnější vytváření<br />

procesů, které pak budou použity pro experimenty.<br />

Program pro generování dat se nazývá „Generátor procesů“ a nachází se na<br />

přiloženém CD jako soubor ProcessGenerator.exe. Tento program byl vytvořen pro<br />

generování výrobních procesů s obecnou (síťovou) strukturou v neomezeném počtu<br />

s možnostmi rozsáhlého nastavení parametrů generovaných procesů. Omezením jsou<br />

ale nároky programu OVD při výpočtu, proto je nutné generovat procesy s ohledem na<br />

možnosti počítače a programu OVD.<br />

5.4.1 Uživatelské rozhraní<br />

Po spuštění se objeví okno aplikace s editovatelnými položkami pro nastavení<br />

parametrů generovaných procesů (ty jsou již předvyplněny vzorovými implicitními<br />

parametry) a s tlačítky pro jednotlivé akce (viz obr. 13).<br />

Parametry lze nastavovat libovolně v rámci omezení danými matematickým<br />

modelem procesu. Parametry lze také uložit do souboru pro pozdější použití. Program<br />

umožňuje vygenerovat soubor s nastaveným počtem procesů, nebo přidávat po<br />

jednotlivých procesech do souboru, kdy pro každý takto vygenerovaný proces lze


Strana<br />

58<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

upravovat parametry. Obsah výsledného souboru se zobrazuje v pravé straně okna<br />

generátoru. Text je možné měnit a tím si upravovat procesy podle potřeby. Validita<br />

takto upraveného procesu již ale není kontrolována. Obsah editoru lze uložit do souboru<br />

pomocí tlačítka „Uložit jako“. Implicitně se ukláda do souboru s příponou .stg, se<br />

kterou pracuje program OVD.<br />

Do programu byla implementována i funkčnost pro zjednodušené zobrazování<br />

vygenerovaného procesu. Tato funkcionalita je dostupná pouze v případě generování<br />

jednoho procesu – „Generuj jeden“ – a je dostupná po kliknutí na tlačítko „“<br />

v pravém horním rohu aplikace při dvojitém poklepání do zobrazovací části programu<br />

vpravo. Opakovaným „double-clickem“ se zobrazování vrací do textového módu.<br />

Obr. 13 Okno programu Generátor procesů.<br />

5.4.2 Vstupní data<br />

Pro vygenerování procesu jsou použity následující vstupy, z nichž většinu je<br />

možné nechat náhodně zvolit v určeném intervalu přípustných hodnot:<br />

• počet vstupních stupňů I min , I max (generováno v rozsahu)<br />

• počet mezivrstev L min , L max (generováno v rozsahu)<br />

• počet stupňů v mezivrstvách S min , S max (generováno v rozsahu)<br />

• počet výstupních stupňů O min , O max (generováno v rozsahu)<br />

• maximální výrobní dávka B min , B max (násobek z)


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

59<br />

• ekvivalent jednotky komponenty j-tého stupně E min , E max (generováno<br />

v rozsahu)<br />

• výstupní rychlosti Y min , Y max (generováno v rozsahu)<br />

• pevné seřizovací náklady C1 min , C1 max (generováno v rozsahu)<br />

• skladovací náklady za jednotku času C2 min , C2 max (generováno v rozsahu;<br />

pouze u výstupních stupňů, pro ostatní se dopočítává)<br />

• pokles skladovacích nákladů D min , D max<br />

• počet generovaných procesů<br />

• semínko pro náhodný generátor<br />

5.4.3 Generování procesů<br />

Generování struktury i dat probíhá s využitím generátoru pseudonáhodných čísel<br />

z knihovny System.pas dodávané s vývojovým prostředím Delphi, ve kterém je<br />

generátor vytvořen. Aby bylo možné opakovat generování se stejnými parametry a<br />

zároveň stejným výsledkem, je zde možnost nastavení parametru Randomize Seed,<br />

který generátor pseudonáhodných čísel využívá jako inicializační proměnou. Celý<br />

soubor takto vygenerovaných dat je pak určen výhradně vstupními parametry.<br />

V případě že není hodnota Random Seed nastavena, generátor pseudonáhodných čísel<br />

použije jako Random Seed aktuální hodnotu interního časovače.<br />

V programu je struktura grafu reprezentována objektem třídy TNet. Ten obsahuje<br />

pole s jednotlivými stupni (třída TNode) a všechny potřebné struktury a metody pro<br />

manipulaci s nimi.<br />

Pro vygenerování několika procesů najednou je zde nastavení počtu procesů a<br />

tlačítko „Vygenerovat“. Random Seed se nastaví před samotným generováním procesů.<br />

Pro přidání jednoho procesu do souboru je zde tlačítko „Vygenerovat jeden“. Random<br />

Seed se nastaví před každým vygenerováním.<br />

5.4.4 Generování struktury<br />

Algoritmus byl vytvořen tak, aby generoval obecnou výrobní strukturu, tzn.<br />

vícevýrobkový vícestupňový výrobně-montážní systém s obecnou síťovou strukturou,<br />

ve které každý stupeň může být zásobován několika bezprostředními předchůdci a jeho<br />

výstup může sloužit jako vstupy pro několik bezprostředních následníků.<br />

Struktura je rozdělena do vrstev obsahujících stupně, které jsou propojeny jen se<br />

stupni z předchozí a následující vrstvy. Na začátku se vygeneruje vstupní a výstupní


Strana<br />

60<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

vrstva s nastaveným nebo z nastavení vygenerovaným počtem stupňů v těchto vrstvách.<br />

Následuje vytvoření mezivrstev a vytvoření stupňů pro tyto vrstvy.<br />

Propojení mezi jednotlivými stupni je rozděleno do 3 fází. V první se pomocí<br />

rekurze náhodně vytvoří cesty z jednotlivých vstupů směrem k výstupům. V druhé fázi<br />

se zkontroluje propojení na předchůdce. V případě že neexistuje žádné propojení,<br />

náhodně se propojí se stupněm v předchazející vrstvě (upřednostní se stupně které<br />

nemají následníka). V poslední fázi dochází ke kontrole následníků. Jestliže stupeň<br />

žádného nemá, je mu náhodně přidělen z následující vrstvy.<br />

Graficky znázorněné generovaní obecné struktury pomocí programu Generátor<br />

procesů by mohlo vypadat například takto:<br />

Obr. 13 Příklad generování výrobní struktury pomocí programu Generátor procesů.


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

61<br />

5.4.5 Generování dat<br />

Data byla generována podle následujících algoritmů:<br />

Počet vstupních stupňů<br />

I = I min + R I , kde R I je celé náhodné číslo v intervalu <br />

Počet výstupních stupňů<br />

O = O min + R O , kde R O je celé náhodné číslo v intervalu <br />

Počet vrstev<br />

L = L min + R L , kde R L je celé náhodné číslo v intervalu <br />

Počet stupňů ve vrstvě<br />

S = S min + R S , kde R S je celé náhodné číslo v intervalu <br />

Ekvivalent<br />

E i,j = E min + R E , kde R E je celé náhodné číslo v intervalu .<br />

Seřizovací náklady<br />

C 1i = C1 min + R(C1 max – C1 min )<br />

Rychlost na výstupních stupních<br />

y i = Y min + R Y , kde R Y je celé náhodné číslo v intervalu <br />

Minimální výrobní dávka<br />

a i = z i<br />

Maximální výrobní dávka<br />

b i = z i R b , kde R b je celé náhodné číslo v intervalu .<br />

Hodnota z i je po nastavení rychlostí na výstupních stupních dopočítána pro ostatní<br />

stupně a je použita pro nastavení minimálních a maximálních výrobních dávek.<br />

Pro generování skladovacích nákladů bylo nutné použít složitějšího přístupu:<br />

Skladovací náklady (pouze na výstupních stupních)


Strana<br />

62<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

C 2i = C1 min + R(C1 max – C1 min ), kde R je náhodné reálné číslo z intervalu .<br />

2<br />

Pro ostatní stupně<br />

j<br />

(<br />

C 2, j<br />

) p<br />

C<br />

i<br />

C2 = 1− kR , přičemž i jsou všechny nevýstupní<br />

stupně, j ∈ b( i)<br />

, b( i)<br />

≠ ∅ , p je počet prvků množiny b(i) a k je číslo vyjadřující<br />

percentuálně povolený pokles hodnoty C 2j a platí k = D min + R(D max – D min )<br />

5.4.6 Výstup programu<br />

Výstupem programu je soubor ve formátu .stg čitelném v programu OVD. Mohou<br />

nastat případy, kdy vygenerovaný proces nepůjde programem OVD zpracovat, a to<br />

z důvodu vysoké výpočetní náročnosti, nebo nesplnění některé z podmínek validního<br />

procesu.


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

63<br />

6 Experimenty a jejich vyhodnocení<br />

Aby bylo možné porovnat přesnosti a časové náročnosti výpočtů optimalizace<br />

výrobních nákladů, je třeba provést dostatečný počet experimentů na dostatečném<br />

vzorku dat. Srovnány budou přístupy pro optimalizaci výrobních nákladů, které jsou<br />

náplní této práce. Konkrétně se jedná o přesnou metodu s transformovanými<br />

(agregovanými) shluky a simulované žíhání aplikované na systém se shluky. Měření<br />

proběhnou v programu OVD.<br />

6.1 Experimenty s optimalizací pomocí simulovaného žíhání<br />

U simulovaného žíhání lze nastavit několik parametrů, které ovlivňují chod a<br />

konečný výsledek výpočtu. Vhodné nastavení parametrů není předem dáno a závisí na<br />

daném optimalizačním problému. Tento experiment se zaměřil na prozkoumání chování<br />

simulovaného žíhání v závislosti na jeho parametrech v určitém rozsahu. Parametry<br />

kromě právě zkoumaného byly nastaveny takto:<br />

T min = 1<br />

T max = 1000<br />

α = 0,95<br />

k max = 400<br />

t max = 200<br />

Byly zkoumány závislosti výrobních nákladů F a doby běhu simulovaného žíhání<br />

na právě měněném parametru. Výsledné charakteristiky jsou prezentovány<br />

v následujících grafech.<br />

1200<br />

1000<br />

800<br />

F<br />

600<br />

400<br />

200<br />

0<br />

0,5 0,55 0,6 0,65 0,7 0,75 0,8 0,85 0,9 0,95 1<br />

alfa<br />

Obr. 14 Závislost výrobních nákladů F na parametru α.


Strana<br />

64<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

20000<br />

18000<br />

16000<br />

14000<br />

12000<br />

t[ms]<br />

10000<br />

8000<br />

6000<br />

4000<br />

2000<br />

0<br />

0,5 0,55 0,6 0,65 0,7 0,75 0,8 0,85 0,9 0,95 1<br />

alfa<br />

Obr. 15 Závislost času t na parametru α.<br />

300<br />

250<br />

200<br />

F<br />

150<br />

100<br />

50<br />

0<br />

0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 1<br />

Tmin<br />

Obr. 16 Závislost výrobních nákladů F na parametru T min .<br />

7000<br />

6000<br />

5000<br />

t[ms]<br />

4000<br />

3000<br />

2000<br />

1000<br />

0<br />

0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 1<br />

Tmin<br />

Obr. 17 Závislost času t na parametru T min .


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

65<br />

400<br />

350<br />

300<br />

250<br />

F<br />

200<br />

150<br />

100<br />

50<br />

0<br />

0 200 400 600 800 1000 1200 1400 1600 1800 2000<br />

Tmax<br />

Obr. 18 Závislost výrobních nákladů F na parametru T max .<br />

4500<br />

4000<br />

3500<br />

3000<br />

t[ms]<br />

2500<br />

2000<br />

1500<br />

1000<br />

500<br />

0<br />

0 200 400 600 800 1000 1200 1400 1600 1800 2000<br />

Tmin<br />

Obr. 19 Závislost času t na parametru T max .<br />

1000<br />

900<br />

800<br />

700<br />

600<br />

F<br />

500<br />

400<br />

300<br />

200<br />

100<br />

0<br />

0 50 100 150 200 250 300 350 400 450 500<br />

kmax<br />

Obr. 20 Závislost výrobních nákladů F na parametru k max .


Strana<br />

66<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

4000<br />

3500<br />

3000<br />

2500<br />

t[ms]<br />

2000<br />

1500<br />

1000<br />

500<br />

0<br />

0 50 100 150 200 250 300 350 400 450 500<br />

kmax<br />

Obr. 21 Závislost času t na parametru k max .<br />

1200<br />

1000<br />

800<br />

F<br />

600<br />

400<br />

200<br />

0<br />

0 50 100 150 200 250<br />

tmax<br />

Obr. 22 Závislost výrobních nákladů F na parametru t max .<br />

5000<br />

4500<br />

4000<br />

3500<br />

3000<br />

t[ms]<br />

2500<br />

2000<br />

1500<br />

1000<br />

500<br />

0<br />

0 50 100 150 200 250<br />

tmax<br />

Obr. 23 Závislost času t na parametru t max .


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

67<br />

350<br />

300<br />

250<br />

náklady F<br />

200<br />

150<br />

100<br />

50<br />

0<br />

0 5 10 15 20 25 30 35 40 45 50<br />

pořadí opakování<br />

Obr. 24 Závislost výrobních nákladů F na pořadí opakování.<br />

3760<br />

3740<br />

3720<br />

čas běhu t[ms]<br />

3700<br />

3680<br />

3660<br />

3640<br />

3620<br />

3600<br />

0 5 10 15 20 25 30 35 40 45 50<br />

pořadí opakování<br />

Obr. 25 Závislost času běhu na pořadí opakování.<br />

Z předchozích grafů je zřejmá souvislost mezi nastavením parametrů a výsledky<br />

resp. dobou běhu simulovaného žíhání. U parametru α prudce narůstá čas běhu<br />

algoritmu nad hodnotou 0,95. Pro T min < 0,1 také výrazně narůstá čas. Je tedy vhodné<br />

tyto parametry nastavovat pod resp. nad tyto hodnoty. V případě T max nebyl v měřeném<br />

rozsahu zaznamenán výrazný vliv na výsledek simulovaného žíhání a proto se<br />

doporučuje vybírat T max co nejmenší s ohledem na časovou náročnost algoritmu.<br />

Z charakteristiky t max se jeví jako vhodné volit hodnoty v intervalu . U<br />

parametru k max je na první pohled viditelné omezení parametrem t max na<br />

hranicit max<br />

= 200. Zdá se být výhodné volit k max v intervalu .<br />

Z grafu opakovaného pouštění bylo zjištěno, že výsledky se pohybují v rozptylu<br />

přibližně ±40% od střední hodnoty.


Strana<br />

68<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

6.2 Experiment s více procesy v jedné dávce<br />

V aplikaci Generátor procesů bylo vygenerováno 64 procesů.<br />

Pro každý proces, který byl vygenerován, byly v rámci experimentu vypočteny<br />

hodnoty optimálních výrobních dávek, optimálních nákladů E. Náklady vypočtené<br />

s pomocí simulovaného žíhání E SZ byly dosaženy s nastavením parametrů:<br />

T min = 0,1<br />

T max = 500<br />

α = 0,97<br />

k max = 500<br />

t max = 250<br />

Měřící stanice, na které byly experimenty provedeny, je PC s procesorem AMD<br />

Athlon 2200MHz (cache 512kB), operační pamětí velikosti 1024MB a operačním<br />

systémem Microsoft Windows XP Professional s opravným balíkem SP2.<br />

Výsledky experimentu jsou v následující tabulce:<br />

Náklady Čas přesná Náklady Čas žíhání Chyba proti přesné<br />

přesná [ms] žíhání [ms] [%]<br />

Proces1 281 46 388 10250 38<br />

Proces2 395 19 495 5672 26<br />

Proces3 208 170 246 8079 18<br />

Proces4 348 197 726 12609 109<br />

Proces5 477 139 766 6891 61<br />

Proces6 218 29 663 5203 204<br />

Proces7 644 9 1081 12688 68<br />

Proces8 262 126 1233 7687 371<br />

Proces9 140 25 250 5188 79<br />

Proces10 160 177 333 3297 109<br />

Proces11 180 181 284 3750 58<br />

Proces12 128 101 523 4250 308<br />

Proces13 205 147 354 4203 72<br />

Proces14 397 72 575 4313 45<br />

Proces15 557 24 827 6188 48<br />

Proces16 473 172 3054 5797 546<br />

Proces17 2414 4 2864 6750 19<br />

Proces18 682 158 1851 5656 171<br />

Proces19 715 88 1632 6218 128<br />

Proces20 172 146 497 4890 189<br />

Proces21 394 133 836 7437 112<br />

Proces22 941 189 1659 8922 76<br />

Proces23 112 30 265 5297 136<br />

Proces24 376 156 944 8203 151<br />

Proces25 484 173 1706 5188 253<br />

Proces26 199 143 310 5829 55<br />

Proces27 340 20 758 9000 123


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

69<br />

Proces28 2243 102 4495 10125 100<br />

Proces29 603 57 851 6844 41<br />

Proces30 612 56 1941 6875 217<br />

Proces31 255 53 482 5203 89<br />

Proces32 700 136 1923 7484 175<br />

Proces33 203 183 547 4609 169<br />

Proces34 170 71 302 4578 78<br />

Proces35 303 99 796 4796 163<br />

Proces36 224 178 627 4734 180<br />

Proces37 471 28 1138 6532 142<br />

Proces38 2806 54 5640 6265 101<br />

Proces39 767 45 1289 7422 68<br />

Proces40 1245 86 1695 7531 36<br />

Proces41 342 170 1504 7625 340<br />

Proces42 881 90 1230 8828 40<br />

Proces43 837 94 3139 9000 275<br />

Proces44 502 84 1339 7359 167<br />

Proces45 572 175 1377 4265 141<br />

Proces46 98 81 149 3750 52<br />

Proces47 708 138 869 4109 23<br />

Proces48 899 11 1250 7422 39<br />

Proces49 279 174 697 12016 150<br />

Proces50 490 18 745 7437 52<br />

Proces51 303 194 471 14609 56<br />

Proces52 596 18 765 14281 28<br />

Proces53 375 139 1006 8375 168<br />

Proces54 392 7 877 11765 124<br />

Proces55 600 52 1762 10156 194<br />

Proces56 63 63 67 10906 5<br />

Proces57 56 32 56 12390 0<br />

Proces58 99 31 100 9484 1<br />

Proces59 139 31 138 11641 -1<br />

Proces60 150 47 150 12453 0<br />

Proces61 92 109 102 10047 12<br />

Proces62 154 234 186 14969 21<br />

Proces63 97 46 114 10125 18<br />

Proces64 139 47 148 13312 7<br />

Střední hodnoty 490 95 1017 7793 110<br />

Celkový čas 6104 498777<br />

Tab. 1 Výsledky experimentu.<br />

Pro srovnávání bylo provedeno i měření času z hlediska časové náročnosti přesné<br />

metody a metody simulovaného žíhání. Pro obě zmiňované metody se měří čas při<br />

výpočtu každého z 64 procesů. U simulovaného žíhání byl měřen čas, za který daná<br />

metoda dosáhla hodnoty optimálních nákladů, která byla získána přesným řešením.<br />

Jako časově nejnáročnější metoda pro výpočet výrobních nákladů se projevila metoda<br />

simulovaného žíhání. Proto je počítána střední časová úspora pro přesnou metodu<br />

vzhledem k výpočtu pomocí simulovaného žíhání.


Strana<br />

70<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

71<br />

7 Závěr<br />

V této diplomové práci je řešen problém minimalizace výrobních nákladů. Daný<br />

problém je řešen pro časově invariantní výrobní dávky v systémech se síťovou<br />

strukturou a periodickou výrobou, ve které každý stupeň může mít několik předchůdců,<br />

následníků a několik vstupních a výstupních výrobních stupňů. Předpokládá se, že po<br />

zanedbání orientace hran může struktura obsahovat kružnice a jejich shluky.<br />

Na základě poznatků získaných ze zadané literatury byly v druhé a třetí kapitole<br />

popsány metody, které umožňují stanovit přesnou hodnotu a hranice optimálních<br />

nákladů. V další kapitole je uveden popis genetických algoritmů a simulovaného žíhání.<br />

Následuje návrh jejich použití pro řešení problému optimalizace výrobních nákladů.<br />

Pro řešení daného problému na počítači byl na základě jednotlivých metod<br />

upraven stávající program, který byl rozšířen o metody z kapitoly třetí a čtvrté (bylo<br />

použito simulované žíhání). Realizuje nejen tyto výpočty, ale umožňuje také spravovat<br />

data výrobních procesů a exportovat výsledky výpočtů do programu Microsoft Excel.<br />

Dále byl proveden výpočetní experiment, který umožnil porovnat obě použité<br />

metody. Při porovnání byla hodnocena nejenom přesnost metody, ale také její<br />

náročnost na spotřebu strojového času.<br />

Z rozboru výsledků získaných výpočetním experimentem bylo zjištěno, že<br />

simulované žíhání nedává dostatečně přesné výsledky v přijatelně krátkém čase<br />

v porovnání s přesnou metodou.<br />

Dále byl rozebrán vliv parametrů simulovaného žíhání na výsledky a<br />

spotřebovaný výpočetní čas.<br />

Využití algoritmu simulovaného žíhání má však ale výhodu v nastavování<br />

rychlosti výroby na jednotlivých výrobních stupních i ve shlucích. Nevýhodou<br />

simulovaného žíhání je mnoho nastavitelných parametrů a tedy mnoho stupňů volnosti,<br />

což vyžaduje expertní znalost problémů při jejich nastavování. V některých případech<br />

je možno dosáhnout lepších výsledků s využitím genetických algoritmů, které určité<br />

parametry řídí samy.


Strana<br />

72<br />

ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák


ÚAI FSI VUT<br />

DIPLOMOVÁ PRÁCE<br />

Radek Lošťák<br />

Strana<br />

73<br />

8 Seznam použité literatury<br />

[1] Kuik, R., Salomon, M. and van Wassenhove, L. N. Batching Decisions:<br />

Structure and Models. European Journal of Operational Research, Vol. 75,<br />

1994, pp. 243-263.<br />

[2] Karimi, I. A.: Optimal Cycle Times in Multistage Serial Systems with Setup<br />

and Inventory Costs. Management Science, Vol. 38, No. 10, 1992,<br />

pp. 1467-1481.<br />

[3] Dvořák, J.: Lot Size Determination in Arborescent Production-Inventory<br />

Systems. In Proceedings of 7th International DAAAM Symposium, Vienna,<br />

Austria, 1996, pp. 111-112.<br />

[4] Dvořák, J.: Modelling Production-Inventory Processes for Optimal Lot<br />

Sizes Determination. In Proceedings of the 31st Spring International<br />

Conference MOSIS`97. Hradec nad Moravicí, 1997, Vol. 2, pp. 127-132.<br />

[5] Crhák, T. Optimalizace výrobních dávek. [Diplomová práce.] Brno, 1997,<br />

ÚAI FSI VUT.<br />

[6] Adam, J. Optimalizace výrobních dávek v periodické výrobě. [Diplomová<br />

práce.] Brno, 2004, ÚAI FSI VUT.<br />

[7] Dvořák, J.: Optimalizace výrobních dávek výrobně-montážního procesu.<br />

[Kandidátská disertační práce.] Brno, 1988.<br />

[8] Kvasnička, V., Pospíchal, J., Tiňo, P.: Evolučné algoritmy. 1. vydanie,<br />

Bratislava, Vydavatelstvo STU 2000.<br />

[9] Majer, P.: Moderní metody rozvrhování výroby. [Kandidátská disertační<br />

práce.], Brno, 2004, ÚAI FSI VUT, http://majer.czweb.org/scheduling/.<br />

[10] Dvořák, J.: Koncept habilitační práce<br />

[11] Swan, T.: Mistrovství v Delphi 4: kompletní průvodce pro tvorbu aplikací.<br />

1. vyd. Brno. Computer Press, 1999. xxvi, 830. Programování. ISBN 80-<br />

7226-173-8.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!