\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\\ 
  $Y = \{j_1, ..., j_n\}$ &  & Množina signálních skupin &  \\
  $Y_A \subset Y$ & \texttt{} & Množina signálních skupin agenta $A$ & Skupiny náležící jednomu agentovi \\
  $I_j \subset Y$ & \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_0(t)$ je vektor s prvky $I_{0_{j}} = T i_{j,0}(t)$.

\subsection{Minimalizace kritéria}
Podobně jako v publikaci \cite{6_tuc_lq} budeme minimalizovat kvaratické kritérium $J$.
Matici $I_0(t)$, která vyjadřuje příjezd vozidel z okolí do sledované sítě,
budeme v rámci minimalizačního horizontu považovat za konstantu značenou $I_0$ a
vztah \ref{eq:my_trans_mat} se dá tedy přepsat do tvaru
\begin{equation}\label{eq:prechod_subs_01}
  \left( \begin{array}{c} q(t+1) \\ 1 \end{array} \right)  = 
    \left( \begin{array}{cc} A_0 & I_0 \\ 0 & 1 \end{array} \right)
    \left( \begin{array}{c} q(t) \\ 1 \end{array} \right) 
    +
    \left( \begin{array}{c} B_0 \\ 0  \end{array} \right)
    u(t)
\;.
\end{equation}
Po provedení substituce 
\begin{equation}
  \begin{array}{cccc}
    x(t) = \left( \begin{array}{c} q(t) \\ 1 \end{array} \right) \;, &
    A = \left( \begin{array}{cc} A_0 & I_0 \\ 0 & 1 \end{array} \right) \;, &   
    B = \left( \begin{array}{c} B_0 \\ 0  \end{array} \right) \;,
  \end{array} 
\end{equation}
se rovnice \ref{eq:prechod_subs_01} zjednoduší na 
\begin{equation}\label{eq:prechod_mat_po_subs}
 x(t+1) = Ax(t) + Bu(t) \;,
\end{equation}
kde chybí konstantní člen. Poté již můžeme použít metodu popsanou v kapitole \ref{sec:minim}.

\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ěrech.
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.
Základní body algoritmu hlavní smyčky tedy jsou:
\begin{itemize}
 \item Získání potřebných údajů
 \item Výměna dat se sousedními agenty
 \item Sestavení matic pro minimalizaci
 \item Minimalizace kritéria a získání optimální délky cyklu
 \item Vyjednávání o délce cyklu
 \item Nastavení délky cyklu 
\end{itemize}



%\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 dat a plánů hromadné dopravy.
Dále se AIMSUNU předává množina 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 druhé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 vyhodnocení. 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 započ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šem případě budeme nastavovat pouze délku cyklu, po jakou se vystřídají 
všechny fáze. Offset 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}\label{sec:vylepseni}

\input{Implementation/ChangingFlow.tex}

