From 7aecd4722001995e0e66c6f99e5eafa041eb21cc Mon Sep 17 00:00:00 2001 From: Andreas Tsouchlos Date: Fri, 17 Mar 2023 13:07:58 +0100 Subject: [PATCH] 1:m -> [1:m]; wrote message passing algorithm; added TODO --- latex/thesis/chapters/decoding_techniques.tex | 51 ++++++++++++------- 1 file changed, 33 insertions(+), 18 deletions(-) diff --git a/latex/thesis/chapters/decoding_techniques.tex b/latex/thesis/chapters/decoding_techniques.tex index 2bb9f96..2f234b4 100644 --- a/latex/thesis/chapters/decoding_techniques.tex +++ b/latex/thesis/chapters/decoding_techniques.tex @@ -176,6 +176,7 @@ decoding and one, which is an approximation with a more manageable representation. To solve the resulting linear program, various optimization methods can be used. +\todo{Citation needed} They begin by looking at the \ac{ML} decoding problem% \footnote{They assume that all codewords are equally likely to be transmitted, @@ -710,7 +711,7 @@ complexity has been demonstrated to compare favorably to \ac{BP} \cite{original_ The \ac{LP} decoding problem in (\ref{eq:lp:relaxed_formulation}) can be slightly rewritten using the auxiliary variables -$\boldsymbol{z}_{1:m}$:% +$\boldsymbol{z}_{[1:m]}$:% % \begin{align} \begin{aligned} @@ -741,8 +742,8 @@ The multiple constraints can be addressed by introducing additional terms in the augmented lagrangian:% % \begin{align*} - \mathcal{L}_{\mu}\left( \tilde{\boldsymbol{c}}, \boldsymbol{z}_{1:m}, - \boldsymbol{\lambda}_{1:m} \right) + \mathcal{L}_{\mu}\left( \tilde{\boldsymbol{c}}, \boldsymbol{z}_{[1:m]}, + \boldsymbol{\lambda}_{[1:m]} \right) = \boldsymbol{\gamma}^\text{T}\tilde{\boldsymbol{c}} + \sum_{j\in\mathcal{J}} \boldsymbol{\lambda}^\text{T}_j \left( \boldsymbol{T}_j\tilde{\boldsymbol{c}} - \boldsymbol{z}_j \right) @@ -754,19 +755,19 @@ The additional constraints remain in the dual optimization problem:% % \begin{align*} \text{maximize } \min_{\substack{\tilde{\boldsymbol{c}} \\ - \boldsymbol{z}_j \in \mathcal{P}_{d_j}}} - \mathcal{L}_{\mu}\left( \tilde{\boldsymbol{c}}, \boldsymbol{z}_{1:m}, - \boldsymbol{\lambda}_{1:m} \right) + \boldsymbol{z}_j \in \mathcal{P}_{d_j}\,\forall\,j\in\mathcal{J}}} + \mathcal{L}_{\mu}\left( \tilde{\boldsymbol{c}}, \boldsymbol{z}_{[1:m]}, + \boldsymbol{\lambda}_{[1:m]} \right) .\end{align*}% % The steps to solve the dual problem then become: % \begin{alignat*}{3} \tilde{\boldsymbol{c}} &\leftarrow \argmin_{\tilde{\boldsymbol{c}}} \mathcal{L}_{\mu} \left( - \tilde{\boldsymbol{c}}, \boldsymbol{z}_{1:m}, \boldsymbol{\lambda}_{1:m} \right) \\ + \tilde{\boldsymbol{c}}, \boldsymbol{z}_{[1:m]}, \boldsymbol{\lambda}_{[1:m]} \right) \\ \boldsymbol{z}_j &\leftarrow \argmin_{\boldsymbol{z}_j \in \mathcal{P}_{d_j}} \mathcal{L}_{\mu} \left( - \tilde{\boldsymbol{c}}, \boldsymbol{z}_{1:m}, \boldsymbol{\lambda}_{1:m} \right) + \tilde{\boldsymbol{c}}, \boldsymbol{z}_{[1:m]}, \boldsymbol{\lambda}_{[1:m]} \right) \hspace{3mm} &&\forall j\in\mathcal{J} \\ \boldsymbol{\lambda}_j &\leftarrow \boldsymbol{\lambda}_j + \mu\left( \boldsymbol{T}_j\tilde{\boldsymbol{c}} @@ -793,6 +794,8 @@ and the $\tilde{\boldsymbol{c}}$-update can be computed analytically \cite[Sec. \hspace{3mm} && \forall j\in\mathcal{J} .\end{alignat*} % +\todo{$\tilde{c}_i$-update With or without projection onto $\left[ 0, 1 \right] ^n$?} +% One thing to note is that all of the $\boldsymbol{z}_j$-updates can be computed simultaneously, as they are independent of one another. The same is true for the updates of the individual components of $\tilde{\boldsymbol{c}}$. @@ -809,7 +812,8 @@ algorithm \cite[Sec. III. D.]{original_admm}, \cite[Sec. II. B.]{efficient_lp_de as is shown in figure \ref{fig:lp:message_passing} \footnote{$\epsilon_{\text{pri}} > 0$ and $\epsilon_{\text{dual}} > 0$ are additional parameters defining the tolerances for the stopping criteria of the algorithm. -$\boldsymbol{z}_j^\prime$ denotes the value of $\boldsymbol{z}_j$ in the previous iteration.}% +The variable $\boldsymbol{z}_j^\prime$ denotes the value of +$\boldsymbol{z}_j$ in the previous iteration.}% \todo{Move footnote to figure caption}% .% \todo{Explicitly specify sections?}% @@ -817,21 +821,32 @@ $\boldsymbol{z}_j^\prime$ denotes the value of $\boldsymbol{z}_j$ in the previou \begin{figure}[H] \centering - \begin{genericAlgorithm}[caption={}, label={}] -Initialize $\tilde{\boldsymbol{c}}, \boldsymbol{z}_{1:m}$ and $\boldsymbol{\lambda}_{1:m}$ -while $\sum_{j\in\mathcal{J}} \lVert \boldsymbol{T}_j\tilde{\boldsymbol{c}} - \boldsymbol{z}_j \rVert_2 \ge \epsilon_{\text{pri}}$ or $\sum_{j\in\mathcal{J}} \lVert \boldsymbol{z}^\prime_j - \boldsymbol{z}_j \rVert_2 \ge \epsilon_{\text{dual}}$ - Perform check update - ... - Perform variable update - ... + \begin{genericAlgorithm}[caption={}, label={}, + basicstyle=\fontsize{11}{16}\selectfont + ] +Initialize $\tilde{\boldsymbol{c}}, \boldsymbol{z}_{[1:m]}$ and $\boldsymbol{\lambda}_{[1:m]}$ +while $\sum_{j\in\mathcal{J}} \lVert \boldsymbol{T}_j\tilde{\boldsymbol{c}} - \boldsymbol{z}_j \rVert_2 \ge \epsilon_{\text{pri}}$ or $\sum_{j\in\mathcal{J}} \lVert \boldsymbol{z}^\prime_j - \boldsymbol{z}_j \rVert_2 \ge \epsilon_{\text{dual}}$ do + for all $j$ in $\mathcal{J}$ do + $\boldsymbol{z}_j \leftarrow \Pi_{\mathcal{P}_{d_j}}\left( + \boldsymbol{T}_j\tilde{\boldsymbol{c}} + \boldsymbol{\lambda}_j \right)$ + $\boldsymbol{\lambda}_j \leftarrow \boldsymbol{\lambda}_j + + \mu\left( \boldsymbol{T}_j\tilde{\boldsymbol{c}} + - \boldsymbol{z}_j \right)$ + end for + for all $i$ in $\mathcal{I}$ do + $\tilde{c}_i \leftarrow \frac{1}{\left| N_v\left( i \right) \right|} \left( + \sum_{j\in N_v\left( i \right) } \Big( \left( \boldsymbol{\lambda}_j \right)_i + - \left( \boldsymbol{z}_j \right)_i \Big) - \frac{\gamma_i}{\mu} \right)$ + end for +end while \end{genericAlgorithm} \caption{\ac{LP} decoding using \ac{ADMM} interpreted as a message passing algorithm} \label{fig:lp:message_passing} \end{figure}% % -\noindent The $\tilde{c}_i$-updates can be interpreted as a variable-node update step, -and the $\boldsymbol{z}_j$- and $\boldsymbol{\lambda}_j$-updates can be interpreted as +\noindent The $\tilde{c}_i$-updates can be understood as a variable-node update step, +and the $\boldsymbol{z}_j$- and $\boldsymbol{\lambda}_j$-updates can be understood as a check-node update step. The updates for each variable- and check-node can be perfomed in parallel. With this interpretation it becomes clear why \ac{LP} decoding using \ac{ADMM}