Skip to content

Commit d106d1e

Browse files
committed
add pdf
1 parent d9d5268 commit d106d1e

File tree

3 files changed

+66
-1
lines changed

3 files changed

+66
-1
lines changed

README.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
# santa17
1+
# santa17
2+
3+
This is my 2nd place solution for the Kaggle 2017 Santa competition (https://www.kaggle.com/c/santa-gift-matching).

paper.pdf

88.1 KB
Binary file not shown.

paper.tex

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
\documentclass{article}
2+
3+
\usepackage{xspace,amsmath,amssymb,amsthm,fullpage}
4+
5+
\newcommand{\R}{\mathbb{R}}
6+
7+
8+
\begin{document}
9+
10+
\section{Overview}
11+
12+
Instead of maximizing $(\sum \mathrm{ANCH})^3+(\sum \mathrm{ANSH})^3$, we maximized $M(\sum \mathrm{ANCH})+(\sum \mathrm{ANSH})$ for a very huge constant $M$.
13+
If we ignore the triple/twin constraints, the problem can be solved by using a minimum-cost flow algorithm.
14+
Using this relaxation lower bound, we solved the original problem by the branch-and-bound method.
15+
16+
\section{Details}
17+
18+
\subsection{Problem}
19+
20+
The problem can be formulated as follows.
21+
Given a bipartite graph $G=(U\cup V,E)$, an edge-weight function $w:E\to\R$, a multiplicity function $d:U\to\R_{> 0}$, and a capacity function $c:V\to\R_{> 0}$,
22+
find a minimum-weight subset $M\subseteq E$ satisfying (i) $|M\cap \delta(u)|=1$ and (ii) $\sum_{uv\in M\cap\delta(v)}d(u)=c(v)$.
23+
24+
\subsection{Relaxation}
25+
26+
The LP relaxation of this problem is the minimum-cost flow problem, which can be solved in polynomial time.
27+
More particularly, we construct a network as follows.
28+
Each edge $uv\in E$ has capacity $d(u)$ and cost $w(uv)/d(u)$.
29+
Each vertex $u\in U$ has supply $d(u)$, and each vertex $v\in V$ has demand $c(v)$.
30+
In the original problem, we have additional constraints that, for every edge $uv\in E$, its flow value must be either $0$ or $d(u)$.
31+
32+
\subsection{Branch and Bound}
33+
34+
For solving the original problem, we use a branch-and-bound method.
35+
For every node of the search tree, we do as follows.
36+
37+
First, we compute a relaxed solution by solving the minimum-cost flow problem (we implemented a cost-scaling algorithm by Goldberg and Tarjan).
38+
At the root node, we need to solve the relaxed problem from scratch, but for the other nodes, we can obtain a relaxed solution in $O(|E|\log |V|)$ time by modifying the relaxed solution for the parent node by searching an augmenting path.
39+
40+
If the obtained relaxed solution is larger than the solution for the original problem we have found so far, we quit the subsequent search and backtrack to the parent node.
41+
Otherwise, we choose an edge $uv$ whose flow value $f(uv)$ is neither $0$ nor $d(u)$.
42+
If there are no such edges, we obtain an improved solution for the original problem and backtrack to the parent node.
43+
Otherwise, we branch into two cases: $f(uv)=0$ or $f(uv)=d(u)$.
44+
In order to make the search space smaller, we compute a relaxed solution for every unsatisfying edge and choose the one with the largest lower bound.
45+
46+
\subsection{Reductions}
47+
48+
Because the input is very large, we cannot solve it directly.
49+
First, we remove all the edges of weight zero and relax the constraints (i) and (ii) to (i') $|M\cap \delta(u)|\leq 1$ and (ii') $\sum_{uv\in M\cap\delta(v)}d(u)\leq c(v)$.
50+
From the solution for this relaxed problem, we construct a solution for the original problem by solving the knapsack problem.
51+
52+
Second, we apply the reduced-cost fixing as follows.
53+
Let $D$ be the difference between a known upper bound and the current lower bound.
54+
Let $f$ be the minimum-cost flow and let $p:U\cup V\to\R$ be the dual variables (i.e., potentials).
55+
56+
For edge $uv\in E$ with $f(uv)<d(uv)$, the increase of the cost for fixing $f(uv)=d(u)$ is at least $(w(uv)+p(u)-p(v))(d(u)-f(uv))$.
57+
Therefore, if this value is larger than $D$, we can fix $f(uv)=0$.
58+
59+
For edge $uv\in E$ with $f(uv)>0$, the increase of the cost for fixing $f(uv)=0$ is at least $f(uv)\ell(u,v)$, where $\ell(u,v)$ is the shortest-path distance from $u$ to $v$ in the residual graph.
60+
Therefore, if this value is larger than $D$, we can fix $f(uv)=d(u)$.
61+
Because $|V|$ is small (1000), we can compute all the distances $\ell(u,v)$ by using the Dijkstra's algorithm against the reversed graph.
62+
63+
\end{document}

0 commit comments

Comments
 (0)