- Timestamp:
- 07/27/10 15:22:29 (14 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
applications/doprava/texty/delka_cyklu/05_AlgorithmDescription/AlgorithmDescription.tex
r1150 r1151 43 43 \subsubsection{Třída RV} 44 44 Třída \texttt{RV} implementuje pole popisků k vektorům třídy IT++. 45 K přístupu k jednotlivým slouží přetížený operátor závorky \texttt{(int index)}.45 K přístupu k jednotlivým prvkům slouží přetížený operátor závorky \texttt{(int index)}. 46 46 K určení veličiny uložené ve vektoru se používají metody 47 47 \begin{description} … … 69 69 \\ 70 70 Následující kód popisuje vytvoření dvou vektorů \texttt{from} a \texttt{to}, 71 popsaných \texttt{RV} vektory \texttt{rv\_from} a \texttt{rv\_to}, a zkop ání odpovídajících71 popsaných \texttt{RV} vektory \texttt{rv\_from} a \texttt{rv\_to}, a zkopírování odpovídajících 72 72 údajů z \texttt{from} do \texttt{to} pomocí třídy \texttt{Datalink}. Výsledkem je, že vektor 73 73 \texttt{to} bude obsahovat hodnoty 1 a 2. … … 97 97 Po inicializaci se do příslušných proměnných uloží textové 98 98 řetězce, podle kterých se přiřazují k pruhu data z detektorů 99 a AIMSUNu, jako je na 99 a AIMSUNu, jako je například maximální délka 100 100 fronty na dopravním pruhu za jednu simulační periodu. 101 101 102 102 103 103 \section{Třída LaneHandler} 104 Tato třída zprostředkovává přístup agentovik údajům z jednotlivých pruhů.104 Tato třída zprostředkovává agentovi přístup k údajům z jednotlivých pruhů. 105 105 Stará se o zaznamenávání a statistické zpracování dat z AIMSUNu. 106 106 Také je zde implementován odhad čekací doby automobilu do průjezdu křižovatkou, 107 což je údaj používaný v hodnotící délky cyklu funkciagenta.107 což je údaj používaný v hodnotící funkci délky cyklu agenta. 108 108 109 109 \subsection{Fronta} … … 118 118 119 119 \subsection{Odhad fronty}\label{ss:odhad_fronty} 120 K odhadu fronty je použito metody tzv. exponenciálního zapomínání. Metoda vychází z plovoucího průměru 121 Který je vhodný pro odhad nekonstantní hodnoty. Označíme si veličinu $\overline{q_i}$ jako plovoucí průměr120 K odhadu fronty je použito metody tzv. exponenciálního zapomínání. Metoda vychází z plovoucího průměru, 121 který je vhodný pro odhad nekonstantní hodnoty. Označíme si veličinu $\overline{q_i}$ jako plovoucí průměr 122 122 fronty v kroku $i$, kam budeme ukládat posledních $n$ měření. Označme si velikost fronty naměřenou v $i$-tém kroku jako$q_i$. 123 V kroku $i+1$ je hodnota hodnotaplovoucího průměru před přičtením poslední naměřené hodnoty rovna123 V kroku $i+1$ je hodnota plovoucího průměru před přičtením poslední naměřené hodnoty rovna 124 124 $$ 125 125 \overline{q_i} = \frac{1}{n} \sum_{j=0}^{n-1} q_{i-j} . … … 130 130 \overline{q_{i+1}} = \frac{1}{n} ( n \overline{q_i} - q_{i-n+1} + q_{i+1} ) = \overline{q_i} - \frac{1}{n} q_{i-n+1} +\frac{1}{n} q_{i+1}. 131 131 $$ 132 Abychom nemuseli ukládat posledních $n$ měření . Zjednodušíme algoritmus tím, že místo kroku $i-n+1$ odečteme od průměru132 Abychom nemuseli ukládat posledních $n$ měření, zjednodušíme algoritmus tím, že místo kroku $i-n+1$ odečteme od průměru 133 133 jeho hodnotu podělenou délkou průměrovacího okna $n$. Výpočet přejde na tvar 134 134 $$ … … 140 140 \overline{q_{i+1}} = \overline{q_i} + w \Delta q_{i+1}. 141 141 $$ 142 Průměr s exponenciálním zapomínáním se nazývá proto, že je v něm v $i$-tém kroku uložena i první hodnota,142 Průměr s exponenciálním zapomínáním se tak nazývá proto, že je v něm v $i$-tém kroku uložena i první hodnota, 143 143 má však zanedbatelnou váhu $\left(\frac{n-1}{n}\right)^i$. Jedná se o jaksi zjednodušenou verzi Kalmanova filtru. 144 144 Grafy \ref{fig:q1} a \ref{fig:q2} znázorňují rozdíl mezi okamžitou a filtrovanou délkou fronty při váze $w = 0.2$. … … 149 149 \begin{center} 150 150 {\includegraphics[width=10cm]{\obr q_scen_01_1h_tc80.eps}} 151 \caption{Porovnání okamžité a filtrované délky fronty \newline délka cyklu 80 s}\label{fig:q1}151 \caption{Porovnání okamžité a filtrované délky fronty \newline- délka cyklu 80 s}\label{fig:q1} 152 152 \end{center} 153 153 \end{figure} … … 156 156 \begin{center} 157 157 {\includegraphics[width=10cm]{\obr q_scen_01_1h_tc40-120.eps}} 158 \caption{Porovnání okamžité a filtrované délky fronty \newline délka cyklu 40-120 s}\label{fig:q2}158 \caption{Porovnání okamžité a filtrované délky fronty \newline- délka cyklu 40-120 s}\label{fig:q2} 159 159 \end{center} 160 160 \end{figure} … … 162 162 163 163 V reálném případě je potřeba vypočítat délku fronty podle záznamů z detektorů. 164 Prostý výpočet délky fronty například jako rozdíl počtu vozidel, která odjela a která přijela však není možný.165 Vdůsledku problémů popsaných v \ref{sss:zpracovani_dat}. Výpočet délky fronty není předmětem zkoumání této práce.164 Prostý výpočet délky fronty například jako rozdíl počtu vozidel, která odjela, a která přijela však není možný, 165 v důsledku problémů popsaných v \ref{sss:zpracovani_dat}. Výpočet délky fronty není předmětem zkoumání této práce. 166 166 Podrobnější pojednání o tomto problému lze najít například v \cite{pecherkova}. 167 167 \\ 168 168 \\ 169 169 Protože časté přenastavování délky cyklu působí řadičům problémy, přenastavuje se tento parametr jednou za časový 170 úsek, kt rý je několikanásobně delší než 90 sekund. Je tedy nutné modelovat časový průběh fronty. Při rozšiřování testovacího170 úsek, který je několikanásobně delší než 90 sekund. Je tedy nutné modelovat časový průběh fronty. Při rozšiřování testovacího 171 171 prostředí tento model ovlivní i údaj o počtu vozidel, které přijedou ze sousední křižovatky. Tento údaj závisí na délce cyklu 172 a není agentov ydostupný přímo. Bude tedy nutné rozšířit komunikaci agentů, popsanou v \ref{ss:komunikace}, o tento údaj.172 a není agentovi dostupný přímo. Bude tedy nutné rozšířit komunikaci agentů, popsanou v \ref{ss:komunikace}, o tento údaj. 173 173 174 174 175 175 \subsection{Odhad čekací doby}\label{ss:odhad_cekaci_doby} 176 Jednou z nejdůležitějších částí logiky, implementovan áv třídě \texttt{LaneHandler} je176 Jednou z nejdůležitějších částí logiky, implementované v třídě \texttt{LaneHandler} je 177 177 odhad čekací doby vozidel stojících v, nebo přijíždějících do příslušného jízdního pruhu. 178 178 Tento odhad se používá při výběru a ohodnocení délky cyklu. … … 182 182 Do proměnné \texttt{q} se uloží aktuální hodnota fronty. 183 183 Simulace začíná v čase \texttt{t = 0}. V každém kroku simulace 184 se zvětší fronta o hustotu provozu (poč t aut za sekundu), odhadovanou z údajů z detektorů, a pokud se čas nachází184 se zvětší fronta o hustotu provozu (počet aut za sekundu), odhadovanou z údajů z detektorů, a pokud se čas nachází 185 185 ve průjezdné fázi, zmenší se o konstantu, nazývanou saturovaný tok, která udává maximální počet aut, které projedou 186 186 křižovatkou. K čekací době vozidel, uložené v proměnné \texttt{wt}, se potom přičte délka zbývající fronty a čas … … 189 189 \\ 190 190 Odhad probíhá ve dvou fázích, realizovaných cykly typu \texttt{for}. V první běží čas do největší části \texttt{T}, 191 soudělné s \texttt{tc}, v druhé po zbytek \texttt{T}. níže uvádím popis všech proměnných.191 soudělné s \texttt{tc}, v druhé po zbytek \texttt{T}. Níže uvádím popis všech proměnných. 192 192 \begin{description} 193 193 \item[tc] délka cyklu, pro kterou je odhad prováděn (parametr funkce) … … 203 203 \item[tc\_last] zbytek odhadovací periody 204 204 \item[gt\_last] délka zelené ve zbytku odhadovací periody 205 \item[delta] korekční parametr vyjadřuje zkrácení doby průjezdnosti vlivem pomalých rozjezdů a pod pbně205 \item[delta] korekční parametr vyjadřuje zkrácení doby průjezdnosti vlivem pomalých rozjezdů a podobně 206 206 \end{description} 207 207 Odhad je implementován v metodě \texttt{getWT}: … … 319 319 \subsubsection{Metoda receive a broadcast} \label{ss:komunikace} 320 320 Po načtení a zpracování dat začíná komunikace. Ta je realizována metodami 321 \texttt{broadcas } a \texttt{receive}, které se volají střídavě. Přesněji řečeno,322 hlavn ismyčka nejprve volá metody \texttt{receive} každého agenta tak dlouho, dokud nevyprázdní frontu zpráv.321 \texttt{broadcast} a \texttt{receive}, které se volají střídavě. Přesněji řečeno, 322 hlavní smyčka nejprve volá metody \texttt{receive} každého agenta tak dlouho, dokud nevyprázdní frontu zpráv. 323 323 Ta je reprezentována polem proměnných typu \texttt{Setting}, které mají nastaveny čtyři parametry: 324 324 … … 370 370 371 371 \subsubsection{Metoda act}\label{sss:metoda_act} 372 Pokud se agenti dohodl yna změně délky cyklu, probíhá její přenastavení v metodě \texttt{act}.372 Pokud se agenti dohodli na změně délky cyklu, probíhá její přenastavení v metodě \texttt{act}. 373 373 Nejprve se projde pole \texttt{received\_profit\_sum} a vybere se z něj maximum. 374 374 Poté se podle indexu maximálního zisku určí ideální délka fronty.