Úloha číského listooše ÚLOHA ČÍNSKÉHO LISTONOŠE, MATEMATICKÉ MODELY PRO ORIENTOVANÝ A NEORIENTOVANÝ GRAF Uvažujme situaci, kdy exstuje ějaký výchozí uzel a další uzly spojeé hraami (může jít o cesty, ulice apod.). Vzdáleost mezi uzly i, j ozačme c ij. Naším cílem je projít každou ulicí alespoň jedou a vrátit se do výchozího místa tak, aby délka trasy byla miimálí. Jestliže jsou všechy uzly v grafu sudého stupě, existuje v grafu eulerovský cyklus, tz. dokážeme projít každou hraou a vrátit se do výchozího uzlu. V opačém případě ale musíme ěkteré hray zdvojit (tz. přidáme hray do grafu). Otázkou je, které. PRVNÍ MODEL PRO NEORIENTOVANÝ GRAF: Zavedeme biárí proměou x ij, která bude rova 1 v případě, že do grafu přidáme hrau mezi uzly i, j, jiak 0. Dále zavedeme pomocou celočíselou proměou y ij. Uzly rozdělíme a: uzly lichého stupě: T je možia uzlů lichého stupě. K im musíme přidat lichý počet hra. uzly sudého stupě: U T je možia uzlů lichého stupě. K im musíme přidat sudý počet hra. Pracujeme je s horí trojúhelíkovou maticí. Model má ásledující tvar: 1 z = i=1 j=i+1 c ij x ij mi Sažíme se, aby součet ohodoceí (tz. vzdáleosti) dodatečých hra přidaých do grafu byl co ejmeší. Celková vzdáleost, kterou listooš urazí, je součtem ohodoceí všech hra (protože jedou jimi musí projít každopádě) a hodoty účelové fukce z tohoto modelu (ta představuje dodatečou vzdáleost, která odpovídá přidaým hraám). i 1 j=1 x ji + j=i+1 x ij = 2y i + 1 i T (1) Pro uzly lichého stupě musí platit, že k im přidáme lichý počet hra. Například pokud z uzlu i vedou 3 hray, musíme přidat 1, 3, 5... hra. i 1 j=1 x ji + j=i+1 x ij = 2y i i U T (2) Pro uzly sudého stupě musí platit, že k im přidáme sudý počet hra. x ij {0, 1} i = 1,2-1, j = i+1,i+2 (3) Přidáme hrau mezi uzly i a j? yi 0, celé, i U (4) Pomocá proměá. Ad podmíka (1) a (2): apříklad pro 5 uzlů bychom v matici proměých sčítali takto: Leka Fiřtová (2014)
Úloha číského listooše Alexej Nikolajevič si ašel zajímavý přivýdělek: ve všech staicích metra musí rozvěsit reklamí letáky. Metro v Petrohradě má však více liií ež v Praze (viz obrázek) a Alexej Nikolajevič by rád věděl, jakým způsobem si má cestu apláovat, aby byla co ejkratší co do celkového počtu projetých staic. Model je zadá výčtem hra a pracuje je s hraami, kde i < j. Uzly představují přestupí ebo koečé staice. Náklady (cij) počítáme podle toho, kolik staic se mezi uzly achází, ebereme tedy v úvahu skutečou vzdáleost, kterou metro ujede. Rověž yí ebudeme brát v úvahu přestupováí mezi jedotlivými likami. model: sets: staice/1..16/:y; trasa(staice,staice)/1 14,2 13,3 13,4 16,5 11,6 11,7 15,8 10,9 15, 10 11, 10 12,10 15,10 16,11 16,12 13,12 14,12 16,13 14,14 15/:x,c; edsets data: c=9 4 5 4 7 6 2 6 8 3 3 2 2 2 5 2 2 3 3; eddata mi=@sum(trasa:c*x); @for(staice(i) i#ge#11: @sum(trasa(j,i) j#lt#i: x(j,i)) + @sum(trasa(i,j) j#gt#i:x(i,j)) = 2*y(i)); @for(staice(i) i#lt#11: @sum(trasa(j,i) j#lt#i: x(j,i)) + @sum(trasa(i,j) j#gt#i:x(i,j)) = 2*y(i)+1);! k uzlům sudého stupě je třeba přidat sudý počet hra, zatímco k uzlům lichého stupě lichý počet hra; @for(trasa: @gi(x)); @for(staice: @gi(y)); ed Výsledek: Kromě cest od kocových uzlů do cetra, kudy určitě musíme jet dvakrát, je ejvýhodější projet dvakrát mezi uzly 12-14 a 12-16. Alexej Nikolajevič, který bydlí a koečé staici červeé liie, tedy projede uzly v tomto pořadí: 1-14-15-9-15-7-15-10-8-10-11-6-11-16-4-16-12-13-2-13-14-12-16-10-12-14-1. Model ám pouze řeke, kterými hraami máme projet dvakrát, cestu si musíme apláovat sami. Účelovou fukci ve výši 55 lze iterpretovat jako počet staic, mezi imiž musí Alexej Nikolajevič projet avíc, jelikož všemi staicemi projede alespoň jedou. Součet ákladů všech hra je 78, což je třeba při pláováí délky cesty přičíst. Zadáí Řešeí Zdroj obrázku: http://www.davidhacha.cz/petrohrad.html Leka Fiřtová (2014)
Úloha číského listooše DRUHÝ MODEL PRO NEORIENTOVANÝ GRAF: Zavedeme celočíselou proměou x ij, která ám tetokrát říká, kolikrát bude hraa (i,j) celkem zahruta v Eulerově cyklu. Pracujeme s celou maticí. Model má ásledující tvar: z = i=1 j=1 c ij x ij mi Sažíme se, aby byl celková vzdáleost, kterou urazíme, byla co ejmeší. V tomto modelu ám hodota účelové fukce a rozdíl od předchozího modelu přímo řeke, čemu se tato vzdáleost rová. xij + xji 1 (i, j) H (1) Po každé existující hraě (i, j) musíme jet alespoň jedou (buď po í do příslušého uzlu vjedeme ebo vyjedeme). j=1 x ji = j=1 x ij i = 1,2 (2) Pro všechy uzly musí platit, že do ich vjedeme tolikrát, kolikrát z ich vyjedeme. xij 0, celé, i U (3) Kolikrát projedeme hraou (i,j)? xij = 0, xji = 0 (i, j) H (4) Pokud mezi uzly i, j eexistuje hraa, pak mezi imi eprojedeme ai jedou. Ve hře Pacma musí figurka síst všechy putíky. Kudy má jít, aby byla její cesta co možá ejkratší? Model je zadá výčtem hra, aby jej bylo možé řešit demoverzi Liga (takhle jich je přesě 50). Náklady jsou staovey jako počet mezer mezi všemi putíky při cestě od jedoho uzlu k druhému (viz obrázek). model: sets: uzel/1..19/; cesta(uzel,uzel)/1 2,1 16,1 17,2 1,2 3,2 18,2 19,3 2,3 4,3 5,4 3,4 8,5 3,5 6,6 5,6 7,7 6,7 8,7 12,8 4,8 7,8 9,8 19,9 8,9 10,10 9,10 11,10 13,11 10,11 14,11 16 11 19,12 7,12 13,13 10,13 12,14 11,14 15,15 14,15 16,16 1,16 11,16 15,17 1,17 18,18 2,18 17,19 2,19 8,19 11/: x,c; edsets data: c=7 4 2 7 2 2 2 2 1 2 1 2 2 3 3 4 4 2 4 2 2 2 3 2 1 1 2 2 2 2 7 2 4 3 2 3 2 7 7 2 4 7 2 2 7 2 7 2 3 2; eddata mi=@sum(cesta:x*c); @for(uzel(i): @sum(cesta(i,j): x(i,j)) = @sum(cesta(j,i): x(j,i)));!kolikrát do uzlu přijdeme, tolikrát musíme i vyjít; @for(cesta:@gi(x)); @for(cesta(i,j): x(i,j)+x(j,i)>=1);!každé dva uzly, mezi imiž je hraa, musí být spojeé; ed Účelová fukce má hodotu 90. Model ám řeke, kolikrát máme kterou hraou projít, ale fiálí trasu si musíme sestavit sami. Některé hray vyjdou rovou zdvojeě (x ij = 2), u jiých vyjde x ij = 1 a x ji = 1, takže je zřejmé, že mezi těmito dvěma uzly (i,j) bude hraa také zdvojeá. Samozřejmě jde o eorietovaý graf, takže evadí, kdyby se apř. x 34 rovalo jedé a my bychom přitom šli z uzlu 4 do uzlu 3. S pomocí zalosti hra, kterými musíme projít více ež jedou, lze ačrtout Pacmaovu ejkratší cestu: Zadáí Řešeí Zdroj obrázku: http://courses.cs.washigto.edu/courses/cse473/12sp/pacma/multiaget/multiagetproject.html Leka Fiřtová (2014)
Úloha číského listooše MODEL PRO ORIENTOVANÝ GRAF: Rozdělíme si uzly a dvě skupiy. I bude možia uzlů, ve kterých je počet vstupujících hra větší ež počet vystupujících hra. Těmto uzlům přidáme atribut a i, což bude rozdíl počtu vstupujících a vystupujících hra, tedy vlastě počet vystupujících hra či cest, který musíme u těchto uzlů přidat. Tyto uzly budou vlastě aalogií dodavatelů : mají totiž ějaké výstupí hray avíc, což jsou jakoby jejich kapacity. J bude možia uzlů, ve kterých je počet vystupujících hra větší ež počet vstupujících hra. Těmto uzlům přidáme atribut b i, což bude rozdíl počtu vystupujících a vstupujících hra, tedy vlastě počet vstupujících hra či cest, který musíme u těchto uzlů přidat. Tyto uzly budou vlastě aalogií odběratelů : chybí jim totiž ějaké vstupí hray, což jsou jakoby jejich požadavky. Úlohu tedy v podstatě převádíme a dopraví problém. Náklady a hrau/cestu mezi uzly i, j ozačíme c ij. Nevadí, že mezi ěkterými uzly žádá hraa eí. V matici bude v tomto případě hodota odpovídající ejkratší možé vzdáleosti mezi uzly i, j. Zavedeme jedu proměou x ij, což bude počet orietovaých hra/cest mezi uzly i a j, které přidáme do grafu. Model bude mít ásledující tvar: z = i I j J c ij x ij mi Sažíme se, aby byl áklad a dodatečé hra/cesty byl co ejmeší. Skutečé celkové áklady jsou pak součtem ákladů a všechy hray, protože každou musíme projet aspoň jedou, a tohoto dodatečého ákladu získaého z modelu. j J x ij = a i i I (1) Pro všechy dodavatele musí platit, že z ich povede tolik hra/cest avíc, kolik odpovídá jejich kapacitě. Ke každému takovému uzlu přidáme právě tolik výstupích hra, aby se jejich celkový počet vyroval s počtem vstupích hra. i I x ij = b j j J (2) Pro všechy odběratele musí platit, že do ich povede tolik hra/cest avíc, kolik odpovídá jejich požadavkům. Ke každému takovému uzlu přidáme právě tolik vstupích hra, aby se jejich celkový počet vyroval s počtem výstupích hra. xij 0 i I, j J, (3) Kolikrát přidáme hrau/cestu mezi uzly i, j? Leka Fiřtová (2014)
Úloha číského listooše Vyrazili jsme si a hory zalyžovat. Lyžařské středisko abízí moho sjezdovek a my bychom je chtěli projet všechy, ale jelikož jsme omezei časově, rádi bychom to zvládli co možá ejrychleji. Plá střediska s očíslovaými uzly a dobou cesty v miutách mezi jedotlivými uzly zachycuje obrázek. Nejdéle samozřejmě trvá cesta vlekem ahoru, protože se u ěj tvoří froty. Model úlohy číského listooše převedeme a dopraví problém, jelikož jde o orietovaý graf, protože po sjezdovkách se bohužel edá jezdit ahoru. Každou cestou musíme projet alespoň jedou, výjimkou jsou cesty mezi jedotlivými vleky (uzly 13, 10 a 1), mezi imiž ovšem také existuje hraa, kterou můžeme v případě potřeby použít. Nejprve si sestavíme matici ejkratších vzdáleostí. Pokud mezi dvěma uzly eexistuje přímo hraa, pak sečteme ejkratší dobu, kterou bychom museli urazit při cestě přes jié uzly. Například z uzlu pět je možé dostat se do uzlu čtyři buď za 25 miut s použitím prostředího vleku, ebo za 24 miut s použitím pravého vleku, což je tedy ohodoceí ejkratší vzdáleosti. Uzly, do ichž více hra vede, ež z ich vychází, jsou dodavatelé, aopak uzly, z ichž více hra vychází, jsou odběratelé, jelikož do ich musíme dodat hrau, po které přijedeme, abychom mohli opětově vyjet. Odběratelem je třeba uzel 4, do kterého vede cesta je z uzlu 3, zatímco jet z ěj musíme do uzlů 2, 5 a 10. Dodavatelem je, kromě vleků samozřejmě, apříklad uzel 2, z ějž vedou je dvě sjezdovky, ale do ěj celkem tři. Kapacity, resp. požadavky, jsou rozdílem počtu vstupích a výstupích hra. Tyto počty jsou patré z ásledující tabulky. Dodavetelé jsou ozačeí modře, odběratelé zeleě. Leka Fiřtová (2014)
Úloha číského listooše UZEL počet počet z uzlů do ulzů vstupů výstupů 1 2 1 2,16 3 2 3 2 3,4,6 1,16 3 2 3 1,8 2,4,6 4 1 3 3 2,5,10 5 3 1 4,8,11 10 6 1 1 3 2 7 1 3 10 11,9,10 8 1 2 9 3,5 9 1 2 7 8,11 10 5 1 4,5,7,11,14 7 11 2 3 7,9 5,10,12 12 2 4 11,13 13,14,15,17 13 2 1 12,14 12 14 2 2 12,15 10,13 15 2 1 12,17 14 16 1 1 2 1 17 1 1 12 15 32 32 model: sets: dodavatele/1..6/:kapacity; odberatele/1..7/:pozadavky; preprava(dodavatele,odberatele):x,c; edsets data: kapacity=1 1 2 4 1 1; pozadavky=1 2 2 1 1 1 2; c= 15 16 23 25 24 25 21 16 17 24 26 25 26 22 23 24 21 23 22 23 19 20 21 18 20 19 20 16 24 25 22 24 23 24 12 27 28 25 27 26 29 17; eddata mi=@sum(preprava:c*x); @for(dodavatele(i): @sum(odberatele(j): x(i,j)) = kapacity(i)); @for(odberatele(j): @sum(dodavatele(i): x(i,j)) = pozadavky(j)); ed Leka Fiřtová (2014)
Úloha číského listooše Řešeí zachycuje ásledující matice a obrázek. Účelová fukce je 183, což ale eí celkový čas, ale je čas, který strávíme tím, že po ěkterých cestách pojedeme více ež jedou. Celkový čas získáme součtem všech hra (kromě hra mezi vleky, po ichž jet emusíme) a této účelové fukce, což je 297 miut, eboli 4 hodiy a 57 miut. Tolik času ám ejméě zabere projet všechy vyzačeé sjezdovky. Zdroj obrázku: http://www.ewegladmagazie.com/ski-resorts/crotched-moutai-ew-hampshire/ ZDROJE: Ig. J. Fábry, Ph.D.: předášky 4EK314 Diskrétí modely, 2011. Leka Fiřtová (2014)