{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Propagacja ataku sieci z wykorzystaniem spacerów losowych\n",
    "\n",
    "- Marcin Kostrzewski\n",
    "- Mateusz Tylka\n",
    "- Krystian Wasilewski"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Problem\n",
    "\n",
    "W jakich topologiach sieci komputerowych potencjalny atak wirusa rozprzestrzeniałby się najszybciej, a w których najwolniej?\n",
    "Aby rozwiązać ten problem zaprojektowaliśmy symulację ataków wirusa na różne rodzaje topologii sieci."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Graf\n",
    "\n",
    "Grafem nazywamy kolekcję dwóch zbiorów: zbioru wierzchołków V oraz zbioru krawędzi E. Zbiór wierzchołków jest dowolnej postaci. Elementami zbioru krawędzi są e∈E, które są podzbiorami postaci v1,v2 dla pewnych dwóch wierzchołków v1,v2∈V (jeśli graf jest nieskierowany) lub parą uporządkowaną (v1,v2) jeśli graf jest skierowany.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "## Spacer losowe prosty na grafie\n",
    "Inaczej błądzenie losowe. Obiekt przemieszczający się na grafie losowo wybiera jeden z sąsiednich do obecnego wezłów, żeby się do nich przemieścić. Ruch ten nie zależy od historii ruchów - tylko ostatnie przemieszczenie jest brane pod uwagę przy podejmowaniu decyzji."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "## Model\n",
    "Model sieci reprezentowany jest jako graf nieskierowany. Każdy węzeł reprezentuje w nim urządzenie a krawędzie połączenia między nimi. Węzły zaznaczone na czerwono reprezentują urządzenie zainfekowane przez wirusa, który przemieszcza się do nowych urządzeń spacerem losowym - w każdym kroku wirus wybiera jeden z sąsiadujących węzłów z jednakowym prawdopodobieństwem i próbuje go zainfekować."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Implementacja\n",
    "\n",
    "W naszym przypadku dana topologia sieci będzie przedstawiona za pomocą grafu nieskierowanego, a wirus będzie infekować sieć przemieszczając się po jego krawędziach za pomocą spaceru losowego, który będzie spełniać kryteria łańcuchu Markowa. Czyli każde przemieszczenie wirusa będzie zachodzić z prawdopodobieństwem zależnym od prawdopodobieństwa w poprzednim kroku."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Przedstawienie kodu"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Wizualizacje"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Przegląd plików gif"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Wnioski\n",
    "\n",
    "Najszybciej wirus rozprzestrzenia się w pierścieniu, a najwolniej w magistrali."
   ]
  }
 ],
 "metadata": {
  "interpreter": {
   "hash": "11938c6bc6919ae2720b4d5011047913343b08a43b18698fd82dedb0d4417594"
  },
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}