Difference between revisions of "Multi-agent systems/cs"
Daniel sram (talk | contribs) (→Výsledek) |
Daniel sram (talk | contribs) (→Multiagentní simulace) |
||
(30 intermediate revisions by the same user not shown) | |||
Line 11: | Line 11: | ||
==Charakteristika multiagentního systému== | ==Charakteristika multiagentního systému== | ||
+ | Multiagentní systém je propojená síť entit řešící nějaký problém ([[Agents/cs|agentů]]), kteří spolupracují za účelem nalezení odpovědí na problémy, které svou náročností přesahují limity každého z agentů jakožto jednotlivce. <ref>P. Stone, M. Veloso, “ Multiagent systems: A survey from a machine learning perspective”, Autonomous Robots, vol. 8, no. 3, pp. 345–383, 2000 [cit. 2017-05-31]</ref> Fakt že spolu agenti spolupracují naznačuje, že mezi agenty se musí vyskytovat nějaká forma kooperace. Multiagentní systémy jsou také někdy chápány jako nejslabší forma [[Artificial_Intelligence/cs|umělé inteligence]] <ref>KELEMEN, Jozef. Strojovia a agenty. Bratislava : Archa, 1994. ISBN 80-7115-089-4 [Cit. 2017-05-30]</ref>. To je nejspíš zapříčiněno tím, že narozdíl od klasických výpočetních algoritmů, jenž vedou k predikovatelným výsledkům, vznikají v multiagentnich systémech spontánní jevy připomínající živé ekosystémy a projevují určitou inteligenci. Pro systémy tohoto typu jsou charakteristické následující skutečnosti: | ||
+ | |||
+ | * Systém jako celek není nijak globálně řížen. | ||
+ | * Každý agent je majitelem pouze části informací celkové problematiky modelu. | ||
+ | * Každý agent má své cíle a funguje asynchronně. | ||
===Agenti=== | ===Agenti=== | ||
Line 16: | Line 21: | ||
<i>Toto je pouze stručný úvod do teorie agentů, podrobnější výklad lze nalézt [[Agents/cs|v dedikovaném textu o agentech]].</i> | <i>Toto je pouze stručný úvod do teorie agentů, podrobnější výklad lze nalézt [[Agents/cs|v dedikovaném textu o agentech]].</i> | ||
+ | [[Agents/cs|Agent]] je cokoli, co pomocí senzorů vnímá své okolí a pomoci efektorů na ně zpětně reaguje. <ref>S. Russel, P. Norvig, “Artificial intelligence – A modern approach”, Prentice Hall, 1995. [cit. 2017-05-31]</ref> Podle této definice je agent entitou (ať už fyzickou nebo virtuální), která vnímá své okolí a reaguje na něj. Virtuální entitou můžeme chápat jako kus zrojového kódu, který přijímá nějaké vstupy z prostředí a produkuje výstupy. Často jsou ale agenti kombinací fyzických a virtuálních částí, jako například chytrý vysavač. Mimo to, že agenti vnímají prostředí, ve kterém se nacházejí, mají i své cíle, které se klidně mohou lišit od cílů ostatních agentů. Díky svým cílům a možnosti reagovat na okolí - tedy i na jiné agenty - považujeme agenty za autonomní entity. To znamená, že agent operuje na základě své vlastní logiky, nikoli na povel od někoho jiného, a mají tím pádem určitou kontrolu nad svým jednáním. <ref>P. Maess, “Artificial life meets entertainment: Life like autonomous agents”, | ||
+ | Communications of the ACM, vol. 38, no. 11, pp. 108-114, 1995. [cit. 2017-05-31]</ref> | ||
+ | |||
+ | [[Agent_environments/cs|Prostředím]] agenta rozumíme prostředí, ve kterém se agenti nacházejí, pohybují a ze kterého přijímají signály. Podrobnější výklad je k nalezení [[Agent_environments/cs|v dedikovaném textu o prostředí]].</i> | ||
+ | |||
+ | ====Uvažování agenta==== | ||
+ | Jelikož má agent své cíle, kterých chce dosáhnout, jeho rozhodnutí směřují čistě racionálně za jejich dosáhnutím. K tomu agent užívá buď [[Utility-based_approach/cs|užitkovou funkci]] nebo logickou dedukci na základě jeho individuálních znalostí a zkušeností. Více o uvažování agenta si můžete přečíst [[Agent reasoning/cs|zde]]. | ||
− | == | + | ==Reálné aplikace== |
− | + | Servisní roboti, transportační systémy, průzkum nebezpečných prostředí, obrana státu, či záchranné akce při mimořádných událostech, to všechno jsou oblasti, ve kterých se v dnešní době využívají multiagentní systémy. <ref>Weiss, G.: Multiagent Systems: a Modern Approach to Distributed Artificial Intelligence. MIT Press, Cambridge (1999) [cit. 2017-05-31]</ref> Zajímavým příkladem je třeba DARPA Grand Challenge, což je závod autonomních vozidel pouštní krajinou sponzorovaný americkým ministerstvem obrany za účelem urychlení vývoje autonomních vozidel. | |
− | + | Dalším příkladem může být například veletrh [http://www.robocup.org RoboCup], což je každoroční soutěž a přehlídka autonomních robotů. Cílem sponzorů této přehlídky je do roku 2050 sestavit robotický fotbalový tým, který bude schopen konkurovat lidskému týmu. V roce 2016 se této události zúčastnilo 45 zemí. <ref>http://www.leipzig.de/news/news/robocup-wm-2016-kommt-nach-leipzig/</ref> | |
− | === | + | ====Satelitní monitorovací roboti==== |
− | + | NASA například k údržbě satelitů a jiných vesmírných těles používá tým autonomních robotů. Ti jsou schopni pracovat jak samostatně, tak v asistenci s astronautem. Posádky létající na oběžnou dráhu země za účelem údržby satelitů a drobných oprav se obvykle skládají ze tří až čtyř astronautů a množství práce, které na ně na oběžné dráze čeká, je ohromné. Proto jsou tyto lidské posádky podpořeny několika roboty o velikosti baseballového míčku, kteří dokáží satelit a jiná zařízení zkontrolovat a konstatovat, zda jsou v pořádku či nikoliv. | |
− | |||
− | + | <gallery mode="packed"> | |
+ | File:Dapra.jpg|Autonomní vozidlo na soutěži DAPRA Grand Challenge. | ||
+ | File:Robocup.jpg|Agenti hrající fotbal. | ||
+ | File:Psa.png | Satelitní monitorovací agent. | ||
+ | </gallery> | ||
==Program NetLogo== | ==Program NetLogo== | ||
Line 55: | Line 70: | ||
===Příprava prostředí=== | ===Příprava prostředí=== | ||
− | Před samotným programováním, na které se jistě všichni těšíte, si nejprve vytvořme grafické komponenty, které nám celou simulaci obohatí o možnost ovlivňovat vstupní parametry a názorně sledovat tížený výsledek. | + | Před samotným programováním, na které se jistě všichni těšíte, si nejprve vytvořme proměnné a grafické komponenty, které nám celou simulaci obohatí o možnost ovlivňovat vstupní parametry a názorně sledovat tížený výsledek. |
− | + | ====Proměnné==== | |
Začněme definováním vstupních parametrů, jenž budeme k naší simulaci potřebovat, jedná se o proměnné: | Začněme definováním vstupních parametrů, jenž budeme k naší simulaci potřebovat, jedná se o proměnné: | ||
− | * number-of-nodes - počet počítačů | + | * <i>number-of-nodes</i> - počet počítačů |
− | * average-node-degree - průměrný počet vazeb mezi počítači | + | * <i>average-node-degree</i> - průměrný počet vazeb mezi počítači |
− | * initial-outbreak-size - počáteční počet nakažených počítačů | + | * <i>initial-outbreak-size</i> - počáteční počet nakažených počítačů |
− | * virus-spread-chance - riziko přenosu viru na jiný počítač | + | * <i>virus-spread-chance</i> - riziko přenosu viru na jiný počítač |
− | * virus-check-frequency - četnost antivirové kontroly (při použití hodnoty 1 bude ke kontrole docházet každé kolo) | + | * <i>virus-check-frequency</i> - četnost antivirové kontroly (při použití hodnoty 1 bude ke kontrole docházet každé kolo) |
− | * recovery-chance - šance odhalení viru na nakaženém počítači | + | * <i>recovery-chance</i> - šance odhalení viru na nakaženém počítači |
− | * gain-resistance-chance - šance na získání imunity vůči viru, který počítač nakazil | + | * <i>gain-resistance-chance</i> - šance na získání imunity vůči viru, který počítač nakazil |
− | |||
− | |||
+ | Hodnoty výše uvedených proměnných můžete používat libovolné, ovšem pro účely tohoto příkladu budeme simulovat 150 počítačů s průměrnou vazbu na jiné počitáče s hodnotou 6, počátečním počtem virů tři, rizikem přenosu 2,5%, antivirovou kontrolou probíhající každé kolo a šancí na odhalení viru a získání imunity 5%. | ||
+ | ====Grafické komponenty==== | ||
Dále vytvořme tlačítka a na ně navázané metody setup a go, u kterého navíc zaškrtněme checkbox Forever. | Dále vytvořme tlačítka a na ně navázané metody setup a go, u kterého navíc zaškrtněme checkbox Forever. | ||
Line 89: | Line 104: | ||
| plot (count turtles with [resistant?]) / (count turtles) * 100 | | plot (count turtles with [resistant?]) / (count turtles) * 100 | ||
|} | |} | ||
+ | |||
+ | Nyní by prostředí na záložce <i>Interface</i> mělo vypadat nějak takto: | ||
+ | |||
+ | [[File:Netlogo env.png||Prostředí připravené k simulaci.]] | ||
===Logika šíření viru a chování počítačů=== | ===Logika šíření viru a chování počítačů=== | ||
− | Zbytek práce na nás čeká v záložce Code. Zde je nejprve nutné definovat naše agenty a společně s tím určíme i jejich vlastnosti, které označují, zda-li je počítač nakažený virem, zda je imunní a zda je čas provést antivirovou kontrolu: | + | Zbytek práce na nás čeká v záložce <i>Code</i>. Zde je nejprve nutné definovat naše agenty a společně s tím určíme i jejich vlastnosti, které označují, zda-li je počítač nakažený virem, zda je imunní a zda je čas provést antivirovou kontrolu: |
+ | |||
+ | <pre> | ||
+ | turtles-own | ||
+ | [ | ||
+ | infected? | ||
+ | resistant? | ||
+ | virus-check-timer | ||
+ | ] | ||
+ | </pre> | ||
+ | |||
+ | ====Procedura <i>setup</i>==== | ||
− | < | + | Nyní vytvořme poměrně abstraktní proceduru setup, jenž vytvoří počítače, spojení mezi nimi a nakazí daný počet nodů virem. |
+ | |||
+ | <pre> | ||
+ | to setup | ||
+ | clear-all | ||
+ | setup-nodes | ||
+ | setup-spatially-clustered-network | ||
+ | ask n-of initial-outbreak-size turtles | ||
+ | [ become-infected ] | ||
+ | ask links [ set color white ] | ||
+ | reset-ticks | ||
+ | end | ||
+ | </pre> | ||
+ | |||
+ | Dále implementujme proceduru, která vytvoří počítače dle zadaného parametru <i>number-of-nodes</i>, nastaví jim vizuální podobu kolečka, odsadí je od kraje okýnka simulace, nastaví je jako zranitelné a inicializuje hodnotu atributu <i>virus-check-timer</i> na náhodnou hodnotu se střední hodnotou zadaného parametru <i>virus-check-frequency</i>: | ||
+ | |||
+ | <pre> | ||
+ | to setup-nodes | ||
+ | set-default-shape turtles "circle" | ||
+ | create-turtles number-of-nodes | ||
+ | [ | ||
+ | setxy (random-xcor * 0.95) (random-ycor * 0.95) | ||
+ | become-susceptible | ||
+ | set virus-check-timer random virus-check-frequency | ||
+ | ] | ||
+ | end | ||
+ | </pre> | ||
+ | |||
+ | Tím pádem ještě potřebujeme samopopisnou proceduru <i>become-susceptible</i>: | ||
+ | |||
+ | <pre> | ||
+ | to become-susceptible | ||
+ | set infected? false | ||
+ | set resistant? false | ||
+ | set color green | ||
+ | end | ||
+ | </pre> | ||
+ | |||
+ | V rámci procedury setup zbývá ještě implementovat prolinkování mezi počítači: | ||
+ | |||
+ | <pre> | ||
+ | to setup-spatially-clustered-network | ||
+ | let num-links (average-node-degree * number-of-nodes) / 2 | ||
+ | while [count links < num-links ] | ||
+ | [ | ||
+ | ask one-of turtles | ||
+ | [ | ||
+ | let choice (min-one-of (other turtles with [not link-neighbor? myself]) | ||
+ | [distance myself]) | ||
+ | if choice != nobody [ create-link-with choice ] | ||
+ | ] | ||
+ | ] | ||
+ | repeat 10 | ||
+ | [ | ||
+ | layout-spring turtles links 0.3 (world-width / (sqrt number-of-nodes)) 1 | ||
+ | ] | ||
+ | end | ||
+ | </pre> | ||
+ | |||
+ | ====Procedura <i>go</i>==== | ||
+ | |||
+ | Nyní můžeme implementovat proceduru go. Ta bude každé kolo kontrolovat, zda virus nevymřel, a pokud ano, simulaci ukončí. Dále zvýší hodnotu stopek, jenž určují, kdy provést antivirovou kontrolu. A nakonec zajistí šíření viru a provedení antivirových kontrol. Funkčnost může vypadat například takto: | ||
+ | |||
+ | <pre> | ||
+ | to go | ||
+ | if all? turtles [not infected?] | ||
+ | [ stop ] | ||
+ | ask turtles | ||
+ | [ | ||
+ | set virus-check-timer virus-check-timer + 1 | ||
+ | if virus-check-timer >= virus-check-frequency | ||
+ | [ set virus-check-timer 0 ] | ||
+ | ] | ||
+ | spread-virus | ||
+ | do-virus-checks | ||
+ | tick | ||
+ | end | ||
+ | </pre> | ||
+ | |||
+ | Téměř na závěr zbývá už jen konkrétní implementace procedur <i>spread-virus</i> a <i>do-virus-check</i>: | ||
+ | |||
+ | <pre> | ||
+ | to spread-virus | ||
+ | ask turtles with [infected?] | ||
+ | [ ask link-neighbors with [not resistant?] | ||
+ | [ if random-float 100 < virus-spread-chance | ||
+ | [ become-infected ] ] ] | ||
+ | end | ||
+ | |||
+ | to do-virus-checks | ||
+ | ask turtles with [infected? and virus-check-timer = 0] | ||
+ | [ | ||
+ | if random 100 < recovery-chance | ||
+ | [ | ||
+ | ifelse random 100 < gain-resistance-chance | ||
+ | [ become-resistant ] | ||
+ | [ become-susceptible ] | ||
+ | ] | ||
+ | ] | ||
+ | end | ||
+ | </pre> | ||
+ | |||
+ | S pomocnými procedurami pro úpravu stavu počítače: | ||
+ | |||
+ | <pre> | ||
+ | to become-infected | ||
+ | set infected? true | ||
+ | set resistant? false | ||
+ | set color red | ||
+ | end | ||
+ | |||
+ | to become-resistant | ||
+ | set infected? false | ||
+ | set resistant? true | ||
+ | set color gray | ||
+ | ask my-links [ set color gray - 2 ] | ||
+ | end | ||
+ | </pre> | ||
+ | |||
+ | Nyní máme simulaci hotovou. | ||
===Výsledek=== | ===Výsledek=== | ||
− | Po tvrdé práci máme v rukou fungující simulaci, ale co s ní teď? Nyní můžeme měnit vstupní její parametry, jako například šanci na nákazu či na získání imunity a pozorovat, jak provedené změny ovlivní průběh či konec simulace (parametry lze nastavit i tak, aby virus nikdy nevymřel a simulace stále běžěla). | + | [[File:Netlogograf.png|thumb|Výsledek simulace.]] |
+ | Po tvrdé práci máme v rukou fungující simulaci, ale co s ní teď? Nyní můžeme měnit vstupní její parametry, jako například šanci na nákazu či na získání imunity a pozorovat, jak provedené změny ovlivní průběh či konec simulace (parametry lze nastavit i tak, aby virus nikdy nevymřel a simulace stále běžěla). Na uvedeném grafu ještě vidět závislost zranitelných, nakažených a imunních počítačů. Na ose <i>x</i> se hromadí jednotlivá kola simulace a na ose <i>y</i> je uvedeno celkové procento počítačů, které se v daném čase nacházejí v daném stavu. Zelená osa značí zranitelné nody, červená označuje počítače nakažené virem a šedá pak imunní jedince. Nutné je ale vzít v potaz, že pro získání opravdu věrohodných výsledků bychom museli provést simulaci několikrát a jednotlivé výstupy průměrovat. | ||
Kompletní projekt obsahující řešený příklad je možné stáhnout [http://www.netlogoweb.org/assets/modelslib/Sample%20Models/Networks/Virus%20on%20a%20Network.nlogo zde]. | Kompletní projekt obsahující řešený příklad je možné stáhnout [http://www.netlogoweb.org/assets/modelslib/Sample%20Models/Networks/Virus%20on%20a%20Network.nlogo zde]. | ||
− | |||
− | |||
==Samostatné cvičení== | ==Samostatné cvičení== | ||
Line 113: | Line 261: | ||
====Mutace viru==== | ====Mutace viru==== | ||
− | Tvůrcem | + | Tvůrcem nejhlubších vrásek na čele leckterého bezpečnostního technika jsou takzvané metamorfické viry. To jsou viry, které se umí transformovat, mutovat a přizpůsobovat se měnícím se podmínkám počítačové ochrany. V reálném světě to znamená, že virus může být imunní vůči antivirovým programům. V našem modelu to znamená nutnost upravit zdrojový kód tak, aby umožňoval znovu-nakažení počítače virem, který se cestou od dříve nakaženého nodu a zpět zmutoval. Jaký má tato skutečnost dopad na náš model? |
==Seznam referencí== | ==Seznam referencí== |
Latest revision as of 18:00, 31 May 2017
Multiagentní systémy jsou tvořeny mnoha navzájem interagujícímí samostatnými výpočetními jednotkami, jenž nazýváme agenty. Tito agenti jsou autonomní jednotky s rozdílnými informacemi, které jsou schopné kooperace, soutěživosti, komunikace mezi sebou a s prostředím, učení se a flexibilního chování. Agenti mohou mít rozdílné zájmy a cíle, popřípadě společně řeší problémy, které by žádný z nich sám nevyřešil. Díky tomu multiagentní systémy umožňují široké využití distribuované výpočetní technologie a paralelního zpracování dat. [1]
Příklady reálné aplikace multiagentních systémů můžeme nalézt od architektury internetu, výrobního průmyslu, lékařství, až po vesmírný program. NASA například multiagentní systémy využívá pro konstelaci satelitů či pro zkoumání povrchu cizích planet. [2]
Contents
Charakteristika multiagentního systému
Multiagentní systém je propojená síť entit řešící nějaký problém (agentů), kteří spolupracují za účelem nalezení odpovědí na problémy, které svou náročností přesahují limity každého z agentů jakožto jednotlivce. [3] Fakt že spolu agenti spolupracují naznačuje, že mezi agenty se musí vyskytovat nějaká forma kooperace. Multiagentní systémy jsou také někdy chápány jako nejslabší forma umělé inteligence [4]. To je nejspíš zapříčiněno tím, že narozdíl od klasických výpočetních algoritmů, jenž vedou k predikovatelným výsledkům, vznikají v multiagentnich systémech spontánní jevy připomínající živé ekosystémy a projevují určitou inteligenci. Pro systémy tohoto typu jsou charakteristické následující skutečnosti:
- Systém jako celek není nijak globálně řížen.
- Každý agent je majitelem pouze části informací celkové problematiky modelu.
- Každý agent má své cíle a funguje asynchronně.
Agenti
Toto je pouze stručný úvod do teorie agentů, podrobnější výklad lze nalézt v dedikovaném textu o agentech.
Agent je cokoli, co pomocí senzorů vnímá své okolí a pomoci efektorů na ně zpětně reaguje. [5] Podle této definice je agent entitou (ať už fyzickou nebo virtuální), která vnímá své okolí a reaguje na něj. Virtuální entitou můžeme chápat jako kus zrojového kódu, který přijímá nějaké vstupy z prostředí a produkuje výstupy. Často jsou ale agenti kombinací fyzických a virtuálních částí, jako například chytrý vysavač. Mimo to, že agenti vnímají prostředí, ve kterém se nacházejí, mají i své cíle, které se klidně mohou lišit od cílů ostatních agentů. Díky svým cílům a možnosti reagovat na okolí - tedy i na jiné agenty - považujeme agenty za autonomní entity. To znamená, že agent operuje na základě své vlastní logiky, nikoli na povel od někoho jiného, a mají tím pádem určitou kontrolu nad svým jednáním. [6]
Prostředím agenta rozumíme prostředí, ve kterém se agenti nacházejí, pohybují a ze kterého přijímají signály. Podrobnější výklad je k nalezení v dedikovaném textu o prostředí.
Uvažování agenta
Jelikož má agent své cíle, kterých chce dosáhnout, jeho rozhodnutí směřují čistě racionálně za jejich dosáhnutím. K tomu agent užívá buď užitkovou funkci nebo logickou dedukci na základě jeho individuálních znalostí a zkušeností. Více o uvažování agenta si můžete přečíst zde.
Reálné aplikace
Servisní roboti, transportační systémy, průzkum nebezpečných prostředí, obrana státu, či záchranné akce při mimořádných událostech, to všechno jsou oblasti, ve kterých se v dnešní době využívají multiagentní systémy. [7] Zajímavým příkladem je třeba DARPA Grand Challenge, což je závod autonomních vozidel pouštní krajinou sponzorovaný americkým ministerstvem obrany za účelem urychlení vývoje autonomních vozidel.
Dalším příkladem může být například veletrh RoboCup, což je každoroční soutěž a přehlídka autonomních robotů. Cílem sponzorů této přehlídky je do roku 2050 sestavit robotický fotbalový tým, který bude schopen konkurovat lidskému týmu. V roce 2016 se této události zúčastnilo 45 zemí. [8]
Satelitní monitorovací roboti
NASA například k údržbě satelitů a jiných vesmírných těles používá tým autonomních robotů. Ti jsou schopni pracovat jak samostatně, tak v asistenci s astronautem. Posádky létající na oběžnou dráhu země za účelem údržby satelitů a drobných oprav se obvykle skládají ze tří až čtyř astronautů a množství práce, které na ně na oběžné dráze čeká, je ohromné. Proto jsou tyto lidské posádky podpořeny několika roboty o velikosti baseballového míčku, kteří dokáží satelit a jiná zařízení zkontrolovat a konstatovat, zda jsou v pořádku či nikoliv.
Program NetLogo
NetLogo je programovatelné modelovací prostředí pro vytváření multiagentních simulací. Autorem aplikace je Uri Wilensky. Aplikace je napsána v Javě a díky tomu by měla bezproblémově fungovat na jakékoli platformě s nainstalovaným javovským prostředím. Netlogo je obvzlášť vhodné pro modelování komplexních systémů vyvíjejících se v čase. Uživatel může orchestrovat stovky či tisíce nezávislé operujících agentů. Tento fakt umožňuje provádět rozsáhlé simulace a ověřovat či vyvracet hypotézy, jejichž pravdivost bychom jinak posuzovali velmi složitě.
Netlogo má navíc vydatnou dokumentaci, navíc obsahuje knihovnu připravených modelů, se kterými si může uživatel hrát a objevovat tak funkčnosti prostředí. Se znalostmi ukrytými v dokumentaci je uživatel schopen zkoumat chování komplexního multiagentního systému za měnících se podmínek a z různých úhlů pohledu.[9]
Netlogo je vhodné pro simulace z oblasti:
- Přírodních věd
- Biologie
- Chemie
- Lékařství
- Matematiky
- Sociálních věd a sociální psychologie
- Ekonomie
- Informačních technologií
Řešený příklad
Vyzbrojeni nově nabytými vědomostmi se nyní můžeme pustit do řešení reálné simulace. Příklad se bude zabývat šířením viru na počítačové síti. [10] Pro řešení příkladu si nejprve stáhněte program NetLogo.
Příprava prostředí
Před samotným programováním, na které se jistě všichni těšíte, si nejprve vytvořme proměnné a grafické komponenty, které nám celou simulaci obohatí o možnost ovlivňovat vstupní parametry a názorně sledovat tížený výsledek.
Proměnné
Začněme definováním vstupních parametrů, jenž budeme k naší simulaci potřebovat, jedná se o proměnné:
- number-of-nodes - počet počítačů
- average-node-degree - průměrný počet vazeb mezi počítači
- initial-outbreak-size - počáteční počet nakažených počítačů
- virus-spread-chance - riziko přenosu viru na jiný počítač
- virus-check-frequency - četnost antivirové kontroly (při použití hodnoty 1 bude ke kontrole docházet každé kolo)
- recovery-chance - šance odhalení viru na nakaženém počítači
- gain-resistance-chance - šance na získání imunity vůči viru, který počítač nakazil
Hodnoty výše uvedených proměnných můžete používat libovolné, ovšem pro účely tohoto příkladu budeme simulovat 150 počítačů s průměrnou vazbu na jiné počitáče s hodnotou 6, počátečním počtem virů tři, rizikem přenosu 2,5%, antivirovou kontrolou probíhající každé kolo a šancí na odhalení viru a získání imunity 5%.
Grafické komponenty
Dále vytvořme tlačítka a na ně navázané metody setup a go, u kterého navíc zaškrtněme checkbox Forever.
K dokonalosti už zbývá pouze graf, na kterém uvidíme závislost zranitelných, nakažených a imunních počítačů přehledněji, než v samotné simulaci. K tomuto účelu použijme komponentu Plot a do Plot pens definujme:
Color | Pen name | Pen update commands |
---|---|---|
zranitelné | plot (count turtles with [not infected? and not resistant?]) / (count turtles) * 100 | |
nakažené | plot (count turtles with [infected?]) / (count turtles) * 100 | |
imunnní | plot (count turtles with [resistant?]) / (count turtles) * 100 |
Nyní by prostředí na záložce Interface mělo vypadat nějak takto:
Logika šíření viru a chování počítačů
Zbytek práce na nás čeká v záložce Code. Zde je nejprve nutné definovat naše agenty a společně s tím určíme i jejich vlastnosti, které označují, zda-li je počítač nakažený virem, zda je imunní a zda je čas provést antivirovou kontrolu:
turtles-own [ infected? resistant? virus-check-timer ]
Procedura setup
Nyní vytvořme poměrně abstraktní proceduru setup, jenž vytvoří počítače, spojení mezi nimi a nakazí daný počet nodů virem.
to setup clear-all setup-nodes setup-spatially-clustered-network ask n-of initial-outbreak-size turtles [ become-infected ] ask links [ set color white ] reset-ticks end
Dále implementujme proceduru, která vytvoří počítače dle zadaného parametru number-of-nodes, nastaví jim vizuální podobu kolečka, odsadí je od kraje okýnka simulace, nastaví je jako zranitelné a inicializuje hodnotu atributu virus-check-timer na náhodnou hodnotu se střední hodnotou zadaného parametru virus-check-frequency:
to setup-nodes set-default-shape turtles "circle" create-turtles number-of-nodes [ setxy (random-xcor * 0.95) (random-ycor * 0.95) become-susceptible set virus-check-timer random virus-check-frequency ] end
Tím pádem ještě potřebujeme samopopisnou proceduru become-susceptible:
to become-susceptible set infected? false set resistant? false set color green end
V rámci procedury setup zbývá ještě implementovat prolinkování mezi počítači:
to setup-spatially-clustered-network let num-links (average-node-degree * number-of-nodes) / 2 while [count links < num-links ] [ ask one-of turtles [ let choice (min-one-of (other turtles with [not link-neighbor? myself]) [distance myself]) if choice != nobody [ create-link-with choice ] ] ] repeat 10 [ layout-spring turtles links 0.3 (world-width / (sqrt number-of-nodes)) 1 ] end
Procedura go
Nyní můžeme implementovat proceduru go. Ta bude každé kolo kontrolovat, zda virus nevymřel, a pokud ano, simulaci ukončí. Dále zvýší hodnotu stopek, jenž určují, kdy provést antivirovou kontrolu. A nakonec zajistí šíření viru a provedení antivirových kontrol. Funkčnost může vypadat například takto:
to go if all? turtles [not infected?] [ stop ] ask turtles [ set virus-check-timer virus-check-timer + 1 if virus-check-timer >= virus-check-frequency [ set virus-check-timer 0 ] ] spread-virus do-virus-checks tick end
Téměř na závěr zbývá už jen konkrétní implementace procedur spread-virus a do-virus-check:
to spread-virus ask turtles with [infected?] [ ask link-neighbors with [not resistant?] [ if random-float 100 < virus-spread-chance [ become-infected ] ] ] end to do-virus-checks ask turtles with [infected? and virus-check-timer = 0] [ if random 100 < recovery-chance [ ifelse random 100 < gain-resistance-chance [ become-resistant ] [ become-susceptible ] ] ] end
S pomocnými procedurami pro úpravu stavu počítače:
to become-infected set infected? true set resistant? false set color red end to become-resistant set infected? false set resistant? true set color gray ask my-links [ set color gray - 2 ] end
Nyní máme simulaci hotovou.
Výsledek
Po tvrdé práci máme v rukou fungující simulaci, ale co s ní teď? Nyní můžeme měnit vstupní její parametry, jako například šanci na nákazu či na získání imunity a pozorovat, jak provedené změny ovlivní průběh či konec simulace (parametry lze nastavit i tak, aby virus nikdy nevymřel a simulace stále běžěla). Na uvedeném grafu ještě vidět závislost zranitelných, nakažených a imunních počítačů. Na ose x se hromadí jednotlivá kola simulace a na ose y je uvedeno celkové procento počítačů, které se v daném čase nacházejí v daném stavu. Zelená osa značí zranitelné nody, červená označuje počítače nakažené virem a šedá pak imunní jedince. Nutné je ale vzít v potaz, že pro získání opravdu věrohodných výsledků bychom museli provést simulaci několikrát a jednotlivé výstupy průměrovat.
Kompletní projekt obsahující řešený příklad je možné stáhnout zde.
Samostatné cvičení
K upevnění znalostí ze společně řešeného příkladu si nyní můžete samostatně vyzkoušet rozšířit model o některou z následující skutečností:
Šíření viru emailem
Předpokládejme, že virus je obšťastněn schopností poslat sám sebe emailem všem kontaktům v adresáři. Jelikož existence kontaktu v nečím emailovém adresáři není oboustranná vazba, je potřeba model upravit tak, aby používal jednostranné vazby namísto oboustranných. Jak se po úpravě změnilo šíření viru?
Existence více druhů viru
V reálném světě ovšem neexistuje pouze jeden počítačový virus a pokud je nějaký počítač nakažen jedním virem, riziko nakažení dalším virem je vyšší. Zaneste do simulace další typ viru a upravte model tak, aby reflektoval skutečnost, že nakažený node je náchylnější k nákaze jiným mallwarem. Jakým způsobem spolu dva počítačové viry interagují?
Mutace viru
Tvůrcem nejhlubších vrásek na čele leckterého bezpečnostního technika jsou takzvané metamorfické viry. To jsou viry, které se umí transformovat, mutovat a přizpůsobovat se měnícím se podmínkám počítačové ochrany. V reálném světě to znamená, že virus může být imunní vůči antivirovým programům. V našem modelu to znamená nutnost upravit zdrojový kód tak, aby umožňoval znovu-nakažení počítače virem, který se cestou od dříve nakaženého nodu a zpět zmutoval. Jaký má tato skutečnost dopad na náš model?
Seznam referencí
- ↑ Multiagent Systems: Algorithmic, Game-Theoretic, and Logical Foundations Yoav Shoham, Kevin Leyton-Brown, Cambridge University Press 2009, 473 s. ISBN 0521899435 [cit. 2017-05-27]
- ↑ Multiagent Systems Gerhard Weiss, MIT Press 2016, 143 s. ISBN 978-0-262-01889-0 [cit. 2017-05-27]
- ↑ P. Stone, M. Veloso, “ Multiagent systems: A survey from a machine learning perspective”, Autonomous Robots, vol. 8, no. 3, pp. 345–383, 2000 [cit. 2017-05-31]
- ↑ KELEMEN, Jozef. Strojovia a agenty. Bratislava : Archa, 1994. ISBN 80-7115-089-4 [Cit. 2017-05-30]
- ↑ S. Russel, P. Norvig, “Artificial intelligence – A modern approach”, Prentice Hall, 1995. [cit. 2017-05-31]
- ↑ P. Maess, “Artificial life meets entertainment: Life like autonomous agents”, Communications of the ACM, vol. 38, no. 11, pp. 108-114, 1995. [cit. 2017-05-31]
- ↑ Weiss, G.: Multiagent Systems: a Modern Approach to Distributed Artificial Intelligence. MIT Press, Cambridge (1999) [cit. 2017-05-31]
- ↑ http://www.leipzig.de/news/news/robocup-wm-2016-kommt-nach-leipzig/
- ↑ 9.0 9.1 Wilensky, U. (1999). NetLogo. http://ccl.northwestern.edu/netlogo/. Center for Connected Learning and Computer-Based Modeling, Northwestern University, Evanston, IL. [cit. 2017-05-28]
- ↑ Stonedahl, F. and Wilensky, U. (2008). NetLogo Virus on a Network model. http://ccl.northwestern.edu/netlogo/models/VirusonaNetwork. Center for Connected Learning and Computer-Based Modeling, Northwestern University, Evanston, IL. [cit. 2017-05-28]