\def \obr {Implementation/fig/}

\chapter{Použitá metoda}

Účelem této práce je decentralizovaně řídit provoz pomocí nastavení optimální délky cyklu 
za použití multiagentního systému, kde
každý agent ovládá signální skupiny jedné křižovatky a jsou mu dostupné příslušné údaje.
Jako vhodná metoda bylo zvoleno LQ řízení, které jako stavovou proměnnou
bere délku fornty, a tu se snaží minimalizovat pomocí nalezení
vhodné hodnoty řídící proměnné, délku cyklu.\\

V následující části se budeme zabývat jak metodu popsanou v kapitolách \ref{sec:lq} a \ref{sec:lq_tuc}
transformovat na decentralizované řízení délky cyklu v oblasti Praha-Zličín. Jako výchozí bod
budeme brát způsob řízení popsaný v článku \cite{6_tuc_lq}.



\section{Seznam proměnných}
% Všechny proměnné jsou zavedeny pro každého agenta reprezentujícího jednu křižovatku zvlášť
% a jsou označeny indexem $i$ signální skupiny. Tavždy ovládá jeden jízdní pruh. Pokud jsou bez indexu,
% jedná se o proměnnou agenta, případně oblasti simulace.

\begin{tabular}{ccp{5cm}p{5cm}}
  \textbf{V textu} & \textbf{V programu} & \textbf{Název} & \textbf{Popis} \\
  $T \in \mathbb{N}$ & \texttt{T} & Vzorkovací perioda & Perioda sběru dat a řízení \\
  $C \in \mathbb{N}$ & \texttt{Tc} & Délka cyklu & Doba, za kterou se vystřídají fáze signální skupiny, řízená veližina \\
  $S$ & \texttt{ss} & Saturovaný tok & Maximální počet vozidel, která projedou křižovatkou za sekundu \\
  $L \in \mathbb{R}^+$ &  \texttt{L} & Ztrátový čas & Čas potřebný k vyklizení křižovatky mezi dvěma fázemi\\ 
  $J = \{j_1, ..., j_n\}$ &  & Množina signálních skupin &  \\
  $J_A \subset J$ & \texttt{} & Množina signálních skupin agenta $A$ & Skupiny náležící jednomu agentovi \\
  $I_j \subset J$ & \texttt{} & Množina vstupů signální skupiny & Signální skupiny ostatních agentů ústících do příslušné skupiny $g$ \\
  $g_j^N \in <0,1>$ & & Nominální poměr zelené & Definovaný poměr fází \\
  $g_j(t) \in <0,1>$ & & Efektivní poměr zelené & Část z délky cyklu, kdy je signální skupina  průjezdná \\
  $i_j(t) \in \mathbb{R}^+$ & \texttt{i\_g} & Hustota vstupů & Počet přijíždějících vozidel do pruhu signální skupiny za jednotku času \\
  $o_j(t) \in \mathbb{R}^+$ & \texttt{} & Hustota výstupů & Počet vyjíždějících vozidel z pruhu signální skupiny za jednotku času \\
  $q_j(t) \in \mathbb{N}_0^+$ & \texttt{} & Fronta & Počet vozidel jedoucí menší rychlostí než $3,6 km/h$ \\
  $\alpha_{j,k}  \in <0,1>$ & \texttt{} & Odbočovací poměr z $j$ do $k$ &  
\end{tabular}




\section{Přechodové vztahy}
Jako údaj popisující stav systému byla zvolena délka fronty $q_j(t)$, což je počet aut v jízdním pruhu jedoucích 
méně než $3,6 km/h$. Pro danou frontu v čase $t+1$ platí zřejmě vztah
\begin{equation}\label{eq:my_trans_01}
 q_j(t+1) = q_j(t) + T ( i_j(t) - o_j(t) ) , 
\end{equation}kde hustota vstupu $i_j(t)$ je součtem výstupů sousedů pronásobený odbočovacími poměry,
případně vstupu do systému $i_{j,0}(t)$, pokud se jedná o koncové rameno řízené oblasti, tedy
\begin{equation}
  i_j(t) = i_{j,0}(t) + \sum_{k \in I_j} \alpha_{k,j} o_k(t) .
