\section{Decoding Algorithms}% \label{sec:Decoding Algorithms} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Proximal Decoding}% \label{sub:Alg Proximal Decoding} \begin{frame}[t] \frametitle{Proximal Decoding: General Idea \cite{proximal_paper}} \vspace*{-0.3cm} \begin{itemize} \item MAP rule: \begin{align*} \hat{\boldsymbol{x}} &= \argmax_{\tilde{\boldsymbol{x}}\in\mathbb{R}^n} f_{\boldsymbol{Y}}\left( \boldsymbol{y} | \tilde{\boldsymbol{x}} \right) f_{\boldsymbol{X}}\left( \tilde{\boldsymbol{x}} \right)\\ &= \argmax_{\tilde{\boldsymbol{x}}\in\mathbb{R}^n} e^{-L\left( \boldsymbol{y} | \tilde{\boldsymbol{x}}\right)} f_{\boldsymbol{X}}\left( \tilde{\boldsymbol{x}} \right), \hspace{5mm} L\left( \boldsymbol{y} | \tilde{\boldsymbol{x}} \right) = - \ln\left( f_{\boldsymbol{Y}} \left( \boldsymbol{y} | \tilde{\boldsymbol{x}} \right) \right) \end{align*} \item Approximation of prior PDF: \begin{align*} f_{\boldsymbol{X}}\left( \tilde{\boldsymbol{x}} \right) = \frac{1}{\left| \mathcal{C} \right| } \sum_{\boldsymbol{c} \in \mathcal{C} } \delta\left( \tilde{\boldsymbol{x}} - \left( -1 \right)^{\boldsymbol{c}} \right) \approx \frac{1}{Z} e^{-\gamma h\left( \tilde{\boldsymbol{x}} \right) } \end{align*} \item Code constraint polynomial: \begin{minipage}[c]{0.56\textwidth} \raggedright \begin{align*} h\left( \tilde{\boldsymbol{x}} \right) = \underbrace{\sum_{i=1}^{n} \left( \tilde{x}_i^2 - 1 \right)^2}_{\text{Bipolar constraint}} + \underbrace{\sum_{j=1}^{m} \left[ \left( \prod_{i\in N_v\left( j \right)} \tilde{x}_i\right) -1 \right]^2} _{\text{Parity constraint}}, \end{align*} \end{minipage}% \begin{minipage}[c]{0.4\textwidth} \raggedleft \begin{flalign*} \mathcal{I} &:= \left[1\text{ : }n\right], \hspace{2mm} \mathcal{J} := \left[1\text{ : }m\right] \\ N_v\left( j \right) &:= \left\{i | i\in \mathcal{I}, \boldsymbol{H}_{j,i} = 1 \right\}, j\in\mathcal{J}\\ \end{flalign*} \end{minipage} \hfill \end{itemize} \end{frame} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{frame}[t] \frametitle{Proximal Decoding: General Idea} \begin{itemize} \item Objective function: \begin{align*} g\left( \tilde{\boldsymbol{x}} \right) = L\left( \boldsymbol{y} | \tilde{\boldsymbol{x}} \right) + \gamma h\left( \tilde{\boldsymbol{x}} \right) \end{align*} \note{Notational difference between $f$ and $f_X$ or $f_Y$} \item Proximal operator \cite{proximal_algorithms}: \begin{align*} \text{prox}_{\gamma h} \left( \tilde{\boldsymbol{x}} \right) &\equiv \argmin_{\boldsymbol{t}\in\mathbb{R}^n} \left( \gamma h\left( \boldsymbol{t} \right) + \frac{1}{2} \lVert \boldsymbol{t} - \tilde{\boldsymbol{x}} \rVert^2 \right)\\ &\approx \tilde{\boldsymbol{x}} - \gamma \nabla h\left( \tilde{\boldsymbol{x}} \right), \hspace{5mm} \gamma \text{ small} \end{align*} \item Iterative decoding process: \begin{align*} \boldsymbol{r} &\leftarrow \boldsymbol{s} - \omega \nabla L\left( \boldsymbol{y} | \boldsymbol{s} \right), \hspace{5mm} \omega > 0 \hspace{10mm} \text{``Gradient descent step''}\\ \boldsymbol{s} &\leftarrow \boldsymbol{r} - \gamma \nabla h\left( \boldsymbol{r} \right), \hspace{9mm} \gamma > 0 \hspace{10mm} \text{``Code proximal step''} \end{align*} \end{itemize} \end{frame} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{frame}[t, fragile] \frametitle{Proximal Decoding: Algorithm} \begin{itemize} \item Iterative decoding algorithm \cite{proximal_paper}: \end{itemize} \vspace{2mm} \begin{algorithm}[caption={}, label={}] $\boldsymbol{s} \leftarrow \boldsymbol{0}$ for $K$ iterations do $\boldsymbol{r} \leftarrow \boldsymbol{s} - \omega \nabla L \left( \boldsymbol{y} \mid \boldsymbol{s} \right) $ $\boldsymbol{s} \leftarrow \boldsymbol{r} - \gamma \nabla h\left( \boldsymbol{r} \right) $ $\boldsymbol{\hat{x}} \leftarrow \text{sign}\left( \boldsymbol{s} \right) $ if $\boldsymbol{H}\boldsymbol{\hat{c}} = \boldsymbol{0}$ do return $\boldsymbol{\hat{c}}$ end if end for return $\boldsymbol{\hat{c}}$ \end{algorithm} \end{frame} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{LP Decoding}% \label{sub:LP Decoding} \begin{frame}[t] \frametitle{LP Decoding \cite{feldman_paper}} \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{p_{Y_i \mid C_i}\left( y_i | c_i = 0 \right) } {p_{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} \tilde{\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} \end{frame} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{frame}[t] \frametitle{LP Relaxation: Motivation} \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] % 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] % 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 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] % 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] % 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] % 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{align*} \boldsymbol{T}_j\tilde{\boldsymbol{c}} \in \mathcal{P}_{d_j}, \hspace{2mm} \forall j\in \mathcal{J} \end{align*} \caption{Relaxed codeword polytope $\overline{Q}$} \label{fig:lp:poly:relaxed} \end{subfigure} \end{figure} \end{frame} \begin{frame}[t] \frametitle{LP 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] % 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] % 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} \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] % 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} \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 Relaxation} % % \begin{minipage}[c]{0.6\linewidth} % \begin{itemize} % \item Set of all variable nodes incident to a check node: % \begin{align*} % N\left( j \right) \equiv \left\{ % i | i\in \mathcal{I}, % \boldsymbol{H}_{j,i} = 1 % \right\}, % j \in \mathcal{J} % \end{align*} % \begin{align*} % S \subseteq N\left( j \right), \left| S \right| \text{odd} % \end{align*} % \item Relaxed polytope representation: % \begin{align*} % \sum_{i\in \left( N\left( j \right) \setminus S\right) } f_i % + \sum_{i\in S} \left( 1 - f_i \right) \ge 1 % \end{align*} % ``$\boldsymbol{f}$ is separated by at least one bitflip % from all illegal configurations'' % \end{itemize} % \end{minipage}% % \hfill% % \begin{minipage}[c]{0.4\linewidth} % \begin{figure}[H] % \centering % % \tikzstyle{codeword} = [color=KITblue, fill=KITblue, % draw, circle, inner sep=0pt, minimum size=4pt] % % \tdplotsetmaincoords{60}{245} % \begin{tikzpicture}[scale=1, transform shape, tdplot_main_coords] % % Cube % % \draw[dashed] (0, 0, 0) -- (2, 0, 0); % \draw[dashed] (2, 0, 0) -- (2, 0, 2); % \draw[] (2, 0, 2) -- (0, 0, 2); % \draw[] (0, 0, 2) -- (0, 0, 0); % % \draw[] (0, 2, 0) -- (2, 2, 0); % \draw[] (2, 2, 0) -- (2, 2, 2); % \draw[] (2, 2, 2) -- (0, 2, 2); % \draw[] (0, 2, 2) -- (0, 2, 0); % % \draw[] (0, 0, 0) -- (0, 2, 0); % \draw[dashed] (2, 0, 0) -- (2, 2, 0); % \draw[] (2, 0, 2) -- (2, 2, 2); % \draw[] (0, 0, 2) -- (0, 2, 2); % % % Codeword Polytope % % \draw[line width=1pt, color=KITblue] (0, 0, 0) -- (2, 0, 2); % \draw[line width=1pt, color=KITblue] (0, 0, 0) -- (2, 2, 0); % \draw[line width=1pt, color=KITblue] (0, 0, 0) -- (0, 2, 2); % % \draw[line width=1pt, color=KITblue] (2, 0, 2) -- (2, 2, 0); % \draw[line width=1pt, color=KITblue] (2, 0, 2) -- (0, 2, 2); % % \draw[line width=1pt, color=KITblue] (0, 2, 2) -- (2, 2, 0); % % % Polytope Annotations % % \node[codeword, color=KITred] (c111) at (2, 2, 2) {};% {$\left( 0, 0, 0 \right) $}; % \node[codeword, color=KITred] (c001) at (0, 0, 2) {};% {$\left( 1, 0, 1 \right) $}; % \node[codeword, color=KITred] (c100) at (2, 0, 0) {};% {$\left( 1, 1, 0 \right) $}; % \node[codeword, color=KITred] (c010) at (0, 2, 0) {};% {$\left( 0, 1, 1 \right) $}; % % \node[color=KITred, left=0cm of c111] {$\left( 1, 1, 1 \right) $}; % \node[color=KITred, right=0cm of c001] {$\left( 0, 0, 1 \right) $}; % \node[color=KITred, right=0.35cm of c100] {$\left( 1, 0, 0 \right) $}; % \node[color=KITred, below=0cm of c010] {$\left( 0, 1, 0 \right) $}; % \end{tikzpicture} % \caption{Relaxed polytope for $n=3$} % \end{figure} % \end{minipage} % \todo{How is this a relaxation and not just an alternative formulation? % We have just switched out valid codewords for invalid ones} % \todo{Is LP Relaxation relevant as theoretical background?} %\end{frame} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %\subsection{ADMM}% %\label{sub:Alg ADMM} % %\begin{frame}[t] % \frametitle{ADMM Decoding: General Idea} % % \todo{TODO} %\end{frame} % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %\begin{frame}[t] % \frametitle{ADMM Decoding: Algorithm} % % \todo{TODO} %\end{frame}