1:m -> [1:m]; wrote message passing algorithm; added TODO
This commit is contained in:
parent
d333e461a7
commit
7aecd47220
@ -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}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user