\end{equation}
Křižovtkou z daného jízdního pruhu v průjezdné fázi projede $S$ vozidel za sekundu, kde 
délka průjezdné fáze závisí na nastaveném poměru a délce cyklu. Před přechodem do nové
fáze signálího plánu je potřeba vklidit křižovatku, což vede ke ztrátovému času $L$, který
se projeví vždy jednou za cyklus. Efektivní délka zelené je tedy
\begin{equation}
 g_j(t) = (C(t) - L) g_j^N
\end{equation}
a pro hustotu výstupu platí
\begin{equation}
 o_j(t) = \frac{S_j g_j(t)}{C(t)} = S_j g_j^N \left( 1 - LC(t)^{-1} \right) \;.
\end{equation} Rovnice \ref{eq:my_trans_01} tedy přechází do tvaru
\begin{equation}\label{eq:my_trans_02}
 q_j(t+1) = q_j(t) + T \left( i_{j,0}(t) + \sum_{k \in I_j} \alpha_{k,j} S_k g_k^N \left( 1 - LC(t)^{-1} \right)  - S_j g_j^N \left( 1 - LC(t)^{-1} \right) \right) \;.
\end{equation}
Za řídící proměnnou tedy vezmeme 
\begin{equation}
 y(t) = 1 - LC(t)^{-1} \;.
\end{equation}
takže můžeme rovnici \ref{eq:my_trans_02} přepsat do maticové formy
\begin{equation}\label{eq:my_trans_mat}
 q(t+1) = A_0 q(t) + B_0 y(t) + I_0(t) \;, 
\end{equation}
kde $A$ je jednotková matice, $B$ je diagonální matice s prvky
\begin{equation}
 b_{jj} =  T \left( \sum_{k \in I_j} \alpha_{k,j} S_k g_k^N - S_j g_j^N \right) \;,
\end{equation}
a $I$ je vektor s prvky $I_{0_{j}} = T i_{j,0}(t)$.

\section{Popis algoritmu}
Základ hlavní smyčky programu je postaven
na knihovně BDM (Bayesian Decision Making), vyvýjena na 
ústavu teorie informace a automatizace.
Knihovna obsahuje třídu \texttt{Participant}, od
které je odvozena základní třída agenta \texttt{BaseTrafficAgent}.
Ta má předdefinované metody, které jsou volány v každém cyklu simulace.
Jsou to metody \texttt{Adapt}, sloužící k získání dat, \texttt{Broadcast}, ve které 
se posílají data sousedním agentům, \texttt{Receive}, kde se zprávy příjímají a zpracovávají
a \texttt{Act}, metoda určená pro nastavení řídících parametrů, v našem případě délky cyklu.\\

Finální agent určený pro LQ řízení je odvozen od této ťrídy. V každém cyklu
posílá ůdaje o délce front, zatížení detektorů a odbočovacích poměrec.
Z těchto dat si poté podle rovnic \ref{eq:my_trans_02} a \ref{eq:my_trans_mat} sestaví 
matici $B$. Matice $A$ je jednotková a penalizační matice kvadratického kritéria $Q$ a $R$ jsou konstantně
nastaveny podle významnosti dopravních pruhů. Tím jsou sestaveny vstupní parametry pro minimalizátor, 
který vypočte řídící matici $L$ potřebnou k získání optimální hodnoty délky cyklu.


%\input{Implementation/ChangingFlow.tex}
\input{Implementation/Minimalization.tex}





