{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Semi-discrete Optimal Transport\n", "===============================\n", "\n", "$\\newcommand{\\dotp}[2]{\\langle #1, #2 \\rangle}$\n", "$\\newcommand{\\enscond}[2]{\\lbrace #1, #2 \\rbrace}$\n", "$\\newcommand{\\pd}[2]{ \\frac{ \\partial #1}{\\partial #2} }$\n", "$\\newcommand{\\umin}[1]{\\underset{#1}{\\min}\\;}$\n", "$\\newcommand{\\umax}[1]{\\underset{#1}{\\max}\\;}$\n", "$\\newcommand{\\umin}[1]{\\underset{#1}{\\min}\\;}$\n", "$\\newcommand{\\uargmin}[1]{\\underset{#1}{argmin}\\;}$\n", "$\\newcommand{\\norm}[1]{\\|#1\\|}$\n", "$\\newcommand{\\abs}[1]{\\left|#1\\right|}$\n", "$\\newcommand{\\choice}[1]{ \\left\\{ \\begin{array}{l} #1 \\end{array} \\right. }$\n", "$\\newcommand{\\pa}[1]{\\left(#1\\right)}$\n", "$\\newcommand{\\diag}[1]{{diag}\\left( #1 \\right)}$\n", "$\\newcommand{\\qandq}{\\quad\\text{and}\\quad}$\n", "$\\newcommand{\\qwhereq}{\\quad\\text{where}\\quad}$\n", "$\\newcommand{\\qifq}{ \\quad \\text{if} \\quad }$\n", "$\\newcommand{\\qarrq}{ \\quad \\Longrightarrow \\quad }$\n", "$\\newcommand{\\ZZ}{\\mathbb{Z}}$\n", "$\\newcommand{\\CC}{\\mathbb{C}}$\n", "$\\newcommand{\\RR}{\\mathbb{R}}$\n", "$\\newcommand{\\EE}{\\mathbb{E}}$\n", "$\\newcommand{\\Zz}{\\mathcal{Z}}$\n", "$\\newcommand{\\Ww}{\\mathcal{W}}$\n", "$\\newcommand{\\Vv}{\\mathcal{V}}$\n", "$\\newcommand{\\Nn}{\\mathcal{N}}$\n", "$\\newcommand{\\NN}{\\mathcal{N}}$\n", "$\\newcommand{\\Hh}{\\mathcal{H}}$\n", "$\\newcommand{\\Bb}{\\mathcal{B}}$\n", "$\\newcommand{\\Ee}{\\mathcal{E}}$\n", "$\\newcommand{\\Cc}{\\mathcal{C}}$\n", "$\\newcommand{\\Gg}{\\mathcal{G}}$\n", "$\\newcommand{\\Ss}{\\mathcal{S}}$\n", "$\\newcommand{\\Pp}{\\mathcal{P}}$\n", "$\\newcommand{\\Ff}{\\mathcal{F}}$\n", "$\\newcommand{\\Xx}{\\mathcal{X}}$\n", "$\\newcommand{\\Yy}{\\mathcal{Y}}$\n", "$\\newcommand{\\Mm}{\\mathcal{M}}$\n", "$\\newcommand{\\Ii}{\\mathcal{I}}$\n", "$\\newcommand{\\Dd}{\\mathcal{D}}$\n", "$\\newcommand{\\Ll}{\\mathcal{L}}$\n", "$\\newcommand{\\Tt}{\\mathcal{T}}$\n", "$\\newcommand{\\si}{\\sigma}$\n", "$\\newcommand{\\al}{\\alpha}$\n", "$\\newcommand{\\la}{\\lambda}$\n", "$\\newcommand{\\ga}{\\gamma}$\n", "$\\newcommand{\\Ga}{\\Gamma}$\n", "$\\newcommand{\\La}{\\Lambda}$\n", "$\\newcommand{\\si}{\\sigma}$\n", "$\\newcommand{\\Si}{\\Sigma}$\n", "$\\newcommand{\\be}{\\beta}$\n", "$\\newcommand{\\de}{\\delta}$\n", "$\\newcommand{\\De}{\\Delta}$\n", "$\\newcommand{\\phi}{\\varphi}$\n", "$\\newcommand{\\th}{\\theta}$\n", "$\\newcommand{\\om}{\\omega}$\n", "$\\newcommand{\\Om}{\\Omega}$\n", "$\\newcommand{\\eqdef}{\\equiv}$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This numerical tour studies semi-discrete optimal transport, i.e. when\n", "one of the two measure is discrete. \n", "\n", "The initial papers that proposed this approach are [Oliker89,Aurenhammer98]. We refer to [Mérigot11,Lévy15] for modern references and fast implementations.\n", "\n", "This tour is not inteded to show efficient\n", "algorithm but only conveys the main underlying idea (c-transform,\n", "Laguerre cells, connexion to optimal quantization).\n", "In the Euclidean case, there exists efficient algorithm to compute\n", "Laguerre cells leveraging computational geometry algorithm for convex\n", "hulls [Aurenhammer87]." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Dual OT and c-transforms\n", "------------------------\n", "The primal Kantorovitch OT problem reads\n", "$$W_c(\\al,\\be) = \\umin{\\pi} \\enscond{\\int_{\\Xx \\times \\Yy} c(x,y) \\text{d}\\pi(x,y)}{ \\pi_1=\\al,\\pi_2=\\be }.$$\n", "It dual is\n", "$$W_c(\\al,\\be) = \\umax{f,g} \\enscond{ \\int_\\Xx f \\text{d} \\al + \\int_\\Yy g \\text{d} \\be }{ f(x)+g(y) \\leq c(x,y) }.$$\n", "\n", "\n", "We consider the case where $\\al=\\sum_i a_i \\de_{x_i}$ is a discrete\n", "measure, so that the function $f(x)$ can be replaced by a vector\n", "$(f_i)_{i=1}^n \\in \\RR^n$. The optimal $g(y)$ function can the be\n", "replaced by the $c$-transform of $f$\n", "$$f^c(y) \\eqdef \\umin{i} c(x_i,y) - f_i.$$\n", "\n", "\n", "The function to maximize is then\n", "$$W_c(\\al,\\be) = \\umax{f \\in \\RR^n} \\Ee(f) \\eqdef \\sum_i f_i a_i + \\int f^c(y) \\text{d}\\be(y).$$\n", "\n", "Semi-discret via Gradient Ascent\n", "--------------------------------\n", "We now implement a gradient ascent scheme for the maximization of\n", "$\\Ee$. The evaluation of $\\Ee$) can be computed via the introduction\n", "of the partition of the domain in Laguerre cells\n", "$$\\Yy = \\bigcup_{i} L_i(f) \\qwhereq L_i(f) \\eqdef \\enscond{y}{ \\forall j,\n", " c(x_i,y) - f_i \\leq c(x_j,y) - f_j }.$$\n", "When $f=0$, this corrsponds to the partition in Voronoi cells.\n", "\n", "\n", "One has that $\\forall y \\in L_i(f)$, $f^c(y) = c(x_i,y) - f_i$, i.e. $f^c$ is piecewise smooth\n", "according to this partition.\n", "\n", "\n", "The grid for evaluation of the \"continuous measure\"." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "p = 300 # size of the image for sampling, m=p*p\n", "t = np.linspace(0, 1, p)\n", "[V, U] = np.meshgrid(t, t)\n", "Y = np.concatenate((U.flatten()[None, :], V.flatten()[None, :]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First measure, sums of Dirac masses $\\al = \\sum_{i=1}^n a_i \\de_{x_i}$." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "n = 30\n", "X = .5+.5j + np.exp(1j*np.pi/4) * 1 * \\\n", " (.1*(np.random.rand(1, n)-.5)+1j*(np.random.rand(1, n)-.5))\n", "X = np.concatenate((np.real(X), np.imag(X)))\n", "a = np.ones(n)/n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Second measure $\\be$, potentially a continuous one (i.e. with a density),\n", "mixture of Gaussians. Here we discretize $\\beta = \\sum_{j=1}^m b_j \\de_{y_j}$ on a very fine grid." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "def Gauss(mx, my, s): return np.exp((-(U-mx)**2-(V-my)**2)/(2*s**2))\n", "\n", "\n", "Mx = [.6, .4] # means\n", "My = [.9, .1]\n", "S = [.07, .09] # variance\n", "W = [.5, .5] # weights\n", "b = W[0]*Gauss(Mx[0], My[0], S[0]) + W[1]*Gauss(Mx[1], My[1], S[1])\n", "b = b/np.sum(b.flatten())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Display the two measures." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "