\section{LP Decoding using ADMM}% \label{sec:LP Decoding using ADMM} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{LP Decoding}% \label{sub:LP Decoding} \begin{frame}[t] \frametitle{LP Decoding \citereference{FWK05}} \vspace*{-3mm} \begin{itemize} \item General reformulation of ML decoding as a linear program (LP) % \item Codeword polytope: % \begin{align*} % \text{poly}\left( \mathcal{C} \right) = % \left\{ % \sum_{\boldsymbol{c}\in\mathcal{C}}\alpha_{\boldsymbol{c}} % \boldsymbol{c} : \alpha_{\boldsymbol{c}} \ge 0, % \sum_{\boldsymbol{c}\in\mathcal{C}}\alpha_{\boldsymbol{c}} = 1 % \right\}, % \hspace{5mm} \alpha_{\boldsymbol{c}} \in \mathbb{R}_{\ge 0} % \end{align*} \item Cost function: \begin{align*} \boldsymbol{\gamma}^{T} \boldsymbol{c} = \sum_{i=1}^{n} \gamma_i c_i, \hspace{5mm}\gamma_i = \ln\left( \frac{f_{Y_i \mid C_i}\left( y_i | c_i = 0 \right) } {f_{Y_i \mid C_i}\left(y_i | c_i=1 \right) } \right) \end{align*} \item Exact \textit{integer linear programming} (ILP) formulation of ML decoding: \begin{align*} & \text{minimize } \boldsymbol{\gamma}^\text{T} \boldsymbol{c} \\ & \text{subject to } \boldsymbol{c}\in \mathcal{C} \end{align*} \item Goal: Relaxation of constraints to make a practical solution to the problem feasible \end{itemize} \bigskip \bigskip \addreference{FWK05}{J. Feldman; M.J. Wainwright; D.R. Karger: \emph{Using linear programming to Decode Binary linear codes}. IEEE Transactions on Information Theory 51.3 (2005), pp. 954–972.} \end{frame} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{frame}[t] \frametitle{LP Decoding: Relaxation} \vspace*{-1cm} \begin{gather*} % \boldsymbol{G} = % \begin{bmatrix} % 0 & 1 & 1 % \end{bmatrix} \hspace{1cm} \boldsymbol{H} = \begin{bmatrix} 1 & 1 & 1 \\ 0 & 1 & 1 \end{bmatrix} \hspace{1cm} % \\[1em] \mathcal{C} = \left\{ \begin{bmatrix} 0 \\ 0 \\ 0 \end{bmatrix}, \begin{bmatrix} 0 \\ 1 \\ 1 \end{bmatrix} \right\} \end{gather*}% \vspace*{-5mm} \begin{figure}[H] \centering \begin{subfigure}[c]{0.4\textwidth} \centering \tikzstyle{codeword} = [color=KITblue, fill=KITblue, draw, circle, inner sep=0pt, minimum size=4pt] \tdplotsetmaincoords{60}{25} \begin{tikzpicture}[scale=0.9, tdplot_main_coords] \tikzstyle{every node}=[font=\normalsize] % Cube \coordinate (p000) at (0, 0, 0); \coordinate (p001) at (0, 0, 2); \coordinate (p010) at (0, 2, 0); \coordinate (p011) at (0, 2, 2); \coordinate (p100) at (2, 0, 0); \coordinate (p101) at (2, 0, 2); \coordinate (p110) at (2, 2, 0); \coordinate (p111) at (2, 2, 2); \draw[] (p000) -- (p100); \draw[] (p100) -- (p101); \draw[] (p101) -- (p001); \draw[] (p001) -- (p000); \draw[dashed] (p010) -- (p110); \draw[] (p110) -- (p111); \draw[] (p111) -- (p011); \draw[dashed] (p011) -- (p010); \draw[dashed] (p000) -- (p010); \draw[] (p100) -- (p110); \draw[] (p101) -- (p111); \draw[] (p001) -- (p011); % Polytope Vertices \node[codeword] (c000) at (p000) {}; \node[codeword] (c011) at (p011) {}; % Polytope Annotations \node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $}; \node[color=KITblue, above=0cm of c011] {$\left( 0, 1, 1 \right) $}; \end{tikzpicture} \caption{Set of all codewords $\mathcal{C}$} \label{fig:lp:poly:exact_ilp} \end{subfigure}% \begin{subfigure}[c]{0.16\textwidth} \centering \begin{tikzpicture} \node (relaxation) at (0, 0) {Relaxation}; \draw (-1.5, 0) -- (relaxation); \draw[->] (relaxation) -- (1.5, 0); \end{tikzpicture} \end{subfigure}% \begin{subfigure}[c]{0.4\textwidth} \centering \tikzstyle{codeword} = [color=KITblue, fill=KITblue, draw, circle, inner sep=0pt, minimum size=4pt] \tdplotsetmaincoords{60}{25} \begin{tikzpicture}[scale=0.9, tdplot_main_coords] \tikzstyle{every node}=[font=\normalsize] % Cube \coordinate (p000) at (0, 0, 0); \coordinate (p001) at (0, 0, 2); \coordinate (p010) at (0, 2, 0); \coordinate (p011) at (0, 2, 2); \coordinate (p100) at (2, 0, 0); \coordinate (p101) at (2, 0, 2); \coordinate (p110) at (2, 2, 0); \coordinate (p111) at (2, 2, 2); \draw[] (p000) -- (p100); \draw[] (p100) -- (p101); \draw[] (p101) -- (p001); \draw[] (p001) -- (p000); \draw[dashed] (p010) -- (p110); \draw[] (p110) -- (p111); \draw[] (p111) -- (p011); \draw[dashed] (p011) -- (p010); \draw[dashed] (p000) -- (p010); \draw[] (p100) -- (p110); \draw[] (p101) -- (p111); \draw[] (p001) -- (p011); % Polytope Vertices \node[codeword] (c000) at (p000) {}; \node[codeword] (c011) at (p011) {}; % Polytope Edges \draw[line width=1pt, color=KITblue] (c000) -- (c011); % Polytope Annotations \node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $}; \node[color=KITblue, above=0cm of c011] {$\left( 0, 1, 1 \right) $}; \end{tikzpicture} \caption{Codeword polytope $\text{poly}\left( \mathcal{C} \right) $} \label{fig:lp:poly:exact} \end{subfigure} \end{figure} % \vspace*{-5mm} \begin{align*} \text{poly}\left( \mathcal{C} \right) = \left\{ \sum_{\boldsymbol{c}\in\mathcal{C}}\alpha_{\boldsymbol{c}} \boldsymbol{c} : \alpha_{\boldsymbol{c}} \ge 0, \sum_{\boldsymbol{c}\in\mathcal{C}}\alpha_{\boldsymbol{c}} = 1 \right\}, \hspace{5mm} \alpha_{\boldsymbol{c}} \in \mathbb{R}_{\ge 0} \end{align*} \end{frame} \begin{frame}[t] \frametitle{LP Decoding: Relaxation} \vspace*{-1cm} \begin{figure}[H] \centering \begin{subfigure}[c]{0.48\textwidth} \centering \begin{minipage}{\textwidth} \centering \tikzstyle{codeword} = [color=KITblue, fill=KITblue, draw, circle, inner sep=0pt, minimum size=4pt] \tdplotsetmaincoords{60}{25} \begin{tikzpicture}[scale=0.7, tdplot_main_coords] \tikzstyle{every node}=[font=\normalsize] % Cube \coordinate (p000) at (0, 0, 0); \coordinate (p001) at (0, 0, 2); \coordinate (p010) at (0, 2, 0); \coordinate (p011) at (0, 2, 2); \coordinate (p100) at (2, 0, 0); \coordinate (p101) at (2, 0, 2); \coordinate (p110) at (2, 2, 0); \coordinate (p111) at (2, 2, 2); \draw[] (p000) -- (p100); \draw[] (p100) -- (p101); \draw[] (p101) -- (p001); \draw[] (p001) -- (p000); \draw[dashed] (p010) -- (p110); \draw[] (p110) -- (p111); \draw[] (p111) -- (p011); \draw[dashed] (p011) -- (p010); \draw[dashed] (p000) -- (p010); \draw[] (p100) -- (p110); \draw[] (p101) -- (p111); \draw[] (p001) -- (p011); % Polytope Vertices \node[codeword] (c000) at (p000) {}; \node[codeword] (c101) at (p101) {}; \node[codeword] (c110) at (p110) {}; \node[codeword] (c011) at (p011) {}; % Polytope Edges & Faces \draw[line width=1pt, color=KITblue] (c000) -- (c101); \draw[line width=1pt, color=KITblue] (c000) -- (c110); \draw[line width=1pt, color=KITblue] (c000) -- (c011); \draw[line width=1pt, color=KITblue] (c101) -- (c110); \draw[line width=1pt, color=KITblue] (c101) -- (c011); \draw[line width=1pt, color=KITblue] (c011) -- (c110); \fill[KITblue, opacity=0.15] (p000) -- (p101) -- (p011) -- cycle; \fill[KITblue, opacity=0.15] (p000) -- (p110) -- (p101) -- cycle; \fill[KITblue, opacity=0.15] (p110) -- (p011) -- (p101) -- cycle; % Polytope Annotations \node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $}; \node[color=KITblue, right=0.07cm of c101] {$\left( 1, 0, 1 \right) $}; \node[color=KITblue, right=0cm of c110] {$\left( 1, 1, 0 \right) $}; \node[color=KITblue, above=0cm of c011] {$\left( 0, 1, 1 \right) $}; \node[color=KITblue, align=center] at (-4,1) {$j=1$\\ $\left( c_1 + c_2+ c_3 = 0 \right) $}; \end{tikzpicture} \end{minipage} \vspace{5mm} \begin{minipage}{\textwidth} \centering \tikzstyle{codeword} = [color=KITblue, fill=KITblue, draw, circle, inner sep=0pt, minimum size=4pt] \tdplotsetmaincoords{60}{25} \begin{tikzpicture}[scale=0.7, tdplot_main_coords] \tikzstyle{every node}=[font=\normalsize] % Cube \coordinate (p000) at (0, 0, 0); \coordinate (p001) at (0, 0, 2); \coordinate (p010) at (0, 2, 0); \coordinate (p011) at (0, 2, 2); \coordinate (p100) at (2, 0, 0); \coordinate (p101) at (2, 0, 2); \coordinate (p110) at (2, 2, 0); \coordinate (p111) at (2, 2, 2); \draw[] (p000) -- (p100); \draw[] (p100) -- (p101); \draw[] (p101) -- (p001); \draw[] (p001) -- (p000); \draw[dashed] (p010) -- (p110); \draw[] (p110) -- (p111); \draw[] (p111) -- (p011); \draw[dashed] (p011) -- (p010); \draw[dashed] (p000) -- (p010); \draw[] (p100) -- (p110); \draw[] (p101) -- (p111); \draw[] (p001) -- (p011); % Polytope Vertices \node[codeword] (c000) at (p000) {}; \node[codeword] (c011) at (p011) {}; \node[codeword] (c100) at (p100) {}; \node[codeword] (c111) at (p111) {}; % Polytope Edges & Faces \draw[line width=1pt, color=KITblue] (c000) -- (c011); \draw[line width=1pt, color=KITblue] (c000) -- (c100); \draw[line width=1pt, color=KITblue] (c100) -- (c111); \draw[line width=1pt, color=KITblue] (c111) -- (c011); \fill[KITblue, opacity=0.2] (p000) -- (p100) -- (p111) -- (p011) -- cycle; % Polytope Annotations \node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $}; \node[color=KITblue, above=0cm of c011] {$\left( 0, 1, 1 \right) $}; \node[color=KITblue, below=0cm of c100] {$\left( 1, 0, 0 \right) $}; \node[color=KITblue, above=0cm of c111] {$\left( 1, 1, 1 \right) $}; \node[color=KITblue, align=center] at (-4,1) {$j=2$\\ $\left(c_2 + c_3 = 0\right)$}; \end{tikzpicture} \end{minipage} \caption{Local codeword polytopes $\mathcal{P}_{d_j}$ of the check nodes} \label{fig:lp:poly:local} \end{subfigure}% \begin{subfigure}[c]{0.18\textwidth} \centering \begin{tikzpicture} \draw[densely dashed] (0, -2) -- (0, 2); \draw[densely dashed] (-0.5, -2) -- (0, -2); \draw[densely dashed] (-0.5, 2) -- (0, 2); \node (intersection) at (1.5, 0) {Intersection}; \draw[densely dashed] (0, 0) -- (intersection); \draw[densely dashed, ->] (intersection) -- (3,0); \end{tikzpicture} \end{subfigure}% \begin{subfigure}[c]{0.32\textwidth} \centering \vspace*{1.5cm} \tikzstyle{codeword} = [color=KITblue, fill=KITblue, draw, circle, inner sep=0pt, minimum size=4pt] \tikzstyle{pseudocodeword} = [color=KITred, fill=KITred, draw, circle, inner sep=0pt, minimum size=4pt] \tdplotsetmaincoords{60}{25} \begin{tikzpicture}[scale=0.9, tdplot_main_coords] \tikzstyle{every node}=[font=\normalsize] % Cube \coordinate (p000) at (0, 0, 0); \coordinate (p001) at (0, 0, 2); \coordinate (p010) at (0, 2, 0); \coordinate (p011) at (0, 2, 2); \coordinate (p100) at (2, 0, 0); \coordinate (p101) at (2, 0, 2); \coordinate (p110) at (2, 2, 0); \coordinate (p111) at (2, 2, 2); \draw[] (p000) -- (p100); \draw[] (p100) -- (p101); \draw[] (p101) -- (p001); \draw[] (p001) -- (p000); \draw[dashed] (p010) -- (p110); \draw[] (p110) -- (p111); \draw[] (p111) -- (p011); \draw[dashed] (p011) -- (p010); \draw[dashed] (p000) -- (p010); \draw[] (p100) -- (p110); \draw[] (p101) -- (p111); \draw[] (p001) -- (p011); % Polytope Vertices \node[codeword] (c000) at (p000) {}; \node[codeword] (c011) at (p011) {}; \node[pseudocodeword] (cpseudo) at (2, 1, 1) {}; % Polytope Edges & Faces \draw[line width=1pt, color=KITblue] (c000) -- (c011); \draw[line width=1pt, color=KITred] (cpseudo) -- (c000); \draw[line width=1pt, color=KITred] (cpseudo) -- (c011); \fill[KITred, opacity=0.2] (p000) -- (p011) -- (2,1,1) -- cycle; % Polytope Annotations \node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $}; \node[color=KITblue, above=0cm of c011] {$\left( 0, 1, 1 \right) $}; \node[color=KITred, right=0cm of cpseudo] {$\left( 1, \frac{1}{2}, \frac{1}{2} \right) $}; \end{tikzpicture} \vspace*{-5mm} \begin{gather*} \boldsymbol{T}_j\tilde{\boldsymbol{c}} \in \mathcal{P}_{d_j}, \hspace{2mm} \forall j\in \mathcal{J} \\[0.5em] \boldsymbol{T}_j \in \mathbb{F}_2^{d_j \times n} \end{gather*} \vspace*{-2mm} \caption{Relaxed codeword polytope $\overline{Q}$} \label{fig:lp:poly:relaxed} \end{subfigure} \end{figure} \end{frame} \begin{frame}[t] \frametitle{LP Decoding: Relaxation} \vspace{-5mm} \begin{figure}[H] \centering \begin{subfigure}[t]{0.3\textwidth} \centering \tikzstyle{codeword} = [color=KITblue, fill=KITblue, draw, circle, inner sep=0pt, minimum size=4pt] \tdplotsetmaincoords{60}{25} \begin{tikzpicture}[scale=0.8, tdplot_main_coords] \tikzstyle{every node}=[font=\normalsize] % Cube \coordinate (p000) at (0, 0, 0); \coordinate (p001) at (0, 0, 2); \coordinate (p010) at (0, 2, 0); \coordinate (p011) at (0, 2, 2); \coordinate (p100) at (2, 0, 0); \coordinate (p101) at (2, 0, 2); \coordinate (p110) at (2, 2, 0); \coordinate (p111) at (2, 2, 2); \draw[] (p000) -- (p100); \draw[] (p100) -- (p101); \draw[] (p101) -- (p001); \draw[] (p001) -- (p000); \draw[dashed] (p010) -- (p110); \draw[] (p110) -- (p111); \draw[] (p111) -- (p011); \draw[dashed] (p011) -- (p010); \draw[dashed] (p000) -- (p010); \draw[] (p100) -- (p110); \draw[] (p101) -- (p111); \draw[] (p001) -- (p011); % Polytope Vertices \node[codeword] (c000) at (p000) {}; \node[codeword] (c011) at (p011) {}; % Polytope Annotations \node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $}; \node[color=KITblue, above=0cm of c011] {$\left( 0, 1, 1 \right) $}; \end{tikzpicture} \begin{align*} \text{minimize}\hspace{2mm} & \boldsymbol{\gamma}^\text{T} \boldsymbol{c} \\ \text{subject to}\hspace{2mm} & \boldsymbol{c} \in \mathcal{C} \end{align*} \caption{\textit{Integer linear program} (ILP)} \end{subfigure}% \hfill% \begin{subfigure}[t]{0.3\textwidth} \centering \tikzstyle{codeword} = [color=KITblue, fill=KITblue, draw, circle, inner sep=0pt, minimum size=4pt] \tdplotsetmaincoords{60}{25} \begin{tikzpicture}[scale=0.8, tdplot_main_coords] \tikzstyle{every node}=[font=\normalsize] % Cube \coordinate (p000) at (0, 0, 0); \coordinate (p001) at (0, 0, 2); \coordinate (p010) at (0, 2, 0); \coordinate (p011) at (0, 2, 2); \coordinate (p100) at (2, 0, 0); \coordinate (p101) at (2, 0, 2); \coordinate (p110) at (2, 2, 0); \coordinate (p111) at (2, 2, 2); \draw[] (p000) -- (p100); \draw[] (p100) -- (p101); \draw[] (p101) -- (p001); \draw[] (p001) -- (p000); \draw[dashed] (p010) -- (p110); \draw[] (p110) -- (p111); \draw[] (p111) -- (p011); \draw[dashed] (p011) -- (p010); \draw[dashed] (p000) -- (p010); \draw[] (p100) -- (p110); \draw[] (p101) -- (p111); \draw[] (p001) -- (p011); % Polytope Vertices \node[codeword] (c000) at (p000) {}; \node[codeword] (c011) at (p011) {}; % Polytope Edges \draw[line width=1pt, color=KITblue] (c000) -- (c011); % Polytope Annotations \node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $}; \node[color=KITblue, above=0cm of c011] {$\left( 0, 1, 1 \right) $}; \end{tikzpicture} \begin{align*} \text{minimize}\hspace{2mm} & \boldsymbol{\gamma}^\text{T} \tilde{\boldsymbol{c}} \\ \text{subject to}\hspace{2mm} & \tilde{\boldsymbol{c}} \in \text{poly}\left( \mathcal{C} \right) & \ \end{align*} \caption{Motivation} \end{subfigure}% \hfill% \begin{subfigure}[t]{0.3\textwidth} \centering \tikzstyle{codeword} = [color=KITblue, fill=KITblue, draw, circle, inner sep=0pt, minimum size=4pt] \tikzstyle{pseudocodeword} = [color=KITred, fill=KITred, draw, circle, inner sep=0pt, minimum size=4pt] \tdplotsetmaincoords{60}{25} \begin{tikzpicture}[scale=0.8, tdplot_main_coords] \tikzstyle{every node}=[font=\normalsize] % Cube \coordinate (p000) at (0, 0, 0); \coordinate (p001) at (0, 0, 2); \coordinate (p010) at (0, 2, 0); \coordinate (p011) at (0, 2, 2); \coordinate (p100) at (2, 0, 0); \coordinate (p101) at (2, 0, 2); \coordinate (p110) at (2, 2, 0); \coordinate (p111) at (2, 2, 2); \draw[] (p000) -- (p100); \draw[] (p100) -- (p101); \draw[] (p101) -- (p001); \draw[] (p001) -- (p000); \draw[dashed] (p010) -- (p110); \draw[] (p110) -- (p111); \draw[] (p111) -- (p011); \draw[dashed] (p011) -- (p010); \draw[dashed] (p000) -- (p010); \draw[] (p100) -- (p110); \draw[] (p101) -- (p111); \draw[] (p001) -- (p011); % Polytope Vertices \node[codeword] (c000) at (p000) {}; \node[codeword] (c011) at (p011) {}; \node[pseudocodeword] (cpseudo) at (2, 1, 1) {}; % Polytope Edges & Faces \draw[line width=1pt, color=KITblue] (c000) -- (c011); \draw[line width=1pt, color=KITred] (cpseudo) -- (c000); \draw[line width=1pt, color=KITred] (cpseudo) -- (c011); \fill[KITred, opacity=0.2] (p000) -- (p011) -- (2,1,1) -- cycle; % Polytope Annotations \node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $}; \node[color=KITblue, above=0cm of c011] {$\left( 0, 1, 1 \right) $}; \node[color=KITred, right=0cm of cpseudo] {$\left( 1, \frac{1}{2}, \frac{1}{2} \right) $}; \end{tikzpicture} \begin{align*} \text{minimize}\hspace{2mm} & \boldsymbol{\gamma}^\text{T} \tilde{\boldsymbol{c}} \\ \text{subject to}\hspace{2mm} & \boldsymbol{T}_j\tilde{\boldsymbol{c}} \in \mathcal{P}_{d_j}, \hspace{2mm} \forall j\in \mathcal{J} \end{align*} \caption{\textit{Linear code linear program} (LCLP)} \end{subfigure}% \end{figure} \vspace*{-5.75cm} \begin{figure}[H] \centering \begin{subfigure}[t]{0.36\textwidth} \centering \begin{tikzpicture} \node (relaxation) at (0, 0) {Relaxation}; \draw[->] (-1, -0.25) -- (1, -0.25); % \draw (-1.5, 0) -- (relaxation); % \draw[->] (relaxation) -- (1.5, 0); \end{tikzpicture} \end{subfigure}% \begin{subfigure}[t]{0.31\textwidth} \centering \begin{tikzpicture} \node (relaxation) at (0, 0) {Relaxation}; \draw[->] (-1, -0.25) -- (1, -0.25); % \draw (-1.5, 0) -- (relaxation); % \draw[->] (relaxation) -- (1.5, 0); \end{tikzpicture} \end{subfigure}% \end{figure} \end{frame} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{frame}[t] \frametitle{LP Decoding using ADMM} \vspace*{-4mm} \begin{itemize} \item Solution using the \textit{alternating direction method of multipliers} (ADMM) \citereference{$\text{Bar}^+\text{13}$} \item Slight reformulation of the LCLP: \begin{align*} \begin{aligned} \text{minimize}\hspace{2mm} & \boldsymbol{\gamma}^\text{T} \tilde{\boldsymbol{c}} + \sum_{j\in\mathcal{J}} g_j\left( \boldsymbol{z}_j \right) \\ \text{subject to}\hspace{2mm} & \boldsymbol{T}_j\tilde{\boldsymbol{c}} = \boldsymbol{z}_j, \hspace{2mm} \forall j\in \mathcal{J} \end{aligned}\hspace{2mm},\hspace{1cm} g_j\left( \boldsymbol{t} \right) := \begin{cases} 0, & \boldsymbol{t} \in \mathcal{P}_{d_j} \\ +\infty, & \boldsymbol{t} \not\in \mathcal{P}_{d_j} \end{cases} \end{align*} \item Iterative algorithm: \begin{alignat*}{3} \tilde{\boldsymbol{c}} & \leftarrow \argmin_{\tilde{\boldsymbol{c}}} \boldsymbol{\gamma}^\text{T}\tilde{\boldsymbol{c}} + \frac{\mu}{2}\sum_{j\in\mathcal{J}} \left\Vert \boldsymbol{T}_j\tilde{\boldsymbol{c}} - \boldsymbol{z}_j + \boldsymbol{u}_j \right\Vert \\ \boldsymbol{z}_j & \leftarrow \argmin_{\boldsymbol{z}_j} g\left( \boldsymbol{z}_j \right) + \frac{\mu}{2} \left\Vert \boldsymbol{T}_j \tilde{\boldsymbol{c}} - \boldsymbol{z}_j + \boldsymbol{u}_j \right\Vert, \hspace{5mm} & & \forall j\in\mathcal{J} \\ \boldsymbol{u}_j & \leftarrow \boldsymbol{u}_j + \boldsymbol{T}_j\tilde{\boldsymbol{c}} - \boldsymbol{z}_j, \hspace{5mm} & & \forall j\in\mathcal{J} % \left( g\left( \boldsymbol{\boldsymbol{z}_j} \right) % + \frac{\mu}{2} \left\Vert \boldsymbol{T}_j\tilde{\boldsymbol{c}} % - \boldsymbol{z}_j + \boldsymbol{u}_j\right\Vert \right) \end{alignat*} \end{itemize} \bigskip \addreference{$\text{Bar}^+\text{13}$}{Siddharth Barman et al.: \emph{Decomposition Methods for Large Scale LP Decoding}. IEEE Transactions on Information Theory 59.12 (2013), pp. 7870–7886.} \end{frame} %%%%%%%%%%%%%%%% \subsection{Application of ADMM} \label{subsec:Application of ADMM} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{frame}[t] \frametitle{LP Decoding using ADMM} \vspace*{-7mm} \begin{itemize} \item Convergence properties enhanced by over-relaxation with parameter $\rho$ \item Simplified rules: % \footnote{$\left( \boldsymbol{z}_j \right)_i $ is a slight abuse of notation. % What is actually meant is the component of $\boldsymbol{z}_j$ that is associated % with the VN $i$, i.e., $\left( \boldsymbol{T}_j^\text{T} % \boldsymbol{z}_j \right)_i$.\\ % The same is true for $\left( \boldsymbol{u}_j \right)_i$}: \vspace*{-4mm} \begin{alignat*}{3} \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{z}_j \right)_i - \left( \boldsymbol{u}_j \right)_i \Big) - \frac{\gamma_i}{\mu} \right) \hspace{5mm} & & \forall i\in\mathcal{I} \\ \boldsymbol{z}_j & \leftarrow \Pi_{\mathcal{P}_{d_j}}\left( \rho \boldsymbol{T}_j\tilde{\boldsymbol{c}} - \boldsymbol{z}_j \left( 1-\rho \right) + \boldsymbol{u}_j \right) \hspace{5mm} & & \forall j\in\mathcal{J} \\ \boldsymbol{u}_j & \leftarrow \boldsymbol{u}_j + \rho \boldsymbol{T}_j\tilde{\boldsymbol{c}} - \left( 1-\rho \right) \boldsymbol{z}_j - \boldsymbol{z}_j \hspace{5mm} & & \forall j\in\mathcal{J} \end{alignat*} \vspace*{2mm} \item The projections $\Pi_{\mathcal{P}_{d_j}}, \hspace{1mm} j\in\mathcal{J}$ are the main computational effort \item Many approaches exist \citereference{$\text{Bar}^+\text{13}$}, \citereference{ZS13}, \citereference{$\text{Gen}^+\text{20}$} \item The approach chosen here is the one described in \citereference{$\text{Bar}^+\text{13}$} \end{itemize} \bigskip \bigskip \addreferences {$\text{Bar}^+\text{13}$}{Siddharth Barman et al.: \emph{Decomposition Methods for Large Scale LP Decoding}. IEEE Transactions on Information Theory 59.12 (2013), pp. 7870–7886.} {ZS13}{Xiaojie Zhang; Paul H. Siegel: \emph{Efficient iterative LP decoding of LDPC codes with alternating direction method of multipliers}. 2013 IEEE International Symposium on Information Theory. 2013, pp. 1501–1505.} {$\text{Gen}^+\text{20}$}{Florian Gensheimer et al.: \emph{A Reduced-Complexity Projection Algorithm for ADMM-Based LP Decoding}. IEEE Transactions on Information Theory 66.8 (2020), pp. 4819–4833.} \stopreferences \end{frame} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Simulation Results}% \label{sub:Simulation Results} \begin{frame}[t] \frametitle{LP Decoding using ADMM: Frame Error Rate} \vspace*{-6mm} \begin{itemize} \item (3,6) regular LDPC code with $n=204, k=102$ \citereference{Mac24, 204.33.484} \end{itemize} \bigskip \begin{figure}[H] \centering \begin{tikzpicture} \begin{axis}[ grid=both, xlabel={$E_b / N_0 \left( \text{dB} \right) $}, ylabel={FER}, ymode=log, width=0.45\textwidth, height=0.325\textwidth, %legend style={at={(0.03,0.04)},anchor=south west}, legend pos=outer north east, legend cell align={left}, ] \addplot[scol1, line width=1pt] table [x=SNR, y=FER, col sep=comma, discard if not={mu}{3.0}, discard if gt={SNR}{5.5}] {res/admm/ber_2d_20433484.csv}; \addlegendentry{ADMM} \addplot [KITorange, line width=1pt] table [x=SNR, y=FER, col sep=comma, discard if gt={SNR}{5.5}] {res/generic/bp_20433484.csv}; \addlegendentry{BP} \addplot[black, line width=1pt] table [col sep=comma, x=SNR, y=FER, discard if gt={SNR}{5.5}] {res/generic/fer_ml_20433484.csv}; \addlegendentry{ML \citereference{HEL+19}} \end{axis} \end{tikzpicture} \end{figure}% \bigskip \bigskip \addreferences {Mac24}{David J.C. MacKay: \emph{Encyclopedia of Sparse Graph Codes}. June 2024. URL: \url{http://www.inference.org.uk/mackay/codes/data.html}.} {Hel+19}{Michael Helmling, Stefan Scholl, Florian Gensheimer, Tobias Dietz, Kira Kraft, Stefan Ruzika, and Norbert Wehn. \emph{Database of Channel Codes and ML Simulation Results}. June 2024. URL: \url{www.rptu.de/channel-codes}} \stopreferences \end{frame}