From 3ff838beff586a8a543d5386733ca186ee336615 Mon Sep 17 00:00:00 2001 From: "Pablo R. Mier" Date: Wed, 15 May 2024 09:29:35 +0200 Subject: [PATCH] Add option to STs to control the behavior of the flows --- corneto/methods/steiner.py | 5 +- docs/guide/networks/steiner-trees.ipynb | 662 +++++++++++------------- pyproject.toml | 2 +- 3 files changed, 314 insertions(+), 355 deletions(-) diff --git a/corneto/methods/steiner.py b/corneto/methods/steiner.py index 70e2e762..5b26c8db 100644 --- a/corneto/methods/steiner.py +++ b/corneto/methods/steiner.py @@ -5,7 +5,7 @@ from corneto.backend import DEFAULT_BACKEND, Backend -def __exact_steiner_tree( +def _exact_steiner_tree( G: BaseGraph, terminals, edge_weights=None, @@ -108,6 +108,7 @@ def exact_steiner_tree( tolerance=1e-3, strict_acyclic=False, flow_name=VAR_FLOW, + out_flow_edge_type=EdgeType.UNDIRECTED, backend: Backend = DEFAULT_BACKEND, ): prized_nodes, prizes = [], [] @@ -137,7 +138,7 @@ def exact_steiner_tree( ids = [] for v in terminals: if v != root: - idx = Gc.add_edge(v, (), type=EdgeType.UNDIRECTED) + idx = Gc.add_edge(v, (), type=out_flow_edge_type) ids.append(idx) # terminal -> () (sink node, remove flow) dummy_edges[v] = idx ids = np.array(ids) diff --git a/docs/guide/networks/steiner-trees.ipynb b/docs/guide/networks/steiner-trees.ipynb index 1bc151d1..13ef590e 100644 --- a/docs/guide/networks/steiner-trees.ipynb +++ b/docs/guide/networks/steiner-trees.ipynb @@ -72,6 +72,15 @@ "id": "7e3f6074", "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\pablo\\AppData\\Local\\pypoetry\\Cache\\virtualenvs\\corneto-N5Qo8YGQ-py3.9\\lib\\site-packages\\networkx\\utils\\decorators.py:770: FutureWarning: steiner_tree will change default method from 'kou' to 'mehlhorn' in version 3.2.\n", + "Set the `method` kwarg to remove this warning.\n", + " return argmap._lazy_compile(__wrapper)(*args, **kwargs)\n" + ] + }, { "name": "stdout", "output_type": "stream", @@ -81,7 +90,7 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAApQAAAHzCAYAAACe1o1DAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAABiUElEQVR4nO3dd3hUZd4+8PucacmkF0IgZAgQAhqKigiilKyIq2AEFCYquK6yvrq67vLa+LGva1tRV1fcFcsqrAXRDCII4krT0AQCNtoKJJRMaGmTMiWZZOac3x8hY4b0zCRTcn+uK5fknDPPeSaJ5OY55/s9gizLMoiIiIiIOkn09QSIiIiIKLAxUBIRERGRRxgoiYiIiMgjDJRERERE5BEGSiIiIiLyCAMlEREREXmEgZKIiIiIPMJASUREREQeYaAkIiIiIo8wUBIRERGRRxgoiYiIiMgjDJRERERE5BEGSiIiIiLyCAMlEREREXmEgZKIiIiIPMJASUREREQeYaAkIiIiIo8wUBIRERGRRxgoiYiIiMgjDJRERERE5BEGSiIiIiLyCAMlEREREXmEgZKIiIiIPMJASUREREQeYaAkIiIiIo8wUBIRERGRRxgoiYiIiMgjDJRERERE5BEGSiIiIiLyCAMlEREREXmEgZKIiIiIPMJASUREREQeYaAkIiIiIo8wUBIRERGRRxgoiYiIiMgjDJRERERE5BEGSiIiIiLyiNLXEyAiIiIKNFa7A6fKrKh1SFArRaTEhSFM03NjVc9950REREQdkFdkxopcI3KOFsNoskFutE8AoIvVImNIAu4co8Pg3hG+mqZPCLIsy20fRkRERNQzFZpsWLjmIHbkl0IhCnBKLUenhv3jU+OxaMZwJMdqu3GmvsNASURERNSC7H1GPLXuMByS3GqQvJhCFKAUBTyTmY6s0bounKF/YKAkIiIiasaSnDy8sumYx+M8OiUND2UM9sKM/BervImIiIgukr3P6JUwCQCvbDoGwz6jV8byV1yhJCIiImqk0GTD5MXbYHdIkOw2VO7KRm3RSdQWHYdUXYWoa25H9Pg7W3y9LMsoWrEA9tOHEXHFVMROeQAapYgt8ycG7T2VXKEkIiIiamThmoNwXLhfUqo2w/zTRsjOOmjTxrbr9eYf1sNRcc5tm0OSsXDNQa/P1V8wUBIRERFdkFdkxo78UlcBjiIqAcl/ykbinS8ieuJv2ny9o6IIFds+ROz197ttd0oyduSXIr/Y3CXz9jUGSiIiIqILVuQaoRAF1+eCIEAQhFZe4a5swxKEpFwG7ZBxTfYpRAEf7QnOeykZKImIiIguyDla3KH2QI2Z92+E/dyxJquTDZySjJxjxZ5Mz28xUBIREREBsNgdMJpsnXqtw1yK8m/+jZiM30IZEdficcYyG6x2R2en6LcYKImIiIgAFJRZ0dnWN6YNb0CdMADhI29o9TgZwKkyayfP4r8YKImIiIgA1DqkTr3OemQnqk/+gJiM30K2WyHVWCDVWAAAstMBqcYC2fnLqmRnz+PPlL6eABEREZE/UCs7t85WV1IASE6c//CRJvss+zfCsn8jes38M7RpV3t0Hn/GQElEREQEICUuDALQ4cve4cMnI0Q3vMn2ok8WInTwWERemQlVr/4AAOHCeYINAyURERERAEeNFVHKOlQ4VG7bq49/B6muBnJtNQCgrqwQ1iM7AQChg66EMro3lNG9mx1TGRGHkP4jXJ/r4rQI0wRf/Aq+d0RERETUTrIsY9euXXj33XexcuVKhF77G0RccRMg/HJZumzjm3BW/dLux3ZkJ2wXAmXS/csgRoe061wKUUBGWoJ334Cf4LO8iYiIqMcpKSnBhx9+iKVLl+LIkSMYMGAA5s2bh4mZety54kiXnXfL/AlITYjosvF9hSuURERE1CNIkoQtW7Zg6dKl+PzzzyEIAmbOnIklS5YgIyMDoli/Kjk+tRS7TpR1usF5cxSigHED44IyTAJcoSQiIqIgd/r0abz33ntYtmwZCgoKkJ6ejnnz5mHu3LmIi2vahLzQZMPkxdtg92J7H41SxJb5E5Ecq/XamP6EgZKIiIiCTl1dHb788ku8++672LBhA0JDQ5GVlYV58+ZhzJgxbT6fO3ufEQtWH/TafF6aORz60TqvjedveMmbiIiIgkZ+fj6WLl2K999/H0VFRbjqqqvw9ttvQ6/XIzIyst3jZI3WodRixyubjnk8p8emDAnqMAlwhZKIiIgCXE1NDT777DMsXboUW7duRXR0NObOnYt58+ZhxIgRbQ/Qiux9Rjy17jAcktyheyoVogClKODZzPSgD5MAAyURERF5wGp34FSZFbUOCWqliJS4sG7rs3jgwAEsXboUH330EcrLyzFp0iTMmzcPM2fORGhoqNfOU2iyYeGag9iRXwqFKLQaLBv2j0+Nx6IZw4P2nsmLMVASERFRh+QVmbEi14ico8UwmmxuT5YRAOhitcgYkoA7x+gwuLd3q5rNZjOys7OxdOlS7N27F71798Zvf/tb3HPPPRg8eLBXz3Ux1/s+VgxjWTPvO06LjLQEzBmrC9pq7pYwUBIREVG7+GqlTpZl5ObmYunSpcjOzkZ1dTVuvPFGzJs3D1OnToVKpWp7EC/z5cqsP2KgJCIiojZ5ei/hM5npyOrgvYRlZWVYvnw5li5disOHD6N///649957cffddyM5Obmjb4G6EAMlERERtWpJTp5Xqp0fnZKGhzJavywtSRJycnKwdOlSrF69GrIsY/r06Zg3bx4mT57saj5O/oWBkoiIiFrUXf0Yz549i/fffx/Lli3DiRMnMHToUMybNw933XUXevXq5bXzU9dgoCQiIqJmdfUTYxwOB7766issXboUX375JdRqNWbPno3f/e53GDduXJvNx8l/MFASERFRs+Yuy231mda154+j4ttPUHvuGKQaKxSRvRB26UREjpkBURXS7GsUooDL+mgx9NxmvPfeezh37hxGjRqFefPm4fbbb0dUVFRXviXqIgyURERE1ERekRnXv7a9xf21pUacf/9PUMYmIerq2RBDI2EvPITKXQaEDhqNhNuebHX8qk8ew+1TMzBv3jxcfvnl3p4+dbOeW99ORERELVqRa2y1NZD1v9sgO2rRa8ZCqGL6AABCU0bCaS2H5acNcNZYoAgJb/a1ImQ88OrHeH7mZV01fepmLJUiIiKiJnKOFrfaHkgQFQAAUePeX1LUhAGCCEFsec1KgoCdJ8q9M1HyCwyURERE5MZid8BosrV6TPiw6yBqwmDa+CbqKs5Dsttgy98L808bEHHFVIjq5u+hbGAss8Fqd3hz2uRDvORNREREbgrKrGirwEIZ3RuJd72C4tXP4+zb81zbI0bdjJjJ97V5DhnAqTIr0vuyCCcYMFASERGRm9p2tAlyVBSheNWzUITFIHr6/4NCGwX7uaOo3GWAVFeD+Jv+6JXzUGBgoCQiIiI3amXbd8SVb3sfkr0afX77uuvydohuGBShkSj7zz8QPuxXCNEN9/g8FBj4nSQiIiI3KXFhaKuleG3RSajik5vcK6nuU/9oxbqSglZfL1w4DwUHBkoiIiJyE6ZRIjlW2+oxivBY1JUaIdVWu223nzlSvz8ivtXX6+K0CNPwQmmwYKAkIiIiF5vNhmXLlqHox68hS84Wj4scfQskWxWKsv8P1p93oPrUflTuWonyb5ZBFa9D6KBRLb5WIQrISEvoiumTj/BJOURERITjx4/jrbfewr///W9UVFTguplzkDdY3+pragoOoHLPp6grPgXJboMiMh7a1KsQefUsKEIjW33tlvkTkJoQ4c23QD7EtWYiIgBWuwOnyqyodUhQK0WkxIXxchwFPUmS8NVXX+GNN97Ahg0bEBMTg3nz5uGBBx7AgAED2nyWd0j/EQjpP6JD51SIAsYNjGOYDDJcoSSiHiuvyIwVuUbkHC2G0WRz67snANDFapExJAF3jtFhcG/+8qPgYTKZ8O9//xtvvfUWTpw4gVGjRuHBBx9EVlYWQkNDXccVmmyYvHgb7F5s76NRitgyf2Kb92hSYGGgJKIep9Bkw8I1B7Ejv7TVZxUDcO0fnxqPRTOG85cgBbQffvgBb7zxBj7++GNIkgS9Xo8HH3wQV111FQSh+bru7H1GLFh90GtzeGnmcOhH67w2HvkHBkoi6lGy9xnx1LrDcEhyq0HyYgpRgFIU8ExmOrL4y5ACiN1ux6pVq7BkyRLs2bMHOp0O999/P+69914kJLSvMGZJTh5e2XTM47k8NmUIHsxI9Xgc8j8MlETUY3jrl+KjU9LwUMZgL8yIqOsUFhbi7bffxrvvvouSkhJMnjwZDz74IKZNmwalsuP3B3v6j7FnM9O5MhnEGCiJqEfgZTvyle4s+JJlGd988w3eeOMNrF27FuHh4fjNb36D3//+9xg6dKjH4/N2EWoJAyURBb2WCgvM+zfC9NXrEFQh0D2yyrW9pvAwrAe/Rm3RcdSWFgBOB5LuXwZldG/XMSwsoNZ0d8FXVVUVPvjgA7z55ps4cuQIhg0bhgcffBBz5sxBeHi4x+NfzPX+jhXDWNbM+4vTIiMtAXPG6ljN3UMwUBJR0Guu9YnDXIqzSx+EqNJAstvcAmXFzo9hObAF6t4DIdmtsBsPNgmUDa1Plt87plvfC/m37l7BO3z4MN544w0sX74c1dXVmDlzJh588EFMmDChxSIbb2PLLQIYKIkoyOUVmXH9a9ubbC/+9BlAECCGRMB29Fu3QCnLEgSh/kFilbmrUZHz7yaBsgGbM1OD7ir4qqurw9q1a7FkyRJs27YNiYmJuO+++3DfffchKSnJk7dA1Gl89CIRBbUVuUYoRPeVGsuhHNQUHkLslN83+5qGMNkWhSjgoz1Gj+dIgW9JTh4WrD4Iu0PqUJgEAKckw+6QsGD1QSzJyWvxuPPnz+PZZ59FSkoKZs2aBafTiezsbBQUFOCZZ55hmCSf4po0EQW1nKPFbr/gndYKlH/9LmIm3Q1lZLxHYzslGTnHivE00j2dJgWw7H1Gr3QPAIBXNh1Dr3CNq+BLlmV8++23eOONN/DZZ59BpVJhzpw5+P3vf4+RI0d65ZzewMvexO82EQUti90Bo8nmts206U2oYpMQfvlNXjmHscwGq93BX549VKHJhqfWHW6yvaWCr4IXp7U4ljK2H5Luext/WXcYl/XRYvtXa7BkyRIcOHAAgwcPxt/+9jfcfffdiI6O7oq30mF80hQ1xr8BiShoFZRZ3X7JWY98C1v+XvT57T+9VrAgAzhVZkV63yivjEeBZeGag3BcdInbYS5F+Tf/hiI8FpLd/R80iXNfaTKG/exRlH/9LrRpYwEAtXUO/GrBuzj38Z8xbdo0vPzyy5g8eTJE0T/uUmtP4ZEMoMBkw/LcAry/+xRbB/UADJREFLRqG7UJkmqrYdr8FiJH3QxleCykGgsAQJYc9ftrLICohKgO8eg81HPkFZmxI7+0yXbThjcQkpzuKvhqTJPUtBek+acNAASEj5wCAJAFEarkEcj5/mdMvHxIl8y9sxoXHgFo837Rhv27TpRh8uJtfNJUEGOgJKKgpVb+sqIj2aogWStQtXcNqvauaXJs4WtZCB08Fgm3/p9H56Geo6Hgq3Goaij46jvvLVRsX97mGJLdBtuRndDohkEV09e1XSEKyCl0YOLlXTL1TvHkSVPOC5XvC1YfRKnFzidNBSEGSiIKWilxYRBQf/lNER6D3rcvanJM5Z5VsBceQsKspyFqIzt8DuHCeajn8UbBl/Xn7ZDralyrk66x/KzgqysLjyg4MFASUdAK0yihi9WiwGSDoFQjpP+IJsdYDn4NCKLbPqetEjXG+sc01pWcAgBUn/geojYSCm0UQnTDXcdGirUwFZ9DWHJy174Z8iveKviyHNgMUROGsCHXNNnnLwVfLRUeeeIv6w5j3KB43lMZRBgoiSioZQxJwPLcgg71BqwrKUDp5y+6bTNtehMAoEkehsQ7L+yTJZz9fjN0upkYN24c9Ho9Zs2ahT59+nht/uSfvFHwVVtSgNqzRxFxxVQISnWT/f5S8NVc4RHQciU7AMhOB8zffwHLwS1wlJ8DFCqo45MRnXEvQvpdAockY+Gag3zSVBBhoCSioHbnGB3e332qxf3x0+YD0+a7bQvpPwL9F6xve3BBxOY3/4JDu8bBYDDg0UcfxZ/+9CdMmDABer0et956KxISEjx8B53H3oDeZzabcfz4cXyz/wQADYDOF3xZDmwCAISPvKHF8z2+YCFSY5To06dPk4/Y2Ngur/xuqfCotUp2WXKiZPXzqDn9X0SNuRWapKGQ6uyoPZ8Pua4GQP0l/R35pcgvNvNJU0GCj14koqDX3LO8PdXcs7zLy8vx+eefw2AwYMuWLQCAjIwM6PV6zJw5E7GxsV47f0vYG9AzsiyjuLgYx48fb/KRn5+PkpISAIAqYQD63vM6AMBRUYQzb9/b6rgXF3zJzjqcXvIbKKMS0Ofu11p8Xb9Dy2E6fgDnz59HeXm52z6VSoXevXu7hczExMQmwbN3795QqVSd+no8ve5wsyv8rT26tGrfWpR/swyJc/7WbFV7A4UoYO6Y/ng60z/uEyXPMFASUdArNNkwefE22L3Y3kejFLFl/sQW7wErLS3F6tWrkZ2djW3btkEURVx//fXIysrCLbfcgqgo717GbE9vwAYN+3tqb0CHw4HCwkLk5+c3CY0nTpyAxWJxHdu7d28MGjSoyUef5BRkvPEDZACyoxb2M0eanOfigi91rxTXPuuRnSj9/EXETvk9Iq5o/p5LAcChp29wrSrX1NTg/PnzOHfuHM6dO+f258YfxcXFkCT3n/X4+PgmQbO58BkW5l5gNvHlHBRcdK+o5VAOTJvedFWyXxwoT791L5RRCUi844U2vxf947TY9mhGm8eR/+O1DyIKesmxWjyTmY4Fqw96bcxnM9NbDWLx8fG47777cN999+H8+fNYtWoVDAYDfvOb30CtVuPGG2+EXq/HzTffjPDwcI/mwt6ATdlsNpw4caLZlcZTp07B4ai/HK1QKKDT6TBo0CCMGzcOc+fOdYXGgQMHtvq96UzBl2vfgc0QlBqEXTqx5fHjtG63KISEhCAlJQUpKSmtvnen04mSkhK3kNk4fB47dgzbtm3DuXPnYLfb3V4bHh7uCpcJfZNR0D8LaHRPaFuV7I6qEjgri6BNvQrl2z6AZf9mSNVVUMX1Q+SYWxE+/Dq34/2l8Ig8x+8gEfUIWaN1KLXYvdL65LEpQzrU8iQxMREPPfQQHnroIZw+fRqffvopDAYD7rjjDoSGhmLq1KnQ6/W46aaboNV2bLWwp/YGlGUZJpPJ7XJ049B47tw517GhoaGukJiZmem20ti/f/9OXw7uTMEXUB+6ak7+iLD0SRBDmm85pRAFZKR17v5bhUKBxMREJCYm4vLLW25kKcsyKisrWwyepyrr3MIk0HYlu9NcBgCwHPoayoh4xE65H6JGC8tPG1H25WLIzjpEXPbrX+YA/yg8Is/xkjcR9SiNV/M6EgQUogClKODZzHSv9c87deoUVq5cCYPBgB9++AFhYWHIzMyEXq/Hr3/9a2g0mlZfn73P6NVV15dmDver3oCSJOH06dPNrjIeP34clZWVrmPj4uJcITE1NdUtNCYmJnrtUZuN5RWZcf1r270+boMt8yf4tGDlR2M5Zry1y/W59ci3KP3iZfT57T+hjq//OSldv9jtknfN6Z9R9NFjgEKJpPvegTKqPhTLsozz7/8JTlsl+j34vtt51jwwDpfrYrrnTVGX4QolEfUoWaN1uGZQfIfvNxw3MM7r9xumpKTg8ccfx+OPP468vDxXuPzkk08QGRmJ6dOnQ6/XY/LkyVCr3dvKBEtvQLvdjpMnTzZbAHPy5EnU1tYCAARBQHJyMgYNGoQrrrgCs2bNcguN3r4ntT0G947A+NT4Liv48nX1s9uTptpZya4IrZ+zKrafK0wC9d+/kIFXoGr3p3BaK6AIi272PBS4uEJJRD2WqyL6WDGMZc1URMdpkZGWgDljdd36y/2///0vVq5ciezsbBw9ehQxMTGYOXMm9Ho9MjIyoFQqXZXr1eeOo2L7h6gtKYBkq4SgVEMZm4SIK6YhfFjzxQ6yLKNoxQLYTx9GxBVTETvlAQDNV657Q0VFRYurjKdPn0bDryGNRoMBAwY0u8qYkpLS5oqtL/ii4Ku7WO0ODHt6I2S0v5K914z/h8LFs6GM7oO+9y5x21++9X1U7VmFfg+vgEJb/w+AiwuPKHAxUBIRwT97NsqyjAMHDsBgMMBgMODEiRPo1asXpsz6DXZGTgIA1BQcgPXn7dD0S4cyIg5SXQ2sh7fC9vN2RI2fg+hrspqMW/X9F/UrRRaTW6Bs0NFLrbIs49y5cy2GxrKyMtex0dHRzVZNDxo0CElJSV3eV7ErBPOtBw1V3h2pZC9Z9zJsR75F0n3/gjK6N4ALPyPv/RFybTWS7n/X9XpWeQcP/pOAiAj1j2n0t8IAQRAwcuRIjBw5Es8//zy+//57GAwGrDwuA+FOCKICIf1HNKki1qZehXOVRbDs39gkUDoqilCx7UPET52PkjVNn22uEAV8tMfYpDdgXV0dCgoKWmy1U11d7Tq2b9++GDRoEC699FLcfPPNbquN3dGLs7v5suCrq7kKjzpQyR49fg5qjn+HopVPIfra2yFqtDDv34S64pOIn/6E6zhPCo/I/zBQEhEFAEEQcOWVV+LKK69E7ss5TZ4jfTFFaCQka0WT7WUbliAk5TJoh4xr9nVOScb6H04g7Oh/3EKj0WiE0+kEUN9QOyUlBYMGDcKkSZNw7733ugLjgAEDOlypHgweyhiM+HCN3xR8eUtbT5pqjiqmD3rPeQkVWz9A2YYlgOSEKmEAet32JLSpV7mOc0oy5oz1r/dLncdASUQUQCx2BwqbCZOyLAGyDKnGAtuRnag++QNir7/f7Rjz/o2wnzuGvvPebPUcJTUCnv3nSxik64dBgwbhtttuc1tlTE5OhkKh8Or7Cgb+VPDlLW0VHjX36FIAUPdKQcKsp1oc118Kj8h7GCiJiAJIQZkVzUUU08Y3YflpQ/0nCiViJ/8PIi6/0bW/4dnLMRm/hTIirtVzCIKAPQePIz3Jv24BCATJsVosv3eM3xZ8dcaiGcMxefE2r1ayK0UBi2YM99p45HsMlEREAaS2hWriqKtnI3zkDZBsFbDl74Vp89uQ6moQNWYmAMC04Q2oEwYgfOQN7TuP03tVyz3R4N4ReDozHU8j3S8LvjrCF0+aosATOD/RRETUYs8+ZVSCq+9f6KDRAICKbR8gfPh1qDEeRPXJH5A452+Q7e4rnLLTAanGAkEVAkHxy68E9gb0Hn8s+OqoYC48Iu9goCQiCiApcWEQgGYvezem6ZMGy49fwVFxHnUlBYDkxPkPH2lynGX/Rlj2b0SvmX+GNu1qAPWXZFPimn8kIPVcwVp4RN7BQElEFCDMZjPWrl0LlV1Erab1Fa+aggOAIEIZnYjw4ZMRomt6v1rRJwsROngsIq/MhKpXf9d2XZw2oC7JUvcJxsIj8g7+jUFE5MdsNhvWr18Pg8GA//znP6ipqcGlc59CXdKVkCGg7KvXIWq0UPdJgyIsGk5bFWxHd8L28w5EjplZ/0QSbZSrwfTFlBFxbj0E2RuQ2hKMhUfkOT4ph4jIz9TU1GDDhg0wGAz44osvYLVaceWVV0Kv12P27Nmwa2Jw/WvbAQCWA5thObAFdWWFkOxWiKoQqC4U37T06MUGBS9O88qTcogCvfCIPMdASUTkB2pra7FlyxYYDAZ8/vnnqKqqwogRI6DX66HX6zFo0CC34xue5e3NVi5d9SxvIgp+DJRERD7icDiwdetWGAwGrF69GiaTCUOHDkVWVhb0ej2GDh3a4msLTTZMXrwN9hbaCHWGRiliy/yJvM+NiDqMgZKIqBtJkoSdO3fCYDBg1apVKC4uxsCBA10hcvjw4RAEoV1jZe8zerU34Eszh7MCl4g6hTc4EBF1MVmWkZubC4PBgE8//RRnzpxBcnIy7rrrLuj1eowaNardIbIx9gYkIn/BFUoioi4gyzJ+/PFHGAwGrFy5EqdOnUJiYiJmz54NvV6PsWPHQhS90zw8e5+RvQGJyKcYKImIvOjQoUMwGAwwGAzIy8tDfHw8brvtNuj1eowfPx4KhaJLzltosnW4N+D41Hj2BiQir2CgJCLy0LFjx1wh8vDhw4iOjsbMmTOh1+vxq1/9Ckpl991dxN6AROQLDJRERJ1w8uRJrFy5EgaDAT/++CPCw8Mxffp06PV6TJkyBWq12tdTZG9AIuo2DJRERO10+vRpfPrppzAYDMjNzUVoaChuvvlm6PV63HjjjQgNDfX1FImIfIKBkoioFUVFRVi1ahUMBgN27NgBtVqNm266CXq9HtOmTUN4eLivp0hE5HMMlEREFykrK8Pq1auRnZ2NrVu3QhRFTJkyBXq9HrfccguioqJ8PUUiIr/CQElEBKCyshKff/45DAYDNm/eDEmS8Ktf/Qp6vR4zZsxAXFycr6dIROS3GCiJqMeyWCz44osvYDAY8NVXX6Gurg7jx4+HXq/Hrbfeit69e/t6ikREAYGBkoh6lOrqavznP/+BwWDA+vXrUV1djbFjx0Kv12PWrFlISkry9RSJiAIOAyURBT273Y5NmzbBYDBg7dq1sFgsuOKKK6DX6zF79mykpKT4eopERAGNgZKIglJdXR2++eYbZGdnY82aNaisrMSwYcOg1+uh1+sxePBgX0+RiChoMFASUdBwOp3Yvn07srOz8dlnn6GsrAxpaWmuEJmenu7rKRIRBSUGSiIKaJIkYffu3cjOzsaqVatw/vx5pKSkuELkZZddBkEQfD1NIqKgxkBJRAFHlmV89913rudnnz59GklJSZg9ezaysrIwevRohkgiom7Eh7oSUUCQZRkHDhxwhcgTJ04gISEBs2bNgl6vxzXXXANRFH09TSKiHokrlETk137++WcYDAZkZ2fj6NGjiI2Nxa233oqsrCxMnDgRCoXC11MkIurxGCiJyO/k5+e7ViIPHjyIyMhIzJgxA3q9HpMnT4ZKpfL1FImIqBEGSiLyCwUFBVi5ciUMBgO+//57hIWFITMzE3q9HjfccANCQkJ8PUUiImoBAyUR+czZs2fx6aefwmAwYPfu3QgJCcHUqVORlZWFm266CVqt1tdTJCKidmCgJKJuVVJSglWrVsFgMGD79u1QKpX49a9/Db1ej8zMTERERPh6ikRE1EEMlETU5UwmE9asWQODwYBvvvkGADB58mRkZWVh+vTpiI6O9u0EiYjIIwyUREHGanfgVJkVtQ4JaqWIlLgwhGm6v0NYVVUV1q5dC4PBgE2bNsHhcGDSpEnIysrCzJkzER8f3+1zIiKirsFASRQE8orMWJFrRM7RYhhNNjT+n1oAoIvVImNIAu4co8Pg3l13SdlqteLLL79EdnY2/vOf/8But+Oaa65BVlYWbrvtNiQmJnbZuYmIyHcYKIkCWKHJhoVrDmJHfikUogCn1PL/zg37x6fGY9GM4UiO9U7BS01NDb766isYDAZ88cUXsNlsGD16NLKysjBr1iwkJyd75TxEROS/GCiJAlT2PiOeWncYDkluNUheTCEKUIoCnslMR9ZoXafOXVtbi82bN8NgMODzzz+H2WzGyJEjkZWVhdmzZ2PgwIGdGpeIiAITAyVRAFqSk4dXNh3zeJxHp6ThoYzB7TrW4XAgJycHBoMBq1evRnl5OS655BJkZWVBr9djyJAhHs+HiIgCEwMlUYDJ3mfEgtUHvTbeSzOHQ9/CSqUkSdixYwcMBgNWrVqFkpISDBo0yBUihw0bBkEQvDYXIiIKTAyURAGk0GTD5MXbYHdITfbZzx5FxY6PYD9zBJBlqPsMRvSEuQjpd2mrY2qUIrbMn+i6p1KWZezZswcGgwGffvopzp49C51OB71eD71ejyuuuIIhkoiI3DBQEgWQuctysetEWZN7Ju3njuH8R09A0ycNkVdNB2QZlbmfobboBBLvWARN0iUtjqkQBVw9MA7zL1PCYDBg5cqVKCgoQJ8+fTB79mzo9XqMHTuWIZKIiFrEQEkUIPKKzLj+te3N7isy/AW1xSeQdP9SiKr6Z15LdhvOvD0PqtgkJM59uc3xz7x7P6KFGsyaNQt6vR7XXnstFAqFV98DEREFp+7vdkxEnbIi19hiayD7mZ8ROuhKV5gEAFGjRUjyMNiO7YLDYoIyPLbFsQVZwtxn3sE7/3M9lEr+tUBERB0j+noCRNQ+OUeLW2wPJDvrIChUTXco67fVlZxqdWxZEHG8OoRhkoiIOoWBkigAWOwOGE22Fver4nSwnz0KWf6lWEeWnKg9exQAIFWb2zyHscwGq93h+WSJiKjHYaAkCgAFZVa0drNz5KhpcJjOwLTpbTjMpXBUlcC04Q04KovrD2hHQY0M4FSZ1SvzJSKinoXXt4gCQG0zbYIaCx85Bc7qKlTuMsDy438AAJqkoYgcMxNVe1ZBER7nlfMQERE1h4GSKAColW1fTIgaexsir7wFdeVnIKq1UEYloGzDEgiqEKgTU712HiIioosxUBIFgJS4MAhAq5e9AUBQqqDulQIAcFQWw/rzDoSPvAGiStPmOYQL5yEiIuooBkqiABCmUUIXq0VBC4U5tSWnYDu6C+rEwRCUKtQVnUDlnlVQxfRF9IQ57TqHLk6LMA3/SiAioo7jbw+iAFBdXY1Y+zmcksIhiE2bjQsKFWoKDsD83ReQ6qqhjOyFiMtvROTYWRDVIc2M6E4hCshIS+iKqRMRUQ/AJ+UQ+TGr1Yq3334bL7/8MsqlEPS5940uO9eW+ROQmhDRZeMTEVHw4h34RH6oqqoKL7zwAlJSUrBgwQJMnToVh3dtwfjUeChE7z5TWyEKGJ8azzBJRESdxhVKIj9SXl6Of/7zn/jHP/4Bq9WKe+65B0888QRSUlIAAIUmGyYv3ga7F9v7aJQitsyfiORYrdfGJCKinoUrlER+oLS0FH/+85+RkpKCF198EXPnzsXx48fx1ltvucIkACTHavFMZrpXz/1sZjrDJBEReYRFOUQ+dP78efz973/HW2+9BQB44IEH8MgjjyAxMbHF12SN1qHUYscrm455fP7HpgyBfrTO43GIiKhn4yVvIh84c+YM/va3v+Gdd96BSqXCH/7wB8yfPx/x8fHtHiN7nxFPrTsMhyTDKbX/f2OFKEApCng2M51hkoiIvIKBkqgbFRQU4MUXX8S///1vaLVa/OlPf8LDDz+MmJiYTo1XaLJh4ZqD2JFfCoUotBosG/aPT43HohnDeZmbiIi8hoGSqBvk5+fjhRdewIcffojo6Gj87//+Lx588EFERkZ6Zfy8IjNW5BqRc6wYxjKb2xN1BNQ3Lc9IS8CcsTpWcxMRkdcxUBJ1oSNHjuD555/Hxx9/jF69euGxxx7D/fffj7CwrnvEodXuwKkyK2odEtRKESlxYXwCDhERdSkGSqIucPDgQfz1r3/Fp59+ir59++KJJ57AvHnzEBoa6uupEREReR3bBhF50Q8//ICZM2dixIgRyM3NxZtvvonjx4/jD3/4A8MkEREFLQZKIi/Izc3FtGnTMGrUKBw4cADLli1DXl4e7r//fmg0Gl9Pj4iIqEsxUBJ5YMeOHZgyZQrGjh2L48ePY/ny5Thy5AjuueceqFQqX0+PiIioWzBQEnWQLMv4+uuvMWnSJEyYMAHnz5+HwWDAoUOHMGfOHCiVLIAhIqKehYGSqJ1kWcZXX32Fa665BpMnT4bZbMaaNWvw008/Yfbs2VAoFL6eIhERkU8wUBK1QZZlrF27FldddRVuuukmyLKML7/8Et999x2mT58OUeT/RkRE1LPxNyFRCyRJwqefforLLrsM06dPh1arxebNm7Fr1y7cdNNNEATB11MkIiLyCwyURBdxOBxYsWIFhg0bhtmzZyMhIQHbtm3Dtm3bMHnyZAZJIiKiizBQEl1QV1eH9957D5dccgnmzJmDAQMGYNeuXdi8eTMmTJjg6+kRERH5LQZK6vHsdjv+9a9/IS0tDffccw+GDRuG7777Dl9++SWuvvpqX0+PiIjI77G/CfVY1dXVWLp0Kf72t7/hzJkzmDVrFtauXYsRI0b4empEREQBhYGSehyr1Yq3334br7zyCoqLi3H77bfjz3/+My655BJfT42IiCggMVBSj1FVVYU33ngDr776KioqKnDXXXdhwYIFGDx4sK+nRkREFNAYKCnolZeX45///Cf+8Y9/wGq14p577sETTzyBlJQUX0+NiIgoKDBQUtAqLS3Fa6+9htdffx21tbX43e9+h8cffxz9+vXz9dSIiIiCCgMlBZ2ioiL8/e9/x5tvvglZlvHAAw/g0UcfRWJioq+nRkREFJQEWZZlX0+CyBvOnDmDl19+Ge+88w6USiUeeughzJ8/H7169fL11IiIiIIaAyUFvIKCArz00ktYtmwZtFot/vjHP+Lhhx9GbGysr6dGRETUIzBQUsA6fvw4XnjhBXzwwQeIiorC//7v/+LBBx9EVFSUr6dGRETUozBQUsA5cuQIFi1ahI8//hjx8fF49NFHcf/99yM8PNzXUyMiIuqRWJRDAePQoUP461//ipUrV6Jv37549dVX8bvf/Q6hoaG+nhoREVGPxmd5k9/78ccfMXPmTAwfPhx79uzBm2++iePHj+Phhx9mmCQiIvIDXKGkTrHaHThVZkWtQ4JaKSIlLgxhGu/+OOXm5uK5557Dl19+iUGDBmHZsmWYO3cuVCqVV89DREREnmGgpHbLKzJjRa4ROUeLYTTZ0PjmWwGALlaLjCEJuHOMDoN7R3T6PDt27MBzzz2HzZs3Y+jQoVi+fDmysrKgVPLHlYiIyB+xKIfaVGiyYeGag9iRXwqFKMAptfwj07B/fGo8Fs0YjuRYbbvOIcsycnJy8Nxzz2Hr1q0YNmwYnnzySdx6661QKBTeeitERETUBXgPJbUqe58Rkxdvw64TZQDQaphsvH/XiTJMXrwN2fuMrR4vyzI2bNiAa6+9Ftdddx0qKyuxevVq7N+/H7Nnz2aYJCIiCgAMlNSiJTl5WLD6IOwOqc0geTGnJMPukLBg9UEsyclrsl+WZaxbtw5XXXUVbrzxRjidTqxfvx7ff/89ZsyYAVHkjyYREVGg4G9talb2PiNe2XTMK2O9sukYDBdWKiVJwqpVq3D55ZfjlltuQWhoKDZt2oTdu3dj6tSpEATBK+ckIiKi7sN7KKmJQpMNkxdvQ0X+j7AezoH9zBE4zSUQNWFQJw5G1LW3Q5OY6jq+6rt1sP53Gxzl5yDV2qAIi4EmaSiixmVB3as/AECjFPGHQRV46+W/4r///S+uu+46PPnkk5g4caKv3iYRERF5CQMlNTF3WS52nSjD+c8WwVltRtjQa6GKT4bTVomqvWtQez4fCbOfRWjKSABAxY4VgCBAnTAAYkg4HBXnUblnFZzmMvS5+zWo4voBkhPVBfsxqmo3nnzySVx99dU+fpdERETkLQyU5CavyIzrX9sOAHBaK6AIi3bbL9VW48y/fgd1fH/0vv35FsepKy3E2aUPIGpcFqInzHFt3zJ/AlITOt9SiIiIiPwP76EkNytyjVCI9fcxXhwmAUBUh0IVp4PDXNrqOKI28sIffqnSVogCPtrTetU3ERERBR4GSnKTc7S41YpuqcaK2qLjUMXrmuyTJSdkRx3qygpR9tXrELXRCB8x2bXfKcnIOVbcJfMmIiIi3+GjR8jFYnfAaLK1eoxp81uQ62oQNU7fZJ/x77cBzjoAgDI2CYl3vABlZC/3Y8pssNodXn9MIxEREfkOVyjJpaDMitZuqK3YvhzWw1sRc908tyrvBolzX0bi3FcQd/MjENWhOP/J/0NtSYHbMTKAU2VW706ciIiIfIqBklxqHVKL+yp2fozKXQZET7gLkaNubvYYTWIqNElDEZ6egd63LwJkoGLbhx06DxEREQUeBkpyUSub/3Go2PkxKnd+jKhr70DUuNntGkvUaKGK64e68jPtPg8REREFJv5mJ5eUuDBc/Jyaim8/qQ+T4/SIvvaOdo/ltFWiruQUVNF93LYLF85DREREwYOVEeQSplFCF6tFwYXCnKrc1ajcsQIhA0chdNBo2M8ccTtekzQUUo0VRYb/Q9ilk6CM6QtBqYaj/AyqvlsH2VmHqItCqC5Oy4IcIiKiIMPf7OQmY0gClucWwCnJsOXvBQDUnPge50983+TY/gvWQ1CqoU4YAMtPG+Awl0J21EIRFoMQ3XBEzlgIdaP2QgpRQEZaQre9FyIiIuoefFIOuWn8pJyuwCflEBERBR/eQ0luBveOwPjUeNfTcrxFIQoYnxrPMElERBSEGCipiUUzhkPp5UCpFAUsmjHcq2MSERGRf2CgpCaSY7V4JjPdq2M+m5mO5FitV8ckIiIi/8BASc3SnP4eFduXe2Wsx6YMgX5002d/ExERUXBgoKQmvv32W9xxxx24oZ+MF6YPg0YpdvieSoUoQKMU8dLM4Xgwo+ljGomIiCh4sMqb3Pz888+45pprMHLkSGzYsAEajQaFJhsWrjmIHfmlUIgCnFLLPzIN+8enxmPRjOG8zE1ERNQDMFCSy9mzZ3H11VcjKioK27dvR3R0tNv+vCIzVuQakXOsGMYyGxr/4Aiob1qekZaAOWN1rOYmIiLqQRgoCQBQWVmJCRMmoLy8HLt370ZSUlKrx1vtDpwqs6LWIUGtFJESF8Yn4BAREfVQDJQEu92OG2+8ET/++CN27tyJ9HTvVngTERFRcOOSUg8nSRLuvvtu7Nq1C5s3b2aYJCIiog5joOzhHnvsMRgMBqxatQrjx4/39XSIiIgoADFQ9mCvvvoqXn31Vbz++uuYOXOmr6dDREREAYr3UPZQ2dnZuP3227FgwQK88MILvp4OERERBTAGyh7om2++wa9//WvcfvvteP/99yEI3n1uNxEREfUsDJQ9zP79+zFhwgSMHTsW69evh0ql8vWUiIiIKMAxUPYgBQUFuPrqq9GnTx9s3boVERFsPk5ERESeY6AMYB1pLm4ymXDttdeipqYGu3btQmJiYjfPloiIiIIVq7wDjOvxh0eLYTQ18/jDWC0yhiTgzjE6DO5dvwJZXV2NzMxMlJSU4Ntvv2WYJCIiIq/iCmWAKDTZsHDNQezIL4VCFOCUWv62NewfnxqP5zIvxfz77sLGjRuRk5ODMWPGdOOsiYiIqCdgoAwA2fuMeGrdYTgkudUgeTGFKEB2OlC68S18/NyDmDZtWhfOkoiIiHoqXvL2c0ty8vDKpmOdeq1TkiFDROyvH8KpsDQvz4yIiIionujrCVDLsvcZOx0mGzT0mHxl0zEY9hm9MS0iIiIiN7zk7acKTTZMXrwN5jP5qNj+IWpLCiDZKiEo1VDGJiHiimkIH5bhOr7qu3Ww/ncbHOXnINXaoAiLgSZpKKLGZUHdqz8AQKMUsWX+RCTHan31toiIiCgIMVD6qbnLcrHrRBmsJ/fD+vN2aPqlQxkRB6muBtbDW2H7eTuixs9B9DVZAICKHSsAQYA6YQDEkHA4Ks6jcs8qOM1l6HP3a1DF9YNCFDBuYByW38vCHCIiIvIeBko/lFdkxvWvbW/1mHMfPgKnxYR+v3+vxWPqSgtxdukDiBqXhegJc1zbt8yfgNQENjUnIiIi7+A9lH5oRa4RCrH152srQiMhCK1/+0Rt5IU/KH55nSjgoz28l5KIiIi8h4HSD+UcLW7SHkiWJciSE05bJcw/fInqkz8gcuxtTV4rS07IjjrUlRWi7KvXIWqjET5ismu/U5KRc6y4y98DERER9RxsG+RnLHYHjCZbk+2mjW/C8tOG+k8USsRO/h9EXH5jk+OMf78NcNYBAJSxSUi84wUoI3u5H1Nmg9XuaPExjUREREQdwXso/czhs5WY+vrOJtsdlcVw2ioh2Spgy98Ly08bET3pbkSNmel2nP18PuB0oK7iHMz71sJhLkXvrOddld4NvvzDtUjvG9Wl74WIiIh6Bi5R+Zlah9TsdmVUApRRCQCA0EGjAQAV2z5A+PDroND+Egw1ian1/00aCm3qGJz5132o2PYhEm57sl3nISIiIuoo3kPpZ9TK9n1LNH3SAMkJR8X5Fo8RNVqo4vqhrvxMp89DRERE1BamCj+TEheG1uu769UUHAAEEcroxBaPcdoqUVdyCqroPm7bhQvnISIiIvIGXvL2M2EaJXSxWhRcKMwp++p1iBot1H3SoAiLhtNWBdvRnbD9vAORY2ZCoY2CVGNFkeH/EHbpJChj+kJQquEoP4Oq79ZBdtYh6to73M6hi9OyIIeIiIi8hqnCD2UMScDy3AI4JRmapKGwHNgCy8GvIdmtEFUhUCUMQNy0R1yPXhSUaqgTBsDy0wY4zKWQHbVQhMUgRDcckTMWQh2vc42tEAVkpCX46q0RERFREGKVtx9qz5NyPMEn5RAREZE38R5KPzS4dwTGp8a3+bScjlKIAsanxjNMEhERkVcxUPqpRTOGQ+nlQKkUBSyaMdyrYxIRERExUPqp5FgtnslM9+qYz2amIzlW69UxiYiIiBgo/VjWaB0enZLmlbEemzIE+tG6tg8kIiIi6iAW5QSA7H1GPLXuMBySDKfU/m+XQhSgFAU8m5nOMElERERdhoEyQBSabFi45iB25JdCIQqtBsuG/eNT47FoxnBe5iYiIqIuxUAZYPKKzFiRa0TOsWIYy2xw/+bJ6B8Xhoy0BMwZq2M1NxEREXULBsoAZrU7cKrMilqHhNtmTEfmdVdj8d9e9PW0iIiIqIfhk3ICWJhGifS+UQCA/lEKnDOe8u2EiIiIqEdilXeQ0Ol0MBqNvp4GERER9UAMlEGCgZKIiIh8hYEySOh0Opw9exZ1dXW+ngoRERH1MAyUQUKn00GWZZw5c8bXUyEiIqIehoEySPTv3x8AUFBQ4OOZEBERUU/DQBkkkpOTAYD3URIREVG3Y6AMElqtFvHx8QyURERE1O0YKIMIK72JiIjIFxgogwgDJREREfkCA2UQYaAkIiIiX2CgDCINgZKPZyciIqLuxEAZRHQ6HSwWCyoqKnw9FSIiIupBGCiDCHtREhERkS8wUAYRnU4HgL0oiYiIqHsxUAaRhIQEqNVqBkoiIiLqVgyUQUQURSQnJzNQEhERUbdioAwybB1ERERE3U3p6wmQd+l0OhzJP4nDZytR65CgVopIiQtDmIbfaiIiIuoagsymhUEhr8iMFblGrNp9BGZZA0EQXPsEALpYLTKGJODOMToM7h3hu4kSERFR0GGgDHCFJhsWrjmIHfmlUIgCnFLL386G/eNT47FoxnAkx2q7caZEREQUrBgoA1j2PiOeWncYDkluNUheTCEKUIoCnslMR9ZoXRfOkIiIiHoCBsoAtSQnD69sOubxOI9OScNDGYO9MCMiIiLqqVjlHYCy9xm9EiYB4JVNx2DYx6pwIiIi6jyuUAaYQpMN4x7+B8oPfAP7mSNwmksgasKgThyMqGtvhyYx1XVs6frFsB76uskYyth+SLrvbdfnGqWILfMn8p5KIiIi6hT2kgkwC9ccRPn3X8JhMyPyykyo4pPhtFWiau8anP/wESTMfhahKSNdxwtKDXrf/rzbGIJS7fa5Q5KxcM1BLL93TLe8ByIiIgouDJQBJK/IjB35pYi5/gEowqLd9oUOHIUz//odqnavdAuUEARokoa2Oq5TkrEjvxT5xWakJrClkL+x2h04VWZlX1EiIvJb/K0UQFbkGqEQBeCiMAkAojoUqjgdHObSTo2tEAV8tMeIpzPTPZwleUNDX9Gco8UwmmxofF8K+4oSEZG/YaAMIDlHi1tsDyTVWFFbdBwh/Ue4bZcdtSh8fQ4kWxUU4THQDh6LqPFzoAh1DyFOSUbOsWI8DQZKX2pPX1EZQIHJhuW5BXh/9yn2FSUiIp9joAwQFrsDRpOtxf2mzW9BrqtB1Di9a5s6YQDUCQOg6tUfAFBTeAjmfZ+jumA/+vxmMUR1qNsYxjIbrHYHL6f6SOO+ogDa7C3asH/XiTJMXryNfUWJiMhnmBwCREGZFS3Fi4rty2E9vBUx1/+PW5V35FXT3Y4LHXA51AkDUfr5C7D8tLHJfhnAqTIr0vtGeXXu1DZP+oo6LzS2X7D6IEotdvYVJSKibsdAGSBqHVKz2yt2fozKXQZET7gLkaNubnMc7ZCrIahCYD97tNn9v5o8BTFSJeLi4tr9odFoPHpvPZ23+4r2CtdAz5XKdmHBExGRd/BvzgChVjbtQV+x82NU7vwYUdfegahxszswmgwIQrN77szSAxWnUVZWhrKyMhw5csT15/LycjTXtjQsLKxJyIyNjW01hEZFRUEU2Ve/0GTDU+sOe3XMv6w7jHGD4nlPZQtY8ERE5H0MlAEiJS4MAuD65Vfx7Sf1YXKcHtHX3tHucWxHvoVcZ4em75Am+wQAzz3xcIsrNE6nExUVFa6AefGHyWRCWVkZSkpK3IJodXV1k7FEUWwzdPaE1dCFaw7CIcmoLTqBiu0forakAJKtEoJSDWVsEiKumIbwYRlur5GdDpi//wKWg1vgKD8HKFRQxycjOuNehPS7hH1FW8CCJyKirsNAGSDCNEroYrUoMNlQlbsalTtWIGTgKIQOGg37mSNux2qShsJRWYzSdS9De8kEqGL6AIKAGuNBmL9bB1W8DuEjb2hyDl2cttXLfQqFwhXsOqK6urrFENr4o72roR0Nov66GtrQVxQApBoLFBHxiL5kIpQRcZDqamA9vBVl6/8OR2URoq/JAgDIkhMlq59Hzen/ImrMrdAkDYVUZ0ft+XzIdTUA2Fe0OSx4IiLqWgyUASRjSAKW5xbAlr8XAFBz4nucP/F9k+P6L1gPQaOFGBaNqn2fQ7JWQJadUEYmIGLUzYi6ejZEdYjbaxSigIy0hC6Zd2hoKPr164d+/fq1+zXNrYY2rIA2/igtLcXRo0e9uhracGxISEgzM/Oehr6iTklGSP8RTVo+aVOvwrnKIlj2b3QFSvP361F94nskzvmbW8N6bepot9eyr+gvWPBERNT1GCgDyJ1jdHh/9ykk3vlim8cqQsKRMPPP7R7bKcmYM9Z/VmD8YTVUq9V2+JJ8R1ZDW+sr6vo6hEZCsla4Pq/6bh00yentevoR+4qy4ImIqLswUAaQwb0jMD41HjvzSyCj+aKazlCIAsYNjAuKy6OdXQ2trKxsM4R6YzW0YZ82KhYFpqavl2UJkGVINRbYjuxE9ckfEHv9/QAAR1UJnJVF0KZehfJtH8CyfzOk6iqo4vohcsytCB9+ndtYPb2vKAueiIi6T8/8TROgnE4nQg6tgVNxFUSlusVK7Y5SigIWzRjulbECkUKhQGxsLGJjYzF4cPsvaXZkNbThcr3JZIIsy1AlDEDfe15vMqZp45uw/LThwsSUiJ38P4i4/EYAgNNcBgCwHPoayoh4xE65H6JGC8tPG1H25WLIzjpEXPZr11g9va9oQ8FTc8z7N8L01esQVCHQPbLKtV2WZVj2b4Tlx69QV34WgqiEqld/RI65FdrU0Sx4IiJqgSA3d62P/I7FYsEdd9yBL7/8EvNeeA8byzt2Kbg1L80czst43USSJFRUVGDnz6fx8PrCJvsdlcVw2ioh2Spgy98Ly08bET3pbkSNmYma0z+j6KPHAIUSSfe9A2VU/T2vsizj/Pt/gtNWiX4Pvu823rW23UiJACIjI1v8iIqKQmRkJFQqVXd8CbpFXpEZ17+2vdl9DnMpzi59EKJKA8lucwuUFds/QuWubIRffiO0aeMgO2ph/n49ak79iF4zFkI7ZBwAYMv8CUGxoh8M2EuUyD/w/7oAcPbsWdx88804duwYvvjiC9x0000eFRo09tiUIQyT3ajhkvigAQoATQOlMirBFRRDB9UX2lRs+wDhw69zPX9dFdvPdQwACIKAkIFXoGr3p3BaK6AIi3bt+/H7fdh5+iiqqqpQVVUFp9PZ4txCQkJaDJtthdHGH/7Q2qlxwdPFTBveQEhyOsSQCNiOfuu2z3JwMzT9LkXcDQ+6toUOuByFr8+F5eDX0A4Zx4InP8BeokT+h4HSzx04cABTp06FLMvYuXMnRo4cCQB4KGMw4sM1rlYobRV3NKYQBShFAc9mpjNM+sjFfUVboumTBsuPX8FRcR7qxFQIqhbCWsOFhka3QQgA9n79pWu1RpZlVFdXu8JlZWWl68/NfTTsP3XqVJPtDoejxTmr1epOh9HGHyEhIRA6eVtHSwVPlkM5qCk8hL7z3kLF9uVNXygqIWrC3DYJSjUEpQqCUg2ABU++xF6iRP6LgdKPbdiwAbNmzcLgwYPxxRdfICkpyW1/1mgdrhkU3+ZfsA0a9o8bGMe/YH2scV/R1tQUHAAEEcroRAiiAqGDx8J25Fs4KoqgjO4N4EJQPPEDlNF9oND+cr/kxX1FBUGAVquFVqtFYmJip+cuyzJqamraFUYbf5w+fdptX2VlJerq6lo8j0ql6lQYVYWGN/t1dVorUP71u4iZdDeUkfHNnjPyykyUf7MM5v2boB1Sf8m7KvczyHYbIq785dGmPb3gyRfYS5TIv/FvQz/11ltv4Q9/+ANuvPFGfPLJJwgPD2/2uORYLZbfO+aXS0DHimEsa+YSUJwWGWkJmDNWx3u//ERDX1GnJKPsq9charRQ90mDIiwaTlsVbEd3wvbzDkSOmekKitHj56Dm+HcoWvkUoq+9HaJGC/P+TagrPon46U+4xu7KvqKCICA0NBShoaHo3bu3R2PZ7fZ2hdHGH+fOncPRo0fdttXU1LjGbLHgadObUMUmIfzym1qcT+ToWyAo1TBtegumr/4JABBDItDrtr8gpN+lruN6esFTd2MvUSL/x6IcPyNJEh5//HH8/e9/x8MPP4xXX30VCoWiQ2PwJvXA0LhwxHJgMywHtqCurBCS3QpRFQJVwgCEj7yhyaMXa0tOoWLrB6gpPARITqgSBiBqnB7a1KvcjutJhSO1tbUwm82orKzEdydL8fiWErf91iPfovSLl9Hnt/+EOr5+lap0/WLYjn7rVpRjObAZZRvfROSoaQgZOApwOmA59A2q83PRa8ZChA4c5Tp2bNUODIgUEBsbi5iYGLf/Nvw5LCys05ftqV72PiMWrD7otfFYhEjUNRgo/YjNZsOcOXOwdu1aLF68GA8//LCvp0RdbO6yXOw6Udahe2Db0tBXtKe2tjl8thJTX9/p+lyqrcaZf/0O4ekZiBqnd20v2/QWqvNy6yvjRSVkyYEzS36D8BGTETvlAbcxz69YAEdVCfo9sMy1LWr3mzAbf4bJZEJlZWWzc1GpVC2GzdaCaExMTFBV3XdWocmGyYu3odpqQeWubNQWnURt0XFI1VWIuuZ2RI+/0+34tto+AYBGKWLL/IlBe8sPFxTIV/hT5ifOnz+PzMxM/Pe//8XatWsxbdo0X0+JusGiGcMxefE2rwbKnt5X9OKCJ8lWBclagaq9a1C1d02T4wtfy0Lo4LGIGnsbZIcd6j5pTY7R9BkMe+EhSLXVENWhEADs2rjW9Yu64VGhJpMJ5eXlzf634c8nT57EDz/84Npmt9ubfR/h4eHtDqKNj4mIiAiaVdGGXqJStRnmnzZCnTAA2rSxsOzf1OzxlTtWuNo+RU+629X2qWTVM662T8HYS5RV7+QPGCj9wKFDhzB16lTU1dVh+/btuOKKK3w9JeomybFaPJOZ7tVLes9mpgft6kt7XFzwpAiPQe/bFzU5rnLPKtgLDyFh1tMQtZEQ1fVfM/vZI25PHZJlGfazRyGGhENQ1T/f/eKCp84+KhSob5DfniBqMplgNBpdn7f0yFCFQuFa5ezoyqg/tHxqkFdkxo78UgCAIioByX/KhiAIcNoqWwyU7Wn75JRk7MgvRX6xOeBvCWHVO/kTBkof27x5M2677TakpKRg/fr1SE5O9vWUqJtljdah1GJnX1EvalzwJCjVCOk/oskxloNfA4Lotk+bNg6WnzZCUKgQOuhKyI46WA99Dfvp/yJq/BwIguD1gqfQ0FAkJSU16eLQFkmSUFVV1SR0NhdIz5w5g4MHD7q22WzNdxfQarWdCqIdeYZ9ezXuJdruFdd2tH0CEBS9RFn1Tv6GgdKH3n33XTzwwAOYMmUKDAYDIiIC+1/L1HnsK+pdd47R4f3dpzr8uvjMR1H1/XpYD30Dy4HNEEQllLF9EXfzIwi7dBKA+l/Mc8b6/ussiiKio6MRHR2NgQMHdui1dru9xQB68cro4cOH3fY11xxfEARER0d36hJ9aGhos3NsqZdoa9rb9inQe4my6p38EYtyfECSJCxcuBAvvfQSHnjgAfzzn/+EUslsT+27hNWgYT8vYTWPBU/eJ8syzGZzs5fjW7tUX15eDrPZ3OyYGo2mSdiMjEvAzt7T3Rr1N3DaKnH6n3c2W5QDAOYfv4JpyzuAs77HqRgSgfjpTyA05TK34wQAh56+IeAKVlj1Tv4qsP5PCgLV1dW466678Nlnn+HVV1/Fn/70p6C5gZ48x76i3sOCJ+8TBMHVQL5///4dem1dXZ2rcKmtIHr0TBmQ2PG/Fy0HNsO05Z0mbZ9KPnuuSdunQOwlWmiy4al1h7065l/WHca4QfH8Byl5jCuUndDZtgzFxcXIzMzEgQMH8PHHH2P69OldP1kKeGwD0nlczQlMPxrLMeOtXc3ua2mF0llj6VDbJwCYVLsPlyTUN+jv3bs3EhISXP9Vq9XwN62tulef2g/r4RzYzxyB01wCURMGdeJgRF17OzSJqS2O2dNX3cl7+FupnTxty/Dzzz9j6tSpqK6uxvbt23HllVd229wpsIVplAG1iuJPWPAUmNTKjhf4OMpOt7vtU4NdO7dj7bEfUVFR0eQ1MTExbiHz4o/G27Xarl/da1z13hzLj/+Bs9qMyCszoYpPhtNWiaq9a3D+w0eQMPtZhKaMbPZ1wVT1Tr7FQNkGb7Rl+OabbzBz5kwkJycjJyenw5eKiKjzWPAUeC7uJdoeivBYAO1r+wTULwT8uH0TwjRK1NbWori4GEVFRa6Piz//+eefUVRUhNLS0ibtmsLDw5sNms1ti4yM7NRtTo2r3psTO+UBKMKi3baFDhyFM//6Hap2r2wxUALBUfVOvsdA2QpvtGWoPvQ17rvvPvzqV7/CypUrERXFlSai7pY1WodrBsV3uOBp3MA4Fjz5wMW9RAGg+vh3kOpqINdWAwDqygphPVL/RKTQQVdCGZXQrrZPDRr3ElWr1ejXrx/69evX5tycTidKS0vdwubFAXTv3r2ubQ6Hw+31Go2m3eEzNjbW1Y6prar3i8MkAIjqUKjidHCYW17ZBAK/6p38A++hbIEnbRkaK9/2IbKGR2PJkiV8lBqRH2DBU2B4et1hVy9RADj95j1wVhU3e2zS/cugjO5d3yboQtsnR2WRq+1TxKhpCLt0kitQKkQBc8f07/IVOVmWUV5e3mr4bPxRU1Pj9nqlUolevXohoW8yKiY/2WzVe2ukGitOv3UPQvqPQMLMP7d6bKBWvZP/YKBshrdv5H9x5nA2kCXyQyx48l95RWZc/9r2Lht/y/wJfvUPBlmWYbFYmg2feSXV2BkxvsNjln7xCqw/70DiXX9vtTCnwZd/uJb3a1On8W/OizS0ZagtOoGK7R+itqQAkq0SglINZWwSIq6YhvBhGa7jS9cvhvXQ103GUcb2Q9J9bwMAnlp3GNewLQOR32HBk/8a3DsC41Pju6yXqD+FSaC+JVNERAQiIiKQmuoe/n40lmNnC1XvLanYvhzWw1sRc/3/tCtMAkCtQ+rQOYgaY6C8yMI1B+GQZEg1Figi4hF9yUQoI+Ig1dXAengrytb/HY7KIkRfk+V6jaDUoPftz7uN0/gxXw5JxsI1B9mWgYioA9hLtF5Hq94rdn6Myl0GRE+4C5Gjbm77BZ08D1FjDJSNNG7LENJ/RJPn/2pTr8K5yiJY9m90C5QQBGiShrY4LtsyEBF1XHKsFs9kpnv1FqRnM9MD7mpRR6reK3Z+jMqdHyPq2jsQNW52u88hXDgPUWfxnyONNLRlaI0iNBKC0PEvW0NbBiIiar+s0To8OqVpb8nOCNReog1V722p+PaT+jA5To/oa+/o0DkaV70TdQZ/ehppri2DLEuAXH8J3HZkJ6pP/oDY6+93P8ZRi8LX50CyVUERHgPt4LGIGj8HitBfViPZloGIqHPYSxTIGJLgVvV+sarc1ajcsQIhA0chdNBo2M8ccdvf2lU0hSggIy3Bq/OlnoeB8gKL3QFjo55nDUwb34Tlpw31nyiUiJ38P4i4/EbXfnXCAKgTBkDVq75ZeU3hIZj3fY7qgv3o85vFbk9lMJbZYLU7+K9AIqIO6um9RO8co8P7u0+1uN+WvxcAUHPie5w/8X2T/f0XrG/xtU5JxpyxgRu2yT+wbdAFh89WYurrO5tsd1QWw2mrhGSrgC1/Lyw/bUT0pLsRNWZmi2NZj3yL0s9fQMyv5iHyqulu+9iWgYjIMz21l2hrz/LuLD7Lm7yFS2UXtNQuQRmVAGVU/aWA0EGjAQAV2z5A+PDroNA2Hwy1Q66GoAqB/ezRdp+HiIjaZ3DvCDydmY6nkd6jeomy6p38GYtyLmhvuwRNnzRAcsJRcb6NI+Vmn2rAtgxERN7T0Ev0cl0M0vtGBW2YBH6pevemQKx6J//EdHNBQ1uGttQUHAAEEcroxBaPsR35FnKdHZq+Q9y2sy0DERF5glXv5K+C959yHdTQlqHgQmFO2VevQ9Rooe6TBkVYNJy2KtiO7oTt5x2IHDMTCm0UHJXFKF33MrSXTIAqpg8gCKgxHoT5u3VQxesQPvIGt3OwLQMREXmKVe/kj5huGmnclkGTNBSWA1tgOfg1JLsVoioEqoQBiJv2iOvRi4JGCzEsGlX7PodkrYAsO6GMTEDEqJsRdfVsiOoQ19hsy0BERN7S06veyf+wyruRvCIzrn9te5eNv2X+hKCqOCQiIt/rqVXv5F8YKC/CtgxERBSoelLVO/kXBsqLFJpsmLx4G+xebO+jUYrYMn8iLzEQERFRUGKV90XYloGIiIioYxgom8G2DERERETtx0vercjeZ2RbBiIiIqI2MFC2odBkc7VlECBDbqX9eUNbhvGp8WzLQERERD0GA2U75RWZccujr8DZeyhqVZFsy0BERER0AQNlO1ksFsTExOD111/H3N/OY1sGIiIioguYgtpp165dcDgcmDhxIsI0SqT3jfL1lIiIiIj8Aqu822nbtm1ISEjA0KFDfT0VIiIiIr/CQNlOW7duxcSJEyEILRflEBEREfVEDJTtYLVasXfvXkyaNMnXUyEiIiLyOwyU7bB7927X/ZNERERE5I6Bsh22bt2K+Ph4XHrppb6eChEREZHfYaBsh23btvH+SSIiIqIWMFC2wWazITc3l/dPEhEREbWAgbINe/bsQV1dHe+fJCIiImoBA2Ubtm7diri4OKSnp/t6KkRERER+iYGyDdu2bcOECRMgivxSERERETWHKakV1dXV2LNnD++fJCIiImoFA2UrcnNzUVtby/sniYiIiFrBQNmKrVu3IiYmBsOHD/f1VIiIiIj8FgNlK3j/JBEREVHbmJRaUFNTg927d/P+SSIiIqI2MFC2YO/evbDb7QyURERERG1goGzB1q1bER0dzfsniYiIiNrAQNmChvsnFQqFr6dCRERE5NcYKJtht9uxa9cutgsiIiIiagcGymbs27cPNTU1vH+SiIiIqB0YKJuxdetWREVFYeTIkb6eChEREZHfY6BsxrZt2zB+/HjeP0lERETUDgyUF6mtrcW3337L+yeJiIiI2omB8iLfffcdqquref8kERERUTsxUF5k69atiIiIwGWXXebrqRAREREFBAbKizTcP6lUKn09FSIiIqKA0ONTk9XuwKkyK2odEkRI+Hbvd/jL/3vC19MiIiIiChiCLMuyryfR3fKKzFiRa0TO0WIYTTY0/gLIsozEcAVuHKHDnWN0GNw7wmfzJCIiIgoEPSpQFppsWLjmIHbkl0IhCnBKLb/1hv3jU+OxaMZwJMdqu3GmRERERIGjxwTK7H1GPLXuMByS3GqQvJhCFKAUBTyTmY6s0bounCERERFRYOoRgXJJTh5e2XTM43EenZKGhzIGe2FGRERERMEj6Ku8s/cZvRImAeCVTcdg2Gf0ylhEREREwSKoA2WhyYan1h326ph/WXcYhSabV8ckIiIiCmRBfcl77rJc7DpR1uSeSfP+jTB99ToEVQh0j6wCAMiSE+bv1qH65I+oKy2AVG2BIqoXtIPHImrsbRBDwgHU31M5bmAclt87ptvfDxEREZE/Cto+lHlFZuzIL22y3WEuRfk3/4YiPBaS/ZeVRtlRi4qdHyPs0okIHzkFitBI1BYdR+UuA6rz9yLxN4shqjRwSjJ25Jciv9iM1AS2FCIiIiIK2kC5ItfYbGsg04Y3EJKcDjEkAraj37q2C0o1kh5YBkVopGtbSP8RUET2QunnL8J2dBfCh2UAqF+l/GiPEU9npnfPmyEiIiLyY0F7D2XO0eImYdJyKAc1hYcQO+X3TY4XRIVbmGyg6ZMGAHCaS1zbnJKMnGPFXp4xERERUWAKykBpsTtgvKhwxmmtQPnX7yJm0t1QRsa3e6yaggMAAFV8f7ftxjIbrHaH55MlIiIiCnBBGSgLyqy4uNLItOlNqGKTEH75Te0ex2EuRfm296FOHIzQ1NFu+2QAp8qsnk+WiIiIKMAFZaCsdUhun1uPfAtb/l7E3vgHCILQrjGc1WYUr3wakIH46U9AEJp+qS4+DxEREVFPFJRFOWrlL+FPqq2GafNbiBx1M5ThsZBqLAAAWaq/XC3VWABRCVEd4nqNs8aC4uz/g9NiQu/bn4cqOrHN8xARERH1VEEZKFPiwiCg/rK0ZKuCZK1A1d41qNq7psmxha9lIXTwWCTc+n8ALoTJT/4MR2URemc9D3XCgGbPIVw4DxEREVFPF5SBMkyjhC5WiwKTDYrwGPS+fVGTYyr3rIK98BASZj0NUVtf3e0KkxXnkZD1V6gTB7V4Dl2cFmGaoPzyEREREXVI0CaijCEJWJ5bAKdSjZD+I5rstxz8GhBE1z6pzo5iw5OoLTqBmMm/AyQn7GeOuI4XtVFQxfQBUN+HMiMtoXveCBEREZGfC9pAeecYHd7ffardx0vWCtSeywMAlG95p8n+sGHXIX7afAD1fSjnjNV5ZZ5EREREga5HPsvbE3yWNxEREZG7oC5TXjRjOJRi+9oEtZdSFLBoxnCvjklEREQUyII6UCbHavGMl5+3/WxmOpJjtV4dk4iIiCiQBXWgBICs0To8OiXNK2M9NmUI9KN57yQRERFRY0F9D2Vj2fuMeGrdYTgkuUP3VCpEAUpRwLOZ6QyTRERERM3oMYESAApNNixccxA78kuhEIVWg6UIGRIEXBIDvDMvg5e5iYiIiFrQowJlg7wiM1bkGpFzrBjGMhsafwEE1Dctn5TWCxuX/B9qik/hhx9+gCgG/d0BRERERJ3SIwNlY1a7A6fKrKh1SFArRaTEhbmegLNr1y5cc801+Oijj3DnnXf6eKZERERE/qnHB8q2zJgxAz/99BOOHDkCjUbj6+kQERER+R1ex23DokWLYDQa8a9//cvXUyEiIiLyS1yhbId58+Zh7dq1OH78OCIjI309HSIiIiK/whXKdnj66adhsVjwyiuv+HoqRERERH6HgbId+vXrhz/+8Y949dVXcf78eV9Ph4iIiMivMFC20xNPPAGVSoXnnnvO11MhIiIi8isMlO0UExODhQsX4p133kFeXp6vp0NERETkN1iU0wHV1dVIS0vDuHHjYDAYfD0dIiIiIr/AQNlB7733Hu655x7s27cPV155pWt7aw3SiYiIiIIZA2UHOZ1OjBgxAomJiXhrxRp8vLcQOUeLYTQ18wjHWC0yhiTgzjE6DO4d4aspExEREXUpBspOeG/lOixYvR+hA66AQhTglFr+EjbsH58aj0UzhiM5VtuNMyUiIiLqegyUHZS9z4in1h2GvbYOEBXtfp1CFKAUBTyTmY6s0bounCERERFR92Kg7IAlOXl4ZdMxj8d5dEoaHsoY7IUZEREREfke2wa1U/Y+o1fCJAC8sukYDPuMXhmLiIiIyNe4QtkOhSYbJi/ehmqrBZW7slFbdBK1RcchVVch6prbET3+TrfjC16c1uJYyth+SLrvbWiUIrbMn8h7KomIiCjgsa9NOyxccxAOSYZUbYb5p41QJwyANm0sLPs3NXt84tymz/y2nz2K8q/fhTZtLADAIclYuOYglt87pkvnTkRERNTVGCjbkFdkxo78UgCAIioByX/KhiAIcNoqWwyUmqShTbaZf9oAQED4yCkAAKckY0d+KfKLzUhNYEshIiIiCly8h7INK3KNUIgCAEAQBAiC0OExJLsNtiM7odENgyqmr2u7QhTw0R7eS0lERESBjYGyDTlHi1vtM9ke1p+3Q66rca1ONnBKMnKOFXs0NhEREZGvMVC2wmJ3wGiyeT7Ogc0QNWEIG3JNk33GMhusdofH5yAiIiLyFQbKVhSUWeFpCXxtSQFqzx5FWPokCEp1k/0ygFNlVg/PQkREROQ7DJStqHVIHo9hOVBfuBM+8oYuPQ8RERGRrzBQtkKt9OzLIzvrYD2UA3ViKtS9B3bZeYiIiIh8iUmmFSlxYeh4TfcvbHm5kKqrED5iSovHCBfOQ0RERBSo2IeyFWEaJXSxWhQ0KsypPv4dpLoayLXVAIC6skJYj+wEAIQOuhKiKsR1rOXAZghKDcIundjiOXRxWoRp+G0gIiKiwMUk04aMIQlYnlvgah1UtvFNOKt+afVjO7ITtguBMun+ZRCj6wOlo6oENSd/RFj6JIghza9AKkQBGWkJXfwOiIiIiLoWn+XdhrwiM65/bXuXjb9l/gQ+KYeIiIgCGu+hbMPg3hEYnxrvelqOtyhEAeNT4xkmiYiIKOAxULbDohnDofRyoFSKAhbNGO7VMYmIiIh8gYGyHZJjtXgmM92rYz6bmY7kWK1XxyQiIiLyBQbKdsoarcOjU9K8MtZjU4ZAP1rnlbGIiIiIfI1FOR2Uvc+Ip9YdhkOSXZXf7aEQAKVCxLOZ6QyTREREFFQYKDuh0GTDwjUHsSO/FApRaDVYNuyPqTmPdU/ezsvcREREFHQYKD2QV2TGilwjco4Vw1hmQ+MvpID6puUZaQmQ87bj+Sf+gCNHjiA1NdVX0yUiIiLqEgyUXmK1O3CqzIpahwS1UkRKXJjrCTjV1dUYNGgQpkyZgvfff9+3EyUiIiLyMgbKbvKPf/wDjzzyCFcpiYiIKOgwUHaT6upqDBw4EL/+9a/x3nvv+Xo6RERERF7DtkHdJDQ0FE888QSWL1+O48eP+3o6RERERF7DFcpu1LBKedNNN2HZsmW+ng4RERGRV3CFshuFhobi8ccfxwcffIATJ074ejpEREREXsEVym5ms9kwcOBATJs2DUuXLvX1dIiIiIg8xhXKbqbVal2rlCdPnvT1dIiIiIg8xhVKH7DZbBgwYAAyMzPx7rvv+no6RERERB7hCqUPNKxSvv/++zh16pSvp0NERETkEa5Q+ojVasXAgQNxyy234J133vH1dIiIiIg6jSuUPhIWFobHHnsM7733XpNVSqvdgcNnK/GjsRyHz1bCanf4ZpJERERE7cAVSh+yWq0YMGAAZsyYgUeffQUrco3IOVoMo8mGxt8UAYAuVouMIQm4c4wOg3tH+GrKRERERE0wUPrYky++hnf3WxCScjkUogCn1PK3o2H/+NR4LJoxHMmx2m6cKREREVHzGCh9KHufEU+tO4ya2joIoqLdr1OIApSigGcy05E1WteFMyQiIiJqGwOljyzJycMrm455PM6jU9LwUMZgL8yIiIiIqHNYlOMD2fuMXgmTAPDKpmMw7DN6ZSwiIiKizmCg7GaFJhueWnfYq2P+Zd1hFJpsXh2TiIiIqL14ybubzV2Wi6+/+QZVB7+B/cwROM0lEDVhUCcORtS1t0OTmOp2vP18Pipy3oP97FFAVCCk/wjE/OpeqKITXccoRAHjBsZh+b1juvvtEBEREXGFsjvlFZmxI78Uld9/CUdlMSKvzETCrKcRM/k+OG0VOP/hI6g+td91fF1ZIYo+/n+QnQ70mv4E4m/6IxymMyj66HE4bZWu45ySjB35pcgvNvvibREREVEPp/T1BHqSFblGKEQBsVMegCIs2m1f6MBROPOv36Fq90qEpowEAFTsWAFBoULCrKcgaupbBKkTU3HmX/ehKnc1YjJ+63q9QhTw0R4jns5M77b3Q0RERARwhbJb5RwthlOSm4RJABDVoVDF6eAwlwIAZMmJ6vx90A4Z5wqTAKCMSkBI/+GwHdvt9nqnJCPnWHGXzp+IiIioOQyU3cRid8DYSuGMVGNFbdFxqOLr+0o6ys9BdtihThjQ5Fh1rwEX9te6bTeW2fiYRiIiIup2DJTdpKDMitaqn0yb34JcV4OocXoAgLO6/n5IMSS8ybFiaDgAGc4ai9t2GcCpMquXZkxERETUPgyU3aTWIbW4r2L7clgPb0XMdfOaVHlDEFp8nYCm+1o7DxEREVFXYKDsJmpl81/qip0fo3KXAdET7kLkqJtd2xWhEQAAqbpp5bZUbQEgQAwJa/d5iIiIiLoK00c3SYkLa7KeWLHzY1Tu/BhR196BqHGz3fYpY/pAUGpQW3KqyVi1Jacu7Fe7bRcunIeIiIioOzFQdpMwjRK62F+qtSu+/aQ+TI7TI/raO5ocL4gKhKZeBdvR3ZDsvxTzOCqLUWM8AO2QcU1eo4vTIkzDTlBERETUvRgou1HGkAQoRAFVuatRuWMFQgaOQuig0bCfOeL20SB6/B2QHXYUr3oW1ce/g+3oLhSvegaK0EhEXjXDbWyFKCAjLaG73xIRERERH73YnfKKzLj+te04v2IB7IWHWjyu/4L1rj//8ujFI/WPXtRdePRiTJ8mr9syfwJSEyK6ZO5ERERELWGg7GZzl+Vi14kyOCXvfdn5LG8iIiLyJV7y7maLZgyHUmy5FVBnKEUBi2YM9+qYRERERO3FQNnNkmO1eMbLz9t+NjMdyY0KfoiIiIi6EwOlD2SN1uHRKWleGeuxKUOgH63zylhEREREncF7KH0oe58RT607DIckd+ieSoUoQCkKeDYznWGSiIiIfI6B0scKTTYsXHMQO/JLoRCFVoNlw/7xqfFYNGM4L3MTERGRX2Cg9BN5RWasyDUi51gxjGU2NP6mCKhvWp6RloA5Y3VsDURERER+hYHSD1ntDpwqs6LWIUGtFJESF8Yn4BAREZHfYqAkIiIiIo+wypuIiIiIPMJASUREREQeYaAkIiIiIo8wUBIRERGRRxgoiYiIiMgjDJRERERE5BEGSiIiIiLyCAMlEREREXmEgZKIiIiIPMJASUREREQeYaAkIiIiIo8wUBIRERGRRxgoiYiIiMgjDJRERERE5BEGSiIiIiLyCAMlEREREXmEgZKIiIiIPMJASUREREQeYaAkIiIiIo8wUBIRERGRRxgoiYiIiMgjDJRERERE5BEGSiIiIiLyCAMlEREREXmEgZKIiIiIPMJASUREREQeYaAkIiIiIo8wUBIRERGRRxgoiYiIiMgjDJRERERE5BEGSiIiIiLyCAMlEREREXmEgZKIiIiIPMJASUREREQeYaAkIiIiIo8wUBIRERGRRxgoiYiIiMgj/x+TBTrbbpqr3gAAAABJRU5ErkJggg==", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAApQAAAHzCAYAAACe1o1DAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABlYUlEQVR4nO3deXhU1f0/8Pe9syWTfSEJS0KAsBkQFREEWaKUuhEBC4kVrBVqa0Urv7qV1q9VW1pbq9biDpUW0QwiiCsFJGyCAXELKJCAyYQty0zWmcls9/7+CBkyTPaZZJa8X8/DI9zl3DMByZtzz/kcQZZlGURERERE3ST6uwNEREREFNwYKImIiIjIKwyUREREROQVBkoiIiIi8goDJRERERF5hYGSiIiIiLzCQElEREREXmGgJCIiIiKvMFASERERkVcYKImIiIjIKwyUREREROQVBkoiIiIi8goDJRERERF5hYGSiIiIiLzCQElEREREXmGgJCIiIiKvMFASERERkVcYKImIiIjIKwyUREREROQVBkoiIiIi8goDJRERERF5hYGSiIiIiLzCQElEREREXmGgJCIiIiKvMFASERERkVcYKImIiIjIKwyUREREROQVBkoiIiIi8goDJRERERF5hYGSiIiIiLzCQElEREREXmGgJCIiIiKvMFASERERkVcYKImIiIjIKwyUREREROQVBkoiIiIi8goDJRERERF5RenvDhAREREFG5PVgRKDCTaHBLVSRHpCBCI0fTdW9d1PTkRERNQFReX1WFegR/6xCuiNZsgtzgkA0uK1yBqZhNsnpmF4cpS/uukXgizLcseXEREREfVNZUYzlm8qxJ7iKihEAU6p7ejUfH5qRiJWzB2L1HhtL/bUfxgoiYiIiNqQd1CPx98/AocktxskL6YQBShFAU9kZyJ3QloP9jAwMFASERERtWJlfhGe2Xrc63YenDUCS7OG+6BHgYurvImIiIgukndQ75MwCQDPbD0O3UG9T9oKVByhJCIiImqhzGjGzOd2weqQINksqCvYCOuZY7CdPQ6psQEJNz6AyEtntnm/7HTg7L/vg91QhtisuxAzcR40ShHbl00P2TmVHKEkIiIiamH5pkI4zs+XlMx1qP3sbdgNZVAlDenU/fWHPoCjrtLtmEOSsXxToc/7GigYKImIiIjOKyqvx57iKtcCHEVkPAYt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", "text/plain": [ "
" ] @@ -124,6 +133,14 @@ "id": "a1684e94", "metadata": {}, "outputs": [ + { + "data": { + "text/html": [], + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + }, { "data": { "text/html": [ @@ -135,7 +152,7 @@ " \n", " \n", " \n", - " \n", + " \n", "
Installed version:v0.9.2-beta.1 (latest: v0.9.1-alpha.6)
Available backends:CVXPY v1.4.1, PICOS v2.4.17
Default backend (corneto.K):CVXPY
Installed solvers:CBC, CLARABEL, COPT, CPLEX, CVXOPT, DIFFCP, ECOS, ECOS_BB, GLPK, GLPK_MI, GUROBI, MOSEK, OSQP, PROXQP, SCIP, SCIPY, SCS
Graphviz version:v0.20.1
Repository:https://github.com/saezlab/corneto
Installed version:v1.0.0.dev0 (up to date)
Available backends:CVXPY v1.5.1, PICOS v2.4.17
Default backend (corneto.opt):CVXPY
Installed solvers:CLARABEL, CVXOPT, ECOS, ECOS_BB, GLPK, GLPK_MI, GUROBI, OSQP, SCIP, SCIPY, SCS
Graphviz version:v0.20.3
Repository:https://github.com/saezlab/corneto
\n", " \n", " \n", @@ -208,7 +225,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 7, "id": "501e5630", "metadata": {}, "outputs": [ @@ -219,7 +236,7 @@ " '_flow_i': Variable((155,), _flow_i, boolean=True)}" ] }, - "execution_count": 5, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -227,7 +244,7 @@ "source": [ "from corneto.methods.steiner import exact_steiner_tree\n", "\n", - "P, G_steiner = exact_steiner_tree(G, terminals)\n", + "P, G_steiner = exact_steiner_tree(G, terminals, out_flow_edge_type=cn.EdgeType.DIRECTED)\n", "\n", "# The problem contains two vector variables, _flow and _flow_i.\n", "# _flow is the normal _flow variable to define a network flow problem on the graph.\n", @@ -238,7 +255,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 8, "id": "5c347f91", "metadata": {}, "outputs": [ @@ -248,35 +265,210 @@ "text": [ "===============================================================================\n", " CVXPY \n", - " v1.4.1 \n", + " v1.5.1 \n", "===============================================================================\n", - "(CVXPY) Dec 24 03:28:24 PM: Your problem has 310 variables, 7 constraints, and 0 parameters.\n", - "(CVXPY) Dec 24 03:28:24 PM: It is compliant with the following grammars: DCP, DQCP\n", - "(CVXPY) Dec 24 03:28:24 PM: (If you need to solve this problem multiple times, but with different data, consider using parameters.)\n", - "(CVXPY) Dec 24 03:28:24 PM: CVXPY will first compile your problem; then, it will invoke a numerical solver to obtain a solution.\n", - "(CVXPY) Dec 24 03:28:24 PM: Your problem is compiled with the CPP canonicalization backend.\n", + "(CVXPY) May 14 09:33:51 PM: Your problem has 310 variables, 680 constraints, and 0 parameters.\n", + "(CVXPY) May 14 09:33:51 PM: It is compliant with the following grammars: DCP, DQCP\n", + "(CVXPY) May 14 09:33:51 PM: (If you need to solve this problem multiple times, but with different data, consider using parameters.)\n", + "(CVXPY) May 14 09:33:51 PM: CVXPY will first compile your problem; then, it will invoke a numerical solver to obtain a solution.\n", + "(CVXPY) May 14 09:33:51 PM: Your problem is compiled with the CPP canonicalization backend.\n", "-------------------------------------------------------------------------------\n", " Compilation \n", "-------------------------------------------------------------------------------\n", - "(CVXPY) Dec 24 03:28:24 PM: Compiling problem (target solver=SCIPY).\n", - "(CVXPY) Dec 24 03:28:24 PM: Reduction chain: Dcp2Cone -> CvxAttr2Constr -> ConeMatrixStuffing -> SCIPY\n", - "(CVXPY) Dec 24 03:28:24 PM: Applying reduction Dcp2Cone\n", - "(CVXPY) Dec 24 03:28:24 PM: Applying reduction CvxAttr2Constr\n", - "(CVXPY) Dec 24 03:28:24 PM: Applying reduction ConeMatrixStuffing\n", - "(CVXPY) Dec 24 03:28:24 PM: Applying reduction SCIPY\n", - "(CVXPY) Dec 24 03:28:24 PM: Finished problem compilation (took 3.863e-02 seconds).\n", + "(CVXPY) May 14 09:33:51 PM: Compiling problem (target solver=SCIP).\n", + "(CVXPY) May 14 09:33:51 PM: Reduction chain: Dcp2Cone -> CvxAttr2Constr -> ConeMatrixStuffing -> SCIP\n", + "(CVXPY) May 14 09:33:51 PM: Applying reduction Dcp2Cone\n", + "(CVXPY) May 14 09:33:52 PM: Applying reduction CvxAttr2Constr\n", + "(CVXPY) May 14 09:33:52 PM: Applying reduction ConeMatrixStuffing\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(CVXPY) May 14 09:33:52 PM: Applying reduction SCIP\n", + "(CVXPY) May 14 09:33:52 PM: Finished problem compilation (took 4.779e-02 seconds).\n", "-------------------------------------------------------------------------------\n", " Numerical solver \n", "-------------------------------------------------------------------------------\n", - "(CVXPY) Dec 24 03:28:24 PM: Invoking solver SCIPY to obtain a solution.\n", - "Solver terminated with message: Optimization terminated successfully. (HiGHS Status 7: Optimal)\n", + "(CVXPY) May 14 09:33:52 PM: Invoking solver SCIP to obtain a solution.\n", + "presolving:\n", + "(round 1, fast) 13 del vars, 342 del conss, 0 add conss, 315 chg bounds, 0 chg sides, 0 chg coeffs, 0 upgd conss, 0 impls, 0 clqs\n", + "(round 2, fast) 22 del vars, 342 del conss, 0 add conss, 315 chg bounds, 0 chg sides, 0 chg coeffs, 0 upgd conss, 0 impls, 0 clqs\n", + "(round 3, exhaustive) 22 del vars, 342 del conss, 0 add conss, 315 chg bounds, 0 chg sides, 0 chg coeffs, 290 upgd conss, 0 impls, 0 clqs\n", + " (0.0s) probing: 51/145 (35.2%) - 0 fixings, 0 aggregations, 0 implications, 0 bound changes\n", + " (0.0s) probing aborted: 50/50 successive totally useless probings\n", + " (0.0s) symmetry computation started: requiring (bin +, int +, cont +), (fixed: bin -, int -, cont -)\n", + " (0.0s) symmetry computation finished: 1 generators found (max: 1500, log10 of symmetry group size: 0.0) (symcode time: 0.00)\n", + "dynamic symmetry handling statistics:\n", + " orbitopal reduction: no components\n", + " orbital reduction: no components\n", + " lexicographic reduction: no permutations\n", + "handled 1 out of 1 symmetry components\n", + "(round 4, exhaustive) 22 del vars, 342 del conss, 1 add conss, 315 chg bounds, 0 chg sides, 0 chg coeffs, 290 upgd conss, 290 impls, 1 clqs\n", + "(round 5, exhaustive) 22 del vars, 342 del conss, 1 add conss, 315 chg bounds, 0 chg sides, 0 chg coeffs, 291 upgd conss, 290 impls, 1 clqs\n", + "presolving (6 rounds: 6 fast, 4 medium, 4 exhaustive):\n", + " 22 deleted vars, 342 deleted constraints, 1 added constraints, 315 tightened bounds, 0 added holes, 0 changed sides, 0 changed coefficients\n", + " 290 implications, 1 cliques\n", + "presolved problem has 288 variables (145 bin, 0 int, 0 impl, 143 cont) and 339 constraints\n", + " 290 constraints of type \n", + " 1 constraints of type \n", + " 48 constraints of type \n", + "transformed objective value is always integral (scale: 1)\n", + "Presolving Time: 0.00\n", + "\n", + " time | node | left |LP iter|LP it/n|mem/heur|mdpt |vars |cons |rows |cuts |sepa|confs|strbr| dualbound | primalbound | gap | compl. \n", + "p 0.0s| 1 | 0 | 115 | - | locks| 0 | 288 | 339 | 339 | 0 | 0 | 0 | 0 | 0.000000e+00 | 6.870000e+02 | Inf | unknown\n", + "i 0.0s| 1 | 0 | 115 | - | oneopt| 0 | 288 | 339 | 339 | 0 | 0 | 0 | 0 | 0.000000e+00 | 6.050000e+02 | Inf | unknown\n", + " 0.0s| 1 | 0 | 497 | - | 6409k | 0 | 288 | 339 | 339 | 0 | 0 | 0 | 0 | 8.181818e+00 | 6.050000e+02 |7294.44%| unknown\n", + "r 0.0s| 1 | 0 | 497 | - |simplero| 0 | 288 | 339 | 339 | 0 | 0 | 0 | 0 | 8.181818e+00 | 5.300000e+01 | 547.78%| unknown\n", + " 0.0s| 1 | 0 | 571 | - | 6654k | 0 | 288 | 339 | 346 | 7 | 1 | 0 | 0 | 2.345455e+01 | 5.300000e+01 | 125.97%| unknown\n", + " 0.0s| 1 | 0 | 639 | - | 6749k | 0 | 288 | 339 | 352 | 13 | 2 | 0 | 0 | 2.772727e+01 | 5.300000e+01 | 91.15%| unknown\n", + " 0.0s| 1 | 0 | 677 | - | 6907k | 0 | 288 | 339 | 357 | 18 | 3 | 0 | 0 | 2.854545e+01 | 5.300000e+01 | 85.67%| unknown\n", + " 0.0s| 1 | 0 | 741 | - | 7029k | 0 | 288 | 339 | 363 | 24 | 4 | 0 | 0 | 2.886860e+01 | 5.300000e+01 | 83.59%| unknown\n", + " 0.0s| 1 | 0 | 797 | - | 7240k | 0 | 288 | 339 | 368 | 29 | 5 | 0 | 0 | 2.929293e+01 | 5.300000e+01 | 80.93%| unknown\n", + " 0.0s| 1 | 0 | 908 | - | 7447k | 0 | 288 | 339 | 372 | 33 | 6 | 0 | 0 | 3.044215e+01 | 5.300000e+01 | 74.10%| unknown\n", + " 0.0s| 1 | 0 | 981 | - | 7656k | 0 | 288 | 339 | 377 | 38 | 7 | 0 | 0 | 3.086909e+01 | 5.300000e+01 | 71.69%| unknown\n", + " 0.0s| 1 | 0 | 1082 | - | 7828k | 0 | 288 | 339 | 383 | 44 | 8 | 0 | 0 | 3.150000e+01 | 5.300000e+01 | 68.25%| unknown\n", + " 0.0s| 1 | 0 | 1166 | - | 8065k | 0 | 288 | 339 | 387 | 48 | 9 | 0 | 0 | 3.212121e+01 | 5.300000e+01 | 65.00%| unknown\n", + " 0.0s| 1 | 0 | 1207 | - | 8437k | 0 | 288 | 339 | 389 | 50 | 10 | 0 | 0 | 3.276923e+01 | 5.300000e+01 | 61.74%| unknown\n", + " 0.0s| 1 | 0 | 1240 | - | 8482k | 0 | 288 | 339 | 393 | 54 | 11 | 0 | 0 | 3.281239e+01 | 5.300000e+01 | 61.52%| unknown\n", + " time | node | left |LP iter|LP it/n|mem/heur|mdpt |vars |cons |rows |cuts |sepa|confs|strbr| dualbound | primalbound | gap | compl. \n", + " 0.0s| 1 | 0 | 1279 | - | 8527k | 0 | 288 | 339 | 399 | 60 | 12 | 0 | 0 | 3.282571e+01 | 5.300000e+01 | 61.46%| unknown\n", + " 0.0s| 1 | 0 | 1330 | - | 8868k | 0 | 288 | 339 | 403 | 64 | 13 | 0 | 0 | 3.285455e+01 | 5.300000e+01 | 61.32%| unknown\n", + " 0.0s| 1 | 0 | 1435 | - | 8969k | 0 | 288 | 339 | 407 | 68 | 14 | 0 | 0 | 3.293114e+01 | 5.300000e+01 | 60.94%| unknown\n", + " 0.0s| 1 | 0 | 1452 | - | 9017k | 0 | 288 | 339 | 411 | 72 | 15 | 0 | 0 | 3.293339e+01 | 5.300000e+01 | 60.93%| unknown\n", + " 0.0s| 1 | 0 | 1478 | - | 9078k | 0 | 288 | 339 | 408 | 76 | 16 | 0 | 0 | 3.295789e+01 | 5.300000e+01 | 60.81%| unknown\n", + " 0.0s| 1 | 0 | 1490 | - | 9161k | 0 | 288 | 339 | 411 | 79 | 17 | 0 | 0 | 3.298752e+01 | 5.300000e+01 | 60.67%| unknown\n", + " 0.0s| 1 | 0 | 1505 | - | 9406k | 0 | 288 | 339 | 414 | 82 | 18 | 0 | 0 | 3.302375e+01 | 5.300000e+01 | 60.49%| unknown\n", + " 0.0s| 1 | 0 | 1509 | - | 9451k | 0 | 288 | 339 | 416 | 84 | 19 | 0 | 0 | 3.303714e+01 | 5.300000e+01 | 60.43%| unknown\n", + " 0.0s| 1 | 0 | 1522 | - | 9605k | 0 | 288 | 339 | 419 | 87 | 20 | 0 | 0 | 3.304510e+01 | 5.300000e+01 | 60.39%| unknown\n", + " 0.0s| 1 | 0 | 1542 | - | 9738k | 0 | 288 | 339 | 422 | 90 | 21 | 0 | 0 | 3.306189e+01 | 5.300000e+01 | 60.31%| unknown\n", + " 1.0s| 1 | 0 | 1564 | - | 9752k | 0 | 288 | 339 | 410 | 93 | 22 | 0 | 0 | 3.308676e+01 | 5.300000e+01 | 60.18%| unknown\n", + " 1.0s| 1 | 0 | 1603 | - | 9760k | 0 | 288 | 339 | 413 | 96 | 23 | 0 | 0 | 3.313949e+01 | 5.300000e+01 | 59.93%| unknown\n", + " 1.0s| 1 | 0 | 1639 | - | 9831k | 0 | 288 | 339 | 415 | 98 | 24 | 0 | 0 | 3.316628e+01 | 5.300000e+01 | 59.80%| unknown\n", + " 1.0s| 1 | 0 | 1669 | - | 9854k | 0 | 288 | 339 | 418 | 101 | 25 | 0 | 0 | 3.317514e+01 | 5.300000e+01 | 59.76%| unknown\n", + " 1.0s| 1 | 0 | 1679 | - | 10M | 0 | 288 | 339 | 420 | 103 | 26 | 0 | 0 | 3.318084e+01 | 5.300000e+01 | 59.73%| unknown\n", + " time | node | left |LP iter|LP it/n|mem/heur|mdpt |vars |cons |rows |cuts |sepa|confs|strbr| dualbound | primalbound | gap | compl. \n", + " 1.0s| 1 | 0 | 1694 | - | 10M | 0 | 288 | 339 | 423 | 106 | 27 | 0 | 0 | 3.318096e+01 | 5.300000e+01 | 59.73%| unknown\n", + " 1.0s| 1 | 0 | 1708 | - | 10M | 0 | 288 | 339 | 403 | 108 | 28 | 0 | 0 | 3.318136e+01 | 5.300000e+01 | 59.73%| unknown\n", + " 1.0s| 1 | 0 | 1714 | - | 10M | 0 | 288 | 339 | 406 | 111 | 29 | 0 | 0 | 3.318234e+01 | 5.300000e+01 | 59.72%| unknown\n", + " 1.0s| 1 | 0 | 1729 | - | 10M | 0 | 288 | 339 | 408 | 113 | 30 | 0 | 0 | 3.318395e+01 | 5.300000e+01 | 59.72%| unknown\n", + " 1.0s| 1 | 0 | 1797 | - | 10M | 0 | 288 | 339 | 410 | 115 | 31 | 0 | 0 | 3.326683e+01 | 5.300000e+01 | 59.32%| unknown\n", + " 1.0s| 1 | 0 | 1811 | - | 10M | 0 | 288 | 339 | 413 | 118 | 32 | 0 | 0 | 3.326746e+01 | 5.300000e+01 | 59.31%| unknown\n", + " 1.0s| 1 | 0 | 1856 | - | 10M | 0 | 288 | 339 | 418 | 123 | 33 | 0 | 0 | 3.331122e+01 | 5.300000e+01 | 59.11%| unknown\n", + " 1.0s| 1 | 0 | 1866 | - | 10M | 0 | 288 | 339 | 410 | 127 | 34 | 0 | 0 | 3.332546e+01 | 5.300000e+01 | 59.04%| unknown\n", + " 1.0s| 1 | 0 | 1966 | - | 10M | 0 | 288 | 339 | 417 | 134 | 35 | 0 | 0 | 3.334509e+01 | 5.300000e+01 | 58.94%| unknown\n", + " 1.0s| 1 | 0 | 1970 | - | 10M | 0 | 288 | 339 | 419 | 136 | 36 | 0 | 0 | 3.334647e+01 | 5.300000e+01 | 58.94%| unknown\n", + " 1.0s| 1 | 0 | 1976 | - | 10M | 0 | 288 | 339 | 421 | 138 | 37 | 0 | 0 | 3.335103e+01 | 5.300000e+01 | 58.92%| unknown\n", + " 2.0s| 1 | 0 | 1983 | - | 10M | 0 | 288 | 339 | 425 | 142 | 38 | 0 | 0 | 3.335784e+01 | 5.300000e+01 | 58.88%| unknown\n", + " 2.0s| 1 | 0 | 1990 | - | 10M | 0 | 288 | 339 | 429 | 146 | 39 | 0 | 0 | 3.336041e+01 | 5.300000e+01 | 58.87%| unknown\n", + " 2.0s| 1 | 0 | 2001 | - | 10M | 0 | 288 | 339 | 419 | 150 | 40 | 0 | 0 | 3.337361e+01 | 5.300000e+01 | 58.81%| unknown\n", + " 2.0s| 1 | 0 | 2027 | - | 10M | 0 | 288 | 339 | 423 | 154 | 41 | 0 | 0 | 3.340026e+01 | 5.300000e+01 | 58.68%| unknown\n", + " time | node | left |LP iter|LP it/n|mem/heur|mdpt |vars |cons |rows |cuts |sepa|confs|strbr| dualbound | primalbound | gap | compl. \n", + " 2.0s| 1 | 0 | 2040 | - | 10M | 0 | 288 | 339 | 426 | 157 | 42 | 0 | 0 | 3.340426e+01 | 5.300000e+01 | 58.66%| unknown\n", + " 2.0s| 1 | 0 | 2070 | - | 10M | 0 | 288 | 339 | 431 | 162 | 43 | 0 | 0 | 3.340995e+01 | 5.300000e+01 | 58.64%| unknown\n", + " 2.0s| 1 | 0 | 2086 | - | 10M | 0 | 288 | 339 | 437 | 168 | 44 | 0 | 0 | 3.341025e+01 | 5.300000e+01 | 58.63%| unknown\n", + " 2.0s| 1 | 0 | 2106 | - | 10M | 0 | 288 | 339 | 441 | 172 | 45 | 0 | 0 | 3.341140e+01 | 5.300000e+01 | 58.63%| unknown\n", + " 2.0s| 1 | 0 | 2117 | - | 10M | 0 | 288 | 339 | 429 | 177 | 46 | 0 | 0 | 3.341336e+01 | 5.300000e+01 | 58.62%| unknown\n", + " 2.0s| 1 | 0 | 2121 | - | 10M | 0 | 288 | 339 | 432 | 180 | 47 | 0 | 0 | 3.341343e+01 | 5.300000e+01 | 58.62%| unknown\n", + " 3.0s| 1 | 0 | 2147 | - | 10M | 0 | 288 | 339 | 435 | 183 | 48 | 0 | 0 | 3.341428e+01 | 5.300000e+01 | 58.61%| unknown\n", + " 3.0s| 1 | 0 | 2155 | - | 10M | 0 | 288 | 339 | 437 | 185 | 49 | 0 | 0 | 3.341428e+01 | 5.300000e+01 | 58.61%| unknown\n", + " 3.0s| 1 | 0 | 2159 | - | 10M | 0 | 288 | 339 | 439 | 187 | 50 | 0 | 0 | 3.341428e+01 | 5.300000e+01 | 58.61%| unknown\n", + " 3.0s| 1 | 0 | 2169 | - | 10M | 0 | 288 | 339 | 440 | 188 | 51 | 0 | 0 | 3.341428e+01 | 5.300000e+01 | 58.61%| unknown\n", + " 3.0s| 1 | 0 | 2171 | - | 10M | 0 | 288 | 339 | 419 | 189 | 52 | 0 | 0 | 3.341606e+01 | 5.300000e+01 | 58.61%| unknown\n", + " 3.0s| 1 | 0 | 2173 | - | 10M | 0 | 288 | 339 | 421 | 191 | 53 | 0 | 0 | 3.341606e+01 | 5.300000e+01 | 58.61%| unknown\n", + "d 3.0s| 1 | 0 | 2878 | - |farkasdi| 0 | 288 | 339 | 421 | 0 | 53 | 0 | 0 | 3.341606e+01 | 4.900000e+01 | 46.64%| unknown\n", + "d 3.0s| 1 | 0 | 2954 | - |farkasdi| 0 | 288 | 339 | 421 | 0 | 53 | 0 | 0 | 3.341606e+01 | 4.400000e+01 | 31.67%| unknown\n", + "L 4.0s| 1 | 0 | 3068 | - | rens| 0 | 288 | 339 | 421 | 191 | 53 | 0 | 0 | 3.341606e+01 | 4.300000e+01 | 28.68%| unknown\n", + " time | node | left |LP iter|LP it/n|mem/heur|mdpt |vars |cons |rows |cuts |sepa|confs|strbr| dualbound | primalbound | gap | compl. \n", + " 4.0s| 1 | 0 | 3068 | - | 11M | 0 | 288 | 339 | 421 | 191 | 53 | 0 | 0 | 3.341606e+01 | 4.300000e+01 | 28.68%| unknown\n", + " 4.0s| 1 | 0 | 3068 | - | 11M | 0 | 288 | 339 | 421 | 191 | 53 | 0 | 0 | 3.341606e+01 | 4.300000e+01 | 28.68%| unknown\n", + " 4.0s| 1 | 0 | 3075 | - | 11M | 0 | 288 | 339 | 409 | 193 | 54 | 0 | 0 | 3.341606e+01 | 4.300000e+01 | 28.68%| unknown\n", + " 4.0s| 1 | 0 | 3076 | - | 11M | 0 | 288 | 339 | 410 | 194 | 55 | 0 | 0 | 3.341606e+01 | 4.300000e+01 | 28.68%| unknown\n", + " 4.0s| 1 | 2 | 3076 | - | 11M | 0 | 288 | 333 | 410 | 194 | 55 | 0 | 24 | 3.373205e+01 | 4.300000e+01 | 27.48%| unknown\n", + " 7.0s| 100 | 99 | 10349 | 83.7 | 23M | 15 | 288 | 333 | 416 | 751 | 4 | 9 | 371 | 3.394705e+01 | 4.300000e+01 | 26.67%| unknown\n", + " 9.0s| 200 | 175 | 15838 | 69.2 | 23M | 21 | 288 | 334 | 388 |1132 | 2 | 10 | 425 | 3.457121e+01 | 4.300000e+01 | 24.38%| unknown\n", + "L 9.0s| 201 | 151 | 15906 | 69.2 |crossove| 21 | 288 | 334 | 399 |1132 | 2 | 10 | 425 | 3.460508e+01 | 4.200000e+01 | 21.37%| unknown\n", + " 11.0s| 300 | 240 | 25811 | 79.4 | 25M | 21 | 288 | 348 | 422 |1719 | 2 | 33 | 443 | 3.501772e+01 | 4.200000e+01 | 19.94%| 10.88%\n", + " 13.0s| 400 | 324 | 34250 | 80.7 | 25M | 21 | 288 | 360 | 412 |2301 | 2 | 50 | 457 | 3.516032e+01 | 4.200000e+01 | 19.45%| 14.35%\n", + " 14.0s| 500 | 388 | 41238 | 78.5 | 26M | 21 | 288 | 363 | 406 |2876 | 2 | 58 | 461 | 3.569818e+01 | 4.200000e+01 | 17.65%| 18.88%\n", + " 16.0s| 600 | 438 | 48449 | 77.4 | 27M | 21 | 288 | 371 | 414 |3664 | 5 | 72 | 467 | 3.589782e+01 | 4.200000e+01 | 17.00%| 21.02%\n", + " 17.0s| 700 | 496 | 55278 | 76.1 | 27M | 23 | 288 | 371 | 423 |4283 | 2 | 73 | 474 | 3.606494e+01 | 4.200000e+01 | 16.46%| 22.67%\n", + " 19.0s| 800 | 552 | 63005 | 76.3 | 28M | 25 | 288 | 371 | 426 |5046 | 2 | 75 | 485 | 3.619668e+01 | 4.200000e+01 | 16.03%| 24.48%\n", + " 20.0s| 900 | 606 | 67077 | 72.3 | 28M | 25 | 288 | 370 | 431 |5240 | 0 | 78 | 492 | 3.632900e+01 | 4.200000e+01 | 15.61%| 26.53%\n", + " time | node | left |LP iter|LP it/n|mem/heur|mdpt |vars |cons |rows |cuts |sepa|confs|strbr| dualbound | primalbound | gap | compl. \n", + " 21.0s| 1000 | 660 | 71410 | 69.4 | 28M | 25 | 288 | 373 | 430 |5498 | 0 | 84 | 498 | 3.656061e+01 | 4.200000e+01 | 14.88%| 28.09%\n", + " 21.0s| 1100 | 720 | 75926 | 67.2 | 30M | 28 | 288 | 373 | 396 |5749 | 2 | 88 | 499 | 3.667087e+01 | 4.200000e+01 | 14.53%| 29.10%\n", + " 22.0s| 1200 | 774 | 80197 | 65.2 | 30M | 28 | 288 | 374 | 442 |6051 | 8 | 92 | 508 | 3.667087e+01 | 4.200000e+01 | 14.53%| 29.89%\n", + " 23.0s| 1300 | 838 | 84668 | 63.6 | 31M | 28 | 288 | 375 | 438 |6271 | 2 | 95 | 515 | 3.673913e+01 | 4.200000e+01 | 14.32%| 30.45%\n", + " 24.0s| 1400 | 888 | 89337 | 62.4 | 31M | 33 | 288 | 375 | 427 |6648 | 1 | 95 | 516 | 3.692692e+01 | 4.200000e+01 | 13.74%| 31.11%\n", + "r25.0s| 1460 | 642 | 91671 | 61.4 |ziroundi| 33 | 288 | 379 | 441 |6820 | 2 | 100 | 518 | 3.694039e+01 | 4.100000e+01 | 10.99%| 39.05%\n", + " 25.0s| 1500 | 646 | 92518 | 60.3 | 31M | 33 | 288 | 379 | 436 |6902 | 1 | 100 | 518 | 3.694039e+01 | 4.100000e+01 | 10.99%| 39.60%\n", + " 25.0s| 1600 | 672 | 94905 | 58.1 | 31M | 33 | 288 | 379 | 437 |7094 | 2 | 102 | 519 | 3.702133e+01 | 4.100000e+01 | 10.75%| 40.41%\n", + " 26.0s| 1700 | 690 | 96613 | 55.6 | 31M | 33 | 288 | 384 | 438 |7185 | 2 | 107 | 519 | 3.704513e+01 | 4.100000e+01 | 10.68%| 42.00%\n", + " 26.0s| 1800 | 708 | 98148 | 53.4 | 31M | 33 | 288 | 386 | 426 |7291 | 4 | 110 | 519 | 3.705311e+01 | 4.100000e+01 | 10.65%| 42.94%\n", + " 26.0s| 1900 | 724 | 99711 | 51.4 | 31M | 33 | 288 | 389 | 426 |7347 | 1 | 113 | 520 | 3.705810e+01 | 4.100000e+01 | 10.64%| 43.81%\n", + " 27.0s| 2000 | 726 |102052 | 50.0 | 31M | 33 | 288 | 390 | 430 |7517 | 2 | 116 | 523 | 3.706469e+01 | 4.100000e+01 | 10.62%| 45.65%\n", + " 27.0s| 2100 | 734 |103965 | 48.5 | 31M | 33 | 288 | 391 | 400 |7642 | 0 | 117 | 524 | 3.711633e+01 | 4.100000e+01 | 10.46%| 46.38%\n", + " 27.0s| 2200 | 754 |105916 | 47.2 | 31M | 33 | 288 | 392 | 422 |7774 | 1 | 118 | 526 | 3.717277e+01 | 4.100000e+01 | 10.30%| 47.80%\n", + " 28.0s| 2300 | 758 |106834 | 45.6 | 31M | 33 | 288 | 392 | 431 |7807 | 1 | 120 | 527 | 3.717277e+01 | 4.100000e+01 | 10.30%| 48.27%\n", + " time | node | left |LP iter|LP it/n|mem/heur|mdpt |vars |cons |rows |cuts |sepa|confs|strbr| dualbound | primalbound | gap | compl. \n", + " 28.0s| 2400 | 756 |108012 | 44.2 | 31M | 34 | 288 | 392 | 394 |7871 | 1 | 122 | 530 | 3.722356e+01 | 4.100000e+01 | 10.15%| 49.32%\n", + " 28.0s| 2500 | 758 |110597 | 43.4 | 31M | 34 | 288 | 392 | 405 |8051 | 2 | 123 | 531 | 3.726690e+01 | 4.100000e+01 | 10.02%| 50.86%\n", + " 28.0s| 2600 | 758 |111932 | 42.3 | 31M | 34 | 288 | 395 | 408 |8070 | 2 | 129 | 535 | 3.727273e+01 | 4.100000e+01 | 10.00%| 52.12%\n", + " 29.0s| 2700 | 766 |114122 | 41.5 | 31M | 34 | 288 | 395 | 421 |8174 | 0 | 135 | 535 | 3.729089e+01 | 4.100000e+01 | 9.95%| 53.25%\n", + " 29.0s| 2800 | 770 |115754 | 40.6 | 31M | 34 | 288 | 395 | 434 |8308 | 0 | 136 | 535 | 3.730722e+01 | 4.100000e+01 | 9.90%| 53.67%\n", + " 30.0s| 2900 | 780 |117900 | 40.0 | 31M | 34 | 288 | 395 | 419 |8459 | 0 | 138 | 537 | 3.731818e+01 | 4.100000e+01 | 9.87%| 54.71%\n", + " 30.0s| 3000 | 776 |119853 | 39.3 | 31M | 34 | 288 | 395 | 414 |8589 | 1 | 139 | 540 | 3.736112e+01 | 4.100000e+01 | 9.74%| 55.99%\n", + " 30.0s| 3100 | 780 |121910 | 38.7 | 31M | 34 | 288 | 395 | 415 |8747 | 2 | 140 | 541 | 3.740066e+01 | 4.100000e+01 | 9.62%| 56.71%\n", + " 30.0s| 3200 | 764 |123732 | 38.0 | 31M | 34 | 288 | 396 | 441 |8853 | 1 | 141 | 542 | 3.760828e+01 | 4.100000e+01 | 9.02%| 58.52%\n", + " 31.0s| 3300 | 754 |125494 | 37.4 | 32M | 34 | 288 | 396 | 421 |8950 | 2 | 143 | 542 | 3.766299e+01 | 4.100000e+01 | 8.86%| 59.62%\n", + " 31.0s| 3400 | 732 |127786 | 37.0 | 32M | 34 | 288 | 399 | 434 |9127 | 0 | 147 | 542 | 3.775000e+01 | 4.100000e+01 | 8.61%| 61.33%\n", + " 31.0s| 3500 | 716 |129147 | 36.3 | 32M | 34 | 288 | 399 | 414 |9174 | 1 | 147 | 542 | 3.775157e+01 | 4.100000e+01 | 8.60%| 62.37%\n", + " 32.0s| 3600 | 702 |130999 | 35.8 | 32M | 34 | 288 | 399 | 439 |9293 | 0 | 147 | 542 | 3.777922e+01 | 4.100000e+01 | 8.53%| 63.58%\n", + " 32.0s| 3700 | 692 |132309 | 35.2 | 32M | 34 | 288 | 400 | 418 |9393 | 0 | 148 | 543 | 3.778982e+01 | 4.100000e+01 | 8.49%| 64.28%\n", + " 32.0s| 3800 | 678 |134000 | 34.7 | 32M | 34 | 288 | 400 | 425 |9442 | 1 | 148 | 545 | 3.786189e+01 | 4.100000e+01 | 8.29%| 65.26%\n", + " time | node | left |LP iter|LP it/n|mem/heur|mdpt |vars |cons |rows |cuts |sepa|confs|strbr| dualbound | primalbound | gap | compl. \n", + " 32.0s| 3900 | 656 |135542 | 34.2 | 32M | 34 | 288 | 403 | 435 |9548 | 0 | 151 | 549 | 3.788285e+01 | 4.100000e+01 | 8.23%| 66.44%\n", + " 33.0s| 4000 | 642 |137266 | 33.8 | 32M | 34 | 288 | 403 | 425 |9676 | 2 | 153 | 553 | 3.790909e+01 | 4.100000e+01 | 8.15%| 67.83%\n", + " 33.0s| 4100 | 616 |138514 | 33.3 | 32M | 34 | 288 | 408 | 408 |9714 | 0 | 160 | 557 | 3.793831e+01 | 4.100000e+01 | 8.07%| 69.09%\n", + " 33.0s| 4200 | 604 |140118 | 32.9 | 32M | 34 | 288 | 408 | 420 |9814 | 0 | 160 | 563 | 3.800000e+01 | 4.100000e+01 | 7.89%| 69.87%\n", + " 33.0s| 4300 | 586 |141853 | 32.5 | 32M | 34 | 288 | 412 | 397 |9848 | 0 | 164 | 568 | 3.800455e+01 | 4.100000e+01 | 7.88%| 71.09%\n", + " 34.0s| 4400 | 566 |143321 | 32.1 | 32M | 34 | 288 | 412 | 434 |9929 | 0 | 166 | 570 | 3.803162e+01 | 4.100000e+01 | 7.81%| 72.12%\n", + " 34.0s| 4500 | 558 |144967 | 31.8 | 32M | 34 | 288 | 412 | 444 | 10k| 0 | 166 | 575 | 3.808914e+01 | 4.100000e+01 | 7.64%| 72.66%\n", + " 34.0s| 4600 | 542 |146062 | 31.3 | 32M | 34 | 288 | 412 | 430 | 10k| 1 | 167 | 577 | 3.813379e+01 | 4.100000e+01 | 7.52%| 73.61%\n", + " 34.0s| 4700 | 514 |147495 | 30.9 | 32M | 34 | 288 | 412 | 426 | 10k| 0 | 168 | 583 | 3.817586e+01 | 4.100000e+01 | 7.40%| 75.33%\n", + " 34.0s| 4800 | 494 |149374 | 30.7 | 32M | 34 | 288 | 412 | 410 | 10k| 0 | 168 | 586 | 3.829369e+01 | 4.100000e+01 | 7.07%| 76.78%\n", + " 35.0s| 4900 | 470 |150640 | 30.3 | 32M | 34 | 288 | 412 | 435 | 10k| 0 | 168 | 589 | 3.829717e+01 | 4.100000e+01 | 7.06%| 77.83%\n", + " 35.0s| 5000 | 434 |151894 | 30.0 | 32M | 34 | 288 | 412 | 418 | 10k| 0 | 168 | 595 | 3.836446e+01 | 4.100000e+01 | 6.87%| 79.64%\n", + " 35.0s| 5100 | 418 |153162 | 29.6 | 32M | 34 | 288 | 412 | 440 | 10k| 1 | 168 | 599 | 3.838528e+01 | 4.100000e+01 | 6.81%| 80.72%\n", + " 35.0s| 5200 | 404 |154211 | 29.3 | 32M | 34 | 288 | 414 | 412 | 10k| 1 | 170 | 608 | 3.843067e+01 | 4.100000e+01 | 6.69%| 81.67%\n", + " 35.0s| 5300 | 376 |155576 | 29.0 | 32M | 34 | 288 | 410 | 410 | 10k| 1 | 170 | 613 | 3.843551e+01 | 4.100000e+01 | 6.67%| 82.73%\n", + " time | node | left |LP iter|LP it/n|mem/heur|mdpt |vars |cons |rows |cuts |sepa|confs|strbr| dualbound | primalbound | gap | compl. \n", + " 35.0s| 5400 | 346 |157124 | 28.7 | 32M | 34 | 288 | 410 | 431 | 10k| 0 | 171 | 618 | 3.843790e+01 | 4.100000e+01 | 6.67%| 84.03%\n", + " 36.0s| 5500 | 322 |158520 | 28.5 | 32M | 34 | 288 | 408 | 436 | 10k| 0 | 173 | 623 | 3.859626e+01 | 4.100000e+01 | 6.23%| 85.29%\n", + " 36.0s| 5600 | 256 |159844 | 28.2 | 32M | 34 | 288 | 408 | 417 | 10k| 0 | 173 | 623 | 3.866704e+01 | 4.100000e+01 | 6.03%| 88.86%\n", + " 36.0s| 5700 | 224 |161060 | 27.9 | 32M | 34 | 288 | 406 | 416 | 10k| 0 | 173 | 626 | 3.879340e+01 | 4.100000e+01 | 5.69%| 90.10%\n", + " 36.0s| 5800 | 186 |162331 | 27.6 | 32M | 34 | 288 | 406 | 428 | 10k| 1 | 175 | 628 | 3.891748e+01 | 4.100000e+01 | 5.35%| 92.57%\n", + " 36.0s| 5900 | 146 |163520 | 27.4 | 32M | 34 | 288 | 406 | 425 | 10k| 0 | 175 | 635 | 3.901409e+01 | 4.100000e+01 | 5.09%| 93.77%\n", + " 36.0s| 6000 | 108 |164822 | 27.1 | 32M | 34 | 288 | 406 | 420 | 10k| 0 | 175 | 639 | 3.902481e+01 | 4.100000e+01 | 5.06%| 94.92%\n", + " 37.0s| 6100 | 68 |166069 | 26.9 | 32M | 34 | 288 | 406 | 603 | 10k| 0 | 175 | 648 | 3.916924e+01 | 4.100000e+01 | 4.67%| 96.40%\n", + " 37.0s| 6200 | 28 |167592 | 26.7 | 32M | 34 | 288 | 405 | 498 | 10k| 0 | 175 | 650 | 3.930665e+01 | 4.100000e+01 | 4.31%| 98.77%\n", + "\n", + "SCIP Status : problem is solved [optimal solution found]\n", + "Solving Time (sec) : 37.00\n", + "Solving Nodes : 6230\n", + "Primal Bound : +4.10000000000000e+01 (779 solutions)\n", + "Dual Bound : +4.10000000000000e+01\n", + "Gap : 0.00 %\n", "-------------------------------------------------------------------------------\n", " Summary \n", "-------------------------------------------------------------------------------\n", - "(CVXPY) Dec 24 03:29:09 PM: Problem status: optimal\n", - "(CVXPY) Dec 24 03:29:09 PM: Optimal value: 4.100e+01\n", - "(CVXPY) Dec 24 03:29:09 PM: Compilation took 3.863e-02 seconds\n", - "(CVXPY) Dec 24 03:29:09 PM: Solver (including time spent in interface) took 4.489e+01 seconds\n" + "(CVXPY) May 14 09:34:29 PM: Problem status: optimal\n", + "(CVXPY) May 14 09:34:29 PM: Optimal value: 4.100e+01\n", + "(CVXPY) May 14 09:34:29 PM: Compilation took 4.779e-02 seconds\n", + "(CVXPY) May 14 09:34:29 PM: Solver (including time spent in interface) took 3.735e+01 seconds\n" ] }, { @@ -285,220 +477,231 @@ "\n", "\n", - "\n", "\n", - "\n", - "\n", - "\n", + "\n", + "\n", + "\n", "\n", "\n", "2\n", - "\n", - "2\n", + "\n", + "2\n", "\n", "\n", "\n", "30\n", - "\n", - "30\n", + "\n", + "30\n", "\n", "\n", "\n", "2->30\n", - "\n", + "\n", "\n", "\n", "\n", "46\n", "\n", - "46\n", + "46\n", "\n", "\n", "\n", "47\n", "\n", - "47\n", + "47\n", "\n", "\n", "\n", "46->47\n", "\n", "\n", - "\n", + "\n", "\n", + "49\n", + "\n", + "49\n", + "\n", + "\n", + "\n", + "47->49\n", + "\n", + "\n", + "\n", + "\n", "6\n", "\n", - "6\n", + "6\n", "\n", "\n", - "\n", + "\n", "13\n", "\n", - "13\n", + "13\n", "\n", "\n", - "\n", + "\n", "6->13\n", "\n", "\n", "\n", - "\n", + "\n", "17\n", "\n", - "17\n", + "17\n", "\n", "\n", - "\n", + "\n", "6->17\n", "\n", "\n", "\n", - "\n", + "\n", "20\n", "\n", - "20\n", + "20\n", "\n", "\n", - "\n", + "\n", "17->20\n", "\n", "\n", "\n", - "\n", + "\n", "8\n", "\n", - "8\n", + "8\n", "\n", "\n", - "\n", + "\n", "8->47\n", "\n", "\n", "\n", - "\n", + "\n", "8->13\n", "\n", "\n", "\n", - "\n", + "\n", "14\n", "\n", - "14\n", + "14\n", "\n", "\n", - "\n", + "\n", "8->14\n", "\n", "\n", "\n", - "\n", + "\n", "9\n", - "\n", - "9\n", + "\n", + "9\n", "\n", "\n", - "\n", + "\n", "23\n", - "\n", - "23\n", + "\n", + "23\n", "\n", "\n", - "\n", + "\n", "9->23\n", - "\n", + "\n", "\n", "\n", - "\n", + "\n", "34\n", - "\n", - "34\n", + "\n", + "34\n", "\n", "\n", - "\n", + "\n", "9->34\n", - "\n", + "\n", "\n", "\n", - "\n", + "\n", "23->30\n", - "\n", + "\n", "\n", "\n", - "\n", + "\n", "33\n", - "\n", - "33\n", + "\n", + "33\n", "\n", "\n", - "\n", + "\n", "23->33\n", - "\n", + "\n", "\n", - "\n", - "\n", - "34->47\n", - "\n", + "\n", + "\n", + "34->49\n", + "\n", "\n", "\n", - "\n", + "\n", "41\n", - "\n", - "41\n", + "\n", + "41\n", "\n", "\n", - "\n", + "\n", "34->41\n", - "\n", + "\n", "\n", "\n", - "\n", + "\n", "18\n", - "\n", - "18\n", + "\n", + "18\n", "\n", "\n", - "\n", + "\n", "18->30\n", - "\n", + "\n", "\n", "\n", - "\n", + "\n", "48\n", - "\n", - "48\n", + "\n", + "48\n", "\n", "\n", - "\n", + "\n", "18->48\n", - "\n", + "\n", "\n", "\n", - "\n", + "\n", "25\n", - "\n", - "25\n", + "\n", + "25\n", "\n", "\n", - "\n", + "\n", "25->33\n", - "\n", + "\n", "\n", "\n", "\n" ], "text/plain": [ - "" + "" ] }, - "execution_count": 6, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "P.solve(solver=\"SCIPY\", verbosity=1)\n", + "P.solve(solver=\"SCIP\", verbosity=1)\n", "G_steiner.edge_subgraph(np.where(P.symbols[\"_flow_i\"].value > 0.5)[0]).plot(\n", " orphan_edges=False\n", ")" @@ -506,7 +709,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 9, "id": "e3c48b24", "metadata": {}, "outputs": [ @@ -516,7 +719,7 @@ "41.0" ] }, - "execution_count": 7, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -536,255 +739,10 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "6e7589c9", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "===============================================================================\n", - " CVXPY \n", - " v1.4.1 \n", - "===============================================================================\n", - "(CVXPY) Dec 24 03:29:11 PM: Your problem has 670 variables, 17 constraints, and 0 parameters.\n", - "(CVXPY) Dec 24 03:29:11 PM: It is compliant with the following grammars: DCP, DQCP\n", - "(CVXPY) Dec 24 03:29:11 PM: (If you need to solve this problem multiple times, but with different data, consider using parameters.)\n", - "(CVXPY) Dec 24 03:29:11 PM: CVXPY will first compile your problem; then, it will invoke a numerical solver to obtain a solution.\n", - "(CVXPY) Dec 24 03:29:11 PM: Your problem is compiled with the CPP canonicalization backend.\n", - "-------------------------------------------------------------------------------\n", - " Compilation \n", - "-------------------------------------------------------------------------------\n", - "(CVXPY) Dec 24 03:29:11 PM: Compiling problem (target solver=SCIPY).\n", - "(CVXPY) Dec 24 03:29:11 PM: Reduction chain: Dcp2Cone -> CvxAttr2Constr -> ConeMatrixStuffing -> SCIPY\n", - "(CVXPY) Dec 24 03:29:11 PM: Applying reduction Dcp2Cone\n", - "(CVXPY) Dec 24 03:29:11 PM: Applying reduction CvxAttr2Constr\n", - "(CVXPY) Dec 24 03:29:11 PM: Applying reduction ConeMatrixStuffing\n", - "(CVXPY) Dec 24 03:29:11 PM: Applying reduction SCIPY\n", - "(CVXPY) Dec 24 03:29:11 PM: Finished problem compilation (took 9.297e-02 seconds).\n", - "-------------------------------------------------------------------------------\n", - " Numerical solver \n", - "-------------------------------------------------------------------------------\n", - "(CVXPY) Dec 24 03:29:11 PM: Invoking solver SCIPY to obtain a solution.\n", - "Solver terminated with message: Optimization terminated successfully. (HiGHS Status 7: Optimal)\n", - "-------------------------------------------------------------------------------\n", - " Summary \n", - "-------------------------------------------------------------------------------\n", - "(CVXPY) Dec 24 03:29:45 PM: Problem status: optimal\n", - "(CVXPY) Dec 24 03:29:45 PM: Optimal value: 4.100e+01\n", - "(CVXPY) Dec 24 03:29:45 PM: Compilation took 9.297e-02 seconds\n", - "(CVXPY) Dec 24 03:29:45 PM: Solver (including time spent in interface) took 3.385e+01 seconds\n", - "Optimal value: 40.999999999997144\n" - ] - }, - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "2\n", - "\n", - "2\n", - "\n", - "\n", - "\n", - "30\n", - "\n", - "30\n", - "\n", - "\n", - "\n", - "2->30\n", - "\n", - "\n", - "\n", - "\n", - "46\n", - "\n", - "46\n", - "\n", - "\n", - "\n", - "47\n", - "\n", - "47\n", - "\n", - "\n", - "\n", - "46->47\n", - "\n", - "\n", - "\n", - "\n", - "9\n", - "\n", - "9\n", - "\n", - "\n", - "\n", - "23\n", - "\n", - "23\n", - "\n", - "\n", - "\n", - "9->23\n", - "\n", - "\n", - "\n", - "\n", - "34\n", - "\n", - "34\n", - "\n", - "\n", - "\n", - "9->34\n", - "\n", - "\n", - "\n", - "\n", - "23->30\n", - "\n", - "\n", - "\n", - "\n", - "33\n", - "\n", - "33\n", - "\n", - "\n", - "\n", - "23->33\n", - "\n", - "\n", - "\n", - "\n", - "34->47\n", - "\n", - "\n", - "\n", - "\n", - "41\n", - "\n", - "41\n", - "\n", - "\n", - "\n", - "34->41\n", - "\n", - "\n", - "\n", - "\n", - "14\n", - "\n", - "14\n", - "\n", - "\n", - "\n", - "14->33\n", - "\n", - "\n", - "\n", - "\n", - "17\n", - "\n", - "17\n", - "\n", - "\n", - "\n", - "20\n", - "\n", - "20\n", - "\n", - "\n", - "\n", - "17->20\n", - "\n", - "\n", - "\n", - "\n", - "42\n", - "\n", - "42\n", - "\n", - "\n", - "\n", - "17->42\n", - "\n", - "\n", - "\n", - "\n", - "18\n", - "\n", - "18\n", - "\n", - "\n", - "\n", - "18->30\n", - "\n", - "\n", - "\n", - "\n", - "48\n", - "\n", - "48\n", - "\n", - "\n", - "\n", - "18->48\n", - "\n", - "\n", - "\n", - "\n", - "25\n", - "\n", - "25\n", - "\n", - "\n", - "\n", - "25->33\n", - "\n", - "\n", - "\n", - "\n", - "35\n", - "\n", - "35\n", - "\n", - "\n", - "\n", - "25->35\n", - "\n", - "\n", - "\n", - "\n", - "35->42\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "P, G_steiner = exact_steiner_tree(G, terminals, strict_acyclic=True)\n", "P.solve(solver=\"SCIPY\", verbosity=1)\n", @@ -811,7 +769,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.10" + "version": "3.9.13" }, "toc": { "base_numbering": 1, diff --git a/pyproject.toml b/pyproject.toml index bc38ac59..e058f878 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "corneto" -version = "1.0.0.dev0" +version = "1.0.0.dev1" description = "CORNETO: A Unified Framework for Omics-Driven Network Inference" authors = ["Pablo Rodriguez-Mier "] classifiers = [