multiagentní modelování: budování modelu segregace krok za...

32
- 71 - Multiagentní modelování: Budování modelu segregace krok za krokem František Kalvas* (Filozocká fakulta Západočeské univerzity v Plzni) Agent-based Modeling: Constructing a Model of Segregation Step by Step** Abstract: The article presents the construction of an agent-based model of segregation step by step. The article is intended as a tutorial for the reader’s rst steps with agent-based modeling. The model is programmed in the NetLogo software and provided in two versions: rst as an online executable version, for rst-impression purposes, and second as NetLogo code, for serious experiments and further model improvements by the reader. The article describes the user interface and source code of the model in close detail. Most of the article is dedicated to careful, in-depth explanation of the NetLogo code. The model aims to answer Schelling’s classical question: “Is it possible to obtain an ethnically segregated struc- ture of a town with relatively tolerant inhabitants?” The model also aims to answer the question: “Does size of recognized neighbourhood suppress tendency to segregation?” Analysis of the data produced by the model informs us that the tendency to segregation decreased with larger rec- ognized neighbourhood – the larger the neighbourhood the lower the number of inhabitants living in an ethnically homogenous neighbour- hood. However, size of recognized neighbourhood did not moderate the relationship between intolerance and tendency to segregation – the slope of the relationship was still the same (or even steeper for larger neigh- bourhoods). Keywords: Agent-based modeling; multi-agent modeling; social simu- lation; tutorial; segregation Data a výzkum - SDA Info 2015, Vol. 9, No. 2: 71–102. DOI: http://dx.doi.org/10.13060/23362391.2015.9.2.273 (c) Sociologický ústav AV ČR, v.v.i., Praha 2015 * Kontakt: [email protected], František Kalvas, Katedra sociologie ZČU, Univerzitní 8, 306 14 Plzeň. Autor děkuje dvěma anonymním recenzentům, jejichž připomínky pomohly zlepšit nální podobu tohoto textu. ** Podpořeno grantem: GA ČR č. P404/11/0949

Upload: others

Post on 04-Jul-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Multiagentní modelování: Budování modelu segregace krok za ...dav.soc.cas.cz/uploads/6073392fc3743751ca468daaeb...makro úrovni ke vzniku ghett a tak silné etnické homogenizaci,

- 71 -

Multiagentní modelování: Budování modelu segregace krok za krokem

František Kalvas*(Filozofi cká fakulta Západočeské univerzity v Plzni)

Agent-based Modeling: Constructing a Model of Segregation Step by Step**

Abstract: The article presents the construction of an agent-based model of segregation step by step. The article is intended as a tutorial for the reader’s fi rst steps with agent-based modeling. The model is programmed in the NetLogo software and provided in two versions: fi rst as an online executable version, for fi rst-impression purposes, and second as NetLogo code, for serious experiments and further model improvements by the reader. The article describes the user interface and source code of the model in close detail. Most of the article is dedicated to careful, in-depth explanation of the NetLogo code. The model aims to answer Schelling’s classical question: “Is it possible to obtain an ethnically segregated struc-ture of a town with relatively tolerant inhabitants?” The model also aims to answer the question: “Does size of recognized neighbourhood suppress tendency to segregation?” Analysis of the data produced by the model informs us that the tendency to segregation decreased with larger rec-ognized neighbourhood – the larger the neighbourhood the lower the number of inhabitants living in an ethnically homogenous neighbour-hood. However, size of recognized neighbourhood did not moderate the relationship between intolerance and tendency to segregation – the slope of the relationship was still the same (or even steeper for larger neigh-bourhoods).Keywords: Agent-based modeling; multi-agent modeling; social simu-lation; tutorial; segregationData a výzkum - SDA Info 2015, Vol. 9, No. 2: 71–102.DOI: http://dx.doi.org/10.13060/23362391.2015.9.2.273(c) Sociologický ústav AV ČR, v.v.i., Praha 2015

* Kontakt: [email protected], František Kalvas, Katedra sociologie ZČU, Univerzitní 8, 306 14 Plzeň. Autor děkuje dvěma anonymním recenzentům, jejichž připomínky pomohly zlepšit fi nální podobu tohoto textu.** Podpořeno grantem: GA ČR č. P404/11/0949

Page 2: Multiagentní modelování: Budování modelu segregace krok za ...dav.soc.cas.cz/uploads/6073392fc3743751ca468daaeb...makro úrovni ke vzniku ghett a tak silné etnické homogenizaci,

- 72 -

Již přes 40 let se v zahraničí rozvíjí metodologie multiagentního modelování – zprvu opatrně, posledních 20 let však bouřlivě –, která je českou sociolo-gií zatím málo používána. Multiagentní modelování přistupuje ke zkoumání sociálních procesů pomocí počítačově simulovaných sociálních aktérů, které nazývá agenty. Agenti jsou vlastně krátké počítačové programy, které obsahují instrukce pro to, jak se má agent chovat, jaké informace má sbírat, jak má tyto informace vyhodnocovat, jak má interagovat s ostatními agenty a prostředím, které je také počítačový program. Metoda tak umožňuje sledovat vnitřní sta-vy agentů, chování agentů, jak je toto chování ovlivněno vzájemnou interakcí agentů, interakcí agentů se simulovaným prostředím a parametry tohoto simu-lovaného prostředí.

Čtenářům časopisu Data a výzkum tato metoda není úplně neznámá. V roce 2013 v tomto časopise vyšel článek Anny Krčkové (2013), který čtenáře sezná-mil obecně s problematikou multiagentního modelování. Radek Pelánek (2011) věnoval multiagentnímu modelování (pod zkratkou ABM)1 jednu kapitolu ve své knize o modelování komplexních systémů. Hlubší diskusi základů metody v příbuzné sociální vědě, ekonomii, český čtenář najde v práci Tomáše Cahlíka a kolektivu (2006), a to i včetně několika ekonomických problémů řešených pomocí multiagentního modelování. Ve slovenské sociologii uvedli čtenáře obecně, avšak hlouběji do tématu multiagentního modelování Juraj Schenk (2007, 2011) a Marek Mathias (2010, 2013). Jak jsem uvedl, metoda se velice bouřlivě rozvíjí v zahraničí, můžeme tak nalézt nepřeberné množství literatury v angličtině. Za základní kanonické práce v oblasti multiagentního modelování jsou považovány práce Joshuy Epsteina (Epstein, Axtell 1996; Epstein 2006), Nigela Gilberta a Klause Troitzche (2005) a Thomase Schellinga (1978),2 abych uvedl alespoň některé. Často citovaným úvodem do multiagentního mode-lování je malá kniha, kterou pro slavnou kapesní zelenou kvantitativní řadu nakladatelství SAGE napsal Gilbert (2008).

1 V době, kdy Pelánek (2011) svou knihu psal, nebyl ustálený překlad anglického termí-nu agent-based modelling, proto autor raději používal anglickou zkratku ABM místo čes-kého termínu. Netroufám si soudit, zda je v současné době již překlad ustálený, nicméně si troufám tvrdit, že v české a slovenské literatuře, která je mi známá, se nejčastěji objevuje termín multiagentní modelování. Pročež jsem jej použil i pro název tohoto článku. Je tře-ba čtenáře upozornit, že byť je ABM nejrozšířenějším anglickým termínem pro multia-gentní modelování, existují i další termíny a jejich zkratky. Zájemce tedy jistě časem narazí na ABC (agent-based computational modelling), ABMS (agent-based modelling and si-mulation), ABSS (agent-based social simulation), ABS (agent-based simulation), MABS (multiagent-based simulation), MAS (multiagent systems) nebo na artifi cial socie ty. Nejde o nějakou zlomyslnost autorů, mezi jednotlivými variantami existují vždy nějaké jemné rozdíly, které jsou pro autory v danou chvíli natolik důležité, že úmyslně opouští nejrozšířenější název, ABM, a svůj přístup popisují méně rozšířeným názvem. Odlišovat od sebe jednotlivé přístupy je mimo možnosti tohoto článku.2 K místu Schellinga v kánonu multiagentního modelování je třeba poznamenat, že jeho uvažování bylo vždy zcela v souladu s touto metodou, avšak vždy brojil proti používání počítačů pro simulování multiagentních modelů. Místo toho doporučoval používat např.

Page 3: Multiagentní modelování: Budování modelu segregace krok za ...dav.soc.cas.cz/uploads/6073392fc3743751ca468daaeb...makro úrovni ke vzniku ghett a tak silné etnické homogenizaci,

- 73 -

Podobným úvodem je i tento článek, bude však sledovat strategii, která není běžná – bude podrobně sledovat naprogramování klasického modelu krok za krokem, včetně zabudování drobného rozšíření. Dále bude sledovat, jak lze s modelem provést experiment, zaznamenat jeho výsledky a ty nahrát a analyzovat ve statistickém softwaru. Článek by tak měl sloužit jako podrob-ný praktický průvodce prvními kroky v krajině multiagentního modelování. Nemůže suplovat praktický kurz ani učebnici. Měl by však čtenáři usnadnit rozhodování, zda chce multiagentní modelování používat a investovat čas do jeho ovládnutí. To je hlavní smysl článku: pomoci čtenářům bez jakékoliv předchozí průpravy v programování pochopit logiku multiagentního modelo-vání a sledovat poměrně nekomplikovaný projekt od prvotního nápadu přes realizaci modelu až po analýzu výsledků.

Ještě než přistoupíme k samotnému výkladu, je třeba čtenáře varovat před určitým zkresleným dojmem, který by následující text mohl vyvolat, jak na-značili recenzenti tohoto článku ve svých posudcích. Po přečtení článku by se někomu mohlo zdát, že multiagentní modelování spočívá především v tom, že se sepíše a spustí nějaký počítačový program, protože rozboru programova-cího jazyka se článek věnuje především. Je to proto, že má-li pro nás počítač nasimulovat nějaký sociální jev, je třeba se s ním „domluvit“ a vhodným pro-gramovacím jazykem počítači „vysvětlit“, co po něm chceme simulovat. Trošku v pozadí pak zůstalo, co programování předchází a co po něm následuje. Také bych rád předeslal, že zde prezentované rozšíření modelu není průlomové a má spíše edukativní roli – ukazuje, jak je možné zkusit rozšířit model a jak ověřit, zda jde o průlom, či nikoli.

Co a v čem budeme modelovat?V tomto článku se budeme společně zabývat nejklasičtějším multiagentním so-ciologickým modelem – jde o model etnické segregace (Schelling 1969, 1971). Model je motivován jednoduchou výzkumnou otázkou: Je možné, aby i et-nicky tolerantní jedinci vytvořili etnicky homogenní ghetta? Schelling tento model postavil na předpokladu, že aktér se bude řídit jediným jednoduchým pravidlem: pokud v sousedství aktéra nebude dostatek aktérů stejného etnika (řekněme 30 %), aktér bude nespokojený a přestěhuje se na nové místo vybra-né zcela náhodně. Experimenty s tímto modelem ukázaly, že toto jednoduché pravidlo, kterým se řídí i relativně tolerantní aktéři na mikro úrovni, vede na makro úrovni ke vzniku ghett a tak silné etnické homogenizaci, kterou bychom při relativní toleranci aktérů intuitivně nečekali. Toto samozřejmě neznamená,

šachovnice jako prostředí a mince jako reprezentaci agentů. Tento paradox vysvětlil Rai-ner Hegselmann (2012). V 70. letech, kdy Schelling tvořil své nejslavnější práce, nebyly počítače připojeny k monitorům, jak je to dnes běžné, nejběžnějším výstupem byla tis-kárna, kde se tiskl obvykle výsledek celého výpočetního procesu a ne jeho průběh. Proto Schelling trval na používání šachovnic a mincí či fi gurek, aby sociální vědec mohl přímo pozorovat rodící se dynamiku studovaného procesu.

Page 4: Multiagentní modelování: Budování modelu segregace krok za ...dav.soc.cas.cz/uploads/6073392fc3743751ca468daaeb...makro úrovni ke vzniku ghett a tak silné etnické homogenizaci,

- 74 -

že v reálném sociálním světě jsou všichni aktéři tolerantní. Model a s ním pro-vedené experimenty pouze dokazují, že pro vznik etnicky homogenních části města není nutné, aby byli aktéři nějak výrazněji netolerantní.

