{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "QxqqvnB6Fx3V" }, "source": [ "# Dualidad en transporte óptimo\n", "\n", "En este cuaderno exploraremos computacionalmente la **dualidad de Kantorovich**.\n", "\n", "Este cuaderno acompaña los **Capítulos 3 a 6** de las notas (*dualidad en programación lineal*, *dualidad de Kantorovich*, *potenciales en el caso discreto* y *potenciales de Kantorovich*). Resolvemos numéricamente el problema primal y el dual para medidas discretas, verificamos las restricciones duales y su saturación sobre el soporte del plan óptimo, calculamos las $c$-transformadas, y después estudiamos con ejemplos pequeños la unicidad de los potenciales, la iteración de mejora de potenciales y el costo $0$--$1$. Los **ejercicios computacionales** están al final y sus enunciados figuran también en las notas.\n", "\n", "\n", "Partimos de un problema de transporte entre dos medidas discretas\n", "$$\n", "\\mu=\\sum_{i=1}^n a_i\\delta_{x_i},\n", "\\qquad\n", "\\nu=\\sum_{j=1}^n b_j\\delta_{y_j},\n", "$$\n", "y consideramos el problema primal de Kantorovich\n", "$$\n", "\\min_{\\pi\\in\\Pi(\\mu,\\nu)}\n", "\\sum_{i,j} c_{ij}\\pi_{ij},\n", "$$\n", "donde\n", "$$\n", "c_{ij}=c(x_i,y_j).\n", "$$\n", "\n", "La teoría de dualidad nos dice que este problema puede formularse\n", "también mediante el problema dual\n", "$$\n", "\\max_{\\varphi,\\psi}\n", "\\left\\{\n", "\\sum_i a_i\\varphi_i+\\sum_j b_j\\psi_j\n", ":\n", "\\varphi_i+\\psi_j\\leq c_{ij}\n", "\\right\\}.\n", "$$\n", "\n", "En este notebook resolveremos ambos problemas numéricamente y\n", "compararemos sus valores óptimos. Luego utilizaremos los potenciales\n", "duales para explorar algunas de las propiedades que aparecen en la\n", "teoría." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "cellView": "form", "colab": { "base_uri": "https://localhost:8080/" }, "collapsed": true, "executionInfo": { "elapsed": 8071, "status": "ok", "timestamp": 1787227572493, "user": { "displayName": "Julian Fernandez Bonder", "userId": "01548826079249958852" }, "user_tz": 180 }, "id": "y0jVLr3WSgJP", "outputId": "c856e4d2-681b-489c-cc44-226045094f0c" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Collecting POT\n", " Downloading pot-0.9.7.post1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (44 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m44.2/44.2 kB\u001b[0m \u001b[31m1.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: numpy>=1.16 in /usr/local/lib/python3.12/dist-packages (from POT) (2.0.2)\n", "Requirement already satisfied: scipy>=1.6 in /usr/local/lib/python3.12/dist-packages (from POT) (1.16.3)\n", "Downloading pot-0.9.7.post1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (32.9 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m32.9/32.9 MB\u001b[0m \u001b[31m63.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hInstalling collected packages: POT\n", "Successfully installed POT-0.9.7.post1\n" ] } ], "source": [ "# @title\n", "pip install POT" ] }, { "cell_type": "markdown", "metadata": { "id": "h3M8HEBcGm7M" }, "source": [ "## 1. Resolución del problema primal\n", "\n", "Comenzamos con el problema de transporte entre las medidas discretas\n", "$$\n", "\\mu=\\sum_{i=1}^n a_i\\delta_{x_i},\n", "\\qquad\n", "\\nu=\\sum_{j=1}^n b_j\\delta_{y_j},\n", "$$\n", "que ya utilizamos en el notebook anterior.\n", "\n", "En este ejemplo tomamos como función de costo\n", "$$\n", "c(x,y)=|x-y|^2.\n", "$$\n", "\n", "Construimos la matriz de costos\n", "$$\n", "c_{ij}=c(x_i,y_j)=|x_i-y_j|^2.\n", "$$\n", "\n", "El problema primal de Kantorovich consiste en encontrar una matriz\n", "$$\n", "\\pi=(\\pi_{ij})_{i,j=1}^n\n", "$$\n", "que satisfaga las condiciones de marginalidad\n", "$$\n", "\\sum_j\\pi_{ij}=a_i,\n", "\\qquad\n", "\\sum_i\\pi_{ij}=b_j,\n", "$$\n", "y que minimice el costo total\n", "$$\n", "\\sum_{i,j}c_{ij}\\pi_{ij}.\n", "$$\n", "\n", "Utilizamos la función `ot.emd` de la biblioteca **POT** para calcular\n", "numéricamente un plan de transporte óptimo $\\pi$.\n", "\n", "Finalmente, calculamos el valor óptimo del problema primal:\n", "$$\n", "\\min_{\\pi\\in\\Pi(\\mu,\\nu)}\n", "\\sum_{i,j}c_{ij}\\pi_{ij}.\n", "$$" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "cellView": "form", "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 16748, "status": "ok", "timestamp": 1787227592318, "user": { "displayName": "Julian Fernandez Bonder", "userId": "01548826079249958852" }, "user_tz": 180 }, "id": "Z9skb-BSSXAw", "outputId": "a06fa747-6eda-4ccd-e727-3ec74b9790ed" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Valor óptimo primal = 0.039025\n" ] } ], "source": [ "# @title\n", "import numpy as np\n", "import ot\n", "from scipy.spatial.distance import cdist\n", "\n", "# ==========================================================\n", "# Datos\n", "# ==========================================================\n", "\n", "np.random.seed(3)\n", "\n", "n = 20\n", "\n", "X = np.random.rand(n,2)\n", "Y = np.random.rand(n,2)\n", "\n", "a = np.random.rand(n)\n", "a /= a.sum()\n", "\n", "b = np.random.rand(n)\n", "b /= b.sum()\n", "\n", "# Costo cuadrático\n", "C = cdist(X, Y, metric=\"sqeuclidean\")\n", "\n", "# ==========================================================\n", "# Plan óptimo primal\n", "# ==========================================================\n", "\n", "pi = ot.emd(a, b, C)\n", "\n", "primal_cost = np.sum(pi*C)\n", "\n", "print(f\"Valor óptimo primal = {primal_cost:.6f}\")" ] }, { "cell_type": "markdown", "metadata": { "id": "JJjjEIgOG7Vd" }, "source": [ "## 2. Resolución del problema dual\n", "\n", "Ahora resolvemos numéricamente el problema dual de Kantorovich asociado\n", "al problema de transporte anterior.\n", "\n", "En el caso discreto, el problema dual consiste en encontrar dos familias\n", "de números\n", "$$\n", "\\varphi_1,\\ldots,\\varphi_n,\n", "\\qquad\n", "\\psi_1,\\ldots,\\psi_n,\n", "$$\n", "que maximicen\n", "$$\n", "\\sum_i a_i\\varphi_i+\\sum_j b_j\\psi_j\n", "$$\n", "sujeto a las restricciones\n", "$$\n", "\\varphi_i+\\psi_j\\leq c_{ij},\n", "\\qquad\n", "1\\leq i,j\\leq n.\n", "$$\n", "\n", "Los números $\\varphi_i$ y $\\psi_j$ son los valores de los\n", "**potenciales de Kantorovich** en los puntos $x_i$ e $y_j$,\n", "respectivamente.\n", "\n", "Para resolver este problema utilizamos `scipy.optimize.linprog`.\n", "Como esta función está formulada para minimizar una función lineal,\n", "resolvemos el negativo del funcional objetivo:\n", "$$\n", "-\\sum_i a_i\\varphi_i-\\sum_j b_j\\psi_j.\n", "$$\n", "\n", "Las restricciones del problema dual se escriben como un sistema de\n", "desigualdades lineales\n", "$$\n", "\\varphi_i+\\psi_j\\leq c_{ij}.\n", "$$\n", "\n", "No imponemos restricciones de signo sobre los potenciales:\n", "los valores $\\varphi_i$ y $\\psi_j$ pueden ser positivos o negativos.\n", "\n", "Una vez resuelto el problema, obtenemos los potenciales óptimos\n", "$\\varphi$ y $\\psi$ y calculamos el valor óptimo del problema dual:\n", "$$\n", "\\max_{\\varphi,\\psi}\n", "\\left\\{\n", "\\sum_i a_i\\varphi_i+\\sum_j b_j\\psi_j\n", ":\n", "\\varphi_i+\\psi_j\\leq c_{ij}\n", "\\right\\}.\n", "$$" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "cellView": "form", "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 32, "status": "ok", "timestamp": 1787227618026, "user": { "displayName": "Julian Fernandez Bonder", "userId": "01548826079249958852" }, "user_tz": 180 }, "id": "w08HFv29SKgI", "outputId": "73b5ec7f-0872-4d94-95f1-2ef58de16dfa" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Valor óptimo del problema dual = 0.039025\n" ] } ], "source": [ "# @title\n", "import numpy as np\n", "from scipy.optimize import linprog\n", "\n", "# ==========================================================\n", "# Problema dual de Kantorovich\n", "# ==========================================================\n", "\n", "# Variables:\n", "# phi_1,...,phi_n, psi_1,...,psi_n\n", "\n", "# Función objetivo:\n", "# maximizar sum_i a_i phi_i + sum_j b_j psi_j\n", "#\n", "# scipy.optimize.linprog minimiza, por lo que usamos el negativo.\n", "\n", "c_dual = -np.concatenate((a, b))\n", "\n", "# Restricciones:\n", "# phi_i + psi_j <= C_ij\n", "\n", "A_ub = np.zeros((n*n, 2*n))\n", "b_ub = np.zeros(n*n)\n", "\n", "k = 0\n", "\n", "for i in range(n):\n", " for j in range(n):\n", "\n", " A_ub[k, i] = 1\n", " A_ub[k, n+j] = 1\n", "\n", " b_ub[k] = C[i,j]\n", "\n", " k += 1\n", "\n", "# Sin restricciones de signo:\n", "# los potenciales pueden ser positivos o negativos.\n", "\n", "bounds = [(None, None)]*(2*n)\n", "\n", "# Resolver\n", "result = linprog(\n", " c_dual,\n", " A_ub=A_ub,\n", " b_ub=b_ub,\n", " bounds=bounds,\n", " method=\"highs\"\n", ")\n", "\n", "phi = result.x[:n]\n", "psi = result.x[n:]\n", "\n", "dual_cost = -result.fun\n", "\n", "print(f\"Valor óptimo del problema dual = {dual_cost:.6f}\")" ] }, { "cell_type": "markdown", "metadata": { "id": "wTpAY2HYJ7Jo" }, "source": [ "## 3. Visualización de los potenciales duales\n", "\n", "Una vez resuelto el problema dual, podemos visualizar los potenciales\n", "óptimos $\\varphi$ y $\\psi$ sobre los puntos de origen $x_i$ y destino\n", "$y_j$.\n", "\n", "Cada punto se colorea de acuerdo con el valor del potencial correspondiente." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "cellView": "form", "colab": { "base_uri": "https://localhost:8080/", "height": 386 }, "executionInfo": { "elapsed": 704, "status": "ok", "timestamp": 1787231758511, "user": { "displayName": "Julian Fernandez Bonder", "userId": "01548826079249958852" }, "user_tz": 180 }, "id": "T0hI52uUJB1J", "outputId": "1900baa1-2ca7-43cb-d932-f5127ac0b64b" }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAFxCAYAAABuj8s6AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAordJREFUeJzs3XlcVOX+B/DPOcMybAOyu6C4JbiioIhLmlJQZpFkapZLXm3DTPq1XlOv3hveUtPS4nbLNiXMSq00bohpqagJ7luu4cYmAgLCwJzz+0OZmgCZfRj4vF+vU8yZ5znneyjmzPc8myDLsgwiIiIiIiIiMjvR1gEQERERERERNVdMuomIiIiIiIgshEk3ERERERERkYUw6SYiIiIiIiKyECbdRERERERERBbCpJuIiIiIiIjIQph0ExEREREREVkIk24iIiIiIiIiC2HSTURERERERGQhTLqJiIiIiIiILIRJNxEREREREZGFMOkmMtAnn3wCQRBw/vx5q9YlIiIiIiL7w6SbzK42sazdlEol7rjjDiQkJCAvL8/g4+3atQvz589HcXGx+YMlIiIiIiKyICbdZDELFizA559/jhUrVmDQoEF4//33ERUVhYqKCoOOs2vXLvzjH/9oMkn3448/jhs3bqBDhw62DoWIiIiIiJo4Jt1kMffeey8ee+wx/O1vf8Mnn3yC559/HufOncPGjRttHZpJFAoFlEolBEGwdShERERUDw4FI6KmhEk3Wc2IESMAAOfOndPu279/P+69916oVCq4u7tj5MiR2L17t/b9+fPn48UXXwQAdOzYUdtlvfZGeOnSJTzxxBMICAiAs7MzevTogVWrVumcd/78+RAEAadPn8aUKVPg5eUFT09PTJ06td5W90uXLmHatGlo06YNnJ2d0bFjRzz99NNQq9UA6r8Z//7773jmmWfQrVs3uLi4wMfHB2PHjjX5hn38+HHExcXh+++/x4oVK+Dv74927drhm2++Mem4RETUsnEoGBGR9TjYOgBqOc6cOQMA8PHxAQAcPXoUQ4cOhUqlwksvvQRHR0f85z//wfDhw7F9+3ZERkZizJgx+O233/DFF1/g7bffhq+vLwDAz88PeXl5GDhwIARBQEJCAvz8/PDDDz9g2rRpKC0txfPPP69z/kceeQQdO3ZEUlISsrOz8eGHH8Lf3x///ve/tWUuX76M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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# @title\n", "import matplotlib.pyplot as plt\n", "from mpl_toolkits.axes_grid1 import make_axes_locatable\n", "\n", "# ==========================================================\n", "# Visualización de los potenciales duales\n", "# ==========================================================\n", "\n", "fig, axs = plt.subplots(1, 2, figsize=(10, 4))\n", "\n", "# ----------------------------------------------------------\n", "# Potencial phi sobre los puntos de origen\n", "# ----------------------------------------------------------\n", "\n", "sc1 = axs[0].scatter(\n", " X[:,0], X[:,1],\n", " c=phi,\n", " s=100,\n", " cmap=\"viridis\"\n", ")\n", "\n", "axs[0].set_aspect(\"equal\")\n", "axs[0].set_xticks([])\n", "axs[0].set_yticks([])\n", "axs[0].set_title(r\"Potencial $\\varphi$\")\n", "\n", "divider = make_axes_locatable(axs[0])\n", "cax1 = divider.append_axes(\"right\", size=\"5%\", pad=0.1)\n", "fig.colorbar(sc1, cax=cax1, label=r\"$\\varphi_i$\")\n", "\n", "# ----------------------------------------------------------\n", "# Potencial psi sobre los puntos de destino\n", "# ----------------------------------------------------------\n", "\n", "sc2 = axs[1].scatter(\n", " Y[:,0], Y[:,1],\n", " c=psi,\n", " s=100,\n", " cmap=\"viridis\"\n", ")\n", "\n", "axs[1].set_aspect(\"equal\")\n", "axs[1].set_xticks([])\n", "axs[1].set_yticks([])\n", "axs[1].set_title(r\"Potencial $\\psi$\")\n", "\n", "divider = make_axes_locatable(axs[1])\n", "cax2 = divider.append_axes(\"right\", size=\"5%\", pad=0.1)\n", "fig.colorbar(sc2, cax=cax2, label=r\"$\\psi_j$\")\n", "\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "id": "08VVeUQ2Uh61" }, "source": [ "## 4. Verificación de las restricciones duales\n", "\n", "Los potenciales $\\varphi$ y $\\psi$ obtenidos al resolver el problema\n", "dual deben satisfacer, para todo par de puntos $(x_i,y_j)$, la restricción\n", "$$\n", "\\varphi_i+\\psi_j\\leq c_{ij}.\n", "$$\n", "\n", "Para verificarlo numéricamente, definimos la **holgura dual**\n", "$$\n", "R_{ij}=c_{ij}-\\varphi_i-\\psi_j.\n", "$$\n", "\n", "La factibilidad del par $(\\varphi,\\psi)$ implica entonces que\n", "$$\n", "R_{ij}\\geq 0\n", "$$\n", "para todos $i,j$.\n", "\n", "En la práctica, debido a los errores de redondeo, la holgura mínima\n", "puede presentar un pequeño valor negativo. Valores de este orden\n", "corresponden a cero dentro de la precisión numérica.\n", "\n", "Visualizaremos la matriz $R$ para comprobar que las restricciones\n", "duales se satisfacen y analizar su estructura." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "cellView": "form", "colab": { "base_uri": "https://localhost:8080/", "height": 542 }, "executionInfo": { "elapsed": 671, "status": "ok", "timestamp": 1787231906818, "user": { "displayName": "Julian Fernandez Bonder", "userId": "01548826079249958852" }, "user_tz": 180 }, "id": "p-7TH4-nUmLE", "outputId": "9232e514-24c7-4692-ca1b-a3f990f580b0" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Holgura mínima = -5.55e-17\n", "Holgura máxima = 1.24\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkgAAAHqCAYAAAD/IrHXAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAVHlJREFUeJzt3Xt8FOXd9/HvJpBNAkkACTlA5Hw+BASJiFSokYAWxbao6C2IiI9IWm1qtfgoAbHGekBsRVAroLcPgljFtnBjgdtgKShCiBxEBASCQMJByQlIyO48f9Bs3c05uZJNpp/36zWvFzt7zW+u2dkkP37XNTMOy7IsAQAAwCPA3x0AAABobEiQAAAAfJAgAQAA+CBBAgAA8EGCBAAA4IMECQAAwAcJEgAAgA8SJAAAAB8kSAAAAD5IkAAAAHyQIKFRWLp0qRwOhw4fPuzvrjS42bNny+Fw1Os+/pM/XwCoDRIk1EjpH9pt27aV+/7IkSPVr1+/Bu4VGquPPvpIDofDszRv3lzdunXT7NmzVVxc7O/uSZL27t2r6dOnq1u3bgoNDVVYWJiGDx+uhQsXqqSkxN/dA+AnzfzdAQD29cUXX0iS5s2bp8jISJ07d04rV67UnDlzVFRUpLS0NL/279VXX9Uvf/lLtW7dWnfddZd69Oih3Nxc/fWvf9UDDzygwsJCPfzww37tIwD/IEHCf7zCwkK1aNHC392wpZ07dyo4OFi//OUvFRgYKEm6++671bFjR61YscKvCdKyZcs0ffp03XjjjVq+fLnXd+Dhhx/WsmXL1LZtW7/1D4B/McSGerdjxw6NHTtW4eHhatmypa677jp9+umn1do2PT1dQ4YMUXBwsLp27apXX321zJydu+++W506dSqzbXlze0rXffnll7rjjjvUunVrXXPNNZKkI0eO6IEHHlDPnj0VEhKiyy67TBMmTCgzbyc/P18PPfSQOnXqJKfTqXbt2un6669XRkZGlcezadMmXXnllV7H46smx1PdPlfk2LFjuueeexQVFSWn06m+fftq8eLFxo73iy++UN++fT3JkSQFBQUpNjZWubm51epjfcjOztaMGTPUp08fvffee+UmyHfccYdGjx7th95dsnfvXo0fP15/+9vf9PLLL6tdu3bq0KGD3n///Qbrg2VZatmypX79619Lkr7++ms5HA6tXLlSkvTWW2/J4XBo//79DdYnoKFQQUKt5Obm6vTp02XWX7x40ev1nj17NGLECIWHh+uRRx5R8+bN9eqrr2rkyJHauHGjEhISKtzHjh07NGbMGMXExGjOnDlyuVx68sknFRkZWef+T5gwQd27d9fTTz8ty7IkSZ9//rk2b96s22+/XR06dNDhw4e1cOFCjRw5Ul9++aVCQ0MlSffff7/ee+89JScnq0+fPjpz5ow2bdqkvXv36oorrqhwn7t27dLo0aMVGRmp2bNnq6SkRKmpqYqKiqr1cVS3z+XJycnRVVddJYfDoeTkZEVGRup//ud/NHXqVOXl5emhhx6q0/EWFxdr3759uuuuu7zWHz9+XF9++aWuvfbaWh3zxYsXq51ctWnTRgEBZf8f+NJLL+ns2bN655135HQ6a9WP+pSenq4bbrjBk/g++OCDeuCBB7R27VrdcccdOnDggDp06FDv/fjmm29UWFio/v37S7r0HZbk9TokJERdu3at974ADc4CamDJkiWWpEqXvn37etqPHz/eCgoKsg4ePOhZd/z4cSssLMz60Y9+VCbuoUOHPOvGjRtnhYaGWseOHfOs279/v9WsWTPrh1/dyZMnWx07dizT19TUVMv3K166buLEiWXanzt3rsy6LVu2WJKst956y7MuIiLCmjFjRgWfUMXGjx9vBQcHW0eOHPGs+/LLL63AwMBaH091+1ze5zt16lQrJibGOn36tNf2t99+uxUREeGJXdvj3bFjhyXJmjt3rnXq1Cnr+PHj1tq1a634+HirRYsW1ueff17jmJZlWR9//HGV38HS5YfH+0OxsbFWXFyc5XK5atWH+lRYWGi1b9/e6tWrl1VQUGDNnTvXCg4OtoqKiqzly5dbkqzXX3+9QfqyatUqS5K1bds2y7IufQedTqdVUlJiWZZljRkzxhoyZEiD9AVoaFSQUCsLFixQjx49yqz/9a9/LZfLJUlyuVz6+9//rvHjx6tLly6eNjExMbrjjjv0+uuvKy8vT+Hh4WXiuFwurV+/XrfccotiY2M967t166axY8fqr3/9a536f//995dZFxIS4vn3xYsXlZeXp27duqlVq1bKyMjwVEJatWqlzz77TMePH/fqW2VcLpc++ugjjR8/Xpdffrlnfe/evZWUlKQ1a9bU6jiq22dflmXpz3/+s2699VZZluVVDUxKStLy5cuVkZGh4cOH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VNivxnpOSr3xxhsaPHiw4uPja7xtYz0naIT8PUu8sVu+fLnldDqtpUuXWl9++aV13333Wa1atbKys7Mty7Ksu+66y/rtb3/raf/Pf/7TatasmfX8889be/futVJTU63mzZtbu3bt8tchWJZlWdOnT7ciIiKs9PR068SJE57l3Llznja+xzJnzhzro48+sg4ePGht377duv32263g4GBrz549/jgEy7Is69e//rWVnp5uHTp0yPrnP/9pJSYmWm3btrVOnjxpWVbTOR+WdemqoMsvv9x69NFHy7zXmM9Ffn6+tWPHDmvHjh2WJGvevHnWjh07PFd3PfPMM1arVq2sDz/80Nq5c6d18803W507d7bOnz/vifHjH//Y+uMf/+h5XdXPWUMfR3FxsXXTTTdZHTp0sDIzM71+ZoqKiio8jqq+n/44lvz8fOvhhx+2tmzZYh06dMhav369dcUVV1jdu3e3Lly4UOGxNLZzUio3N9cKDQ21Fi5cWG6MxnJO0PSRIFXDH//4R+vyyy+3goKCrKFDh1qffvqp571rr73Wmjx5slf7d9991+rRo4cVFBRk9e3b11q9enUD97gsSeUuS5Ys8bTxPZaHHnrIc9xRUVHWDTfcYGVkZDR853/gtttus2JiYqygoCCrffv21m233WYdOHDA835TOR+WZVkfffSRJcnat29fmfca87n4+OOPy/0ulfbX7XZbTzzxhBUVFWU5nU7ruuuuK3OMHTt2tFJTU73WVfZz1tDHcejQoQp/Zj7++OMKj6Oq76c/juXcuXPW6NGjrcjISKt58+ZWx44drWnTppVJdBr7OSn16quvWiEhIdbZs2fLjdFYzgmaPodlWVa9lqgAAACaGOYgAQAA+CBBAgAA8EGCBAAA4IMECQAAwAcJEgAAgA8SJAAAAB8kSAAAAD5IkAAAAHyQIAEAAPggQQIAAPBBggSgTn7zm99o3Lhx/u4GABjFs9gA1MnZs2cVGBiosLAwf3cFAIwhQQIAAPDBEBuAWjt9+rQcDod2797t764AgFEkSABq7YsvvpDT6VSvXr383RUAMIoECUCtffHFF+rbt6+aNWvm764AgFEkSABqLTMzUwMHDvR3NwDAOBIkALX2xRdfKD4+3t/dAADjSJAA1EpxcbH27t1LggTAlkiQANTK3r17dfHiRRIkALZEggSgVjIzM9WxY0e1atXK310BAONIkADUyueff66hQ4f6uxsAUC9IkADUyIULF7R9+3b9+c9/VlJSkr+7AwD1ggQJQI3Mnz9fiYmJuvnmmzVp0iR/dwcA6gXPYgMAAPBBBQkAAMAHCRIAAIAPEiQAAAAfJEgAAAA+SJAAAAB8kCABAAD4IEECAADwQYIEAADggwQJAADABwkSAACADxIkAAAAH/8fvfCTB9xJyQAAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# @title\n", "import matplotlib.pyplot as plt\n", "\n", "# ==========================================================\n", "# Holguras de las restricciones duales\n", "# ==========================================================\n", "\n", "R = C - phi[:, None] - psi[None, :]\n", "\n", "print(f\"Holgura mínima = {R.min():.2e}\")\n", "print(f\"Holgura máxima = {R.max():.2f}\")\n", "\n", "# ==========================================================\n", "# Visualización\n", "# ==========================================================\n", "\n", "plt.figure(figsize=(6,5))\n", "\n", "im = plt.imshow(\n", " R,\n", " origin=\"lower\",\n", " aspect=\"auto\",\n", " cmap=\"viridis\"\n", ")\n", "\n", "plt.xlabel(r\"$j$\")\n", "plt.ylabel(r\"$i$\")\n", "plt.title(r\"Holguras duales $R_{ij}=C_{ij}-\\varphi_i-\\psi_j$\")\n", "\n", "plt.colorbar(im, label=r\"$R_{ij}$\")\n", "\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "id": "_slt7FqmVylg" }, "source": [ "## 5. Saturación de las restricciones duales\n", "\n", "La dualidad fuerte establece que el valor óptimo del problema primal\n", "coincide con el del problema dual. Pero, para un plan óptimo $\\pi$ y\n", "unos potenciales duales óptimos $\\varphi,\\psi$, existe además una\n", "relación más precisa entre ambas soluciones.\n", "\n", "Recordemos que las restricciones duales son\n", "$$\n", "\\varphi_i+\\psi_j\\leq c_{ij},\n", "$$\n", "o, equivalentemente,\n", "$$\n", "R_{ij}=c_{ij}-\\varphi_i-\\psi_j\\geq 0.\n", "$$\n", "\n", "Por otro lado, si $\\pi_{ij}>0$, entonces en un par óptimo\n", "$(\\pi,\\varphi,\\psi)$ debe cumplirse\n", "$$\n", "\\varphi_i+\\psi_j=c_{ij}.\n", "$$\n", "Es decir, las restricciones duales se **saturan sobre el soporte del\n", "plan óptimo**:\n", "$$\n", "\\pi_{ij}>0\n", "\\quad\\Longrightarrow\\quad\n", "R_{ij}=0.\n", "$$\n", "\n", "Esta es la versión discreta de la condición\n", "$$\n", "\\varphi(x)+\\psi(y)=c(x,y)\n", "\\qquad \\pi^*\\text{-c.t.p.}\n", "$$\n", "\n", "En la siguiente celda verificaremos numéricamente esta propiedad,\n", "calculando las holguras únicamente en aquellos pares $(i,j)$ para los\n", "cuales el plan óptimo transporta una cantidad positiva de masa." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "cellView": "form", "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 48, "status": "ok", "timestamp": 1787232253376, "user": { "displayName": "Julian Fernandez Bonder", "userId": "01548826079249958852" }, "user_tz": 180 }, "id": "LgTpOnTdVzef", "outputId": "134fd165-6345-4b74-c208-050ba8603edb" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Número de pares con pi_ij > 1e-10: 39\n", "Máxima holgura sobre el soporte de pi = 5.55e-17\n" ] } ], "source": [ "# @title\n", "# ==========================================================\n", "# Saturación sobre el soporte del plan óptimo\n", "# ==========================================================\n", "\n", "threshold = 1e-10\n", "\n", "# Pares (i,j) donde el plan óptimo transporta masa\n", "mask = pi > threshold\n", "\n", "# Holguras sobre el soporte de pi\n", "R_support = R[mask]\n", "\n", "print(f\"Número de pares con pi_ij > {threshold}: {len(R_support)}\")\n", "print(\n", " f\"Máxima holgura sobre el soporte de pi = \"\n", " f\"{np.max(np.abs(R_support)):.2e}\"\n", ")" ] }, { "cell_type": "markdown", "metadata": { "id": "aZplLhAfWkZK" }, "source": [ "## 6. Visualización de la saturación\n", "\n", "Podemos visualizar conjuntamente las holguras duales y el soporte del\n", "plan óptimo.\n", "\n", "El mapa de calor representa la matriz\n", "$$\n", "R_{ij}=c_{ij}-\\varphi_i-\\psi_j,\n", "$$\n", "mientras que marcaremos los pares $(i,j)$ para los cuales\n", "$$\n", "\\pi_{ij}>0.\n", "$$\n", "\n", "De acuerdo con la relación\n", "$$\n", "\\pi_{ij}>0\n", "\\quad\\Longrightarrow\\quad\n", "\\varphi_i+\\psi_j=c_{ij},\n", "$$\n", "esperamos que los puntos correspondientes al soporte de $\\pi$ se\n", "encuentren precisamente en las entradas donde la holgura $R_{ij}$ se\n", "anula.\n", "\n", "Esta visualización permite ver de manera directa la relación entre el\n", "plan óptimo y los potenciales duales." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "cellView": "form", "colab": { "base_uri": "https://localhost:8080/", "height": 507 }, "executionInfo": { "elapsed": 469, "status": "ok", "timestamp": 1787232344406, "user": { "displayName": "Julian Fernandez Bonder", "userId": "01548826079249958852" }, "user_tz": 180 }, "id": "DoFK43TwWVBK", "outputId": "ec5e8b87-aeee-4525-ce69-2f1c469da8d7" }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkgAAAHqCAYAAAD/IrHXAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAphRJREFUeJzs3Xd4VFX6wPHvmUkyKZACJCSBdKRDwCChCggrUi1rQ1cQsetasC2uCojK+rPvWrAh7NqwLSIgKCyodGnSW0iBkIQkQHqdOb8/kowO6XCTScL7eZ77POTOue+cO+Xyzj1Naa01QgghhBDCzuTsCgghhBBCNDWSIAkhhBBCnEUSJCGEEEKIs0iCJIQQQghxFkmQhBBCCCHOIgmSEEIIIcRZJEESQgghhDiLJEhCCCGEEGeRBEkIIYQQ4iySIAkhhKiTb775hpdffhmr1ersqgjR4CRBauGGDx/O8OHDnV2NRrd27VqUUqxdu7ZBn0cpxaxZsxr0OUTjO5/vTXh4OLfeeqthdZk1axZKKcPinasNGzZw88030717d8xms+HxjX7dhDhfkiA1AQsWLEApxdatW6t8fPjw4fTs2bORayVE0/Hpp5/y+uuvO7saF6zMzExuvPFG/vnPfzJ27NhzjrNhwwZmzZrFmTNnjKucEA1EEiQhRJMnCZJz7dixg+eee4477rjjvOJs2LCB2bNnV5kgHTx4kPfff/+84gthJBdnV0C0TIWFhbi5uWEySQ4uzl1eXh5eXl7OrsYFb9SoUQ3+HBaLpcGfQ4j6kP+9mqnS0lLmzJlDVFQUFouF8PBwnnzySYqKimo9NjExkYkTJ+Ll5UVAQAAPP/wwK1eurNRnp7o+AWf3z6jo7/P555/z1FNP0aFDBzw9PcnOzubUqVM8+uij9OrVi1atWuHt7c2YMWP47bffKsX917/+RY8ePfD09MTPz49+/frx6aef1no+x48f56qrrnI4n6peh7qeT3FxMc888wwxMTH4+Pjg5eXF0KFDWbNmTa11AUhOTua2226jffv2WCwWevTowfz588/7fHNzc/Hy8uLBBx+s8jUwm83MnTu3xrp9/vnnxMTE0Lp1a7y9venVqxdvvPGGQ5mjR49y3XXX0aZNGzw9PRkwYADLli1zKFPxni9atIgnn3ySwMBAvLy8mDhxIseOHav0vF9++SUxMTF4eHjQrl07/vKXv5CcnOxQ5tZbb6VVq1bExcUxduxYWrduzc0338zw4cNZtmwZiYmJKKVQShEeHm4/rqioiJkzZ9KpUycsFgshISE8/vjjdfouALz33ntERUXh4eFB//79+eWXX6osd77P80cJCQkopXj55Zd57bXXCAsLw8PDg2HDhrFnz55aj//oo4+47LLLCAgIwGKx0L17d955551K5cLDwxk/fjzr1q2jf//+uLu7ExkZyb///e861TMvL49HHnmEkJAQLBYLXbp04eWXX0Zr7VBOKcX999/PJ598QpcuXXB3dycmJoaff/7ZXmbWrFk89thjAERERNjfy4SEBHtd//j9rOh6sG7dOh544AH8/f3x9fXlrrvuori4mDNnzjB58mT8/Pzw8/Pj8ccfr1SvutZfiKrIHaQmJCsri4yMjEr7S0pKKu27/fbbWbhwIddeey2PPPIImzdvZu7cuezfv5///ve/1T5HXl4el112GSkpKTz44IMEBgby6aef1vk//5rMmTMHNzc3Hn30UYqKinBzc2Pfvn0sXryY6667joiICNLS0nj33XcZNmwY+/btIzg4GID333+fBx54gGuvvZYHH3yQwsJCdu3axebNm7npppuqfc6CggJGjhxJUlISDzzwAMHBwfznP//hf//73zmfR3Z2Nh988AGTJk3ijjvuICcnhw8//JDRo0ezZcsW+vTpU+2xaWlpDBgwwP4fhr+/P99//z3Tpk0jOzubhx566JzPt1WrVlx99dUsWrSIV1991aGj7GeffYbWmptvvrnauv34449MmjSJkSNH8uKLLwKwf/9+1q9fb0+60tLSGDRoEPn5+TzwwAO0bduWhQsXMnHiRL766iuuvvpqh5jPP/88SimeeOIJTp48yeuvv86oUaPYuXMnHh4eQNl/dFOnTuWSSy5h7ty5pKWl8cYbb7B+/Xp27NiBr6+vPV5paSmjR49myJAhvPzyy3h6ehIYGEhWVhbHjx/ntddes78WADabjYkTJ7Ju3TruvPNOunXrxu7du3nttdc4dOgQixcvrvb1APjwww+56667GDRoEA899BBHjx5l4sSJtGnThpCQEHu5832e6vz73/8mJyeH++67j8LCQt544w0uu+wydu/eTfv27as97p133qFHjx5MnDgRFxcXvvvuO+69915sNhv33XefQ9kjR45w7bXXMm3aNKZMmcL8+fO59dZbiYmJoUePHtU+h9aaiRMnsmbNGqZNm0afPn1YuXIljz32GMnJyfb3osJPP/3EokWLeOCBB7BYLLz99ttcccUVbNmyhZ49e3LNNddw6NAhPvvsM1577TXatWsHgL+/f42v0V//+lcCAwOZPXs2mzZt4r333sPX15cNGzYQGhrKCy+8wPLly3nppZfo2bMnkydPPqf6C1GJFk730UcfaaDGrUePHvbyO3fu1IC+/fbbHeI8+uijGtD/+9//7PuGDRumhw0bZv/7lVde0YBevHixfV9BQYHu2rWrBvSaNWvs+8PCwvSUKVMq1ffsmGvWrNGAjoyM1Pn5+Q5lCwsLtdVqddgXHx+vLRaLfvbZZ+37rrzySodzrKvXX39dA/qLL76w78vLy9OdOnU65/MpLS3VRUVFDmVOnz6t27dvr2+77TaH/YCeOXOm/e9p06bpoKAgnZGR4VDuxhtv1D4+PvbX51zPd+XKlRrQ33//vcP+3r17O5xDVR588EHt7e2tS0tLqy3z0EMPaUD/8ssv9n05OTk6IiJCh4eH29/Live8Q4cOOjs72172iy++0IB+4403tNZaFxcX64CAAN2zZ09dUFBgL7d06VIN6Geeeca+b8qUKRrQf/vb3yrVa9y4cTosLKzS/v/85z/aZDI51FdrrefNm6cBvX79+mrPtaJuffr0cXi/33vvPQ04vJ71eZ7qPmd/FB8frwHt4eGhjx8/bt+/efNmDeiHH37Yvm/mzJn67Ev12d8zrbUePXq0joyMdNgXFhamAf3zzz/b9508eVJbLBb9yCOP1FjHxYsXa0A/99xzDvuvvfZarZTSR44cse+ruE5t3brVvi8xMVG7u7vrq6++2r7vpZde0oCOj4+v9Hxnv24V18XRo0drm81m3z9w4ECtlNJ33323fV9paanu2LGjw3tWn/oLURVpYmtC3nrrLX788cdKW+/evR3KLV++HIDp06c77H/kkUcAKjWH/NGKFSvo0KEDEydOtO9zd3c/786XAFOmTLHfNahgsVjs/ZCsViuZmZm0atWKLl26sH37dns5X19fjh8/zq+//lqv51y+fDlBQUFce+219n2enp7ceeed53weZrMZNzc3oOzOwalTpygtLaVfv34OdT6b1pqvv/6aCRMmoLUmIyPDvo0ePZqsrCz78ed6vqNGjSI4OJhPPvnEvm/Pnj3s2rWLv/zlLzUe6+vrS15eHj/++GO1ZZYvX07//v0ZMmSIfV+rVq248847SUhIYN++fQ7lJ0+eTOvWre1/X3vttQQFBdk/o1u3buXkyZPce++9uLu728uNGzeOrl27VvlZveeee2o8jz/68ssv6datG127dnV4vS+77DKAGu+MVtTt7rvvtr/fUNbU5+PjY9jz1OSqq66iQ4cO9r/79+9PbGys/fWrzh+/ZxV3nocNG8bRo0fJyspyKNu9e3eGDh1q/9vf358uXbpw9OjRGp9j+fLlmM1mHnjgAYf9jzzyCFprvv/+e4f9AwcOJCYmxv53aGgoV155JStXrjyveZOmTZvmMM1BbGwsWmumTZtm32c2m+nXr5/DOdW3/kKcTZrYmpD+/fvTr1+/Svv9/Pwcmt4SExMxmUx06tTJoVxgYCC+vr4kJiZW+xyJiYlERUVVmlfl7FjnIiIiotI+m83GG2+8wdtvv018fLzDhbJt27b2fz/xxBOsWrWK/v3706lTJy6//HJuuukmBg8eXONzJiYm0qlTp0rn06VLl/M6l4ULF/LKK69w4MABhybOqs6xQnp6OmfOnOG9997jvffeq7LMyZMngXM/X5PJxM0338w777xDfn4+np6efPLJJ7i7u3PdddfVeOy9997LF198wZgxY+jQoQOXX345119/PVdccYW9TGJiIrGxsZWO7datm/3xP045cdFFFzmUU0rRqVMne7+Sis9iVe9H165dWbduncM+FxcXOnbsWON5/NHhw4fZv39/tc00Fa93VSrqdvY5uLq6EhkZadjz1OTs5wbo3LkzX3zxRY3HrV+/npkzZ7Jx40by8/MdHsvKynJI8EJDQysd7+fnx+nTp2t8jsTERIKDgx0SYHD8LNTlXPLz80lPTycwMLDG56vO2fWvOLc/NoFW7P/jOdW3/kKcTRKkZqyhJ4+rLr7Vaq1yoriz7x4BvPDCCzz99NPcdtttzJkzhzZt2mAymXjooYew2Wz2ct26dePgwYMsXbqUFStW8PXXX/P222/zzDPPMHv27EY9n48//phbb72Vq666iscee4yAgAB7B+i4uLhq41ecz1/+8hemTJlSZZmKu4Hnc76TJ0/mpZdeYvHixUyaNIlPP/2U8ePHV7rrcbaAgAB27tzJypUr+f777/n+++/56KOPmDx5MgsXLqzx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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# @title\n", "# ==========================================================\n", "# Soporte del plan óptimo sobre las holguras duales\n", "# ==========================================================\n", "\n", "plt.figure(figsize=(6,5))\n", "\n", "# Holguras duales\n", "im = plt.imshow(\n", " R,\n", " origin=\"lower\",\n", " aspect=\"auto\",\n", " cmap=\"viridis\"\n", ")\n", "\n", "# Soporte del plan óptimo\n", "i_support, j_support = np.where(pi > 1e-10)\n", "\n", "plt.scatter(\n", " j_support,\n", " i_support,\n", " facecolors=\"none\",\n", " edgecolors=\"red\",\n", " s=80,\n", " linewidths=1.5,\n", " label=r\"$\\pi_{ij}>0$\"\n", ")\n", "\n", "plt.xlabel(r\"$j$\")\n", "plt.ylabel(r\"$i$\")\n", "plt.title(r\"Holguras duales y soporte del plan óptimo\")\n", "\n", "plt.colorbar(im, label=r\"$R_{ij}$\")\n", "plt.legend()\n", "\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "id": "Adk9ck6VXVky" }, "source": [ "### Una observación importante\n", "\n", "La condición\n", "$$\n", "\\pi_{ij}>0\n", "\\quad\\Longrightarrow\\quad\n", "\\varphi_i+\\psi_j=c_{ij}\n", "$$\n", "es una implicación en una sola dirección. Por lo tanto, su recíproca no tiene por qué ser cierta.\n", "\n", "Puede ocurrir que\n", "$$\n", "\\varphi_i+\\psi_j=c_{ij}\n", "$$\n", "pero que\n", "$$\n", "\\pi_{ij}=0.\n", "$$\n", "\n", "En otras palabras, el soporte del plan óptimo está contenido en el conjunto\n", "donde las restricciones duales se saturan:\n", "$$\n", "\\operatorname{supp}(\\pi)\n", "\\subset\n", "\\left\\{(i,j):\\varphi_i+\\psi_j=c_{ij}\\right\\}.\n", "$$\n", "\n", "El plan óptimo utiliza únicamente pares $(i,j)$ donde la restricción dual\n", "está saturada, pero no necesariamente utiliza todos los pares donde se\n", "produce dicha saturación.\n", "\n", "En la figura anterior se observan también algunos pares $(i,j)$ para los\n", "cuales $\\pi_{ij}=0$ y, sin embargo,\n", "$$\n", "\\varphi_i+\\psi_j=c_{ij},\n", "$$\n", "es decir, la holgura dual también se anula. Esto muestra que la recíproca\n", "de la implicación anterior no tiene por qué ser cierta." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 7. Las c-transformadas de los potenciales óptimos\n", "\n", "Los potenciales óptimos $\\varphi$ y $\\psi$ no son independientes entre sí.\n", "La teoría de la c-concavidad establece que, en un par dual óptimo,\n", "cada potencial puede recuperarse a partir del otro mediante la **c-transformada**.\n", "\n", "En el caso discreto, la c-transformada de $\\varphi$ es\n", "$$\n", "\\varphi^c_j = \\min_i\\,\\bigl(c_{ij}-\\varphi_i\\bigr),\n", "$$\n", "y la c-transformada conjugada de $\\psi$ es\n", "$$\n", "\\psi^{\\bar c}_i = \\min_j\\,\\bigl(c_{ij}-\\psi_j\\bigr).\n", "$$\n", "\n", "La teoría garantiza que, para potenciales óptimos, se cumple\n", "$$\n", "\\psi = \\varphi^c,\n", "\\qquad\n", "\\varphi = \\psi^{\\bar c}.\n", "$$\n", "\n", "Verifiquemos esto numéricamente.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# @title\n", "# ==========================================================\n", "# c-transformadas de los potenciales óptimos\n", "# ==========================================================\n", "\n", "# phi^c_j = min_i (C_ij - phi_i)\n", "phi_c = np.min(C - phi[:, None], axis=0) # shape (n,)\n", "\n", "# psi^{c_bar}_i = min_j (C_ij - psi_j)\n", "psi_cbar = np.min(C - psi[None, :], axis=1) # shape (n,)\n", "\n", "print(\"Verificación de phi^c = psi:\")\n", "print(f\" Error máximo: {np.max(np.abs(phi_c - psi)):.2e}\")\n", "\n", "print(\"Verificación de psi^cbar = phi:\")\n", "print(f\" Error máximo: {np.max(np.abs(psi_cbar - phi)):.2e}\")\n", "\n", "# ==========================================================\n", "# Visualización\n", "# ==========================================================\n", "\n", "fig, axs = plt.subplots(1, 2, figsize=(11, 4))\n", "\n", "# phi^c vs psi\n", "axs[0].scatter(phi_c, psi, s=60, zorder=3)\n", "lims = [min(phi_c.min(), psi.min()), max(phi_c.max(), psi.max())]\n", "axs[0].plot(lims, lims, 'r--', lw=1.5, label='identidad')\n", "axs[0].set_xlabel(r\"$\\varphi^c_j$\")\n", "axs[0].set_ylabel(r\"$\\psi_j$\")\n", "axs[0].set_title(r\"$\\varphi^c = \\psi$\")\n", "axs[0].legend()\n", "axs[0].grid(alpha=0.3)\n", "\n", "# psi^cbar vs phi\n", "axs[1].scatter(psi_cbar, phi, s=60, zorder=3)\n", "lims2 = [min(psi_cbar.min(), phi.min()), max(psi_cbar.max(), phi.max())]\n", "axs[1].plot(lims2, lims2, 'r--', lw=1.5, label='identidad')\n", "axs[1].set_xlabel(r\"$\\psi^{\\bar c}_i$\")\n", "axs[1].set_ylabel(r\"$\\varphi_i$\")\n", "axs[1].set_title(r\"$\\psi^{\\bar c} = \\varphi$\")\n", "axs[1].legend()\n", "axs[1].grid(alpha=0.3)\n", "\n", "plt.tight_layout()\n", "plt.show()\n" ] }, { "cell_type": "markdown", "id": "5ff10625", "metadata": {}, "source": [ "## 8. Un problema $2\\times2$ a mano\n", "\n", "Antes de los ejemplos aleatorios conviene tener uno que se pueda resolver completamente a mano (Ejercicio 3.3 de las notas): $a=(0{,}4,\\,0{,}6)$, $b=(0{,}5,\\,0{,}5)$ y costos $c=\\bigl(\\begin{smallmatrix}1&3\\\\2&1\\end{smallmatrix}\\bigr)$. El politopo $\\Pi(a,b)$ tiene un solo grado de libertad, $\\pi_{11}=t\\in[0,0{,}4]$, así que podemos graficar el costo como función de $t$, resolver el dual y verificar la dualidad fuerte y la holgura complementaria. Los pares duales óptimos forman una recta $(\\varphi+s,\\psi-s)$: la invariancia por sumar una constante a $\\varphi$ y restársela a $\\psi$." ] }, { "cell_type": "code", "execution_count": null, "id": "9de29a24", "metadata": {}, "outputs": [], "source": [ "# @title\n", "import numpy as np, matplotlib.pyplot as plt, ot\n", "from scipy.optimize import linprog\n", "\n", "a2 = np.array([0.4, 0.6]); b2 = np.array([0.5, 0.5]); C2 = np.array([[1., 3.], [2., 1.]])\n", "\n", "# el segmento Pi(a,b): pi = [[t, 0.4-t],[0.5-t, 0.1+t]], t in [0, 0.4]\n", "ts = np.linspace(0, 0.4, 101)\n", "costo = [np.sum(C2*np.array([[t, 0.4-t], [0.5-t, 0.1+t]])) for t in ts]\n", "plt.figure(figsize=(5, 3.2)); plt.plot(ts, costo); plt.xlabel(r'$t=\\pi_{11}$'); plt.ylabel('costo'); plt.title('Costo sobre el segmento $\\\\Pi(a,b)$'); plt.show()\n", "\n", "pi2 = ot.emd(a2, b2, C2)\n", "print(\"plan óptimo:\\n\", pi2, \"\\ncosto óptimo primal =\", np.sum(C2*pi2))\n", "\n", "# dual: max a.phi + b.psi s.a. phi_i + psi_j <= c_ij ; normalizamos psi_1 = 0\n", "A_ub = np.array([[1, 0, 1, 0], [1, 0, 0, 1], [0, 1, 1, 0], [0, 1, 0, 1]], float)\n", "res = linprog(-np.concatenate([a2, b2]), A_ub=A_ub, b_ub=C2.ravel(), bounds=[(None, None)]*3 + [(None, None)], A_eq=[[0, 0, 1, 0]], b_eq=[0], method='highs')\n", "phi2, psi2 = res.x[:2], res.x[2:]\n", "print(f\"potenciales (con psi_1 = 0): phi = {phi2}, psi = {psi2}, valor dual = {-res.fun:.4f}\")\n", "print(\"holgura complementaria: pi_ij > 0 => phi_i + psi_j = c_ij:\")\n", "for i in range(2):\n", " for j in range(2):\n", " print(f\" ({i+1},{j+1}): pi = {pi2[i,j]:.1f}, holgura c_ij - phi_i - psi_j = {C2[i,j]-phi2[i]-psi2[j]:.4f}\")" ] }, { "cell_type": "markdown", "id": "4622c929", "metadata": {}, "source": [ "## 9. Potenciales no únicos y el grafo de soporte\n", "\n", "En el ejemplo aleatorio de las secciones anteriores los potenciales óptimos son únicos salvo la constante $(\\varphi+s,\\psi-s)$. Eso no siempre ocurre. El Ejercicio 5.1 de las notas propone $x_i=y_i=i-1$ ($i=1,2,3$), $a=(\\frac12,\\frac14,\\frac14)$, $b=(\\frac14,\\frac14,\\frac12)$, costo cuadrático: el plan óptimo tiene soporte $\\{(1,1),(1,2),(2,3),(3,3)\\}$, cuyo **grafo bipartito** tiene dos componentes conexas, $\\{x_1,y_1,y_2\\}$ y $\\{x_2,x_3,y_3\\}$, y por eso los potenciales tienen un grado de libertad adicional: normalizando $\\varphi_1=0$ forman el segmento $\\varphi=(0,1-t,-t)$, $\\psi=(0,1,t)$, $t\\in[2,4]$.\n", "\n", "Para calcular numéricamente **todo** el conjunto de pares óptimos, resolvemos dos programas lineales auxiliares: maximizar y minimizar $\\psi_3$ sujeto a las restricciones duales y a que el valor dual sea el óptimo. Después contamos las componentes conexas del grafo de soporte." ] }, { "cell_type": "code", "execution_count": null, "id": "50db4db8", "metadata": {}, "outputs": [], "source": [ "# @title\n", "x3 = np.array([0., 1., 2.]); a3 = np.array([.5, .25, .25]); b3 = np.array([.25, .25, .5])\n", "C3 = (x3[:, None] - x3[None, :])**2\n", "pi3 = ot.emd(a3, b3, C3); OT3 = np.sum(C3*pi3)\n", "print(\"plan óptimo (x4):\\n\", np.round(4*pi3).astype(int), \"\\ncosto óptimo =\", OT3)\n", "\n", "n = 3\n", "def dual_lp(objetivo, valor_optimo=None):\n", " # variables (phi_1..phi_3, psi_1..psi_3); normalizacion phi_1 = 0\n", " A_ub = np.zeros((n*n, 2*n)); b_ub = np.zeros(n*n); k = 0\n", " for i in range(n):\n", " for j in range(n):\n", " A_ub[k, i] = 1; A_ub[k, n+j] = 1; b_ub[k] = C3[i, j]; k += 1\n", " A_eq = [[1, 0, 0, 0, 0, 0]]; b_eq = [0]\n", " if valor_optimo is not None:\n", " A_eq.append(list(np.concatenate([a3, b3]))); b_eq.append(valor_optimo)\n", " r = linprog(objetivo, A_ub=A_ub, b_ub=b_ub, A_eq=np.array(A_eq, float), b_eq=b_eq, bounds=[(None, None)]*(2*n), method='highs')\n", " return r\n", "\n", "r = dual_lp(-np.concatenate([a3, b3]))\n", "print(\"valor dual óptimo =\", -r.fun)\n", "e6 = np.zeros(6); e6[5] = 1\n", "tmin = dual_lp(e6, -r.fun).x[5]; tmax = dual_lp(-e6, -r.fun).x[5]\n", "print(f\"psi_3 recorre el intervalo [{tmin:.3f}, {tmax:.3f}] entre los pares óptimos con phi_1 = 0\")\n", "for t in [tmin, (tmin+tmax)/2, tmax]:\n", " phi = np.array([0, 1-t, -t]); psi = np.array([0, 1, t])\n", " print(f\" t = {t:.2f}: phi = {phi}, psi = {psi}, admisible: {np.all(phi[:,None]+psi[None,:] <= C3+1e-9)}, valor dual = {a3@phi + b3@psi:.4f}\")\n", "\n", "# componentes conexas del grafo bipartito de soporte\n", "def componentes(pi, tol=1e-12):\n", " n, m = pi.shape; padre = list(range(n+m))\n", " def raiz(u):\n", " while padre[u] != u: padre[u] = padre[padre[u]]; u = padre[u]\n", " return u\n", " for i in range(n):\n", " for j in range(m):\n", " if pi[i, j] > tol: padre[raiz(i)] = raiz(n+j)\n", " return len({raiz(u) for u in range(n+m)})\n", "print(\"\\ncomponentes conexas del grafo de soporte (ejemplo 3x3):\", componentes(pi3))\n", "print(\"componentes conexas del grafo de soporte (ejemplo aleatorio de la Sección 1):\", componentes(pi))" ] }, { "cell_type": "markdown", "id": "533bb28a", "metadata": {}, "source": [ "## 10. La mejora de potenciales $\\varphi\\mapsto\\varphi^{c\\bar c}$\n", "\n", "En el Capítulo 6 se prueba que, dado cualquier $\\varphi$, el par $(\\varphi^{c\\bar c},\\varphi^c)$ es admisible y su valor dual no es menor que el de $(\\varphi,\\varphi^c)$. Es tentador iterar esta mejora como algoritmo, pero no funciona: después de un paso $\\varphi^{c\\bar c}$ ya es $c$-cóncava y la iteración se detiene ($\\varphi^{c\\bar cc}=\\varphi^c$, Ejercicio 6.1), en general lejos del óptimo. Lo verificamos partiendo de $\\varphi=0$ y de un $\\varphi$ aleatorio, en el ejemplo aleatorio de la Sección 1. (En el Capítulo 13 veremos que la versión *suavizada* de esta iteración, el algoritmo de Sinkhorn, sí converge, al óptimo de un problema regularizado.)" ] }, { "cell_type": "code", "execution_count": null, "id": "7d1fb2f8", "metadata": {}, "outputs": [], "source": [ "# @title\n", "ctransf = lambda f: np.min(C - f[:, None], axis=0) # (f)^c_j = min_i c_ij - f_i\n", "cbtransf = lambda g: np.min(C - g[None, :], axis=1) # (g)^{cbar}_i = min_j c_ij - g_j\n", "D = lambda f, g: a @ f + b @ g\n", "\n", "for nombre, f0 in [(\"phi = 0\", np.zeros(len(a))), (\"phi aleatorio\", np.random.default_rng(1).normal(size=len(a)))]:\n", " f = f0.copy(); vals = [D(f, ctransf(f))]\n", " for k in range(4):\n", " f = cbtransf(ctransf(f)); vals.append(D(f, ctransf(f)))\n", " print(f\"{nombre:>14}: valores duales en la iteración = {np.round(vals, 5)} (óptimo = {dual_cost:.5f})\")\n", "print(\"La mejora es real en el primer paso y nula después: el par se vuelve c-cóncavo y se detiene, con una brecha respecto del óptimo.\")" ] }, { "cell_type": "markdown", "id": "7927972a", "metadata": {}, "source": [ "## 11. El costo $0$--$1$ y la variación total\n", "\n", "Si $\\mu$ y $\\nu$ tienen el mismo soporte $\\{x_1,\\dots,x_n\\}$ y el costo es $c(x,y)=\\mathbf 1_{x\\ne y}$ (cuesta $1$ mover masa a cualquier otro punto, $0$ dejarla), el costo óptimo es la distancia de variación total $\\|\\mu-\\nu\\|_{TV}=\\frac12\\sum_i|a_i-b_i|$ (Ejercicio 5.3): conviene dejar quieta la masa $\\min\\{a_i,b_i\\}$ en cada punto y mover el excedente. Los potenciales óptimos se pueden elegir con valores en $\\{0,1\\}$ y $\\{-1,0\\}$." ] }, { "cell_type": "code", "execution_count": null, "id": "e065376a", "metadata": {}, "outputs": [], "source": [ "# @title\n", "rng = np.random.default_rng(5)\n", "n01 = 8\n", "a01 = rng.dirichlet(np.ones(n01)); b01 = rng.dirichlet(np.ones(n01))\n", "C01 = 1.0 - np.eye(n01)\n", "pi01 = ot.emd(a01, b01, C01)\n", "print(\"costo óptimo =\", np.sum(C01*pi01))\n", "print(\"variación total ½||a-b||₁ =\", 0.5*np.sum(np.abs(a01 - b01)))\n", "print(\"masa que se queda quieta (diagonal) =\", np.trace(pi01), \" = sum min(a_i,b_i) =\", np.sum(np.minimum(a01, b01)))\n", "phi01 = (a01 > b01).astype(float); psi01 = -(a01 > b01).astype(float)\n", "print(\"par (phi,psi) con valores en {0,1} x {-1,0}: admisible =\", np.all(phi01[:, None] + psi01[None, :] <= C01 + 1e-12),\n", " \", valor dual =\", a01 @ phi01 + b01 @ psi01)" ] }, { "cell_type": "markdown", "id": "ad45dd92", "metadata": {}, "source": [ "## Ejercicios computacionales\n", "\n", "Los enunciados siguientes figuran también en las notas, en la sección de ejercicios del Capítulo 6.\n", "\n", "1. **El $2\\times2$ y su degeneración.** En el ejemplo de la Sección 8, reemplazar $c_{12}=3$ por un parámetro $s$ y calcular el plan óptimo para $s\\in[0,4]$. Hallar el valor de $s$ en el que cambia el vértice óptimo y verificar que allí todo el segmento $\\Pi(a,b)$ es óptimo y los potenciales pierden unicidad (más allá de la constante).\n", "\n", "2. **Potenciales únicos y grafo conexo.** En el ejemplo $3\\times3$ de la Sección 9, modificar las masas $a$ (manteniendo $b$) hasta que el grafo de soporte del plan óptimo sea conexo, y verificar que entonces $\\psi_3$ queda determinado ($t_{\\min}=t_{\\max}$). Formular la conjetura general y compararla con el Ejercicio 5.2.\n", "\n", "3. **Holgura complementaria y saturación espuria.** En el ejemplo aleatorio de la Sección 1, contar los pares $(i,j)$ con $\\pi_{ij}>0$ y los pares con holgura $R_{ij}<10^{-9}$; el segundo conjunto contiene al primero. Repetir para $50$ instancias aleatorias y estimar con qué frecuencia hay saturación sin masa. ¿Qué pasa si los puntos $x_i$, $y_j$ se toman en una grilla regular en lugar de al azar?\n", "\n", "4. **Mejora de potenciales.** Para $100$ vectores $\\varphi$ aleatorios, calcular la fracción de la brecha dual $\\mathcal D^*-\\mathcal D(\\varphi,\\varphi^c)$ que cierra un paso de mejora $\\varphi\\mapsto\\varphi^{c\\bar c}$, y graficar su histograma. ¿Hay algún $\\varphi$ inicial para el cual un solo paso alcance el óptimo? (Sugerencia: partir de $\\varphi$ igual a un potencial óptimo perturbado.)\n", "\n", "5. **Costo $0$--$1$.** Verificar la fórmula $\\min_{\\Pi(a,b)}\\langle C,\\pi\\rangle=\\frac12\\|a-b\\|_1$ para $200$ pares $(a,b)$ aleatorios. Después tomar soportes **distintos** para $\\mu$ y $\\nu$ (ningún $x_i$ coincide con un $y_j$) y observar que el costo óptimo es siempre $1$: explicar por qué y qué relación tiene con la variación total de $\\mu-\\nu$." ] } ], "metadata": { "colab": { "authorship_tag": "ABX9TyO+dcSRuEaA3EREe3G6HOIT", "provenance": [] }, "kernelspec": { "display_name": "Python 3", "name": "python3" }, "language_info": { "name": "python" } }, "nbformat": 4, "nbformat_minor": 0 }