\section{Simulace}
Pro simulaci byl použit mikorsimulátor dopravy
AIMSUN (Advanced Interactive Microscopic Simulator for Urban and Non-Urban Networks).
Podstatou mikroskopické simulace (mikrosimulace) je modelování
jízdy jednotlivých vozidel po dané komunikační síti, přičemž se zohledňují všechny parametry
infrastruktury i dopravních prostředků.
V této kapitole je popsána základní charakteristika mikrosimulátoru AIMSUN.
Podrobnější informace lze nalézt například v \cite{aimsunget}.
\\
\\
AIMSUN potřebuje pro svůj běh simulační scénář skládající se z popisu dopravní sítě, plánů řízení dopravy,
požadovaných dopravních data, a plánů hromadné dopravy
a množinu simulačních parametrů definujících experiment.
Popis dopravní sítě obsahuje geometrii sítě, popis křižovatek a rozmístění detektorů,
Dopravní data se dají zadat dvěma způsoby: Pomocí matice opbsahující informace kolik jízd se uskuteční
z uzlu $i$ do uzlu $j$. Každému vozidlu je tedy přiřazena trasa.
V fruhém případě se pro určitá místa zadají hustoty provozu a vozidla se rozmístí stochasticky podle požadovaných počtů a poměrů odbočení do dopravní sítě.

\subsubsection{VGS API}\label{ss:vgs_api}
VGS API je rozhraní napsané v jazyce C++, které rozšiřuje funkčnost mikrosimulátoru AIMSUN.
Zjednodušuje simulaci reálné situace, kdy podle tabulek naměřených ručně 
nebo zaznamenaných údajů z dopravních detektorů generuje 
vozidla v průběhu simulace.
\\
\\
Druhým důležitým úkolem VGS API je shromažďovat data potřebná pro
běh experimentu a jeho. AIMSUN sice disponuje jednoduchým rozhraním pro
vizualizaci dat a jejich export do textových souborů, není ale možné
například porovnávat jednotlivé scénáře simulací. VGS API proto
periodicky ukládá všechny klíčové ukazatele jak pro jednotlivé segmenty
dopravní sítě, tak i pro celý simulovaný systém.
Zprostředkovává tak důležitá data o počtu zastavení vozidla, o jeho zpoždění,
průměrné rychlosti, době jízdy atd.
Tato data jsou dostupná v průběhu simulace i po skončení k následujícímu zpracování.
\\
\\
Důležitý údaj, které nám VGS API poskytuje, je délka fronty pro daný jízdní pruh.
Fronta se podle dat z detektorů odhaduje velice obtížně, neboť ty vykazují zančnou chybovost,
která u sledování průjezdů neni až tak zásadní, ale při použití na výpočet front by docházelo
ke kumulaci této chyby a výsledky by byly prakticky nepoužitelné.
Hlavní chyby detektorů spočívají v nerozpoznání mezery mezi vozidly a zpočtení 
dvou vozidel jako jedno, nebo zaznamenání jednoho vozidla dvěma detektory ve dvou
jízdních pruzích zároveň.

\subsection{Řadiče}
Kvůli věrnějšímu napodobení skutečnosti, jsou použity k ovládání
signálních skupin použity emulátory řadičů ELS3 firmy ELTODO.
Ty to řadiče, strejně jako v reálné situaci kvůli bezpečnosti, mají
pevně dané fáze a v nich definované průjezdnosti daných pruhů.
Ovladatelné jsou pouze vnějí parametry, jako je délka cyklu, poměry časů fází
a offset. V našenm případně budeme nastavovat pouze délku cyklu, po jakou se vystřídají 
všechny fáze. Offset a ani poměr fází, tedy i poměr doby zelených, se nemění.

\subsection{Oblast simulace}\label{ss:oblast_simulace}
Pro simulaci bylo použito schéma dvou křižovatek na ulici Řevnické. 
Následující schémata znázorňují křižovatky s označením
495 - Na Radosti a 601 - terminál BUS, jejich pruhy (VA, VB, VC, VD, VE, VF a VA, VAa, VB, VBa, VC, VD, VE, Se)
a detektory, znázorněné zelenými obdélníky.

\begin{figure}[H]
\begin{center}
    {\includegraphics[width=12cm]{\obr 601.eps}}
    \caption{Křižovatka 601}\label{fig:601}
\end{center}
\end{figure}

\begin{figure}[H]
\begin{center}
    {\includegraphics[width=12cm]{\obr 495.eps}}
    \caption{Křižovatka 495}\label{fig:601}
\end{center}
\end{figure}



\section{Možné vylepšení do budoucna}

\input{Implementation/ChangingFlow.tex}