Model, tak jak je v textu prezentován, je rozšířen na základě výzkumných otázek technického charakteru: Ovlivní velikost vnímaného sousedství výsled-ky? Bude větší vnímané okolí tlumit segregaci? Těmito otázkami se snažím zjistit, zda pozorované výsledky simulací nejsou pouhými artefakty, které vzni-kají v důsledku toho, jak je model naprogramovaný a jaké parametry jsme pro model zvolili (Hegselmann 2010). Všechny multiagentní modely etnické segre-gace, které jsem měl možnost studovat, využívaly jako sousedství tzv. Moorovo okolí, tj. 8 nejbližších políček. Je možné, že při větším okolí nebude docházet k tak razantní segregaci, protože se ve větším rozeznávaném sousedství agen-ti různých etnik lépe rozloží tak, aby segregace nebyla nutná. Navíc je v okolí o např. 80 polích váha každého agenta mnohem menší než v okolí o 8 polích – v širokém okolí méně často dojde k těsnému atakování vyžadované hrani-ce, a tak přesun jednoho podobného agenta méně často vyvolá přesun agenta, který toto pozoruje. Vzato do extrému, kdyby agenti vnímali jako své okolí celé město a pokud by vyžadovaný podíl agentů stejného etnika byl menší než podíl etnika ve městě, byli by všichni spokojení a nikdo by se nestěhoval. Pokud by byly tyto poměry v rozporu, stěhovali by se všichni. A protože nevíme, jak velké okolí rozeznávají reální sociální aktéři, myslím, že je nutné podrobit parametr velikosti sousedství bližšímu zkoumání.3

Schelling sám brojil proti využívání počítačů v multiagentním modelová-ní (Hegselmann 2012, podrobněji viz poznámku pod čarou č. 2), není proto překvapivé, že jej sám nikdy nenaprogramoval. V tomto článku se budeme zabývat modelem segregace, který vychází z verze, kterou naprogramoval Uri Wilensky (1997) v programovacím jazyku NetLogo (Wilensky 1999). Tento jazyk je obecně považován za jednoznačně nejvhodnější pro první kroky v kra-jině multiagentních modelů. Z dostupných programovacích jazyků, které jsou vhodné pro multiagentní modelování, je NetLogo nejintuitivnější, a proto jej snadno ovládnou badatelé bez jakékoli předchozí zkušenosti s programováním (Gilbert 2008). Z vlastní zkušenosti to mohu potvrdit, avšak musím dodat, že uživatelé za tento snadný vstup musejí zaplatit určitou daň – a tou je snížení výpočetního výkonu. Architektura NetLoga primárně sleduje snadné ovládnu-tí jazyka začátečníky, ale zároveň zatěžuje počítač více než jiné programovací jazyky. V praxi to znamená, že je možné nenáročné simulace provádět pouze s desítkami tisíc agentů a náročnější maximálně s tisícovkami agentů. Při vyš-ších počtech agentů se čas běhu simulací přestane prodlužovat lineárně a začne

3 Provedeme tak analýzu robustnosti, jelikož do modelu přidáme nový prvek – velikost sousedství. Jde samozřejmě jen o jednu z mnoha možností, jak robustnost testovat. Mohli bychom do města zavádět větší počet etnik, měnit jejich poměry na různě nevyrovnané, mohli bychom zavést nové pravidlo, že jedno z etnik ve svém sousedství vyžaduje určitou míru přítomnosti toho druhého, tj. je nespokojené v segregované lokalitě, atd.

Page 5: Multiagentní modelování: Budování modelu segregace krok za ...dav.soc.cas.cz/uploads/6073392fc3743751ca468daaeb...makro úrovni ke vzniku ghett a tak silné etnické homogenizaci,

- 75 -

se prodlužovat exponenciálně, takže je simulace prakticky neproveditelná, a to právě z časových důvodů.4

Pro čtenáře jsem připravil dva způsoby, jak si model segregace prakticky vyzkoušet: v prostředí webového prohlížeče a po instalaci NetLoga. Jednak jsem na adresu http://abm.euweb.cz/SegregationV04DavWeb.html umístil verzi modelu, kterou je možné spouštět přímo v prostředí webového prohlí-žeče a není nutné si instalovat software NetLogo jen kvůli vyzkoušení modelu segregace. Tato verze má však jisté omezení – v prostředí prohlížeče je možné spouštět pouze jednotlivé simulace, není možné nechat počítač provést syste-matický experiment a zaznamenat jeho výsledky. Není to možné z principu, jelikož modely jsou z prostředí NetLogo převedeny do prostředí webu tak, aby neměly možnost cokoli ukládat na pevný disk počítače. Proto jsem alespoň na ukázku připravil ke stažení *.csv soubor5 s uloženými výsledky experimentu a *.do soubor6, pomocí kterého je možné *.csv soubor nahrát do programu STATA a zde jej dále analyzovat. Pro čtenáře, kteří program STATA nepoužíva-jí a ani si nevědí rady, jak do jejich statistického programu nahrát *.csv soubor, jsem připravil alespoň dva grafy (viz Grafy 1 a 2 dále)7 jako výstup analýzy vlivu velikosti vnímaného sousedství na míru segregace.

Samotný programový kód modelu je ke čtení přístupný v obou připra-vených variantách, ale upravovat kód programu je možné pouze poté, co si nainstalujeme software NetLogo. Instalační soubor je k dispozici zdarma ke stažení na stránkách North Western University.8 Všechny popisy v tomto člán-ku vycházejí z verze NetLoga 5.3.1, pokud si čtenář opatří vyšší verzi, může se drobně lišit. Po nainstalování NetLoga je třeba z adresy http://abm.euweb.cz/SegregationV04Dav.nlogo stáhnout soubor s modelem a otevřít jej v NetLogu. Pokud vše proběhlo v pořádku, měl by model vypadat po otevření v prostředí nainstalovaného NetLoga a v prostředí webového prohlížeče takto:

4 Jako příklad mohu uvést vlastní jednoduchý simulační experiment, jehož doba běhu se v NetLogu a Javě lišila o pět řádů. Cílem experimentu bylo vyvrátit hypotézu, že za dis-krepancí pozorovanou v sexuologických výzkumech v průměrném počtu sexuálních part-nerů mužů a žen by mohla stát úzká skupina žen, která má stovky až tisíce partnerů a která je z důvodu malého počtu těchto žen z výzkumů náhodou opominuta (tedy že výzkumy při vzorku 500 respondentů a 500 respondentek vždy náhodou minou ty ženy, které by prů-měr žen vybalancovaly na úroveň průměru mužů). Bylo třeba simulovat populaci sedmi milionů agentů, přičemž bylo třeba provést asi 80 milionů simulací z důvodu statistické spolehlivosti při extrémní distribuci partnerů u žen a důvodu mnoha variant počtu žen s extrémně vysokým počtem sexuálních partnerů. Po třech dnech simulování tohoto jevu pomocí software NetLogo jsem odhadl celkovou dobu experimentu na tři tisíce let. Když jsem tutéž simulaci naprogramoval v jazyce Java, proběhl celý experiment za šest dní.5 http://abm.euweb.cz/nebojmeSeABM.csv. 6 http://abm.euweb.cz/nebojmeSeABM.do. 7 Ke stažení zde: http://abm.euweb.cz/nebojmeSeABM-h3.png a http://abm.euweb.cz/nebojmeSeABM-psi.png. 8 http://ccl.northwestern.edu/netlogo/.

Page 6: Multiagentní modelování: Budování modelu segregace krok za ...dav.soc.cas.cz/uploads/6073392fc3743751ca468daaeb...makro úrovni ke vzniku ghett a tak silné etnické homogenizaci,

- 76 -

Popis modeluSimulace využívá model města, který představuje pravidelná čtvercová mřížka o velikosti 5 041 polí (71 x 71), přičemž každé pole reprezentuje jeden dům s po-zemkem. Dům je buď prázdný, nebo v něm žije právě jeden agent. Ve městě žijí dvě rovnoměrně zastoupená etnika agentů, červené a zelené. Jednotliví agenti jsou reprezentováni šipkou (konkávní čtyřúhelník) příslušné barvy. Minimální počet jsou dva, maximální 5 040, avšak tyto extrémní počty jsou velmi neprak-tické, proto v připraveném modelu nabízím možnost pomocí šedozeleného posuvníku number nastavit počet agentů na 500 až 5 000. Na počátku simu-lace budou agenti umístěni náhodně do jednotlivých domů (políček modelu města).

Po stisknutí šedého tlačítka setup se celý model inicializuje, některé domy se zaplní agenty, některé zůstanou prázdné. V monitorovacím okénku % si-milar vidíme, kolik má v průměru každý agent ve svém sousedství agentů shodného etnika. Jak se tento údaj vyvíjí během simulace, budeme moci sledo-vat ve vedlejším grafu Percent similar. Sousedství je defi nováno pro každého agenta zvlášť, představují jej všechna obsazená9 políčka (domy), jejichž střed se nachází od středu agentova domu (políčka) maximálně v určené vzdálenosti. Tuto vzdálenost, jejíž jednotka je šířka jednoho políčka, se nastavuje posuv-níkem stated-radius. Pokud je tato vzdálenost nastavena na 1, představují sousedství agenta až 4 obsazené domy v kolmých směrech (tzv. von Neuma-nnovo okolí), protože středy všech ostatních políček jsou od středu agentova

9 Pokud se na políčku nenachází žádný agent, tak se toto políčko do sousedství nezapo-čítává.

Obrázek 1: Model Obrázek 2: Model ve webovém v NetLogu prohlížeči

Page 7: Multiagentní modelování: Budování modelu segregace krok za ...dav.soc.cas.cz/uploads/6073392fc3743751ca468daaeb...makro úrovni ke vzniku ghett a tak silné etnické homogenizaci,

- 77 -

domu dále než 1. Pokud je nastavena na 1,5, představuje sousedství agenta až 8 obsazených domů, kromě kolmých i v úhlopříčných směrech (tzv. Moorovo okolí), protože vzdálenost domů v rozích sousedství je přibližně 1,41 (přesněji druhá odmocnina ze dvou). Pokud budeme dále po polovině jednotky rádius sousedství zvyšovat, postupně se bude sousedství rozrůstat na 12, 20, 28 ob-sazených domů atd., až při rádiu 5 bude jeho rozsah až 80 obsazených domů.

Okolí je důležité pro určení spokojenosti agenta. Pokud se nachází v jeho okolí dostatečný počet agentů jeho etnika, lépe řečeno pokud tvoří agenti jeho etnika dostatečný podíl mezi jeho sousedy, je agent spokojený. Pokud tento podíl klesne pod mez stanovenou na posuvníku %-similar-wanted, je agent nespokojený. Počet momentálně nespokojených agentů můžeme vidět v monitorovacím okénku % unhappy a jeho vývoj budeme moci sledovat ve vedlejším grafu Percent unhappy. Nespokojený agent se ze svého domu od-stěhuje, náhodně si vybere jeden z prázdných domů a přesune se do něj bez ohledu na etnické složení jeho sousedství. Pokud agentovi nebude etnické slo-žení v příštím kole vyhovovat, bude se přesouvat dále. Jak vypadají přesuny agentů v praxi, zjistíme, pokud stiskneme šedé tlačítko go, které celou simulaci spustí.

Simulace probíhá v jednotlivých kolech, za nulté kolo můžeme považo-vat samotnou inicializaci (tlačítko setup), kdy se agenti náhodně rozmístili do jednotlivých domů, spočetli si poměr etnik v sousedství a na základě toho stanovili, zda jsou spokojení, či nikoliv. V prvním kole se všichni nespokojení agenti náhodně přestěhují do některého z prázdných domů. Na konci kola opět všichni agenti zjišťují, zda jsou spokojení s etnickým složením. Nespokojený totiž může být jak stěhující se agent, který si nevybral dobrý dům, tak agent, z jehož okolí se odstěhovalo tolik agentů shodného etnika, že jejich podíl klesl pod přijatelnou mez. Pokud simulaci spustíme (tlačítko go), můžeme si obou těchto případů všimnout. Simulace poběží do té doby, dokud je některý z agen-tů nespokojený, jakmile nebude přítomen žádný nespokojený agent, simulace se zastaví. Pokud však simulace nedosáhne rovnovážného stavu do 250 kol, zastaví se automaticky po 250. kole.

Na následujících šesti obrázcích se můžeme podívat na podobu modelu těsně po inicializaci a po dosažení rovnovážného stavu, a to pro různě hus-tě obydlené město: 1 010 agentů (20 % domů obydleno), 2 520 agentů (50 %) a 4 030 agentů (80 %). Ve všech třech simulacích je minimální podíl vlastního etnika (%-similar-wanted) nastaven na 30 %, tedy agent je ochoten tolerovat, pokud v jeho sousedství žije i 70 % agentů opačného etnika, a stále jej to nijak nepudí k odstěhování.

