Hlavní navigace

Omezující podmínky hledání svatého grálu programování

1. 7. 1998

Sdílet

Přes řadu populárních aplikací z oblasti komunikací, grafiky, multimédií a her zůstávají počítače pořád ta...


Přes řadu populárních aplikací z oblasti komunikací, grafiky,
multimédií a her zůstávají počítače pořád také nástroji pro
řešení složitých úloh, což ostatně bylo jejich původní poslání.
Snem mnoha generací uživatelů a programátorů je přirozeně zadávat
počítačům pouze co mají řešit, bez nutnosti specifikovat, jak to
mají řešit. Tento styl programování se nazývá deklarativní a jeho
asi nejznámějším představitelem je programovací jazyk Prolog.
Ještě více se k deklarativnímu stylu programování blíží nový směr
tzv. programování s omezujícími podmínkami (anglicky constraint
programming), které je založeno na myšlence, že řešení problémů
většinou spočívá ve výběru optimální varianty z velkého množství
alternativních řešení. Principu omezujících podmínek vlastně
všichni dávno používáme při řešení běžných problémů jako je
plánování času (mám volno až po 18. hodině), hledání vhodné
kombinace oblečení (tahle kravata neladí s touto košilí) nebo
třeba hraní her (křížovky, šachy apod.).

Počátky v umělé inteligenci

Myšlenka využití omezujících podmínek se objevila někdy na
přelomu šedesátých a sedmdesátých let, kdy se v umělé inteligenci
řešily problémy typu analýzy trojrozměrné scény. David Waltz
tehdy navrhl postup, kterým byl počítač schopen z 2D obrázku
získat informace o tvarech a vzájemných vztazích trojrozměrných
objektů na scéně. Použil při tom techniky ohodnocení každé čáry
(= hrana objektu) na obrázku jejím typem (konvexní, resp. konkávní
hrana, okraj, rozhraní stínu), čímž celý problém redukoval na
nalezení konzistentního ohodnocení všech čar (viz obr. 2).
Protože všech možných ohodnocení je poměrně mnoho (u pouhých 10
čar je to 4 10 , tj. kolem milionu) a ani nejrychlejší počítače je
nezvládnou všechny prozkoumat v rozumném čase, bylo potřeba
navrhnout techniky, které počet kombinací výrazně omezí. Tak se
zrodily omezující podmínky, jejichž úkolem je redukovat počet
variant při řešení náročných kombinatorických problémů.

Těžké problémy

Principu omezení počtu možných variant jen na ty přijatelné,
a teprve z nich vybírat optimální řešení, se používá při řešení
řady problémů zvláště v oblasti plánování a rozvrhování.
Představte si jednoduchý problém naplánovat nakládku a vykládku
deseti lodí v pěti přístavištích. Najít optimální plán můžeme
například prozkoumáním všech alternativ, kterých je kolem deseti
milionů (přesně 5 10 ). Na počítači zvládajícím za sekundu projít
10 tisíc možností by to trvalo něco přes čtvrt hodiny. Teď si ale
představte, že vám obchod kvete a vy už máte lodí dvacet
a přístavišť deset (říkáte, že se to nemůže Čechovi stát -- pak se
podívejte na Bahamy). Stejný počítač by nyní o trochu větší
problém řešil přes 300 milionů let a zřejmě by nepomohlo ani
zakoupení akcelerační karty. Již při prvním pohledu na otázku se
samozřejmě zjistí, že řadu možností nemá cenu vůbec zkoumat,
protože např. v dané chvíli nemohou být dvě lodě ve stejném
kotvišti, některá kotviště jsou pro některé lodi malá apod.
Formulací takových přirozených omezujících podmínek se problém
výrazně zredukuje a lze ho řešit na běžných pracovních stanicích
pro stovky lodí a desítky přístavů.

Uživatelská rozhraní

Použití omezujících podmínek dnes stojí i za řadou grafických
uživatelských rozhraní. Všichni jsme si zvykli, že v grafických
editorech můžeme snadno tažením ukazatele vytvářet útvary jako
jsou čtverce, kružnice, hvězdy a spol., jejichž kreslení "od
ruky" by bylo přinejmenším zdržující. Málokdo si ale uvědomuje,
že počítač musí sám dopočítat tvar objektu, a to z poměrně malého
množství informací od uživatele (zpravidla jsou to dva body:
počátek a současná poloha ukazatele). Programování takových
editorů je mnohem jednodušší při použití omezujících podmínek,
které přirozeně a jednoznačně popíší tvar objektu (viz obr. 3).

Praktické aplikace

Omezující podmínky nejsou jen hříčkou univerzitních profesorů,
ale, jak ukázaly předchozí řádky, těží z nich řada praktických
aplikací. Mezi oblastmi použití samozřejmě dominují složité
plánovací, rozvrhovací a optimalizační problémy.
Plánovací software založený na omezujících podmínkách využívají
velké evropské letecké společnosti jako British Airways, Swissair
nebo SAS, kde tyto aplikace pomáhají plánovat lety a přiřazení
posádek. Podobné využití najdeme i ve francouzských (SNCF)
a italských železničních společnostech (a co ČD?), pro plánování
používají principu omezujících podmínek industriální kolosy
Michelin a Dassault, těžební společnosti (Saga Petroleum)
i mezinárodní překladiště (Hong Kong International Terminals).
Systémy založené na omezujících podmínkách najdete v dnes
populární oblasti genetiky a klonování, kde se využívají při
analýze DNA (složit strukturu DNA je jako skládat velkou puzzle).
Často také stojí za intuitivními grafickými uživatelskými
rozhraními, výzkum sponzoruje například Apple Computer.
Oblastí použití omezujících podmínek je tedy celá řada. Za jejich
praktickým nasazením většinou stojí snaha minimalizovat náklady
vytvořením optimálního plánu, a tím se bránit rostoucí
konkurenci. Jak ukazuje příklad úspěšných British Airways, tak to
zabírá.

Byl pro vás článek přínosný?

Autor článku