Skip to content
Snippets Groups Projects
constraint_programming.ipynb 49.9 KiB
Newer Older
{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "6ca5c36e-1ac0-4c42-a03a-41c0a771f974",
   "metadata": {},
   "source": [
    "# Imports"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "62e4c444-c034-4183-b096-a51f3d0223c7",
   "metadata": {},
   "outputs": [],
   "source": [
    "# libraries\n",
    "import networkx as nx\n",
    "import random\n",
    "import matplotlib\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# our code\n",
    "from _solver import DBSTSolverCP"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5de497dd-00e4-4528-87fb-91a77fa2c717",
   "metadata": {},
   "source": [
    "## Utils"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "098ad290-5284-4e19-bbf3-dd3d240561ab",
   "metadata": {},
   "outputs": [],
   "source": [
    "def random_points(n, w=10_000, h=10_000):\n",
    "    \"\"\"\n",
    "    n zufällige Punkte mit ganzzahligen Koordinaten in einem w * h-Rechteck.\n",
    "    :param n: Anzahl der Punkte\n",
    "    :param w: Breite des Rechtecks.\n",
    "    :param h: Höhe des Rechtecks.\n",
    "    :return: Eine Liste von Punkten als (x,y)-Tupel.\n",
    "    \"\"\"\n",
    "    return [(random.randint(0,w), random.randint(0,h)) for _ in range(n)]\n",
    "\n",
    "def squared_distance(p1, p2):\n",
    "    \"\"\"\n",
    "    Berechne die (quadrierte) euklidische Distanz zwischen Punkten p1 und p2.\n",
    "    \"\"\"\n",
    "    return (p1[0]-p2[0])**2 + (p1[1]-p2[1])**2\n",
    "\n",
    "def draw_edges(edges):\n",
    "    \"\"\"\n",
    "    Malt eine gegebene Liste von Kanten als Graph.\n",
    "    Die längste Kante wird dabei hervorgehoben (rot, dicker) dargestellt.\n",
    "    \"\"\"\n",
    "    points = set([e[0] for e in edges] + [e[1] for e in edges])\n",
    "    draw_graph = nx.empty_graph()\n",
    "    draw_graph.add_nodes_from(points)\n",
    "    draw_graph.add_edges_from(edges)\n",
    "    g_edges = draw_graph.edges()\n",
    "    max_length = max((squared_distance(*e) for e in g_edges))\n",
    "    color = [('red' if squared_distance(*e) == max_length else 'black') for e in g_edges]\n",
    "    width = [(1.0 if squared_distance(*e) == max_length else 0.5) for e in g_edges]\n",
    "    plt.clf()\n",
    "    fig, ax = plt.gcf(), plt.gca()\n",
    "    fig.set_size_inches(8,8)\n",
    "    ax.set_aspect(1.0)  # Seitenverhältnis 1:1\n",
    "    nx.draw_networkx(draw_graph, pos={p: p for p in points}, node_size=8,\n",
    "                     with_labels=False, edgelist=g_edges, edge_color=color, width=width, ax=ax)\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d27a8c7f-ac8f-4486-ab8c-bb4374b5a8b9",
   "metadata": {},
   "source": [
    "## Solve something"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "10a54359-24a9-41ff-872f-c0b48a29e4bb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAJnCAYAAAAHjOIZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAACJwklEQVR4nO3dd1jV5cMG8PssDrJUVJwgKrlzgVvRTMWVI8WRe5KjzDJH9mb+1HLlzIF7K85MxZGVCze5FRQXKirgYHM44/v+QVDmYpzDc8b9ua736k3wfG9/CdznmTJJkiQQERERkc2Qiw5ARERERHmLBZCIiIjIxrAAEhEREdkYFkAiIiIiG8MCSERERGRjWACJiIiIbAwLIBEREZGNUWblkwwGA6KiouDs7AyZTGbqTERERESUTZIkISEhASVKlIBc/vYxviwVwKioKLi7uxslHBERERGZzv3791GqVKm3fk6WCqCzs3PmC7q4uOQ+GREREREZVXx8PNzd3TN729tkqQBmTPu6uLiwABIRERGZsaws1+MmECIiIiIbwwJIREREZGNYAImIiIhsDAsgERERkY1hASQiIiKyMSyARERERDaGBZCIiIjIxrAAEhEREdkYFkAiIiIiG8MCSERERGRjWACJiIiIbAwLIBEREZGNYQEkIiIisjEsgEREREQ2hgWQiIiIyMawABIRERHZGBZAIiIiIhvDAkhERERkY1gAiYiIiGwMCyARERGRjWEBJCIiIrIxLIBERERENoYFkIiIiMjGsAASERER2RgWQCIiIiIbwwJIREREZGNYAImIiIhsDAsgERERkY1hASQiIiKyMSyARERERDaGBZCIiIjIxrAAEhEREdkYFkAiIiIiG8MCSERERGRjWACJiIiIbAwLIBEREZGNYQEkIiIisjEsgEREREQ2hgWQiIiIyMawABIRERHZGBZAIiIiIhvDAkhERERkY1gAiYiIiGwMCyARERGRjWEBJCIiIrIxLIBERERENoYFkIiILEaqVo/IZ8lI1epFRyGyaErRAYiIiLIiJCIWAetDkajRwUmtRGAvbzT0Kiw6FpFF4gggERGZvVStHgHrQ5GUpgMAJKXpELA+lCOBRDnEAkhERGYvOkGDRI0OkpT+75IEJGp0iE7QiA1mRJzeprzEKWAiIjJ7bs5qqOUGaAwyADLIZICjnRJuzmrR0YyC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Tz6Bv78/7O3tRf8RiIjITO3duxdXr17FmDFjREchwTgFbMb0ej2OHTuGoKAg3Lobibs1AqCFIv3eWskAJfTY6F8adbxrio5KREQWQK/Xo2XLljh48CAUCp57asuy09d4EHQeUygUaNq0KRYvXowlazYhLaP8AYBMDp1MhWJlKoiMSEREFkShUMDPzw8HDhwQHYUsCAugQCUKOsJJrQT+HoSVyQAntRJuzmrByYiIyJIMGDAAK1asEB2DLAgLoED2KgUCe3lDJdMDABzt0g+e5tVlRESUHYULF4azszNu374tOgpZCBZAwRp6FcYn+S7jZ79CODeheeatI0RERNkxdOhQLFmyRHQMshAsgGbA0d4OBVV6jvwREVGO1alTBxcvXkRKSoroKGQBWADNgJ2dHTQajegYRERkwWQyGbp164atW7eKjkIWgAXQDKjVaqSlpYmOQUREFq579+7YtGmT6BhkAVgAzQBHAImIyBgcHBxQuXJlnDt3TnQUMnMsgGZArVazABIRkVF8+umn3AxC78QCaAbkKjUeJ+qQqtWLjkJERBbuvffeQ2xsLB5FxyLyWTJ/ttBrKUUHsHUhEbH43+V8SNU7YOnUQwjs5c2jYIiIKFcadh6AJnNPIE1SwEmt5M8WegVHAAVK1eoRsD4UGr0MAJCUpkPA+lC+WyMiohxL1eqx5pYaaYb0H/H82UKvwwIoUHSCBokaXeZdwJIEJGp0iE7gekAiIsqZjJ8tkKUPLvBnC70OC6BAbs5qOKmVGV+jvAuYiIhyjT9bKCtYAAXKuAvY0S59KSbvAiYiotzizxbKCpkkSdK7Pik+Ph758+dHXFwcXFxc8iKXTUnV6hGdoIGbs5pfoEREZBT82WJ7stPXuAvYDNirFPBwdRAdg4iIrAh/ttDbcAqYiIiIyMawABIRERHZGBZAIiIiIhvDAkhERERkY1gAiYiIiGwMCyARERGRjWEBJCIiIrIxLIBERERENoYFkIiIiMjGsAASERER2RgWQCIiIiIbwwJIREREZGNYAImIiIhsDAsgERERkY1hASQiIiKyMSyARERERDaGBZCIiIjIxrAAEhEREdkYFkAiIiIiG8MCSERERGRjWACJiIiIbAwLIBEREZGNYQEkIiIisjEsgEREREQ2hgWQiIiIyMawABIRERHZGBZAIiIiIhvDAkhERERkY1gAiYiIiGwMCyARERGRjWEBJCIiIrIxLIBERERENoYFkIiIiMjGsAASERER2RgWQCIiIiIbwwJIREREZGNYAImIiIhsDAsgERERkY1hASQiIiKyMSyARERERDaGBZCIiIjIxrAAEhEREdkYFkAiIiIiG8MCSERERGRjWACJiIiIbAwLIBEREZGNUWblkyRJAgDEx8ebNAwRERER5UxGT8vobW+TpQKYkJAAAHB3d89FLCIiIiIytYSEBOTPn/+tnyOTslATDQYDoqKi4OzsDJlMZrSARERERGQckiQhISEBJUqUgFz+9lV+WSqARERERGQ9uAmEiIiIyMawABIRERHZGBZAIiIiIhvDAkhERERkY1gAiYiIiGwMCyARERGRjWEBJCIiIrIx/w+pv5GNGL0thQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 800x800 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "solver = DBSTSolverCP(random_points(50), 3)\n",
    "draw_edges(solver.solve())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e9bd1971-696a-4669-be92-9509236a60d9",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "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.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}