Z obrázků je patrné, že naše modelové město je nejprve etnicky promíšené, nespokojení agenti se však přesunují, takže v něm vznikají etnicky homogenní plochy. Pro kvantifi kaci etnické homogenity jsem vytvořil vlastní velmi jed-noduchý index H, který má hodnotu 0–100 a udává, kolik procent agentů žije v etnicky homogenním sousedství, tj. v jejich sousedství nežije žádný agent

Page 8: Multiagentní modelování: Budování modelu segregace krok za ...dav.soc.cas.cz/uploads/6073392fc3743751ca468daaeb...makro úrovni ke vzniku ghett a tak silné etnické homogenizaci,

- 78 -

Obrázky 3a až 5b: Ukázky inicializace a rovnovážného stavu modelu segregace

Pozn. Grafi cké výstupy ze simulací v programu NetLogo. V levém sloupci jsou zobra-zeny stavy simulací po inicializaci (a), v pravém rovnovážný stav (b). V jednotlivých řádcích jsou různě hustá obydlení, shora: (3) 20 % domů, (4) 50 % domů a (5) 80 % domů. Velikost mřížky je 71 X 71 polí, minimální požadovaný podíl vlastního etnika 30 %, velikost sousedství 8 nejbližších dlaždic (Moorovo okolí).

Page 9: Multiagentní modelování: Budování modelu segregace krok za ...dav.soc.cas.cz/uploads/6073392fc3743751ca468daaeb...makro úrovni ke vzniku ghett a tak silné etnické homogenizaci,

- 79 -

opačného etnika. Index má čtyři varianty H0 až H3, H0 počítá se všemi agen-ty, i s těmi, v jejichž sousedství žádný další agent není. H1 pak bere za základ výpočtu pouze ty agenty, v jejichž sousedství je obydlen alespoň jeden dům, H2 počítá jen s těmi, kteří mají alespoň dva sousedy, a konečně H3 počítá jen s agenty, kteří sousedí s alespoň třemi obydlenými domy. Hodnoty jednotli-vých variant indexu H se ukazují ve čtyřech monitorovacích okénkách v levém dolním rohu karty Interface.

Ať už se spolehneme na pohled na obrázek rovnovážného stavu, nebo kvan-titativní indikátor, je patrné, že o tendenci vytvářet etnicky homogenní plochy nerozhoduje jen požadavek na minimální podíl vlastního etnika v sousedství, ale i hustota obydlení. Pokud nás bude zajímat, jak index H ovlivní hustota oby-dlení (tj. počet agentů v simulaci), velikost vnímaného sousedství a minimální požadovaný podíl vlastního etnika v sousedství, můžeme nyní nastavovat různé kombinace hodnot těchto proměnných a simulace třeba i opakovaně spouš-tět. Můžeme ale také provést experiment, kde budeme hodnoty studovaných proměnných systematicky po zvolených krocích měnit, spouštět jednotlivé si-mulace, jejich výsledky zaznamenávat a tyto výsledky pak analyzovat.

Abychom sami nemuseli jednotvárně a mechanicky simulace spouštět a hodnoty zaznamenávat, je v nabídnutém modelu takový experiment napro-gramován a připraven. Jak bylo upozorněno výše, pokud chceme s modelem takto experimentovat, není to možné v prostředí webového prohlížeče, je nutné si nainstalovat software NetLogo. Experimenty lze poměrně snadno plánovat a provádět v NetLogo pomocí nástroje BehaviorSpace. Najdeme jej buď v zá-ložce „Tools“ (na obr. 6 vlevo), nebo tento nástroj můžeme spustit klávesovou zkratkou Ctrl+Shift+B. Po spuštění BehaviorSpace se otevře malé okno (na obr. 6 uprostřed nahoře), kde je možné zakládat nové experimenty tlačítkem New. Připravené experimenty lze spouštět stiskem tlačítka Run. Po jeho stisku se nám otevře dialog (viz obr. 6 uprostřed dole), kde můžeme zvolit způsob ukládání výsledků a vytížení procesoru. Doporučuji zaškrtnout Table output, protože pak mají data tvar klasické datové matice, řádky jsou jednotlivé pří-pady, sloupce jednotlivé proměnné. Co se týče nastavení počtu paralelních simulací v okénku Simultaneous runs in paralel, doporučuji zjistit si, kolik jader má procesor vašeho počítače, a na tuto hodnotu jej nastavit. Vyšší hod-noty vedou k zbytečnému zahlcování procesoru, nižší zase k nedostatečnému využití výkonu – v obou případech ztratíme cenný čas. Po stisknutí tlačítka OK budeme vyzváni, abychom zvolili jméno souboru s výsledky a místo, kam se má průběžně ukládat. Zde je třeba varovat – NetLogo samo nedoplňuje koncovky souborů podle jejich typu, nesmíme proto zapomenout za název souboru při-pojit koncovku .csv.

Vraťme se k základnímu oknu BehaviorSpace (obr. 6 uprostřed nahoře). Experimenty, které již nechceme používat, můžeme mazat pomocí tlačítka De-lete. Pokud chceme vytvořit velmi podobný experiment a jen jej drobně upravit, avšak původní experiment zachovat, použijeme tlačítko Duplicate. Již existují-

Page 10: Multiagentní modelování: Budování modelu segregace krok za ...dav.soc.cas.cz/uploads/6073392fc3743751ca468daaeb...makro úrovni ke vzniku ghett a tak silné etnické homogenizaci,

- 80 -

cí experimenty můžeme také upravovat po stisknutí tlačítka Edit. Vidíme, že je zde připraven zatím jeden experiment, pokud jej vybereme a stiskneme Edit, otevře se nám karta s plánem experimentu (na obr. 6 vpravo).

Jak můžeme experiment plánovat? V samotném záhlaví karty můžeme měnit jeho název. V horním okně plánujeme, se kterými proměnnými a jak chceme experimentovat – každý řádek je ohraničen hranatými závorkami a věnuje se právě jedné proměnné. Struktura je vždy shodná – nejprve je uve-deno v uvozovkách jméno proměnné a poté jsou uvedeny hodnoty, na které bude proměnná systematicky nastavovaná. Tyto hodnoty se defi nují buď pro-stým výčtem, kdy jsou vypsány a odděleny pouze mezerami, nebo defi nujeme spodní a horní mez intervalu a délku kroku, kterým se má postupovat od dolní k horní mezi. Pokud zvolíme druhou možnost, zapisuje se do hranatých zá-vorek – nejprve spodní mez, poté délka kroku a nakonec horní mez. V našem případě je naplánován experiment s proměnnými %-similar-wanted (hodnoty 15, 34, 41, 51, 61, 67, 72 a 76), number (interval od 500 do 4100 s krokem 900) a stated-radius (hodnoty 1, 1,5, 3 a 5). Všechny tyto hodnoty je v tomto okně samozřejmě možné měnit – pokud bychom se chtěli zaměřit na jemné změny proměnné stated-radius, můžeme např. stávající výčet nahradit inter-valem [1 0.5 5].

Po spuštění bude experiment fungovat tak, že pro každou kombinaci hod-not vybraných proměnných bude simulovat model tolikrát, kolikrát je uvedeno v okénku Repetitions. Nyní je nastaveno na 60 opakování pro každou unikátní kombinaci hodnot proměnných, se kterými experimentujeme. V připraveném experimentu je pro %-similar-wanted nastaveno 8 hodnot, pro number 5 hod-

Obrázek 6: Práce s nástrojem BehaviorSpace

Page 11: Multiagentní modelování: Budování modelu segregace krok za ...dav.soc.cas.cz/uploads/6073392fc3743751ca468daaeb...makro úrovni ke vzniku ghett a tak silné etnické homogenizaci,

- 81 -

not a pro stated-radius 4 hodnoty, což představuje 160 kombinací (8 * 5 * 4). Jestliže provedeme pro každou z nich 60 simulací, bude jich v rámci experi-mentu provedeno celkem 9 600. Jak vidíme, počty simulací rostou s nárůstem počtů použitých hodnot geometrickou řadou, proto je nutné simulované hod-noty promýšlet a zároveň zvažovat i počet opakování. Ideálně bychom měli vybrat omezený počet klíčových hodnot zkoumaných proměnných a nastavit co nejvyšší počet opakování, abychom tak snížili na co nejnižší míru variabilitu výsledků.

Pod okénkem Repetitions je okno s proměnnými, jejichž hodnota se bude během všech simulací zaznamenávat a průběžně ukládat do souboru. Pro-měnné, které jsou uvedené v našem konkrétním případě, budeme podrobně rozebírat níže, nyní postačí uvést, že jsou to různé míry segregace (jak moc jsou agenti obklopeni pouze svým vlastním etnikem) a spokojenosti (jak velký podíl agentů je s etnickým složením nespokojen). Tyto míry se v našem případě zaznamenávají pouze po doběhnutí simulace. Pokud bychom chtěli sledovat vývoj každé simulace od inicializace po její konec, můžeme zaškrtnout políčko Measure runs at every step. Musíme si pak ale vyhradit dost místa na pev-ném disku počítače, jelikož se velikost souboru s výsledky znásobí průměrným počtem kroků simulace v našem experimentu. V našem případě by to nebyl takový problém – průměrný počet kroků je necelých 67 a velikost souboru je 740 kB, soubor sledující vývoj krok po kroku by tak měl necelých 50 MB, což jistě není u dnešních počítačů problém.

Nyní jsou v prostředním okně zaznamenávány pouze globální proměnné, jednotkou záznamu tak je výsledek jedné simulace. Hodnoty individuálních proměnných jednotlivých agentů zaznamenávány nejsou. V principu by to bylo možné, mohli bychom zaznamenávat pro každý krok simulace pro každého agenta jeho spokojenost s etnickým složením jeho sousedství, jeho souřadnice, kolik agentů je v jeho sousedství atd. Věc komplikují tři důvody: (1) Bylo by nutné do prostředního okna zavést pro každého agenta a každou jeho vlast-nost proměnnou. To je celkem řešitelné, byť nepohodlné. (2) Razantně by se zvětšil datový soubor s výstupy experimentu, a to pravděpodobně minimálně na desítky GB. Současný soubor s výstupy má cca 760 kB, jde však o závěrečné výsledky popisující pouze výstupy 9 599 simulací. Kdybychom v každém kroku stejně podrobně zaznamenávali stav každého agenta, musíme uvážit, že agentů je v simulacích v průměru 2 300 a simulace běží v průměru asi 60 kol. Velikost souboru se tak musí zvětšit minimálně o pět řádů, tedy ze stovek kB na desítky GB. Zde záleží na technických možnostech každého uživatele simulace, zda má na svém počítači dostatek volného místa. (3) Nejpalčivější problém však je, že pro taková data nyní nemáme žádné vhodné výzkumné otázky. Schelling si kladl otázku, zda i tolerantní aktéři mohou vyprodukovat segregovanou prosto-rovou strukturu. Na její zodpovězení nám stačí výsledky agregované za celou simulaci. Já jsem model rozšířil na základě výzkumných otázek technického charakteru, zda velikost vnímaného sousedství ovlivní výsledky a zda větší vní-mané okolí bude tlumit segregaci. Ani tyto otázky nepotřebujeme řešit pomocí

Page 12: Multiagentní modelování: Budování modelu segregace krok za ...dav.soc.cas.cz/uploads/6073392fc3743751ca468daaeb...makro úrovni ke vzniku ghett a tak silné etnické homogenizaci,

- 82 -

mikro dat zaznamenaných za jednotlivé agenty. Zcela nám postačí makro data popisující simulaci jako celek.10

V dolních oknech Setup commands a Go commands jsou uvedena jména procedur, kterými se má inicializovat simulace (obvykle zde použité setup) a ří-dit její průběh (obvykle go). Obecně řečeno, všechny procedury, které budou uvedeny v levém okně, provedou nastavení počátku simulace, a které budou v pravém, budou prováděny v každém jednotlivém kroku simulace. V záložce Final commands specifi kujeme procedury, které mají být provedeny na konci každého kola. Všimněme si, že zde není žádný prostor pro procedury, které by se měly spustit pouze na konci celé simulace. V záložce Stop condition můžeme specifi kovat vnitřní stav simulace, za kterého má být simulace ukončena. Často jde o rovnovážný stav, ve kterém by simulace setrvala donekonečna a již se nevyvíjela (např. všichni agenti jsou spokojení se svým bydlištěm, nikdo nemá chuť se stěhovat). Zda simulace skončí, nemusí vyplývat jen z jejího vnitřního stavu. Můžeme nastavit maximální počet kroků, po které má simulace běžet. Vyhýbáme se tak problému, že simulace za daných podmínek buď rovnovážný stav nemá, nebo je vysoce nepravděpodobné, že jej dosáhne, a tudíž by běže-la do nekonečna. Počet maximálních kroků můžeme nastavit v okénku Time limit. Zde je nastavena hodnota 250.

