Added visualization of codeword polytope and relaxed codeword polytope
This commit is contained in:
parent
e3adafe2ff
commit
033cdb5197
@ -143,11 +143,13 @@ which minimizes the objective function $f$ (as shown in figure \ref{fig:dec:spac
|
|||||||
|
|
||||||
\Ac{LP} decoding is a subject area introduced by Feldman et al.
|
\Ac{LP} decoding is a subject area introduced by Feldman et al.
|
||||||
\todo{Space before citation?}
|
\todo{Space before citation?}
|
||||||
\cite{feldman_paper}. They reframed the decoding problem as an
|
\cite{feldman_paper}. They reframe the decoding problem as an
|
||||||
\textit{integer linear program} and subsequently presented a relaxation into
|
\textit{integer linear program} and subsequently present two relaxations into
|
||||||
a \textit{linear program}, lifting the integer requirement.
|
\textit{linear programs}, one representing a formulation of exact \ac{LP}
|
||||||
The optimization method used to solve this problem that is examined in this
|
decoding and an approximation with a more manageable representation.
|
||||||
work is \ac{ADMM}.
|
To solve the resulting linear program, various optimization methods can be
|
||||||
|
used.
|
||||||
|
The one examined in this work is \ac{ADMM}.
|
||||||
\todo{Why chose ADMM?}
|
\todo{Why chose ADMM?}
|
||||||
|
|
||||||
Feldman at al. begin by looking at the \ac{ML} decoding problem%
|
Feldman at al. begin by looking at the \ac{ML} decoding problem%
|
||||||
@ -189,73 +191,315 @@ decoding is the following:%
|
|||||||
.\end{align*}%
|
.\end{align*}%
|
||||||
%
|
%
|
||||||
|
|
||||||
As solving integer linear programs is generally NP-hard, the decoding problem \todo{New \S?}
|
As solving integer linear programs is generally NP-hard, this decoding problem
|
||||||
has to be approximated by one with looser constraints.
|
has to be approximated by one with looser constraints.
|
||||||
A technique called \textit{\ac{LP} Relaxation} is applied,
|
A technique called \textit{relaxation} is applied,
|
||||||
essentially removing the requirement for the components of $\boldsymbol{c}$
|
essentially modifying the constraints in order to broaden the considered
|
||||||
to be integer values.
|
domain (e.g. by lifting the integer requirement).
|
||||||
In order to provide a formal definition of the relaxed constraints, the
|
First, the authors present an equivalent \ac{LP} formulation of exact \ac{ML}
|
||||||
authors go on to define the concept of the \textit{codeword polytope}
|
decoding, redefining the constraints in terms of the \text{codeword polytope}
|
||||||
(figure \ref{fig:dec:poly}) as
|
|
||||||
being the convex hull of all possible codewords:
|
|
||||||
%
|
%
|
||||||
\begin{align*}
|
\begin{align*}
|
||||||
\text{poly}\left( \mathcal{C} \right) = \left\{
|
\text{poly}\left( \mathcal{C} \right) = \left\{
|
||||||
\sum_{c \in \mathcal{C}} \lambda_{\boldsymbol{c}} \boldsymbol{c}
|
\sum_{c \in \mathcal{C}} \lambda_{\boldsymbol{c}} \boldsymbol{c}
|
||||||
\text{ : } \lambda_{\boldsymbol{c}} \ge 0,
|
\text{ : } \lambda_{\boldsymbol{c}} \ge 0,
|
||||||
\sum_{\boldsymbol{c} \in \mathcal{C}} \lambda_{\boldsymbol{c}} = 1 \right\}
|
\sum_{\boldsymbol{c} \in \mathcal{C}} \lambda_{\boldsymbol{c}} = 1 \right\}
|
||||||
.\end{align*}
|
,\end{align*} %
|
||||||
|
%
|
||||||
|
which represents the \textit{convex hull} of all possible codewords,
|
||||||
|
i.e. the set of convex linear combinations of all codewords
|
||||||
|
(visualized in figure \ref{fig:dec:poly}).
|
||||||
|
However, since the number of constraints needed to characterize this codeword
|
||||||
|
polytope is exponential in the code length, this formulation is relaxed futher.
|
||||||
|
|
||||||
|
|
||||||
|
%
|
||||||
|
% Codeword polytope visualization figure
|
||||||
|
%
|
||||||
|
|
||||||
\begin{figure}[H]
|
\begin{figure}[H]
|
||||||
\centering
|
\centering
|
||||||
|
|
||||||
\tikzstyle{codeword} = [color=KITblue, fill=KITblue,
|
%
|
||||||
draw, circle, inner sep=0pt, minimum size=4pt]
|
% Left side - codeword polytope
|
||||||
|
%
|
||||||
|
|
||||||
\tdplotsetmaincoords{60}{245}
|
\begin{subfigure}[c]{0.45\textwidth}
|
||||||
\begin{tikzpicture}[scale=1, transform shape, tdplot_main_coords]
|
\centering
|
||||||
% Cube
|
|
||||||
|
\begin{subfigure}{\textwidth}
|
||||||
|
\centering
|
||||||
|
|
||||||
|
\begin{align*}
|
||||||
|
\boldsymbol{H} &=
|
||||||
|
\begin{bmatrix}
|
||||||
|
1 & 1 & 1\\
|
||||||
|
0 & 1 & 1
|
||||||
|
\end{bmatrix}\\[1em]
|
||||||
|
\mathcal{C} &= \left\{
|
||||||
|
\begin{bmatrix}
|
||||||
|
0\\
|
||||||
|
0\\
|
||||||
|
0
|
||||||
|
\end{bmatrix},
|
||||||
|
\begin{bmatrix}
|
||||||
|
0\\
|
||||||
|
1\\
|
||||||
|
1
|
||||||
|
\end{bmatrix}
|
||||||
|
\right\}
|
||||||
|
\end{align*}
|
||||||
|
|
||||||
\draw[dashed] (0, 0, 0) -- (2, 0, 0);
|
\caption{Definition of the visualized code}
|
||||||
\draw[dashed] (2, 0, 0) -- (2, 0, 2);
|
\label{fig:}
|
||||||
\draw[] (2, 0, 2) -- (0, 0, 2);
|
\end{subfigure} \\[7em]
|
||||||
\draw[] (0, 0, 2) -- (0, 0, 0);
|
\begin{subfigure}{\textwidth}
|
||||||
|
\centering
|
||||||
|
|
||||||
\draw[] (0, 2, 0) -- (2, 2, 0);
|
\tikzstyle{codeword} = [color=KITblue, fill=KITblue,
|
||||||
\draw[] (2, 2, 0) -- (2, 2, 2);
|
draw, circle, inner sep=0pt, minimum size=4pt]
|
||||||
\draw[] (2, 2, 2) -- (0, 2, 2);
|
|
||||||
\draw[] (0, 2, 2) -- (0, 2, 0);
|
|
||||||
|
|
||||||
\draw[] (0, 0, 0) -- (0, 2, 0);
|
\tdplotsetmaincoords{60}{25}
|
||||||
\draw[dashed] (2, 0, 0) -- (2, 2, 0);
|
\begin{tikzpicture}[scale=1, transform shape, tdplot_main_coords]
|
||||||
\draw[] (2, 0, 2) -- (2, 2, 2);
|
% Cube
|
||||||
\draw[] (0, 0, 2) -- (0, 2, 2);
|
|
||||||
|
|
||||||
% Codeword Polytope
|
\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[line width=1pt, color=KITblue] (0, 0, 0) -- (2, 0, 2);
|
\draw[] (p000) -- (p100);
|
||||||
\draw[line width=1pt, color=KITblue] (0, 0, 0) -- (2, 2, 0);
|
\draw[] (p100) -- (p101);
|
||||||
\draw[line width=1pt, color=KITblue] (0, 0, 0) -- (0, 2, 2);
|
\draw[] (p101) -- (p001);
|
||||||
|
\draw[] (p001) -- (p000);
|
||||||
|
|
||||||
\draw[line width=1pt, color=KITblue] (2, 0, 2) -- (2, 2, 0);
|
\draw[dashed] (p010) -- (p110);
|
||||||
\draw[line width=1pt, color=KITblue] (2, 0, 2) -- (0, 2, 2);
|
\draw[] (p110) -- (p111);
|
||||||
|
\draw[] (p111) -- (p011);
|
||||||
|
\draw[dashed] (p011) -- (p010);
|
||||||
|
|
||||||
\draw[line width=1pt, color=KITblue] (0, 2, 2) -- (2, 2, 0);
|
\draw[dashed] (p000) -- (p010);
|
||||||
|
\draw[] (p100) -- (p110);
|
||||||
|
\draw[] (p101) -- (p111);
|
||||||
|
\draw[] (p001) -- (p011);
|
||||||
|
|
||||||
% Polytope Annotations
|
% Polytope Vertices
|
||||||
|
|
||||||
\node[codeword] (c000) at (0, 0, 0) {};% {$\left( 0, 0, 0 \right) $};
|
\node[codeword] (c000) at (p000) {};
|
||||||
\node[codeword] (c101) at (2, 0, 2) {};% {$\left( 1, 0, 1 \right) $};
|
\node[codeword] (c011) at (p011) {};
|
||||||
\node[codeword] (c110) at (2, 2, 0) {};% {$\left( 1, 1, 0 \right) $};
|
|
||||||
\node[codeword] (c011) at (0, 2, 2) {};% {$\left( 0, 1, 1 \right) $};
|
% Polytope Edges
|
||||||
|
|
||||||
\node[color=KITblue, right=0cm of c000] {$\left( 0, 0, 0 \right) $};
|
\draw[line width=1pt, color=KITblue] (c000) -- (c011);
|
||||||
\node[color=KITblue, above=0cm of c101] {$\left( 1, 0, 1 \right) $};
|
|
||||||
\node[color=KITblue, left=0cm of c110] {$\left( 1, 1, 0 \right) $};
|
% Polytope Annotations
|
||||||
\node[color=KITblue, left=-0.1cm of c011] {$\left( 0, 1, 1 \right) $};
|
|
||||||
\end{tikzpicture}
|
|
||||||
|
|
||||||
\caption{Codeword polytope of a single parity-check code}
|
\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}
|
||||||
|
\label{fig:}
|
||||||
|
\end{subfigure}
|
||||||
|
\end{subfigure} \hfill%
|
||||||
|
%
|
||||||
|
%
|
||||||
|
% Right side - relaxed polytope
|
||||||
|
%
|
||||||
|
%
|
||||||
|
\begin{subfigure}[c]{0.45\textwidth}
|
||||||
|
\centering
|
||||||
|
|
||||||
|
\begin{subfigure}{\textwidth}
|
||||||
|
\centering
|
||||||
|
|
||||||
|
\tikzstyle{codeword} = [color=KITblue, fill=KITblue,
|
||||||
|
draw, circle, inner sep=0pt, minimum size=4pt]
|
||||||
|
|
||||||
|
\tdplotsetmaincoords{60}{25}
|
||||||
|
\begin{tikzpicture}[scale=1, transform shape, 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
|
||||||
|
|
||||||
|
\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);
|
||||||
|
|
||||||
|
% Polytope Annotations
|
||||||
|
|
||||||
|
\node[color=KITblue, below=0cm of c000] {$\left( 0, 0, 0 \right) $};
|
||||||
|
\node[color=KITblue, right=0.17cm 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) $};
|
||||||
|
\end{tikzpicture}
|
||||||
|
|
||||||
|
\caption{Local codeword polytope of parity-check
|
||||||
|
$\begin{bmatrix} 1 & 1 & 1 \end{bmatrix}$}
|
||||||
|
\label{fig:}
|
||||||
|
\end{subfigure} \\[1em]
|
||||||
|
\begin{subfigure}{\textwidth}
|
||||||
|
\centering
|
||||||
|
|
||||||
|
\tikzstyle{codeword} = [color=KITblue, fill=KITblue,
|
||||||
|
draw, circle, inner sep=0pt, minimum size=4pt]
|
||||||
|
|
||||||
|
\tdplotsetmaincoords{60}{25}
|
||||||
|
\begin{tikzpicture}[scale=1, transform shape, 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
|
||||||
|
|
||||||
|
\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);
|
||||||
|
|
||||||
|
% 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) $};
|
||||||
|
\end{tikzpicture}
|
||||||
|
|
||||||
|
\caption{Local codeword polytope of parity-check
|
||||||
|
$\begin{bmatrix} 0 & 1 & 1 \end{bmatrix}$}
|
||||||
|
\end{subfigure}\\[1em]
|
||||||
|
\begin{subfigure}{\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=1, transform shape, 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
|
||||||
|
|
||||||
|
\draw[line width=1pt, color=KITblue] (c000) -- (c011);
|
||||||
|
\draw[line width=1pt, color=KITred] (cpseudo) -- (c000);
|
||||||
|
\draw[line width=1pt, color=KITred] (cpseudo) -- (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) $};
|
||||||
|
\node[color=KITred, right=0.03cm of cpseudo]
|
||||||
|
{$\left( 1, \frac{1}{2}, \frac{1}{2} \right) $};
|
||||||
|
\end{tikzpicture}
|
||||||
|
|
||||||
|
\caption{Relaxed codeword polytope}
|
||||||
|
\label{fig:}
|
||||||
|
\end{subfigure}
|
||||||
|
\end{subfigure}
|
||||||
|
|
||||||
|
\caption{Visualization of the codeword polytope and the relaxed codeword
|
||||||
|
polytope for an example code}
|
||||||
\label{fig:dec:poly}
|
\label{fig:dec:poly}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user