190 likes | 399 Views
Celočíselné programování. RNDr. Jiří Dvořák, CSc. dvorak @uai.fme.vutbr.cz. Úloha celočíselného programování. Minimalizovat f ( x 1 , x 2 , … , x n ) za podmínek kde Z je množina celých čísel. Klasifikace úloh celočíselného programování. Úlohy plně ( ryze ) celočíselné:
E N D
Celočíselné programování RNDr. Jiří Dvořák, CSc. dvorak@uai.fme.vutbr.cz Teorie systémů a operační analýza
Úloha celočíselného programování Minimalizovat f(x1, x2, … , xn) za podmínek kde Z je množina celých čísel. TSOA: Celočíselné programování
Klasifikace úloh celočíselného programování • Úlohy plně (ryze) celočíselné: J = {1, 2, … , n} Podmínka celočíselnosti se vztahuje na všechny proměnné. • Úlohy částečně (smíšeně) celočíselné: J {1, 2, … , n} Některé proměnné nemusejí být celočíselné. • Úlohy bivalentního (nula-jedničkového) programování: Mj = {0, 1} Proměnné mohou nabývat pouze hodnot nula nebo jedna. TSOA: Celočíselné programování
Úloha celočíselného LP ve standardním tvaru kde Z je množina celých čísel. TSOA: Celočíselné programování
Příklady úloh celočíselného LP • Úloha optimalizace výrobního programu, kde množství výrobků se počítá v kusech. • Řezný problém (rozhodovací proměnné vyjadřují počty kusů výchozího materiálu, rozřezané podle jednotlivých řezných plánů). • Přiřazovací problém (rozhodovací proměnné xij nabývají hodnoty jedna nebo nula podle toho, zda i-tý objekt z 1. skupiny je či není přiřazen j-tému objektu ze 2. skupiny). • Úloha o batohu (rozhodovací proměnné xj nabývají hodnoty jedna nebo nula podle toho, zda j-tý předmět je či není vložen do batohu). TSOA: Celočíselné programování
Přiřazovací problém Jsou dány dvě skupiny objektů, každá o n objektech. Každému objektu 1. skupiny je třeba přiřadit právě jeden objekt 2. skupiny. Přiřazení i-tého objektu 1. skupiny j-tému objektu 2. skupiny přinese zisk resp. ztrátu cij. Je-li i-tému objektu 1. skupiny přiřazen j-tý objekt 2. skupiny, je xij = 1, jinak xij = 0. TSOA: Celočíselné programování
Přístupy k řešení celočíselných úloh • Zanedbání podmínek celočíselnosti, použití vhodné metody LP nebo NLP a upravení výsledků na celá čísla. Při tomto způsobu hrozí nebezpečí, že se dopustíme příliš velké chyby nebo dokonce získáme nepřípustné řešení. Na druhé straně u některých úloh, jako je např. přiřazovací problém nebo dopravní problém s celočíselnými hodnotami pravých stran omezení, je při zanedbání podmínek celočíselnosti a použití simplexové metody teoreticky zaručeno získání celočíselného optimálního řešení. • Použití metod celočíselného programování. TSOA: Celočíselné programování
Metody řešení celočíselných úloh • Metody sečných nadrovin (např. Gomoryho metody) • Metodyvětví a mezí • Metodydynamického programování • Speciálnímetody pro řešení problému určitého typu • (např. maďarská metoda pro řešení přiřazovacího problému) • Heuristickémetody • obecné heuristiky (metaheuristiky) - např. lokální hledání, genetické algoritmy, simulované žíhání, zakázané hledání • problémově specifické heuristiky TSOA: Celočíselné programování
Metoda sečných nadrovin pro lineární úlohy 1. Zanedbáme podmínky celočíselnosti. 2. Úlohu řešíme simplexovou metodou. Splňuje-li získané optimální řešení podmínky celočíselnosti, pak končíme. 3. V opačném případě do úlohy přidáme lineární omezení, které má tyto vlastnosti: • je splněno pro libovolné přípustné řešení původní celočíselné úlohy, • není splněno pro optimální neceločíselné řešení (příslušná nadrovina toto řešení „odřízne“). Vracíme se na krok 2 a pokračujeme duálně simplexovou metodou. Pozn.: V některých případech může dojít k velkému nárůstu rozměrnosti úlohy a ke zpomalení konvergence. TSOA: Celočíselné programování
Konstrukce sečné nadroviny Nechť B je optimální báze. Označme symboly ij prvky matice B–1A a i prvky vektoruB–1b. Dále budeme označovat symbolem [x] největší celé číslo menší nebo rovné hodnotě x. Nechť k není celočíselné. K soustavě rovnic z poslední simplexové tabulky připojíme rovnici kde rkj = kj – [kj], Rk = k – [k] a xn+1 je další nezáporná proměnná. TSOA: Celočíselné programování
Metoda větví a mezí Uvažujme úlohu 1. Položme MR = M, p = 0 (MR označuje rozkládanou množinu). 2. Větvení: Množinu MR rozložíme na r po dvou disjunktních podmnožin Mp+1 , Mp+2 , … , Mp+r , jejichž sjednocením je množina MR. 3. Omezování: Určíme horní mez h(Mk) hodnot funkce f(x) pro každou podmnožinu Mk vzniklou v posledním rozkladu. 4. Lze-li nalézt přípustné řešení xo takové, že pro všechny dosud nerozložené podmnožiny platí f(xo) h(Mk), pak postup končí a xo je optimální řešení. V opačném případě za množinu MR zvolíme podmnožinu s největší horní mezí, položíme p = p+r a vracíme se na krok 2. TSOA: Celočíselné programování
Metoda větví a mezí pro maximalizační úlohu LP • Omezování: Každá z podmnožin vzniklých rozkladem je charakterizována soustavou lineárních omezení a podmínek celočíselnosti. Zanedbáme podmínky celočíselnosti a vzniklou úlohu řešíme simplexovou metodou. Získaná optimální hodnota účelové funkce je horní mezí hodnot účelové funkce na příslušné podmnožině. • Větvení: Nechť xo je optimální řešení neceločíselné úlohy odpovídající rozkládané množině a nechť je neceločíselná hodnota proměnné xk . Množinu rozdělíme na dvě podmnožiny tak, že k původním podmínkám přidáme poprvé podmínku xk [ ] a podruhé podmínku xk [ ] + 1, kde [ ] je celá část hodnoty . TSOA: Celočíselné programování
Úloha o batohu Máme n věcí, jejichž celková hmotnost převyšuje limit hmotnosti obsahu batohu. Úkolem je naplnit batoh tak, aby byla maximalizována celková cena obsahu batohu. Matematický model: kde aj je hmotnost j-té věci, cj je cena j-té věci, b je limit hmotnosti, xj = 1 znamená, že j-tou věc vezmeme, a xj = 0 znamená, že j-tou věc nevezmeme. TSOA: Celočíselné programování
Řešení úlohy o batohu metodou větví a mezí Větvení provádíme do dvou větví dosazením hodnoty nula nebo jedna za nějakou proměnnou. Předpokládejme, že proměnné jsou očíslovány tak, že platí d1 d2 … dn , kde dj = cj /aj . Nechť množina Mk byla získána dosazením hodnot j {0, 1} zaprvých p proměnných. Pak horní mez lze určit takto: kde q je takové, že kromě dosud vložených věcí se do batohu vejdou ještě věci s indexy p+1 až q–1 a z q-té věci pouze část o hmotnosti kq . TSOA: Celočíselné programování
Formulace úlohy o batohu pomocí dynamického programování Úlohu o batohu chápeme jako n-etapový rozhodovací proces, kde stavem procesu na začátku j-té etapy je zbývající kapacita batohu (označme ji yj) a rozhodnutím v j-té etapě je určení hodnoty proměnné xj (1 znamená j-tou věc vzít a 0 znamená nevzít). Stavy procesu: y1= b, yj+1 = yj – ajxj Přípustná rozhodnutí: Úloha se převede na systém n funkcionálních rovnic, přičemž j-tá rovnice určuje optimální hodnotu účelové funkce spojené s (n – j + 1)-etapovým procesem, začínajícím ve stavu yj . TSOA: Celočíselné programování
Systém funkcionálních rovnic pro úlohu o batohu Označme symbolem n – j + 1(yj)optimální hodnotu účelové funkce spojené s (n – j + 1)-etapovým procesem, začínajícím ve stavu yj . Pak platí TSOA: Celočíselné programování
Řešení systému funkcionálních rovnic Systém funkcionálních rovnic se řeší pro j = n, n – 1, … , 1 a pro hodnoty stavů a získané optimální hodnoty xjo(yj) se zaznamenávají do tabulek. Optimální řešení úlohy x* o batohu se pak z těchto tabulek získá takto: kde TSOA: Celočíselné programování
Vybrané metaheuristiky • Genetický algoritmus pracuje nad populací tvořenou vektory rozhodovacích proměnných. Pomocí operátorůselekce, křížení, mutace a reprodukce se algoritmus snaží získat řešení s lepšími hodnotami účelové funkce. • Simulované žíhání (simulated annealing, SA) a zakázané hledání (tabu search, TS) používají operaci zvanou pohyb pro přechod k dalšímu řešení. Tyto metody připouštějí za určitých podmínek i pohyb k řešení horšímu, než je řešení aktuální, což jim umožňuje uniknout z řešení, které je pouze lokálně optimální. • SA je založeno na analogii mezi optimalizací a simulací procesu chladnutí materiálu. • TS snižuje nebezpečí návratu k již prozkoumanému řešení tak, že každé získané řešení (resp. odpovídající pohyb) je po jistou dobu zaznamenáno v seznamu zakázaných (tabu) řešení (resp. pohybů). TSOA: Celočíselné programování