Po stisknutí tlačítka OK v zápatí karty (obr. 6 vpravo) se naše úpravy ex-perimentu uloží a můžeme experiment spustit tlačítkem Run v hlavním okně BehaviorSpace (obr. 6 uprostřed nahoře). Jak jsem naznačil výše, NetLogo nám pak ukládá výsledky do zvoleného adresáře ve formě *.csv souboru. Tento formát obsahuje data v textové podobě, jednotlivé výsledky jsou oddělené čár-kami. Soubor si tak můžeme prohlédnout v libovolném textovém editoru, ale především každý statistický program umí tento formát dat načíst. Pro uživa-tele programu STATA jsem připravil ke stažení *.do soubor11, který data načte a provede jednoduchou analýzu. K dispozici je i soubor s výsledky experimen-

10 Můžeme si však představit, že bychom proměnné, které nyní nastavujeme všem agen-tům stejně (stated-radius, %-similar-wanted), nastavovali každému agentovi jinak – např. náhodně v zadaném rozmezí. Každý z nich by pak vnímal jinak velké sousedství a každý by v něm vyžadoval jiný podíl vlastního etnika. Pak by bylo namístě se ptát: Jakou má proces segregace dynamiku? Rozhýbávají ho nejvíce netolerantní aktéři? Může jejich netoleranci tlumit velikost vnímaného okolí? Jaká je distribuce netolerance napříč segre-govanými oblastmi? Kolik aktérů vůbec nezmění své místo za celou dobu simulace? Mají nějaké typické vlastnosti? Některé tyto otázky jsou zodpověditelné, pokud údaje o agen-tech zaznamenáme na začátku a konci simulace. Pokud bychom ale chtěli sledovat dyna-miku jevu v rámci jednotlivých mikro kontextů, tedy sousedství každého agenta, je nutné zaznamenat údaje každého agenta v každém kroku simulace. Původní Schellingův model stojí na skrytém předpokladu, že všichni jsme zhruba stejně tolerantní a vnímáme stejně své okolí. Kladením výše uvedených otázek a sledováním změny také na úrovni sousedství každého agenta bychom testovali, zda má smysl s těmito skrytými předpoklady vůbec po-lemizovat.11 http://abm.euweb.cz/nebojmeSeABM.do.

Page 13: Multiagentní modelování: Budování modelu segregace krok za ...dav.soc.cas.cz/uploads/6073392fc3743751ca468daaeb...makro úrovni ke vzniku ghett a tak silné etnické homogenizaci,

- 83 -

tu ve formátu *.csv12, který jsem připravil pro čtenáře, kteří si nemohou nebo nechtějí instalovat NetLogo, ale přesto by si rádi zkusili analyzovat výsledky z experimentu. Pozor, všechny údaje, byť číselné, jsou zaznamenávány jako textový řetězec. Většina statistických balíků je proto načte jako text a je třeba se připravit na převod číselných údajů do formátu čísla. Zde může nastat poslední problém – NetLogo používá desetinnou tečku a nikoli čárku. Je s tím třeba opět počítat – pokud váš statistický balík používá desetinné čárky, je dobré teč-ky ještě ve formě textu nahradit čárkami a až poté převést text na číslo. STATA však používá desetinné tečky, je tedy v tomto s NetLogem kompatibilní.

Komentované představení programového kóduDetailně jsme probrali viditelnou část modelu. Nyní se podíváme, jak je tato viditelná část naprogramována. Samotný programový kód je viditelný i v pro-středí webového prohlížeče, ale není jej v tomto prostředí možné upravit. A protože budu diskutovat možnosti úprav, budu v této části vycházet z před-pokladu, že má čtenář nainstalované NetLogo. Čtenáři, kteří nad instalací stále váhají, mohou samozřejmě na konci webové stránky http://abm.euweb.cz/SegregationV04DavWeb.html kód sledovat po rozkliknutí nabídky NetLo-go Code na konci stránky. Ale mohou jej pouze sledovat. V software NetLogo musíme přepnout mezi kartami, na kterých je uložen model, abychom progra-mový kód modelu viděli. Musíme tedy přepnout z karty Interface, kde jsme až dosud pracovali, na kartu Code, kde se skrývá samotný kód. Kódem budeme procházet po jednotlivých blocích. Začneme blokem, kde se defi nují použité proměnné.

Kód 1: Defi nice proměnnýchglobals [ percent-similar ;; on the average, what percent of a turtle‘s neighbors ;; are the same color as that turtle? percent-unhappy ;; what percent of the turtles are unhappy? h0 ;; homogeneity coefi cient: counts how many turtles are ;; living in ethnicly homogamous neighbourhood h1 ;; homogeneity coefi cient: counts how many turtles ;; (with at least 1 neighbour) are living in ethnicly ;; homogamous neighbourhood h2 ;; homogeneity coefi cient: counts how many turtles ;; (with at least 2 neighbours) are living in ethnicly ;; homogamous neighbourhood h3 ;; homogeneity coefi cient: counts how many turtles ;; (with at least 3 neighbours) are living in ethnicly ;; homogamous neighbourhood]

12 http://abm.euweb.cz/nebojmeSeABM.csv.

Page 14: Multiagentní modelování: Budování modelu segregace krok za ...dav.soc.cas.cz/uploads/6073392fc3743751ca468daaeb...makro úrovni ke vzniku ghett a tak silné etnické homogenizaci,

- 84 -

turtles-own [ happy? ;; for each turtle, indicates whether at least ;; %-similar-wanted percent of that turtles‘ neighbors ;; are the same color as the turtle similar-nearby ;; how many neighboring patches have turtle with my color? total-nearby ;; how many neighboring patches have turtle?]

Příkaz globals [] zavádí globální proměnné, tedy takové, kam se ukládají nějaké celkové hodnoty, jde obvykle o nějaké kontextové proměnné, přičemž kontex-tem je celá simulace. Mezi hranatými závorkami jsou tyto proměnné vypsány. Jde o percent-similar, což je průměrný údaj udávající, kolik mají jednotliví agenti agentů shodné barvy/etnika v sousedství, které sledují. Další globální proměnnou je percent-unhappy, ta říká, jak velký podíl agentů je nespokojený s etnickou skladbou svého sousedství. Globální proměnné h0, h1, h2 a h3 udá-vají, jak velký podíl agentů žije v etnicky naprosto homogenním sousedství, tj. všichni agenti v sousedství mají stejnou barvu jako agent, který toto soused-ství sleduje. Rozdíly mezi jednotlivými proměnnými h byly již rozebrány výše.

Hranaté závorky („[]“) jsou věcí syntaxe jazyka NetLogo, píší se za každý příkaz a mezi tyto závorky se pak píší parametry a argumenty tohoto příkazu. Díky tomu je možné příkaz přehledně rozepsat na několik řádek a i tak je jas-né, že vše na řádcích mezi úvodní a závěrečnou závorkou náleží příkazu, který závorku předchází. Další prvek, který se zde objevuje, je dvojstředník („;;“). Ten se používá pro psaní poznámek a komentářů přímo do kódu. To, co je za tímto znakem, nijak neovlivní běh programu, poznámky tak slouží jen autorovi a dalším uživatelům modelu pro snadnou orientaci v kódu programu. Ještě poznamenám, že by stačilo psát pouhý středník („;“) z důvodů, které neznám, se však v komunitě uživatelů NetLoga vyvinul zvyk používat dvojstředník („;;“). Má vlastní zkušenost je taková, že oddělování poznámek dvojstředníkem („;;“) je přehlednější.

Příkaz turtles-own [] zavádí proměnné agentů. Agenti mají sice řadu proměnných zavedených přímo NetLogem, např. pořadové číslo (who), bar-vu (color), velikost (size), polohu (xcor a ycor), směr pohybu nebo pohledu (heading) a další. Pokud v našem modelu s těmito předem zavedenými proměnnými nevystačíme, je třeba je zavést. Nyní, když chápeme funkci dvoj-středníku, je z ukázky patrné, že k zavedení obou typů proměnných dojde pouze tím, že se vyjmenují. První nově zavedenou proměnnou agentů je pro-měnná happy?, která indikuje, zda je agent spokojený nebo ne. Otazník jako součást názvu proměnné je konvencí zavedené v komunitě uživatelů NetLoga. Autor tak naznačuje uživatelům, že v modelu hodlá takovou proměnnou pou-žívat jako typ pravda/nepravda (true/false). Zde tedy již nyní můžeme tušit, že agenti, kteří budou se skladbou svého sousedství spokojení, budou mít hodno-tu proměnné happy? pravda a ti nespokojení v ní budou mít uloženu hodnotu nepravda. V proměnné similar-nearby bude uložen počet agentů stejné barvy

Page 15: Multiagentní modelování: Budování modelu segregace krok za ...dav.soc.cas.cz/uploads/6073392fc3743751ca468daaeb...makro úrovni ke vzniku ghett a tak silné etnické homogenizaci,

- 85 -

ve sledovaném sousedství a total-nearby bude obsahovat počet všech agentů v sousedství.

Toto však nejsou všechny proměnné, které model obsahuje. Posuvníky (number, %-similar-wanted, stated-radius) zároveň fungují jako číselné pro-měnné, které je možné v modelu využívat. Je také možné z programu modelu hodnoty posuvníků nastavovat. Pak se v modelu ještě vyskytují dočasné pro-měnné, ale jejich funkci si vysvětlíme, až na ně narazíme během procházení kódu modelu.

Kód 2: Inicializace modeluto setup ;; clear-all ca

;; create turtles on random patches. ask n-of number patches [ sprout 1 [ set color red ]]

;; turn half the turtles green ask n-of (number / 2) turtles [ set color green]

update-variables reset-ticksend

Samotná inicializace začíná příkazem to setup a končí příkazem end. Tuto obecnou strukturu mají všechny procedury v NetLogu, jak ve zbytku programu modelu uvidíme. Samozřejmě ostatní procedury se nejmenují setup, a tak mají po to uvedené své vlastní jméno. Vlastní proceduru pak tvoří kód mezi názvem a příkazem end. Na počátku procedury setup nám jde o to, promazat všechny potřebné objekty na kartě Interface. Můžeme to jednoduše provést příkazem clear-all, zde je použita jeho zkratka ca.

Následuje příkaz ask n-of number patches []. Samotné ask se používá pro-to, abychom buď my jako pozorovatel o něco požádali agenty či nějakou část simulovaného prostředí, nebo aby sami agenti či části prostředí o něco někoho či něco žádali. Kdo žádá, to vyplývá vždy z kontextu, v tomto případě jsme to my jako pozorovatelé, neboť tento konkrétní příkaz ask je volán procedurou setup (je její součástí) a tuto proceduru jsme zavolali my stisknutím tlačítka setup. Kdo je žádán, to je specifi kováno vždy mezi ask a počáteční hranatou

Page 16: Multiagentní modelování: Budování modelu segregace krok za ...dav.soc.cas.cz/uploads/6073392fc3743751ca468daaeb...makro úrovni ke vzniku ghett a tak silné etnické homogenizaci,

- 86 -

