{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Simple Barycenter Computation" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from mmot import MMOTSolver\n", "\n", "import numpy as np \n", "import matplotlib.pyplot as plt \n", "import itertools" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Grid of size n1 x n2\n", "n1 = 128 # x axis\n", "n2 = 128 # y axis\n", "\n", "x, y = np.meshgrid(np.linspace(0.5/n1,1-0.5/n1,n1), np.linspace(0.5/n2,1-0.5/n1,n2))\n", "\n", "r = 0.125\n", "\n", "positions = np.array([[0.25,0.25],\n", " [ 0.75,0.75],\n", " [0.25,0.75]])\n", "\n", "# measures = [None]*len(positions)\n", "measures = [None]*(len(positions))\n", "\n", "for i in range(len(positions)):\n", " xc,yc = positions[i]\n", " measures[i] = np.zeros((n2, n1))\n", " measures[i] = np.exp(-0.5*((x-xc)**2 + (y-yc)**2)*100.0)\n", " measures[i][measures[i]<1e-4] = 0.0 \n", "\n", " measures[i] *= n1*n2 / np.sum(measures[i])\n", "\n", "fig, ax = plt.subplots(1, len(measures), figsize=(12,4))\n", "for i in range(len(measures)):\n", " ax[i].imshow(measures[i], origin='lower', extent=(0,1,0,1))\n", " ax[i].set_title(\"$\\\\mu_{{ {:0d} }}$\".format(i))" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "unroll_node = 0\n", "\n", "# The set A that defines the pairwise costs\n", "edge_list = [[0,1], [1,2], [0,2]]\n", "\n", "bary_weights = np.array([1.0,1.0,1.0])\n", "bary_weights /= np.sum(bary_weights)\n", "\n", "prob = MMOTSolver(measures, edge_list, x, y, unroll_node, bary_weights)\n", "\n", "prob.Visualize('original', filename='CostGraph.svg')" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Iteration, StepSize, Cost, Error\n", " 0, 0.2500, 0.0057, 1.99919\n", " 10, 0.0593, 0.0368, 0.81437\n", " 20, 0.0188, 0.0531, 0.26774\n", " 30, 0.0106, 0.0547, 0.00155\n", " 40, 0.0079, 0.0547, 0.00048\n", " 50, 0.0106, 0.0547, 0.00030\n", " 60, 0.0106, 0.0548, 0.00014\n", " 70, 0.0079, 0.0548, 0.00008\n", " 80, 0.0106, 0.0548, 0.00010\n", " 90, 0.0106, 0.0548, 0.00004\n", " 100, 0.0059, 0.0548, 0.00014\n", " 110, 0.0059, 0.0548, 0.00003\n", " 120, 0.0059, 0.0548, 0.00003\n", " 130, 0.0059, 0.0548, 0.00002\n", " 140, 0.0059, 0.0548, 0.00003\n", " 150, 0.0059, 0.0548, 0.00002\n", " 160, 0.0059, 0.0548, 0.00002\n", " 170, 0.0059, 0.0548, 0.00001\n", " 180, 0.0059, 0.0548, 0.00002\n", " 190, 0.0059, 0.0548, 0.00001\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD4CAYAAADiry33AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAaF0lEQVR4nO3df2zc933f8eebd/wlUtRPypIl2ZIdxa6SzLGqKt6cZk2TpZLbRGs6dPbW2csKaEJlIMZWrM4CBFmxYEiGBYUBw5qzGI3TpG6K1pgaKHHS/FjQokosObYiRVZMq7JFiaJIyiRFiryf7/1x36PO5zvxTj7yeN/P6wEQvO+vu/d97/TSh5/v5z5n7o6IiMRXW7MLEBGRhaWgFxGJOQW9iEjMKehFRGJOQS8iEnPJZhdQydq1a33Lli3NLkNEpGUcO3Zs1N37K21bkkG/ZcsWjh492uwyRERahpm9Vm2bum5ERGJOQS8iEnMKehGRmFPQi4jEnIJeRCTmFPQiIjGnoBcRibklOY4+BNlcnsvTaa6kshRminbcwSH6HS1Xuw24+9z+bzm+ZJtT2PCW+y65D97yOPPcf9l9ULHuKvdf4T4orfdNtVe5/yrntdqs2171iOrHXE+16b0XYtbvRt/lwtTY2DtthfNYuNPG3uuyziT7//ntDb1PUNA31NV0lmRbGx3Ja38onR2d5gvPvcwLr42TyuZIZfOks3myeX0PgEgcmDXuvtb2dirol7rf/d//wOWpNJ/92Lv4yLvW84OXL/Efv3qMZMLY/e719HQk6Uy20dneRmcywaqeDvq6Ci+BmWEU3jSGRb+Lb6LS5cJ+bW2F/ShbX348b7m/+e+79D4ov88a66t4H/XUWLIfc49bYVsFN/IPr9ox1R7j+sc0njUyTVioGht9fwtRZZgU9A1ydnSaE+cnWd6ZZN9Xj/Frd/Tzk3+8zDvX9/Llh36Fm/q6ml2iiARKF2Mb5IenLwHw7IF7+dSeOzlyZoxVyzp46t8r5EWkudSib5Dvnx7htrU9vGNdL+9Y18vHd2wi2Was6ulodmkiEji16BvgajrLkTNjfPDOdXPr+pd3KuRFZElQ0N+AL373Fxw5Mza3fOTMGOlsng/ese46R4mINIeCvk6ZXJ7HvvcK/+NbL8+te+G1cRJtxi/fuqqJlYmIVKagr9PIlRQAL50b59TQJADHz0+wbV0v3R2JZpYmIlKRgr5Ow5Ozc7ef+cnruDsnzk/wTzataGJVIiLVKejrNDxZaNFvW9fLsz89z6sjU1yeTvOejQp6EVmaFPR1unSl0KJ/5MPvZHI2yx9/8xQA79m0solViYhUp6Cv0/DkLIm2wpQG2zf08aNfjJBsM+5cv7zZpYmIVKSgr9PwZIp1yztJtBmfuHcLAO+8aTld7boQKyJLk4K+TsOTs6yLpjT46F03s2FFF++7bXWTqxIRqU5TINTp0mSKW9csA6CrPcG3H/kAXe36/1JElq6aEsrMdpvZaTMbMLNHK2w3M3ss2n7czHaUbDtrZj8zsxfN7Ggji2+G4Suzb5qkbEV3O51JdduIyNI1b4vezBLA48C/AAaB583skLv/vGS3PcC26Od9wBPR76IPuvtow6puktlMjvGrGW7q62x2KSIiNaulRb8LGHD3M+6eBp4B9pbtsxd42guOACvNbEODa2264qdi12naYRFpIbUE/UbgXMnyYLSu1n0c+I6ZHTOzfdUexMz2mdlRMzs6MjJSQ1mL72L0qVjNLy8iraSWoK/0fV7lX3h6vX3udfcdFLp3DpjZByo9iLs/6e473X1nf39/DWUtvuG5oFfXjYi0jlqCfhDYXLK8CbhQ6z7uXvx9CXiWQldQSypOf3DTcrXoRaR11BL0zwPbzGyrmXUA9wOHyvY5BDwYjb65B5hw9yEz6zGz5QBm1gN8BDjRwPoX1eXpFIk2Y+Wy9maXIiJSs3lH3bh71sweBp4DEsBT7n7SzPZH2w8Ch4H7gAHgKvCJ6PCbgGejb3NPAl939283/FkskLGpFKuWddDWVuiZmpjJ0NeV1LfTi0hLqekDU+5+mEKYl647WHLbgQMVjjsD3PU2a2yKK7MZ3v/5H/C53343H9+xCYCJmSwrutWaF5HWoo90VjE8mWImk+OVS1Nz6yZmMgp6EWk5CvoqxqYKF16HJ6590cjETIY+Bb2ItBgFfRWXp9PAtbHzAJNq0YtIC1LQVzEWBf2wgl5EWpyCvorLc0Ff6MJxd3XdiEhL0jTFVRSDfiqVZSqVxYBs3tWiF5GWo6Cvoth1A3BxYpZlHYWpiBX0ItJq1HVTxdhUiuhzUlyanGViJgMo6EWk9Sjoq7g8neb2/l6gMPJGQS8irUpBX8XYdJpf2tAHFIJ+UkEvIi1KQV+Bu/PGdJpNq7pZ3pVkeOJai76vS0EvIq1FQV/B5EyWbN5Z3dPB+r4uhidT6roRkZaloK9gdLowdn5NbwfrV3TNdd2YwfIuDVQSkdaioK+gOIZ+TU8n65Z3MRxdjF3emZybslhEpFUo6CsYmyoE/eqeDm5ds4yLk7Oce2OGFfrCERFpQQr6CuZa9L0d7Nq6Gnf4+4FR9c+LSEtSh3MFl6M++tU9Haxa1kFnso1UNq8RNyLSktSir2B0Kk1vZ5LOZIKu9gQ7blkFaMSNiLQmBX0FY9Np1vR2zC3/09vXAAp6EWlNCvoKxqZSrO3tnFu+5zYFvYi0LgV9BaNTKdb0XGvR37V5Bbet7WH7zX1NrEpE5MboYmwFo1Npdm5ZPbfcmUzw/T/8teYVJCLyNqhFXyaby/PG1fSbum5ERFqZgr7M5ek07tBfcjFWRKSVKejLjEafilWLXkTiQkFfZnSqOKGZgl5E4kFBX6YY9GvVdSMiMaGgLzMX9MvVoheReFDQlxmdStORbGN5p0aeikg81BT0ZrbbzE6b2YCZPVphu5nZY9H242a2o2x7wsx+ambfbFThC2V0KsXang7MNO+8iMTDvEFvZgngcWAPsB14wMy2l+22B9gW/ewDnijb/kng1NuudhGMTqXVbSMisVJLi34XMODuZ9w9DTwD7C3bZy/wtBccAVaa2QYAM9sE/CbwfxpY94IZvZLS0EoRiZVagn4jcK5keTBaV+s+fwL8FyB/vQcxs31mdtTMjo6MjNRQ1sIYnUppxI2IxEotQV+ps9pr2cfMfgu45O7H5nsQd3/S3Xe6+87+/v4aymq8fN4Zm9b0ByISL7UE/SCwuWR5E3Chxn3uBT5mZmcpdPn8upn92Q1X22CnhiZ56dz43PLETIZc3vVhKRGJlVqC/nlgm5ltNbMO4H7gUNk+h4AHo9E39wAT7j7k7p9y903uviU67vvu/nuNfAJvxx//zc/Z/2fHyOcLf6CcH58BYH1fVzPLEhFpqHmD3t2zwMPAcxRGznzD3U+a2X4z2x/tdhg4AwwAXwL+YIHqbajB8asMTczy0uA4AK+OTAHwjnW9TaxKRKSxavpUkLsfphDmpesOltx24MA89/FD4Id1V7hA8nnn4sQsAN8+cZG7b1nFK8NTtBlsWbusydWJiDROsJ+MHZ1Okck5ZvCtExdxdwYuTbFlTQ+dyUSzyxMRaZhgg35ovNCa/9Cd63j98lVOXphkYGSK29VtIyIxE2zQX4guvD70z7bQZvA3xy9wdnSabQp6EYmZcIM+6p9/180reN/WNXz9yOtk864LsSISO8EG/dD4DJ3JNlYta2fPe9ZzJZUFYNu65U2uTESkscIN+olZNq7sxsz4jXetpzhZ5e3reppbmIhIgwU76fqFiRk2rCx8MOqmvi523rqKoYlZlnUEe0pEJKaCTbWh8Vnev23t3PIX/tVdTM5kmliRiMjCCDLoM7k8l67McvOKa1MdbF2rLhsRiacg++iHJ2fJO2xY2d3sUkREFlyQQV+c+mD9Ck1eJiLxF2TQT6dzAPR1BdlzJSKBCTLoZzOFoNecNiISgiCDPpUtfKthV3uQT19EAhNk0qXUoheRgIQZ9FGLvjMZ5NMXkcAEmXRzffTtatGLSPwFGfRq0YtISIJMOgW9iIQkyKRLZXN0JNuw4pSVIiIxFmbQZ/J0qTUvIoEIMu1S2ZwuxIpIMMIM+kxe/fMiEowg0y6VVdCLSDiCTLvZTI4udd2ISCCCDHq16EUkJEGmXSqb0zw3IhKMQIM+T6dmrhSRQASZdoVx9GrRi0gYggz62WxOLXoRCUZNaWdmu83stJkNmNmjFbabmT0WbT9uZjui9V1m9hMze8nMTprZf2v0E7gRGkcvIiGZN+3MLAE8DuwBtgMPmNn2st32ANuin33AE9H6FPDr7n4X8F5gt5nd05jSb1wqq+GVIhKOWpq1u4ABdz/j7mngGWBv2T57gae94Aiw0sw2RMtT0T7t0Y83qvgbpeGVIhKSWtJuI3CuZHkwWlfTPmaWMLMXgUvAd939x5UexMz2mdlRMzs6MjJSY/n1c3dmMxpeKSLhqCXoK83lW94qr7qPu+fc/b3AJmCXmb270oO4+5PuvtPdd/b399dQ1o3J5p28ay56EQlHLWk3CGwuWd4EXKh3H3cfB34I7K63yEYqfumI+uhFJBS1BP3zwDYz22pmHcD9wKGyfQ4BD0ajb+4BJtx9yMz6zWwlgJl1Ax8GXm5c+fVLzX1frFr0IhKG5Hw7uHvWzB4GngMSwFPuftLM9kfbDwKHgfuAAeAq8Ino8A3AV6KRO23AN9z9m41/GrWb1dcIikhg5g16AHc/TCHMS9cdLLntwIEKxx0H7n6bNTbUXIteF2NFJBDBNWuv9dEH99RFJFDBpV1qrutGLXoRCUNwQT8713UT3FMXkUAFl3ZzLXp13YhIIIJLO12MFZHQhBf0uhgrIoEJLu1m1aIXkcAEF/TqoxeR0ASXdhpeKSKhqemTsXHg7oxNp0llNbxSRMISTNodfe0Ndn3ub/n5hUlAQS8i4Qgm7S6Mz5B3OHLmMp3JNswqTaEvIhI/wQR9cbTN6FRKrXkRCUowiTebyc/d7tSXjohIQIIJ+pmoRQ/qnxeRsMQ68d6YTvOlH52Z+0LwIn2NoIiEJNZB/72XL/G5w6c4O3ZVLXoRCVasEy8dfThqOpUllcmTaCuMtFHQi0hIYv2BqWy+EPQzmRwz6RxrejrI5l2fihWRoMQ76HMOwNV0jtlsju6OBB+68yZWdLc3uTIRkcUT76AvtujTWWbSObrbE3zmo9ubXJWIyOKKdWd1pqRFP5PJafy8iAQp1kFf2nWTyuTp1tTEIhKgWCffta6bQou+Wy16EQlQrIO+tOtmNpPTB6VEJEixDvpsrtCiv5rJqkUvIsGKd9DnCy36mXSO2UxeF2NFJEixDvpMsUUfdd2oRS8iIYp10BdH3czM9dHH+umKiFRUU/KZ2W4zO21mA2b2aIXtZmaPRduPm9mOaP1mM/uBmZ0ys5Nm9slGP4HryUSjbiZnM2Tzrha9iARp3qA3swTwOLAH2A48YGblHy/dA2yLfvYBT0Trs8B/dvdfAu4BDlQ4dsEUW/SXp9OApicWkTDV0qLfBQy4+xl3TwPPAHvL9tkLPO0FR4CVZrbB3Yfc/QUAd78CnAI2NrD+68rly4K+Q0EvIuGpJeg3AudKlgd5a1jPu4+ZbQHuBn5c6UHMbJ+ZHTWzoyMjIzWUNb/ixdixKOjVdSMiIaol6K3COq9nHzPrBf4KeMTdJys9iLs/6e473X1nf39/DWXNrzi8sjgvvS7GikiIakm+QWBzyfIm4EKt+5hZO4WQ/5q7//WNl1q/You+SC16EQlRLUH/PLDNzLaaWQdwP3CobJ9DwIPR6Jt7gAl3HzIzA74MnHL3Lza08hoUL8YW6WKsiIRo3vno3T1rZg8DzwEJ4Cl3P2lm+6PtB4HDwH3AAHAV+ER0+L3AvwN+ZmYvRuv+q7sfbuizqKI4qVmRgl5EQlTTF49EwXy4bN3BktsOHKhw3N9Ruf9+UWTe0qJXH72IhCfWyVfeolcfvYiEKN5BX9ai79Y4ehEJUKyDPpPLk2i71nPUlVTQi0h4Yh302bzT13XtMoRa9CISongHfc7p626fW+5MxvrpiohUFOvky+bz9HUVgr6rvY3CsH4RkbDEO+hzTl93oetGY+hFJFSxDvpM7lqLXkMrRSRUsQ76wsXYYteNgl5EwhTvoM85y7vUdSMiYYt10Gfyebo7ErQnjG5NfyAigYpt+uXyjjsk29robk+oRS8iwYpt0Bfnok8mjGUdSV2MFZFgxTboi98ulWwz1vR2sKqno8kViYg0R03TFLei7FyLvo2Dv/fLmv5ARIIV26AvzkXfnjA2r17W5GpERJontl03ubmum9g+RRGRmsQ2BUsvxoqIhCy2QV+8GNuuoBeRwMU36IstenXdiEjgYpuCpRdjRURCFtugL34xuFr0IhK62KZgsUWvi7EiErrYBn2xj749EdunKCJSk9imYOkUCCIiIYtt0GdKpkAQEQlZbFMwm1OLXkQE4hz0eV2MFRGBWAe9LsaKiECcg15dNyIiQI1Bb2a7zey0mQ2Y2aMVtpuZPRZtP25mO0q2PWVml8zsRCMLn09GwytFRIAagt7MEsDjwB5gO/CAmW0v220PsC362Qc8UbLtT4HdjSi2HuqjFxEpqKW5uwsYcPcz7p4GngH2lu2zF3jaC44AK81sA4C7/wi43Miia6FJzURECmpJwY3AuZLlwWhdvftcl5ntM7OjZnZ0ZGSknkMr0qRmIiIFtQR9paT0G9jnutz9SXff6e47+/v76zm0orlJzdRHLyKBqyUFB4HNJcubgAs3sM+iymjUjYgIUFvQPw9sM7OtZtYB3A8cKtvnEPBgNPrmHmDC3YcaXGtNnjt5kZ3//btMpbKARt2IiMybgu6eBR4GngNOAd9w95Nmtt/M9ke7HQbOAAPAl4A/KB5vZn8O/ANwh5kNmtnvN/g5vMlPXx9ndCrN0PgMZpBQi15EApesZSd3P0whzEvXHSy57cCBKsc+8HYKrNeF8RkARqZS6rYRESGGn4wtBv3olbSGVoqIEOegn0rpw1IiIsQs6DO5PBcnZwG4fDWtC7EiIsQs6IcnZ4lmPsBdQytFRCBmQX9hfPZNy2rRi4jELugL/fPFhrz66EVEYhb056Ogv62/F1DXjYgIxCzoL4zPsGpZOxtWdAHquhERgRgG/cZV3axc1gGo60ZEBGIW9OfHZ7h5RTerlrUDmoteRARiFPTuzvk3Zrh5ZTcruwtBr7noRURqnOumFbjDZz66ndv7ezk+OAFoQjMREYhR0Le1Gf/6V24B4PXLVwFdjBURgRh13ZRaOddHrxa9iEhMg7446iaWT09EpC6xTEJdjBURuSaWQb+q2KLX8EoRkXgGfV93O2b6wJSICMQ06BNtRl9XO+1q0YuIxGd4Zbk/2n0nd6zvbXYZIiJNF9ug/zfvu6XZJYiILAnq2xARiTkFvYhIzCnoRURiTkEvIhJzCnoRkZhT0IuIxJyCXkQk5hT0IiIxZ+7e7BrewsxGgNdu8PC1wGgDy2kU1VW/pVqb6qqP6qrfjdR2q7v3V9qwJIP+7TCzo+6+s9l1lFNd9Vuqtamu+qiu+jW6NnXdiIjEnIJeRCTm4hj0Tza7gCpUV/2Wam2qqz6qq34NrS12ffQiIvJmcWzRi4hICQW9iEjMxSbozWy3mZ02swEze7SJdWw2sx+Y2SkzO2lmn4zWf9bMzpvZi9HPfU2q76yZ/Syq4Wi0brWZfdfMXol+r1rkmu4oOS8vmtmkmT3SjHNmZk+Z2SUzO1Gyrur5MbNPRe+502b2G02o7X+a2ctmdtzMnjWzldH6LWY2U3LuDi5yXVVfu8U6Z1Xq+ouSms6a2YvR+sU8X9UyYuHeZ+7e8j9AAngVuA3oAF4Ctjeplg3Ajuj2cuAXwHbgs8AfLoFzdRZYW7buC8Cj0e1Hgc83+bW8CNzajHMGfADYAZyY7/xEr+tLQCewNXoPJha5to8Ayej250tq21K6XxPOWcXXbjHPWaW6yrb/L+AzTThf1TJiwd5ncWnR7wIG3P2Mu6eBZ4C9zSjE3Yfc/YXo9hXgFLCxGbXUYS/wlej2V4B/2bxS+BDwqrvf6Cej3xZ3/xFwuWx1tfOzF3jG3VPu/o/AAIX34qLV5u7fcfdstHgE2LRQj19PXdexaOfsenWZmQG/C/z5Qjz29VwnIxbsfRaXoN8InCtZHmQJhKuZbQHuBn4crXo4+hP7qcXuHinhwHfM7JiZ7YvW3eTuQ1B4EwLrmlQbwP28+R/fUjhn1c7PUnvf/QfgWyXLW83sp2b2/8zsV5tQT6XXbqmcs18Fht39lZJ1i36+yjJiwd5ncQl6q7CuqeNGzawX+CvgEXefBJ4AbgfeCwxR+LOxGe519x3AHuCAmX2gSXW8hZl1AB8D/jJatVTOWTVL5n1nZp8GssDXolVDwC3ufjfwn4Cvm1nfIpZU7bVbKufsAd7coFj081UhI6ruWmFdXecsLkE/CGwuWd4EXGhSLZhZO4UX8Gvu/tcA7j7s7jl3zwNfYgH/xL8ed78Q/b4EPBvVMWxmG6LaNwCXmlEbhf98XnD34ajGJXHOqH5+lsT7zsweAn4L+LcedepGf+aPRbePUejXfedi1XSd167p58zMksDHgb8orlvs81UpI1jA91lcgv55YJuZbY1ahfcDh5pRSNT392XglLt/sWT9hpLdfhs4UX7sItTWY2bLi7cpXMg7QeFcPRTt9hDwfxe7tsibWllL4ZxFqp2fQ8D9ZtZpZluBbcBPFrMwM9sN/BHwMXe/WrK+38wS0e3botrOLGJd1V67pp8z4MPAy+4+WFyxmOerWkawkO+zxbjKvEhXsu+jcPX6VeDTTazj/RT+rDoOvBj93Ad8FfhZtP4QsKEJtd1G4er9S8DJ4nkC1gDfA16Jfq9uQm3LgDFgRcm6RT9nFP6jGQIyFFpSv3+98wN8OnrPnQb2NKG2AQr9t8X32sFo39+JXuOXgBeAjy5yXVVfu8U6Z5Xqitb/KbC/bN/FPF/VMmLB3meaAkFEJObi0nUjIiJVKOhFRGJOQS8iEnMKehGRmFPQi4jEnIJeRCTmFPQiIjH3/wEuKz/ayN61OQAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "dual_vars = [np.zeros(x.shape) for i in range(prob.NumDual())]\n", "\n", "num_its = 200\n", "step_size = 0.25\n", "root_node = 0\n", "costs = np.nan*np.zeros(num_its)\n", "\n", "ftol = 0.0\n", "gtol = 0.0\n", "\n", "root_nodes = np.arange(prob.NumDual())\n", "root_cycler = itertools.cycle(root_nodes)\n", "\n", "print('Iteration, StepSize, Cost, Error')\n", "for i in range(num_its):\n", " error = prob.Step(next(root_cycler), dual_vars, step_size)\n", " \n", " costs[i] = prob.ComputeCost(dual_vars)\n", " if(i>0):\n", " step_size = prob.StepSizeUpdate(step_size, costs[i], costs[i-1], error)\n", "\n", " if((i%10)==0):\n", " print('{:9d}, {:0.4f}, {:0.4f}, {:0.5f}'.format(i,step_size, costs[i], error))\n", "\n", " # Check for convergence in cost\n", " if(np.abs(costs[i]-costs[i-1])" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "vmax = np.max(measures[0])\n", "fig, axs = plt.subplots(1, len(measures)+2, figsize=(12,4))\n", "for i in range(len(measures)):\n", " axs[i].imshow(measures[i], origin='lower', extent=(0,1,0,1))#, vmin=0, vmax=vmax)\n", " axs[i].set_title(\"$\\\\mu_{{ {:0d} }}$\".format(i))\n", " \n", "axs[-2].imshow(bary, origin='lower', extent=(0,1,0,1))#, vmin=0, vmax=vmax)\n", "axs[-2].set_title('Estimated Barycenter')\n", "\n", "true_loc = np.mean(positions,axis=0)\n", "true_bary = np.zeros((n2, n1))\n", "true_bary = np.exp(-0.5*((x-true_loc[0])**2 + (y-true_loc[1])**2)*100.0)\n", "true_bary *= n1*n2 / np.sum(true_bary)\n", "\n", "#true_bary[(x-true_loc[0])**2 + (y-true_loc[1])**2 < r**2] = 1\n", "#true_bary *= n1*n2 / np.sum(true_bary)\n", "\n", "axs[-1].imshow(true_bary, origin='lower', extent=(0,1,0,1))#, vmin=0, vmax=vmax)\n", "axs[-1].set_title('True Barycenter')\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(true_bary[int(0.6*n1),:],label='True Barycenter')\n", "plt.plot(bary[int(0.6*n1),:],label='Estimated Barycenter')\n", "plt.title('Barycenter Slice at y=0.6')\n", "plt.legend()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "interpreter": { "hash": "545e036c4b32438aced1f6b3c8d38ca151d9c36189e05839cb0aa568fda70ddd" }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.4" } }, "nbformat": 4, "nbformat_minor": 4 }