\documentclass[10pt]{article}
\usepackage{fullpage}
\usepackage[utf8x]{inputenc}
\usepackage{amsmath,amsfonts,amsthm}
\usepackage[english]{babel}
\usepackage[capitalize, noabbrev]{cleveref}
\usepackage{algorithm}
\usepackage{algpseudocode}

\newenvironment{enumerate*}%
  {\vspace{-2ex} \begin{enumerate} %
     \setlength{\itemsep}{-1ex} \setlength{\parsep}{0pt}}%
  {\end{enumerate}}
 
\newenvironment{itemize*}%
  {\vspace{-2ex} \begin{itemize} %
     \setlength{\itemsep}{-1ex} \setlength{\parsep}{0pt}}%
  {\end{itemize}}
 
\newenvironment{description*}%
  {\vspace{-2ex} \begin{description} %
     \setlength{\itemsep}{-1ex} \setlength{\parsep}{0pt}}%
  {\end{description}}

\DeclareMathOperator{\E}{\mathbb{E}}
\let\P\relax
\DeclareMathOperator{\P}{\mathbb{P}}
\newcommand{\ex}[1]{\E\left[#1\right]}
\newcommand{\prob}[1]{\P\left[#1\right]}
\newcommand{\inprod}[1]{\left\langle #1 \right\rangle}
\newcommand{\R}{\mathbf{R}}
\newcommand{\N}{\mathbf{N}}
\newcommand{\C}{\mathcal{C}}
\newcommand{\eps}{\varepsilon}
\newcommand{\eqdef}{\mathbin{\stackrel{\rm def}{=}}}
\newcommand{\llbracket}{[\![}

\newtheorem{theorem}{Theorem}
\newtheorem{lemma}{Lemma}

\author{Thibaut Horel}
\title{CS 224 Problem Set 4 -- Solutions}
\date{October 15, 2014}

\begin{document}
\maketitle

Collaborators: Jean Pouget-Abadie and Eric Balkanski

\section*{Problem 1}

Let $x$ (resp. $y$) be a solution to the primal (resp. the dual) such that $x$
and $y$ satisfy the approximate complementary slackness conditions. Then:
\begin{align*}
    c^T x &= \sum_i x_i c_i \leq \sum_i \alpha x_i (A^T)_i\cdot y\\
          &= \alpha\left(\sum_i x_i (A^T)_i\right)\cdot y
    = \alpha\left(Ax\right)\cdot y = \alpha\sum_j (A_j\cdot x)y_j\\
    &\leq \alpha\sum_j \beta b_jy_j = \alpha\beta b^Ty
\end{align*}
where we used the first approximate complementary slackness condition in the
first line. In the second line, we first used that the dot product is linear in
its first coordinate, then the definition of the matrix-vector product. Finally
we used the second complementary slackness condition in the last line.

\section*{Problem 2}

\paragraph{(a)} We introduce dual variables $\alpha_t$ for the constraints
$-x_{r(t)}^t \geq 0$, $\beta_i^t$ for the constraints $-x_i^t\geq -1$,
$\gamma_i^t$ for the constraints $z_i^t + x_i^t - x_i^{t+1} \geq 0$, and
$\delta_t$ for the constraint $\sum_i x_i^t\geq n-k$.

The dual can now be written:
\begin{align*}
    \max &\quad(n-k)\sum_{t=1}^T \delta_t - \sum_{t=1}^T\sum_{i=1}^n \beta_i^t \\
    \text{s.t.}&\quad\begin{aligned}
    \gamma_i^t & \leq 1&\forall\,1\leq i\leq n,\forall\,1\leq t\leq T\\
    \beta_i^t & \geq \delta_t + \gamma_i^{t+1} - \gamma_i^t&\forall\,1\leq
    t\leq T,\;\forall i\neq r(t)\\
    \beta_{r(t)}^t +\alpha_t& \geq \delta_t + \gamma_{r(t)}^{t+1}
    - \gamma_{r(t)}^t&\forall\,1\leq t\leq T\\
    \alpha_t,\beta_{i,t},\gamma_{i,t},\delta_t&\geq 0
\end{aligned}
\end{align*}
It is not hard to see that the third constraint can be removed without changing
the problem ($\alpha_t$ only appears in this constraint and can always be
chosen large enough so that it is satisfied).

\paragraph{(b)} We will use the dual variable $\gamma_i^t$ in the problem above
to keep track of whether or not page $i$ is marked at time $t$. When request
for page $i$ at time $t$ arrives:
\begin{enumerate*}
    \item if $i$ is in cache, mark it. Set $\gamma_i^t$ to 1 and keep all the
        other variables the same.
    \item if $i$ is not in cache and not all pages are marked. Evict an
        unmarked page, say $j$. We set $\gamma_i^t$, $x_j^t$ and $z_j^t$ to 1,
        and $\gamma_j^t$, $x_i^t$ and $z_i^t$ to 0.
    \item if $i$ is not in cache and all pages are marked. We unmark all
        pages. We set $\gamma_j^t$ to 0 for all $j\neq i$. We set $\delta_t$
        to 1. This forces to set $\beta_j^t$ to 1 for all pages outside the
        cache which are not $i$ to maintain dual feasibility.
\end{enumerate*}
We show that at time $t$, $P(t) \leq k D(t) + \big(\Phi(t) - \Phi(t-1)\big)$ in
all three cases above. $P(t)$ is simply one or zero depending on whether or not there
has been an eviction. $\Delta\Phi$ is the difference in the number of marked
pages:
\begin{enumerate*}
    \item $P(t) = 0$ (no eviction), $D(t) = 0$ and $\Delta\Phi = 1$ (one page
        marked). This is ok. 
    \item $P(t) = 1$ (one eviction), $D(t) = 0$ and $\Delta\Phi = 1$ (one page
        marked). This is still ok.
    \item $P(t) = 1$ (one eviction), $D(t) = (n-k) - (n-k-1) = 1$ (there are
        $n-k+1$ pages outside the cache which are not $i$) and $\Delta\phi = -k
        + 1$. This is again ok.
\end{enumerate*}

If we sum the previous inequality over $t$, we have $\sum_t P(t)$ on the
left-hand side, this is the cost of the $1$-bit LRU algorithm. On the right
hand side, we get $k\sum_t D(t) + \Phi(T) - \Phi(1)$. The difference in
potential is at most $k$, and $\sum_t D(t)$, the value of our dual solution is
less than the value of any feasible solution for the primal (weak duality) and
in particular the optimal integral solution $\text{OPT}$. Hence, we have proved
that the cost attained by $1$-bit LRU is bounded by $k\text{OPT} + k=
k(\text{OPT} +1)$

\section*{Problem 3}

\paragraph{(a)} We introduce a variable $x_v$ for each vertex indicating
whether or not we include it in the solution. The primal has the following
form:
\begin{align*}
    \min_{x\geq 0}&\quad \sum_{v\in V} c_v x_v\\
    \text{s.t.}&\quad x_u + x_v \geq 1,\quad \forall\,(u,v)\in E
\end{align*}
For the dual, we introduce one variable $y_e$ for each edge $e\in E$. The dual
can be written as:
\begin{align*}
    \max_{y\geq 0}&\quad \sum_{e\in E} y_e\\
    \text{s.t.}&\quad \sum_{e: v\in e} y_e\leq c_v,\quad\forall v\in E
\end{align*}

\paragraph{(b)} We propose the following algorithm. We iterate over all edges.
At each iteration we increase the dual variable of that edge until one or both
of the two dual constraints for its end points become tight. Whenever
a constraint becomes tight, we set the primal variable of its associated vertex
to 1.
\begin{algorithm}
    \begin{algorithmic}[1]
        \For{$e=(u,v)\in E$}
        \State $y_e \leftarrow \min(c_u-\sum_{e'\neq e:u\in e'}y_{e'},
            c_v-\sum_{e'\neq e:v\in e'}y_{e'})$
            \If{$c_u = \sum_{e'\neq e:u\in e' }y_{e'}$}
            \State $x_u\leftarrow 1$
            \EndIf
            \If{$c_v = \sum_{e'\neq e:v\in e' }y_{e'}$}
            \State $x_v\leftarrow 1$
            \EndIf
        \EndFor
    \end{algorithmic}
\end{algorithm}

It is easy to see that at the end of the algorithm we have both a primal
feasible and dual feasible solution (we never violate dual constraints, and at
each iteration of the algorithm, we satisfy a new primal constraint).

We can now conclude by observing that:
\begin{displaymath}
    2\sum_e y_e = \sum_{v\in V}\sum_{e:v\in e} y_e
    \geq \sum_v c_v x_v
\end{displaymath}
The equality comes from the fact that the double summation counts each edge
twice. The inequality comes from the fact that $x_v = 1$ implies that that the
associated dual constraint was tight, that is $c_v  = \sum_{e: v\in e} y_e$.

But by weak duality, $\sum_e y_e$ is smaller than any primal feasible solution,
and in particular the optimal integral solution. Hence $\sum_e y_e\leq
\text{OPT}$. This concludes the proof.

\section*{Problem 4}

\paragraph{(a)} We take a graph with three vertices $(s,u,v)$ with $L(s,u)
= 1$, $L(s, v) = 2$ and $L(u,v) = 1$. Let us denote by $x = f_{s,v}$, $y
= f_{s,u}$ and $z = f_{u,v}$. The minimum flow problem can be written as:
\begin{align*}
    \min&\quad 2x + y + z\\
    \text{s.t.}&\quad x +y=2,\; z= y-1,\; x+z=1
\end{align*}
By substitution in the objective function. We see that all feasible flows have
the same value 3. Thus every feasible solution is optimal. As a consequence,
the fractional solution $x =\frac{1}{2}, y = \frac{3}{2}, z =\frac{1}{2}$ is
optimal and has the same value as the integral solution $x = 1, y = 1, z=0$ (the
other integral solution is $x=0, y=1, z=1$).

\paragraph{(b)} We introduce a dual variable $p_v$ for each vertex. The dual
problem can be written:
\begin{align*}
    \max&\quad \sum_{v\neq s} d_v - (n-1) d_s\\
    \text{s.t}&\quad d_v - d_u \leq L(u,v),\quad \forall (u,v)\in E
\end{align*}
Note that the dual variables are unrestricted because of the equality
constraints in the primal.

\paragraph{(c)} We will follow the execution of Dijkstra's algorithm while
maintaining an integral primal and dual solution.  We will maintain the
following two properties throughout the execution:
\begin{itemize*}
    \item $f_{u,v}$ is the flow travelling along the edge ${u,v}$ in the tree
        constructed by Dijkstra's algorithm thus far: the flow constraints
        impose that this is the number of descendants of $v$ (including $v$)
        in the tree.
    \item $d_v$ is the distance from $s$ to $v$ in the tree constructed thus far.
\end{itemize*}

At the beginning, we set $f_{u,v} = 0$ for all $(u,v)\in E$, $d_s = 0$ and $d_v
= +\infty$ for all $v$. Let us consider a step of Dijkstra's algorithm where we
are examining edge $(u,v)$ in $E$. If $p_v> p_u + L(u,v)$ then:
\begin{enumerate}
    \item set $p_v = p_u + L(u,v)$ and set $f_{u,v} = 1$
    \item add $-1$ to $f_e$ for all edges $e$ in the previous path from $s$
        to $v$ in the tree, prior to the addition of edge $(u,v)$.
    \item add +1 to $f_e$ for all edges $e$ in the path from $s$
        to $v$ in the tree after the addition of edge $(u,v)$.
\end{enumerate}

If we denote by $G'$ the graph induced by all the edges examined thus far
(including $(u,v)$), then we have the following properties:
\begin{enumerate}
    \item $\sum_{e\in E(G')} L(e)f_e = \sum_{v\in G'} d_v$. Indeed, on the
        left-hand side, we are counting each edge in the tree constructed so
        far with multiplicity equal to the number of its descendants: for each
        vertex $v$ in the tree, we are adding $1$ for all edges on the path from
        $s$ to $v$. This gives the right-hand side.
    \item the (primal) flow constraints are satisfied for all edges in $E(G')$.
    \item the (dual) constraints are satisfied for all vertices in $V(G')$.
\end{enumerate}
As we can see, these properties are simple consequences of the fact that
Dijkstra's algorithm is maintaining a tree which is optimal for the set of
edges already examined and the fact that we update the primal and dual
variables to reflect the tree constructed by Dijkstra's algorithm.

At the end of the execution of Dijsktra's algorithm, we know that all the edges
have been examined. The three properties above imply:
\begin{enumerate}
    \item the primal and dual solutions are equal
    \item the primal solution is feasible
    \item the dual solution is feasible
\end{enumerate}

By weak duality, this implies that both solutions are optimal and in particular
that Dikstra's algorithm is correct.

\section*{Problem 5}

Problem 1: 20min, Problem 2: 2h, Problem 3: 1h30, Problem 4: 2h.
\textbf{Total:} 6h
\end{document}