závorkou („[“). V tomto případě to je n-of number patches. O co jde? Klíčové slovo patches označuje všechny dlaždice, ze kterých se skládá půdorys našeho simulovaného města. Pokud by ve specifi kaci toho, kdo je žádán, nebylo již nic dalšího uvedeno, žádali bychom všech 5 041 dlaždic. Ale je tu ještě uvedeno n-of number, což znamená, že bude požádána pouze část dlaždic. Proměnnou number již známe, její hodnota je určena posuvníkem number, bude tedy po-žádáno právě tolik dlaždic, jako je hodnota nastavená na posuvníku. A příkaz n-of říká, že má být tento počet vybrán náhodně. Význam příkazu tedy je, že náhodně vybereme tolik dlaždic, kolik odpovídá proměnné number, a ty požá-dáme. V hranatých závorkách („[]“) je pak uvedený příkaz, který mají požádané dlaždice vykonat.

Tím příkazem je sprout 1 [set color red].13 A znamená, že každá požádaná dlaždice vytvoří právě jednoho agenta (sprout 1), jehož barva bude nastavena jako červená ([set color red]). Příkaz set se používá vždy, když chceme nastavit hodnotu nějaké již existující proměnné. Víme již, že agenti automaticky obsa-hují proměnnou color, pokud tedy chceme, aby všichni agenti měli jednotnou barvu, je třeba to nastavit. Po příkazu sprout může následovat i jiná číslovka, nebo dokonce číselná proměnná a dlaždice pak stvoří přesně tolik agentů, kolik je v číslovce či proměnné uvedeno. Dodejme, že v hranatých závorkách („[]“) může být uvedeno libovolné množství příkazů, tyto příkazy se pouze musejí týkat právě stvořených agentů, protože právě jejich podobu a vlastnosti tyto příkazy formují.

Nyní je snadné dešifrovat příkaz ask n-of (number / 2) turtles [ set color green ]. Jsme to opět my jako pozorovatelé, kdo pomocí ask žádá, a to ná-hodně vybranou (n-of) část agentů (turtles). Jelikož v předchozím příkazu dlaždice v počtu odpovídajícím hodnotě proměnné number stvořili právě jed-noho agenta, víme, že počet agentů také odpovídá hodnotě proměnné number. Žádáme tedy polovinu agentů (number / 2) a tito vybraní agenti změní svou barvu na zelenou (set color green). Dodejme, že z historických důvodů se agen-ti v NetLogu označují klíčovým slovem turtles.14 Ještě je nutné poznamenat, že příkazy uvedené v hranatých závorkách („[]“) nevykonají požádaní všichni zároveň. NetLogo zvolí náhodné pořadí a v něm požádaní vykonají jeden po druhém zadanou sadu příkazů.15

13 Všimněte si, že zde v textu nejsou odsazovány hranaté závorky tak, jak jsou odsazené v NetLogo a ukázce kód 2. Oba způsoby jsou ekvivalentní. V praxi se však využívá odsazo-vání, které zvyšuje přehlednost.14 Kořeny NetLoga sahají přes StarLogoT až k programovacímu jazyku Logo, který slou-žil k výuce programování školních dětí, které v něm měly získat základní návyky a měly si osvojit programátorské myšlení. Aby pro ně programování bylo zábavnější, spočívalo v tom, že malý začínající programátor svým programem řídil chování jedné želvy nebo rovnou několika želv. Zde je dle mého názoru historický kořen toho, proč nejsou agenti v NetLogu označováni logičtějším agents.15 V tomto případě je samozřejmě jedno, zda se vybraná polovina agentů obarví na ze-leno jeden po druhém, nebo všichni zároveň. Pokud však agenti reagují vzájemně jeden

Page 17: Multiagentní modelování: Budování modelu segregace krok za ...dav.soc.cas.cz/uploads/6073392fc3743751ca468daaeb...makro úrovni ke vzniku ghett a tak silné etnické homogenizaci,

- 87 -

Těsně před koncem procedury setup nalezneme volání procedury upda-te-variables. Její obsah si podrobněji vysvětlíme později, nyní postačí, když uvedu, že zavoláním této procedury dojde k tomu, že všichni agenti prozkou-mají své sousedství a zjistí, zda je zde dostatečný poměr agentů jejich etnika. Pokud ano, jsou šťastní, pokud ne, chtějí se odstěhovat (ale nestěhují se!). Dále tato procedura nastaví všechny indikátory, které monitorují stav celé simula-ce (kolik je celkem šťastných agentů, koefi cienty homogenity atd.). Procedura setup tak končí příkazem reset-ticks, který nastaví počítadlo proběhlých kol simulace na hodnotu 0.

Kód 3: Běh modeluto go move-unhappy-turtles update-variables tick if (ticks >= 250 or percent-unhappy = 0) [stop]end

O samotný běh modelu se stará poměrně krátká procedura go. Spouštíme ji buď pomocí spuštěného experimentu z BehaviorSpace, nebo z karty Interface tla-čítkem go, které je nastaveno tak, aby spouštělo proceduru go neustále, dokud nebude zastavena příkazem stop. Jak vidíme v kódu 3, příkaz stop je zavolán příkazem if. Obecná struktura příkazu je if (podmínka)[], přičemž podmínku není nutné psát do závorek, zde tak činím jen pro přehlednost. Jako podmínka se chápe argument specifi kovaný mezi if a úvodní hranatou závorkou („[“). Po-kud je splněna, provede se příkaz uvedený mezi hranatými závorkami. Nejsme přitom omezeni na jediný příkaz, mezi hranatými závorkami může být uvede-na rozsáhlá sada příkazů strukturovaná dalšími podmínkami.

Zde je však volán pouze příkaz stop, a to pokud je splněna podmínka ticks >= 250 or percent-unhappy = 0. Proměnná ticks je přímo vestavěná v NetLogu

na druhého, je tento detail důležitý. Představme si situaci, kdy máme 4 červené a 4 zelené agenty, všech 8 agentů tuto situaci vnímá jako sousedství, jehož etnickou skladbu sleduje. Dejme tomu, že vyžadovaný poměr vlastního etnika je 50 %. Každý agent tedy vnímá situ-aci jako nevyhovující, protože v ní pozoruje 3 sousedy vlastního a 4 sousedy cizího etnika. Dejme tomu, že agenti budou příkazem ask požádáni, aby zhodnotili situaci, a pokud s ní budou nespokojení, aby ji opustili a přestěhovali se na jiné místo. Pokud bude náhodou jako první vybrán zelený agent, zhodnotí situaci jako nevyhovující (protože pozoruje 3 ze-lené sousedy a 4 červené), a tudíž se tento zelený agent přesune jinam. Pokud po něm bude vybrán červený agent, nic nebude provádět, protože bude pozorovat 3 červené sou-sedy a 3 zelené, což odpovídá minimálnímu podílu vlastního etnika 50 %. Sousedství tedy postupně opustí 3 zbývající zelení agenti, protože budou vnímat situaci jako nevyhovující (budou postupně zaznamenávat etnické poměry sousedů 2 : 4, 1 : 4 a 0 : 4). Pokud by náhodou byl jako první vybrán červený agent, situace by dopadla přesně opačně – v sou-sedství by zbyli pouze zelení agenti a všichni červení by je opustili.

Page 18: Multiagentní modelování: Budování modelu segregace krok za ...dav.soc.cas.cz/uploads/6073392fc3743751ca468daaeb...makro úrovni ke vzniku ghett a tak silné etnické homogenizaci,

- 88 -

a udává, kolik kol simulace již proběhlo. Proměnná percent-unhappy udává podíl nespokojených agentů s etnickou skladbou jejich sousedství. Pokud se tedy stane, že buď proběhne 250. kolo simulace, nebo budou všichni agenti spokojení, podmínka bude splněna, bude proveden příkaz stop a nekonečný běh tlačítka go se ukončí. Vestavěné počítadlo proběhlých kol ticks ovlivňuje příkaz tick, kdykoli je použit, zvýší se hodnota ticks o jedna. V proceduře go tak zbývají již jen procedury move-unhappy-turtles a update-variables, na které se nyní podíváme podrobněji.

Kód 4: Procedura move-unhappy-turtlesto move-unhappy-turtles ask turtles with [not happy?] [ fi nd-new-spot ]end

to fi nd-new-spot rt random-fl oat 360 fd random-fl oat 10 if any? other turtles-here [ fi nd-new-spot ] ;; keep going until we fi nd an unoccupied patch move-to patch-here ;; move to center of patchend

Samotná procedura move-unhappy-turtles obsahuje vlastně jediný příkaz, a to ask, který vybrané agenty požádá, aby provedli proceduru fi nd-new-spot. Pod-mínka with[] specifi kuje, kteří agenti budou požádáni – jsou to samozřejmě ti, kteří odpovídají podmínce uvedené v hranatých závorkách („[]“). V našem případě zní podmínka not happy?. Již víme, že happy? je proměnná typu prav-da/nepravda, operátor not pak neguje její hodnotu. Je-li v proměnné uložena hodnota pravda (true), operátor ji zneguje a výsledek bude nepravda (false), podobně původní hodnotu nepravda (false) zneguje operátor not na pravdu (true). Požádáni tedy budou ti agenti, pro které je výsledná hodnota podmínky with[] pravda (true), jsou to tedy nespokojení agenti, kteří mají v proměnné happy? uloženu hodnotu nepravda (false). Alternativní zápis podmínky by tedy také mohl být happy? = false.

Zatímco jsme proceduru move-unhappy-turtles volali my z pozice pozo-rovatele, proceduru fi nd-new-spot volají sami vybraní agenti. Na rozdíl od předchozích procedur, které jsme volali jako pozorovatelé, a tudíž byly provede-ny jen jednou (neboť pozorovatel je jen jeden), bude procedura fi nd-new-spot provedena tolikrát, kolik agentů vyhovuje podmínce not happy?. Samotná procedura se skládá ze dvou příkazů (rt a fd) a jedné podmínky (if), která může vyústit v opětovné zavolání procedury.

Příkaz rt přepíše hodnotu do agentů vestavěné proměnné heading, která určuje, pod jakým úhlem se bude agent dívat nebo pohybovat. Hodnota pro-

Page 19: Multiagentní modelování: Budování modelu segregace krok za ...dav.soc.cas.cz/uploads/6073392fc3743751ca468daaeb...makro úrovni ke vzniku ghett a tak silné etnické homogenizaci,

- 89 -

měnné heading je 0 až 360, přičemž 0 znamená, že se agent dívá nebo pohybuje přímo vzhůru k hornímu okraji monitoru (směřuje tedy kolmo k němu), hod-nota 90 znamená, že se dívá přímo vpravo, 180 přímo dolů a 270 přímo vlevo. Argument random-fl oat 360 vybere náhodné desetinné číslo, které je menší než 360 a větší nebo rovno 0. Příkaz rt random-fl oat 360 tedy agenta otočí náhodně vybraným směrem. Příkaz fd posune agenta o udaný počet polí vpřed, jelikož celý příkaz zní fd random-fl oat 10, tak víme, že se agent posune o ná-hodně vybraných 0 až 10 polí vpřed.

Následuje příkaz if, jehož obecný význam již známe. Pokud zde bude splně-na uvedená podmínka, tak agent znovu zavolá proceduru fi nd-new-spot. Takže aktuální běh procedury ani nedokončuje, okamžitě se znovu otočí náhodným směrem, znovu se posune vpřed o 0 až 10 polí a znovu prověří podmínku, která zní if any? other turtles-here [fi nd-new-spot]. Podmínce if [] a proce-duře fi nd-new-spot již rozumíme, víme, že procedura bude zavolána, když bude pravdivý argument any? other turtles-here. Ten se vlastně ptá: „Je na dlaždici, kde právě stojím, ještě nějaký jiný agent?“ Argument any? má to-tiž hodnotu pravda (true), pokud existuje alespoň jeden agent nebo jakýkoli další prvek, který splňuje další podmínky. Operátor other znamená „jiný, než ten, kdo operátor other použil“. V tomto případě, kdy other použije některý vybraný agent, je jasné, že označuje jiné agenty. Po other je však vždy nutné uvést, kdo mají být ti jiní – nemusí totiž jít o všechny agenty (turtles), může jít o agenty s nějakou vlastností (with[]), agenty v určité vzdálenosti (in-radius) atd. Zde jsou tito jiní specifi kovaní jako turtles-here, což označuje agenty, kte-ří stojí na stejné dlaždici jako agent, který proceduru zavolal a nyní posuzuje pravdivost argumentu podmínky. Tedy, argument any? other turtles-here má hodnotu pravda (true), pokud agent stojí na dlaždici, kde stojí také nějaký dal-ší agent. Pokud stojí agent na dlaždici sám, je hodnota argumentu nepravda (false), a agent tedy nevolá proceduru fi nd-new-spot znovu a místo toho ji do-končí.

Poslední příkaz, move-to, přesune agenta na vybranou dlaždici. Argument patch-here může na první pohled působit zbytečně, neboť označuje dlaždici, na které právě agent stojí. Proč tedy přesouvat agenta někam, kde už je? Příkaz move-to má však jistý smysl – pokud agenta přesouvá, přesune ho tak, aby střed agenta (šipky/konkávního čtyřúhelníku) byl přesně na středu dlaždice. Z výše uvedeného víme, že se agenti posouvají vpřed o jakékoli číslo ze spoji-tého intervalu 0 až 10, je tak málo pravděpodobné, že by se vždy strefi li přesně na střed volné dlaždice. Příkaz move-to patch-here tedy nezajišťuje přímo pře-sun agenta, je zde použit proto, aby střed agenta byl umístěn přesně na střed dlaždice. Jak by běh modelu vypadal bez tohoto příkazu, snadno zjistíme, když před něj napíšeme dvojstředník („;;“), NetLogo tak příkaz bude považovat za poznámku a nebude mu věnovat pozornost.

Page 20: Multiagentní modelování: Budování modelu segregace krok za ...dav.soc.cas.cz/uploads/6073392fc3743751ca468daaeb...makro úrovni ke vzniku ghett a tak silné etnické homogenizaci,

- 90 -

Kód 5: Procedury update-variables a update-turtlesto update-variables update-turtles update-globalsend

to update-turtles ask turtles [ let turtles-nearby other turtles in-radius stated-radius set similar-nearby count turtles-nearby with [color = [color] of myself] set total-nearby count turtles-nearby let minimum-wanted (%-similar-wanted * total-nearby / 100) set happy? similar-nearby >= minimum-wanted ]end

Procedura update-variables zajišťuje aktualizaci hodnot vybraných glo-bálních proměnných a vybraných proměnných agentů. Již víme, že je tato procedura volána na konci procedury setup a na konci každého kola simulace v proceduře go. Procedura funguje tak, že nejprve zavolá proceduru upda-te-turtles, která zajistí aktualizaci proměnných similar-nearby, total-nearby a happy?. Tyto aktualizované hodnoty pak využije procedura update-globals, která s jejich pomocí aktualizuje proměnné percent-similar a percent-unha-ppy a indexy h0, h1, h2 a h3.

Samotná procedura update-turtles požádá16 příkazem ask turtles [] všechny agenty, aby provedli sadu příkazů specifi kovanou v hranatých závorkách („[]“). První je zatím nediskutovaný příkaz let. Ten má tu funkci, že ustaví novou do-časnou proměnnou, jejíž název je uvedený ihned za příkazem. To znamená, že let vytvoří proměnnou, která po doběhnutí procedury nebo příkazu okamžitě zaniká. Důležité je upozornit, že proměnná zaniká až na konci příkazu nebo procedury. Procedura (nebo příkaz), která použila příkaz let, totiž může ob-sahovat další vnořené procedury a příkazy. V nich bude proměnná vytvořená pomocí let stále existovat. Musíme tedy pečlivě zvažovat název proměnné, není totiž možné vytvořit dočasnou proměnnou pod názvem, pod kterým již existuje jiná proměnná. V praxi se let používá pro uložení hodnot, které zjednoduší konstrukci jinak komplikovaných vzorců (např. pro uložení hodnoty čitatele nebo jmenovatele komplikovaného zlomku), nebo pro uložení specifi kace sku-piny agentů, se kterými chceme dále pracovat. V našem případě si pomocí let potřebujeme poznamenat do proměnné turtles-nearby, jací agenti se vyskytují v sousedství agenta, který právě provádí příkaz ask[]. Sousedství je zde de-

16 Přesněji žádáme my jako pozorovatel, neboť my jsme zavolali buď proceduru go, nebo setup, tudíž procedura update-variables je sensu stricto volána námi, stejně jako další volaná procedura update-turtles. Jsme to tedy my jako pozorovatel, kdo žádá všechny agenty příkazem ask turtles [].

Page 21: Multiagentní modelování: Budování modelu segregace krok za ...dav.soc.cas.cz/uploads/6073392fc3743751ca468daaeb...makro úrovni ke vzniku ghett a tak silné etnické homogenizaci,

- 91 -

fi nováno jako other turtles in-radius stated-radius. Náš agent tedy jako své sousedy vidí ostatní agenty, než je on sám (other), kteří se nacházejí v okruhu (in-radius) vymezeném proměnnou stated-radius. Všechny sousedy bez ohle-du na jejich barvu máme uložené v dočasné proměnné a můžeme s nimi dále pracovat.

Nejprve z těchto sousedů uděláme výběr těch, kteří mají shodnou barvu s agentem, který sadu příkazů právě provádí. Počet těchto vybraných sousedů bude uložen do proměnné similar-nearby pomocí příkazu set. V proměn-né turtles-nearby nemáme uložený počet sousedů, jsou tam uloženi samotní sousedé (resp. jejich seznam), proto musíme použít příkaz, kterým spočítáme, kolik sousedů na seznamu je. Tím příkazem je count. V případě similar-near-by však nehledáme počet všech sousedů, ale jen těch, kteří mají stejnou barvu jako agent, který příkaz provádí. Výběr z turtles-nearby provedeme pomocí podmínky with[]. Argument této podmínky (color = [color] of myself) zna-mená, že agent vybírá sousedy, jejichž barva (color) je shodná s jeho. Tento argument si ale zasluhuje naši bližší pozornost.

Již víme, že color je vestavěná proměnná, jejíž hodnota kóduje barvu agenta, první část argumentu je tedy jasná, budeme vybírat sousedy, kteří budou mít určitou barvu. Ta je defi novaná zatím nesrozumitelným [color] of myself. Proč je proměnná color v hranatých závorkách? Je to kvůli syntaxi operátoru of my-self. Do hranatých závorek se uvede nějaká proměnná, kterou má agent, který tento operátor používá. Celý operátor pak odpovídá hodnotě, kterou má pro-měnná uvedená v závorkách v případě agenta, který operátor použil. V našem případě to znamená, že jsme jako pozorovatel zadali příkaz ask turtles [], ten v danou chvíli náhodně vybral agenta, který provádí jednotlivé příkazy uvedené mezi hranatými závorkami („[]“). Tento konající agent postupně dospěl k pří-kazu set similar-nearby count turtles-nearby with [color = [color] of myself]. Protože operátor []of myself odkazuje k agentovi, který provádí příkaz (nebo volá proceduru), má [color] of myself hodnotu barvy tohoto agenta. Konající agent tedy porovná postupně barvu všech sousedů se svou vlastní barvou a po-čet (count) sousedů (turtles-nearby) vyhovujících podmínce (with[]) o shodné barvě (color = [color] of myself) si uloží do proměnné similar-nearby.

Dalším příkazem si agent zaznamená, kolik sousedů vlastně v jeho oko-lí je (set total-nearby count turtles-nearby). Jde tady opět o použití příkazu count, kterým se pouze spočte, kolik sousedů je na seznamu turtles-nearby. Pak si agent vytvoří dočasnou proměnnou minimum-wanted příkazem let. Její hodnota říká, kolik by měl minimálně najít ve svém okolí sousedů shodné barvy, aby byl spokojený. Minimální vyžadovaný podíl sousedů shodné bar-vy pro celou simulaci je uložen v globální proměnné %-similar-wanted, která představuje celé číslo na škále 0–100. Tuto globální proměnnou vydělíme 100, abychom dostali desetinné číslo na škále 0–1, a toto číslo vynásobíme počtem sousedů konajícího agenta (turtles-nearby). A na závěr použijeme tuto dočas-nou proměnnou na nastavení spokojenosti konajícího agenta.

Page 22: Multiagentní modelování: Budování modelu segregace krok za ...dav.soc.cas.cz/uploads/6073392fc3743751ca468daaeb...makro úrovni ke vzniku ghett a tak silné etnické homogenizaci,

- 92 -

To se provede pomocí příkazu set happy? similar-nearby >= minimum--wanted. Z předchozího již víme, že příkaz set nastaví hodnotu existující proměnné a že happy? je proměnná typu pravda/nepravda, kde je buď uložena hodnota true, nebo false. Zbytek příkazu nás ale může zarazit tím, že vypadá spíše jako argument podmínky než nějaká hodnota, na kterou má být happy? nastaveno. Je tu třeba upozornit na jednu vlastnost NetLoga: kdykoli je někde uvedeno srovnání hodnot nebo proměnných, NetLogo automaticky zjistí, zda je toto pravdivé (true), nebo nepravdivé (false), a místo srovnání operuje s pří-slušnou hodnotou (true nebo false). Tam, kde jsme až dosud viděli argumenty podmínek, tam NetLogo a v něm vytvoření agenti viděli buď true, nebo false. Pokud tedy v případě našeho diskutovaného příkazu platí, že sousedů shodné barvy (similar-nearby) je více nebo stejně, jako je minimální požadavek na jejich počet (minimum-wanted), pak bude happy? nastaveno na hodnotu true. V opačném případě na hodnotu false.

Kód 6: Procedura update-globalsto update-globals let similar-neighbors sum [similar-nearby] of turtles let total-neighbors sum [total-nearby] of turtles set percent-similar (similar-neighbors / total-neighbors) * 100 set percent-unhappy (count turtles with [not happy?]) / (count turtles) * 100 set h0 (count turtles with [similar-nearby = total-nearby] / count turtles) * 100 set h0 precision h0 1 ifelse count turtles with [total-nearby > 0] = 0 [set h1 0] [set h1 (count turtles with [similar-nearby = total-nearby and total-nearby > 0] / count turtles with [total-nearby > 0]) * 100] set h1 precision h1 1 ifelse count turtles with [total-nearby > 1] = 0 [set h2 0] [set h2 (count turtles with [similar-nearby = total-nearby and total-nearby > 1] / count turtles with [total-nearby > 1]) * 100] set h2 precision h2 1 ifelse count turtles with [total-nearby > 2] = 0 [set h3 0] [set h3 (count turtles with [similar-nearby = total-nearby and total-nearby > 2] / count turtles with [total-nearby > 2]) * 100] set h3 precision h3 1end

Procedura update-globals, kterou voláme my jako pozorovatel, vytvoří nejprve pomocí příkazů let proměnné similar-neighbors a total-neighbors. Oba pří-kazy mají totožnou strukturu a využívají funkci sum[] of. Tato funkce funguje tak, že sumarizuje hodnoty proměnné uvedené v hranatých závorkách („[]“) a tyto hodnoty proměnné hledá u všech agentů, kteří jsou specifi kovaní dále

Page 23: Multiagentní modelování: Budování modelu segregace krok za ...dav.soc.cas.cz/uploads/6073392fc3743751ca468daaeb...makro úrovni ke vzniku ghett a tak silné etnické homogenizaci,

- 93 -

za of. V našem případě bude funkce prohledávat všechny agenty, neboť spe-cifi kace zní turtles, což odkazuje ke všem agentům v simulaci. Funkce u nich bude hledat hodnotu proměnné similar-nearby či total-nearby, protože právě tyto proměnné jsou v příkazech uvedené v hranatých závorkách („[]“). Dočasná proměnná similar-neighbors tak bude obsahovat údaj, kolik sousedů shod-né barvy vidí ve svém okolí všichni agenti (turtles). Podobně total-neighbors bude obsahovat údaj, kolik sousedů vidí ve svém okolí všichni agenti (turtles) dohromady. Pomocí těchto údajů následným příkazem set nastavíme globální proměnnou percent-similar, a to tak, že similar-neighbors vydělíme total-ne-ighbors a výsledek vynásobíme 100. Tento údaj nám pak říká, kolik sousedů shodné barvy v průměru pozorují ve svém okolí všichni agenti.

Mírně odlišným způsobem je nastavena hodnota proměnné percent-un-happy. Příkaz set, který ji nastavuje, totiž nevyužívá pomocné proměnné, ale používá funkci count přímo ve výpočtu a nastavení hodnoty. Funkce count turtles with [not happy?] sečte, kolik máme v simulaci celkem momentálně nespokojených agentů – hledá tedy agenty s hodnotou false uložené v proměn-né happy?, protože negace pomocí not dá u těchto agentů hodnotu true a tito agenti vyhoví podmínce, a budou tedy sečteni. Spokojení agenti, kteří mají v proměnné happy? hodnotu true, budou mít po negaci (pomocí not) false jako celkovou hodnotu argumentu podmínky with[], a tak sečteni nebudou. Počet nespokojených agentů se vydělí počtem všech agentů v simulaci (count turtles) a výsledek se vynásobí 100. Hodnota percent-unhappy nám pak udává, kolik procent agentů je v simulaci nespokojených z etnické skladby svého soused-ství. Dodejme jen, že obě řešení jsou stejně funkční. Při nastavování proměnné percent-similar jsme mohli funkci sum[] of také použít přímo ve výpočtu, ne-bylo bezpodmínečně nutné vytvářet dočasné proměnné. Podobně jsme také mohli použít dočasné proměnné pro výpočet percent-unhappy a nebylo nutné používat funkci count přímo ve výpočtu. Volba toho či onoho řešení spíše záleží na naturelu toho či onoho autora programu simulace: někteří dávají přednost dočasným proměnným a považují takové řešení za přehlednější a plynulejší, jiní umísťují funkce přímo do fi nálního výpočtu a nastavení a považují tako-vé řešení za efektivnější a přehlednější z hlediska úspornějšího užitého počtu proměnných. Je na čtenáři, jaký přístup ke svým vlastním multiagentním mo-delům zvolí.

Nakonec se v proceduře update-globals nastaví indexy homogenity h0, h1, h2 a h3. Základní logika všech čtyř indexů je shodná: zajímá nás, pro kolik agentů ze všech agentů v simulaci platí, že ve svém okolí vidí pouze sousedy, kteří mají shodnou barvu jako oni. Proto nejprve sečteme, pro kolik agentů platí, že celkový počet jejich sousedů odpovídá počtu sousedů shodné barvy (count turtles with [similar-nearby = total-nearby]), tento počet vydělíme počtem všech agentů (count turtles) a vynásobíme 100. Výsledek poté ještě zaokrouhlíme na jedno desetinné místo (set h0 precision h0 1). Přesně takto vypočítáme index h0. U dalších indexů si ještě klademe podmínku, aby byl v jejich okolí dostatečný počet sousedů. Výsledky by totiž mohly být zkreslené

Page 24: Multiagentní modelování: Budování modelu segregace krok za ...dav.soc.cas.cz/uploads/6073392fc3743751ca468daaeb...makro úrovni ke vzniku ghett a tak silné etnické homogenizaci,

- 94 -

vysokým počtem agentů, jejichž okolí je z hlediska vzorce automaticky homo-genní (pokud nemají žádné sousedy, nemohou mít ani žádné sousedy shodné barvy). Např. u h1 trváme na tom, aby byl v sousedství počet sousedů vyšší než nula, a příkaz s dodatečnou podmínkou pak vypadá takto:

Kód 7: Výpočet indexu h1set h1 (count turtles with [similar-nearby = total-nearby and total-nearby > 0] / count turtles with [total-nearby > 0]) * 100

Při takovém výpočtu ovšem hrozí, že budeme dělit 0, může se totiž stát, že v celé simulaci nebude žádný agent s dostatečně obsazeným sousedstvím, např. pokud agenti rozeznávají jako sousedství von Neumannovo okolí (4 nejbližší dlaždice v kolmých směrech) a agentů bude na 5 041 dlaždicích roz-ptýleno pouze 500, stane se to snadno. Proto musíme před výpočtem indexů h1, h2 a h3 pomocí příkazu ifelse[][] ověřit, zda vůbec v simulaci existují nějací agenti s dostatečně obsazeným sousedstvím. Pokud je jejich počet roven nule (ifelse count turtles with [total-nearby > 0] = 0), automaticky přiřadíme in-dexu hodnotu 0 (set h1 0). Pokud je počet nenulový, provedeme výpočet (viz kód výše). Příkaz ifelse (podmínka) [][] tedy specifi kuje podmínku, pokud je tato podmínka pravdivá, provede se první sada příkazů, pokud není, provede se druhá sada. Každá sada příkazů je uvedena v hranatých závorkách („[]“). Pro výpočet indexu h2 vypadá kód stejně, pouze s tím rozdílem, že trváme na tom, aby počet sousedů byl větší než 1. Analogicky u indexu h3 trváme na tom, aby byl počet sousedů větší než 2.

Zrekapitulujme si, co jsme se zatím s prezentovaným modelem nauči-li. Známe jeho ovládací prvky, a tak jsme schopni zkoušet různé kombinace nastavení a zkoumat, jaký mají na chod modelu vliv. Známe podrobně pro-gramový kód modelu, víme, co která jeho část činí, což nám umožňuje model v software NetLogo upravit tak, aby se s jeho pomocí daly řešit nové výzkumné otázky. Jsme schopni spustit v NetLogu systematický experiment a jeho data uložit. Nyní již záleží na statistickém balíku, který ten který čtenář používá. V různých statistických balících je odlišný postup načtení dat ve formátu *.csv. Já osobně používám software STATA, kam je možné vyprodukovaná data na-číst příkazem:

insheet using nebojmeSeABM.csv, name delim(,)

Pro čtenáře, kteří používají STATA, jsem připravil *.do soubor, který jim data nejen načte, ale také převede do korektní číselné podoby, přejmenuje pro-měnné a opatří je popiskami.17 Pouze je nutné, aby si čtenář v tomto souboru upravil cestu do svého pracovního adresáře, resp. do adresáře, kde je uložen

17 http://abm.euweb.cz/nebojmeSeABM.do.

Page 25: Multiagentní modelování: Budování modelu segregace krok za ...dav.soc.cas.cz/uploads/6073392fc3743751ca468daaeb...makro úrovni ke vzniku ghett a tak silné etnické homogenizaci,

- 95 -

soubor nebojmeSeABM.csv. Věřím, že si však s importem dat v *.csv formátu poradí i uživatelé jiných balíků.18 Pokud by se chtěli ABM dále zabývat, je to nutné – NetLogo data do jiného formátu nezaznamenává.

Ukázka možné analýzy datHlavní motivací tohoto článku bylo ukázat čtenářům jednoduchý model napro-gramovaný v NetLogo a zevrubně vysvětlit jeho fungování a objasnit základní příkazy tohoto programovacího jazyka.19 Další motivací bylo podrobně doku-mentovat cestu od jednoduchého nápadu (Schellingova hypotéza) k datům z experimentu. Prosím čtenáře, nechť tedy hodnotí shovívavě tuto závěrečnou část. Její motivací je pouze ukázat, jak je možné analyzovat data z experimen-tu. Mým cílem není přinést nějaký zásadní průlom, který by Schellingův model zpochybnil, či dokonce ukázal, že vše je jinak. To by bylo příliš troufalé – Sche-llingův model je zkoumán již přes 40 let. Tento model jsem použil proto, že je jednoduchý, a tudíž se hodí k zevrubnému popisu. Nyní však musím ukázat poslední krok, který je třeba učinit, pokud má mít ABM smysl – analýzu dat a interpretaci výsledků. Sice bez nároku na převratné zjištění, ale s touhou uká-zat, jak je možné projekt s ABM smysluplně dokončit.

Provedli jsme tedy simulační experiment, kde jsme variovali klasický para-metr, který bych tu přejmenoval na netoleranci – tj. jak velký podíl vlastního etnika agenti vyžadují ve svém okolí. Dále tu máme údaj o počtu agentů v si-mulaci. Jelikož všechny simulace probíhají ve městě, které má shodný počet obyvatelných domů (5.041), budu tuto proměnnou dále nazývat hustota osíd-lení. V analýze ji však nebudeme měřit v procentech, ale v tisících agentů, kteří obývají virtuální město s 5.041 obyvatelným domem. Pozornost budeme vzhle-dem k výzkumné otázce upírat k proměnné velikost okolí. Budeme ji měřit průměrem pozorovaného sousedství. Na jednotkách zde příliš nezáleží, pro-tože tato proměnná nebude použita jako kardinální, ale jako kategorizovaná – budeme si ukazovat, jak se liší efekt rozeznávaného sousedství o velikosti 80 nejbližších domů, 28 domů a 8 domů a budeme je kontrastovat se sousedstvím o velikosti 4 nejbližších domů.

Jako závislé proměnné použijeme homogenitu, tj. kolik % agentů ve svém sousedství pozoruje pouze agenty svého etnika, jsou tedy plně segregovaní. Druhá míra je podíl vlastních, tj. jaký podíl vlastního etnika pozorují ve svém sousedství. Poslední závislá proměnná je podíl nespokojených, tj. kolik % agen-

18 Pozor, prvních 6 řádek *.csv souboru obsahuje informační hlavičku, 7. řádek pak ná-zvy proměnných. Samotná data jsou uložena od 8. řádku dále. V nabízeném *.do souboru je tento problém vyřešen.19 Tento článek, jak jsem poznamenal již v úvodu, rozhodně nemůže suplovat kurz pro-gramování v NetLogo nebo učebnici. Zájemce o NetLogo nechť se obrátí na manuál dodá-vaný elektronicky s bezplatnou instalací NetLogo, kde jsou vysvětleny širší základy a najde zde i vyčerpávající slovník příkazů. Český manuál je k nalezení na stránkách http://www.robotomie.cz/netlogo.php spolu s dalšími materiály.

Page 26: Multiagentní modelování: Budování modelu segregace krok za ...dav.soc.cas.cz/uploads/6073392fc3743751ca468daaeb...makro úrovni ke vzniku ghett a tak silné etnické homogenizaci,

- 96 -

tů bylo po ukončení simulace stále nespokojených se svým sousedstvím. Pokud nebyl konec vynucený v 250. kole, bude hodnota této proměnné 0, protože simulace byly nastavené tak, aby se při 0 % nespokojených zastavily. Nenulová hodnota proměnné bude tedy jen u těch simulací, které nedosáhly rovnováhy před 250. kolem. Podívejme se tedy na Grafy 1 a 2.

Z grafů 1 a 2 je patrné, že etnicky velmi homogenní osídlení a vznik ghett může vzniknout i při velmi nízké netoleranci (Schellingova hypotéza). Např. při požadavku na přítomnost minimálně 34 % vlastního etnika může více než 50 % agentů pozorovat etnicky naprosto homogenní okolí, ale tyto hodnoty je možné dosáhnout jen za předpokladu, že agenti sledují velmi malé sousedství (4 nebo 8 okolních políček). Pokud je sousedství větší (28 nebo 80 okolních políček), vznikají etnicky homogenní sousedství častěji pouze při vysokých hodnotách netolerance. Ukazuje se tedy, že rozeznávaná velikost sousedství intervenuje do vztahu netolerance a etnické homogenity. A to tak, že koriguje rozsah etnické homogenity, nikoli však charakter tohoto vztahu. I pro různé velikosti rozeznávaného sousedství platí, že větší netolerance vede k větší ho-mogenitě. Dá se tedy říci, že větší okolí tlumí tendenci k segregaci při nízkých hodnotách netolerance. Při vyšších hodnotách netolerance bude segregace vyšší bez ohledu na velikost okolí.

Je také patrné, že záleží na tom, jak segregaci měříme. Pokud jako etnickou homogenitu, je mezi jednotlivými velikostmi okolí na počátku větší odstup (při

Graf 1: Vztah etnické homogenity a netolerance kontrolovaný velikostí sousedství

Page 27: Multiagentní modelování: Budování modelu segregace krok za ...dav.soc.cas.cz/uploads/6073392fc3743751ca468daaeb...makro úrovni ke vzniku ghett a tak silné etnické homogenizaci,

- 97 -

netoleranci 34 % je maximální rozdíl více než 50 procentních bodů), rozdíly se snižují zhruba lineárně a zvolna (minimální rozdíl je 23 procentních bodů, a to při netoleranci 67 %). Pokud segregaci měříme jako podíl vlastního etnika v sousedství, jsou rozdíly zprvu také velké (přes 30 procentních bodů při ne-toleranci 34 %), ale od tohoto momentu segregace pro jednotlivá okolí roste zhruba po křivce kvadratické funkce, rozdíly se snižují rychleji (14 procentních bodů při netoleranci 41 %), až se sníží na minimum (6 procentních bodů při netoleranci 67 %). Je třeba vzít v úvahu, že teoretické minimum homogenity je 0 %, tj. žádný agent nežije pouze mezi agenty svého etnika, zatímco podíl vlastního etnika má teoretické minimum 50 % – pokud budou všichni agenti rovnoměrně promícháni, bude každý ve svém okolí pozorovat polovinu vlast-ního a polovinu opačného etnika. Pokud chceme obě míry segregace srovnat, je třeba počítat s polovičními rozdíly v případě homogenity.

V grafech jsou dvě zajímavé anomálie. (1) Zatímco křivky větších okolí zhruba plynule rostou (alespoň mezi hodnotami netolerance 34 % až 67 %), křivka pro von Neumannovo okolí roste trhaně. (2) Segregace kulminuje ko-lem netolerance 67 či 72 %, poté prudce klesá. Začněme tedy první z nich. Trhaný růst křivky pro okolí o velikosti 4 polí nastává proto, že mnoho hodnot netolerance splývá. Pokud má agent obsazeny všechny čtyři okolní dlaždi-ce, mohou na nich být 4 agenti jeho etnika (100 %), nebo 3 (75 %), 2 (50 %), 1 (25%) nebo nikdo. Jiná možnost není. Při třech agentech může nově pozo-

Graf 2: Vztah podílu vlastního etnika a netolerance kontrolovaný velikostí sousedství

Page 28: Multiagentní modelování: Budování modelu segregace krok za ...dav.soc.cas.cz/uploads/6073392fc3743751ca468daaeb...makro úrovni ke vzniku ghett a tak silné etnické homogenizaci,

- 98 -

rovat 66,7 % a 33,3 % agentů svého etnika. A žádná další mimo těchto sedm uvedených hodnot (0; 25; 33,3; 50; 66,7; 75; 100) není při von Neumannově okolí možná. Je-li úroveň netolerance nastavena na 34 % nebo 43 %, výsledek je stejný – agenti budou nespokojení, pokud se v jejich okolí vyskytnou dva agenti opačného etnika. Jelikož je toto okolí malé, i malé změny v přítomnosti agentů způsobí velké rozdíly v podílu vlastního etnika. Pokud jsou v tomto oko-lí dva stejní a dva odlišní agenti a jeden stejný odejde, poklesne podíl vlastního etnika z 50 % na 33 %. Pokud prázdné místo obsadí agent odlišného etnika, poklesne podíl vlastních na 25 %, což agenta ve středu okolí pravděpodobně přiměje k odstěhování. Jak tedy vidíme, drobné změny v počtech agentů ve-dou logicky ve von Neumannově okolí k razantním změnám v podílu etnik. A pokud se míra netolerance pohybuje kolem jedné ze sedmi výše specifi kova-ných hranic, může to vést k prudkým změnám v tendenci k segregování i při drobných změnách netolerance. Tím bychom vysvětlili nehybnost mezi hod-notami netolerance 34% a 41% či 51 % a 61 % a zároveň prudkou změnu mezi 41 % a 51 %. Proč však k prudkému nárůstu segregace nedojde při změně neto-lerance na 67 %?

Domnívám se, že to souvisí s druhou anomálií – poklesem křivek při vysoké netoleranci. Při netoleranci 67 % v simulaci využívající von Neumannovo okolí dochází ke dvěma protichůdným procesům – část agentů se zcela segreguje a pozoruje zcela homogenní okolí a druhá část agentů nemá s nalezením tako-vého sousedství štěstí, je stále nespokojená, stále se neúspěšně stěhuje a tím snižuje ukazatele segregace. Připomeňme si dva fakty: míry segregace se vy-počítávají ze všech agentů, i z těch nespokojených; a agenti si nové bydliště vybírají zcela náhodně. Při vysokých hodnotách netolerance je tak šance na nalezení vyhovujícího sousedství malá. Agent se může octnout v homogenním sousedství svého etnika, ale na druhé straně je pravděpodobnější, že náhod-ným výběrem místa narazí na smíšené sousedství nespokojených agentů nebo homogenní sousedství opačného etnika (jehož případnou křehkou rovnováhu může svou přítomností rozbít). Tento princip platí při vyšší netoleranci i pro ostatní okolí, dokonce tím více, čím je okolí větší. Při náhodném výběru místa totiž poměr etnik v největším okolí tenduje k poměru etnik v celém městě. Po-kud je netolerance nižší než 50 %, bude velké okolí segregaci tlumit, pokud bude netolerance růst výrazně nad 50 %, bude velké okolí podněcovat v agentech ne-spokojenost, protože při náhodném výběru místa je méně pravděpodobné, že bude splněna podmínka vysoké netolerance na celé ploše velkého okolí.

Toto vysvětlení potvrzuje i regresní model B3 v tabulce 1. Je patrné, že s ve-likostí okolí roste i podíl agentů, kteří jsou na konci simulace nespokojení. A je logické, že nespokojení agenti nejsou segregovaní (obráceně to však neplatí, zvlášť v případě většího okolí může být agent spokojený, aniž by byl segrego-vaný). Tabulka 1 přináší i podporu předpokladům o vlivu velikosti okolí na vztah netolerance a míry segregace. Z modelů B1 a B2 je zřejmé, že čím vět-ší okolí je, tím více tlumí segregaci. Důležité je však srovnání modelů A1 s B1 a A2 s B2. V obou případech roste R2 o více než 10 procentních bodů. Je tedy

Page 29: Multiagentní modelování: Budování modelu segregace krok za ...dav.soc.cas.cz/uploads/6073392fc3743751ca468daaeb...makro úrovni ke vzniku ghett a tak silné etnické homogenizaci,

- 99 -

Tab

ulk

a 1:

R

egre

se z

ávis

lost

i etn

ické

hom

ogen

ity,

pod

ílu

vla

stn

ího

etn

ika

v so

use

dst

a n

esp

okoj

enos

ti n

a n

etol

eran

ci, h

ust

otě

osíd

len

í a v

elik

osti

vn

íman

ého

sou

sed

ství

. N

esta

nd

ard

izov

ané

koefi

cie

nty

(st

and

ard

ní c

hyb

y). (

N =

9 5

99

)

Prom

ěnná

A1:

(hom

ogen

ita)

B1:

(hom

ogen

ita)

A2:

(% v

last

ních

)B

2:(%

vla

stní

ch)

A3:

(nes

pok.

)B

3:(n

espo

k.)

Hus

tota

osí

dlen

í(v

tisí

cích

age

ntů)

−0,

861

(0,6

90)

−0,

864

(0,6

11)

−2,

182

(0,3

26)

−2,

186

(0,2

98)

−10

,001

(0,4

60)

−10

,008

(0,4

52)

Net

oler

ance

(%)

1,18

7(0

,033

)1,

187

(0,0

29)

0,50

2(0

,015

)0,

502

(0,0

14)

−0,

199

(0,0

22)

−0,

199

(0,0

21)

Inte

rakc

e:hu

stot

a *

neto

lera

nce

−0,

111

(0,0

12)

−0,

111

(0,0

11)

−0,

045

(0,0

06)

−0,

045

(0,0

05)

0,28

6(0

,008

)0,

286

(0,0

08)

Vel

ikos

t sou

seds

tví:

4

pole

(kon

tras

t)

8

polí

12,1

45(0

,777

)0,

091

(0,3

79)

−3,

325

(0,5

75)

28

pol

í−

4,65

6(0

,777

)−

5,16

5(0

,379

)−

2,91

3(0

,575

)

80

pol

í−

26,8

59(0

,777

)−

14,1

55(0

,379

)6,

202

(0,5

75)

Kon

stan

ta8,

794

(1,8

15)

13,6

47(1

,677

)69

,070

(0,8

58)

73,8

88(0

,819

)6,

967

(1,2

11)

6,97

6(1

,241

)

R2

31,1

%45

,9 %

31,8

%42

,9 %

29,5

%32

,0 %

F (d

f1; d

f2)

1440

,3(3

; 959

5)13

58,2

(6; 9

592)

1491

,6(3

; 959

5)12

02,9

(6; 9

592)

1337

,0(3

; 959

5)75

1,3

(6; 9

592)

p<

0,0

01<

0,0

01<

0,0

01<

0,0

01<

0,0

01<

0,0

01

Page 30: Multiagentní modelování: Budování modelu segregace krok za ...dav.soc.cas.cz/uploads/6073392fc3743751ca468daaeb...makro úrovni ke vzniku ghett a tak silné etnické homogenizaci,

- 100 -

jisté, že zavedení proměnné velikost sousedství do modelů spolehlivě zlepšuje jejich kvalitu. R2 se na druhou nezlepšuje dramaticky. Tedy i výsledky analýzy pomocí lineární regrese nám signalizují, že vnímaná velikost okolí je důležitá proměnná, avšak nemění zásadním způsobem fungování modelu. Pouze tlumí dopad netolerance.

ZávěrV tomto článku jsem na praktickém příkladu ilustroval metodu multiagentní-ho modelování. Pokusil jsem se – nepříliš úspěšně – navrhnout jedno z mnoha možných rozšíření klasického Schellingova modelu segregace. Výzkumná otáz-ka, která nás tímto článkem provázela, zněla: Bude větší vnímané sousedství tlumit segregaci? Abychom ji mohli zodpovědět, ukázali jsme si, jak může být pro tento účel naprogramován multiagentní model. Ukázali jsme si, jak naplá-novat simulační experiment s tímto modelem a jak z něj uložit data. Také jak tato data načíst do statistického balíku a jak je analyzovat.

Výsledky zásadní průlom nepřinesly. Ukázalo se sice, že velikost okolí pro-ces segregace tlumí, ale zásadně ho nemění. Nicméně pro velká vnímaná okolí platí, že míra netolerance musí být vysoká (kolem 51–61 %), aby došlo k seg-regaci, zatímco při malém vnímaném okolí může dojít k vyšší míře segregace již při netoleranci 34 %. Je tedy legitimní se ptát, jak široké sousedství vní-mají obyvatelé měst, která se segregují. O jak širokém okolí přemýšlejí, když se rozhodují, zda zůstat, či se odstěhovat? A je také namístě ptát se, jak moc tolerantní tito obyvatelé jsou. Nevím o tom, že by někdo empiricky ověřoval, jak rozsáhlé sousedství obvykle vnímají obyvatelé segregovaných měst. Není to jistě snadno měřitelná proměnná. Naše analýza však ukazuje, že by tato pro-měnná mohla vnést světlo do vztahu netolerance a segregace. A to je jeden ze zásadních významů multiagentního modelování a simulačních experimentů – mohou inspirovat náš výzkum reálného sociálního světa.

Literatura:Cahlík, Tomáš a kolektiv. 2006. Multiagentní přístupy v ekonomii. Praha: Karolinum.

ISBN 80-246-1223-2.

Epstein, Joshua M. 2006. Generative social science. Princeton: Princeton University Press.

Epstein, Joshua M. a Robert Axtell. 1996. Growing artifi cial societies: Social science from bottom up. Washington: The Brookings Institution. ISBN 0-262-55025-3.

Gilbert, Nigel. 2008. Agent-based models. Thousand Oaks: Sage publications.

Gilbert, Nigel a Klaus G. Troitzsch. 2005. Simulation for the social scientist. Maiden-head – New York: Open University Press. ISBN 978-0335-21600-0.

Hegselmann, Rainer. 2010. „Cellular Automata in the Social Sciences: Perspectives, Restrictions, and Artefacts.“ Pp. 3–25 in Nigel Gilbert (ed.) Computational Social Science, Vol. I. London: SAGE.

Page 31: Multiagentní modelování: Budování modelu segregace krok za ...dav.soc.cas.cz/uploads/6073392fc3743751ca468daaeb...makro úrovni ke vzniku ghett a tak silné etnické homogenizaci,

- 101 -

Hegselmann, Rainer. 2012. „Thomas C. Schelling and the Computer: Some Notes on Schelling‘s Essay On Letting a Computer Help with the Work.“ Journal of Artifi -cial Societies and Social Simulation [online] 15 (4). [cit. 12. 10. 2013]. Dostupné z: http://jasss.soc.surrey.ac.uk/15/4/9.html. DOI: 10.18564/jasss.2146.

Krčková, Anna. 2013. „Multiagentní modelování v sociologii: úvod do tématu.“ Data a výzkum 7 (2): 167–186. DOI: http://dx.doi.org/10.13060/23362391.2013.127.2.38.

Mathias, Marek. 2010. „Možnosti využitia multiagentového modelovania v sociológii.“ Sociálne a politické analýzy 4(1): 19–38.

Mathias, Marek. Použitie a konštrukcia multiagentových modelov sociálnych sys-témov. Bratislava, 2013. Disertační práce. Univerzita Komenského, Filozofi cká fa kulta, Katedra sociológie.

Pelánek, Radek. 2011. Modelování a simulace komplexních systémů. 1. vyd. Brno: Masarykova univerzita. ISBN 978-80-210-5318-2.

Schelling, Thomas Crombie. 1969. „Models of segregation.“ American Economic Re-view: Papers and Proceedings, 59 (2): 488–493.

Schelling, Thomas Crombie. 1971. „Dynamic models of segregation.“ Journal of Math-ematical Sociology, 1 (2): 143–186. DOI: http://dx.doi.org/10.1080/0022250X.1971.9989794.

Schelling, Thomas Crombie. 1978. Micromotives and Macrobehavior. New York – Lon-don: W.W. Norton & Company. ISBN 0-393-05701-1.

Schenk, Juraj. 2007. „Multiagentové modelovanie ako metodologická inovácia.“ Filo-zofi a 62: 777-789.

Schenk, Juraj. 2011. Metodologické problémy multiagentového modelovania v socio-lógii. Bratislava: Stimul. ISBN 978-80-8127-031-4.

Wilensky, Uri. 1997. „NetLogo Segregation model.“ http://ccl.northwestern.edu/net-logo/models/Segregation. Center for Connected Learning and Computer-Based Modeling, Northwestern University, Evanston, IL.

Wilensky, Uri. 1999. NetLogo. http://ccl.northwestern.edu/netlogo/. Center for Connected Learning and Computer-Based Modeling, Northwestern University, Ev-anston, IL.

Page 32: Multiagentní modelování: Budování modelu segregace krok za ...dav.soc.cas.cz/uploads/6073392fc3743751ca468daaeb...makro úrovni ke vzniku ghett a tak silné etnické homogenizaci,

- 102 -