diff --git a/Aufgabe 2/aufgabe02.ipynb b/Aufgabe 2/aufgabe02.ipynb new file mode 100644 index 0000000..a7f4c86 --- /dev/null +++ b/Aufgabe 2/aufgabe02.ipynb @@ -0,0 +1,186 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 86, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAApQAAAHzCAYAAACe1o1DAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABD7UlEQVR4nO3df3hU9Z33/9f8SEJ+CkkIghAQE0ARVJCiVMAoQaoQTSyELmAbFO773tpt3a/dumxd1Lp8rUXl3tqthZaogBKQgKKISEUIoJGqSAQliTQMICQkIYRMyI+ZOfcfSiqaTH6cSSaZeT6uy6u95pzzOe94yfDK53PO+2MxDMMQAAAA0EFWfxcAAACAno1ACQAAAFMIlAAAADCFQAkAAABTCJQAAAAwhUAJAAAAUwiUAAAAMIVACQAAAFMIlAAAADCFQAkAAABTCJQAAAAwhUAJAAAAUwiUAAAAMIVACQAAAFMIlAAAADCFQAkAAABTCJQAAAAwxe7vAgAgEDjrXSqpcKrB5VGo3aohcZGKDOMrFkBw4NsOADqoqPSc1uQ7tONwmRyVtTK+ccwiKTE2QinDEzRnfKKS+0X7q0wA6HQWwzCM1k8DAFxwrLJWizYWKK+4XDarRW5Py1+jF45PTIrXkvRRGhQb0YWVAkDXIFACQDus3efQ4tcOyuUxvAbJb7NZLbJbLXo0baRmj0vsxAoBoOsRKAGgjZ7dUaSl2wpNj/Pg1GG6PyXZBxUBQPfAW94A0AZr9zl8EiYlaem2QuXsc/hkLADoDpihBIBWHKus1ZRndqre5Wn2uOFqVFXeajkP7pCnrkYhfYeo96R5Cr/8uhbHDLNbtf2ByTxTCSAgMEMJAK1YtLFALi/PS5a/8Yyq921S5FU3q8+UhbJYrSpb/4jqjh1s8RqXx9CijQWdUS4AdDkCJQB4UVR6TnnF5S2+gFP/5WHVfrZLvSf/WH1uma/oa6ep34+WyB6ToKp3s1sc1+0xlFdcruKyc51VOgB0GQIlAHixJt8hm9XS4vHaw3ski1XR105r+sxiD1XUNamqP/G5XNWnW7zWZrVo9fs8Swmg5yNQAoAXOw6XeW0P1FB6RCGxl8kadvGzkKH9hzUdb4nbY2hHYZlvCgUAPyJQAkALaupdclTWej3HXVMpW1Sf73xui4ptOu6No6JWznpXx4sEgG6AQAkALTha4VRrbTAMV4NkC/nO5xZ76D+Oe7teUkmFs4MVAkD3QKAEgBY0tNAm6Jss9lDJ3fidzy8EyQvB0ux9AKA7I1ACQAtC7a1/RdqiYuWuOfOdzy8sdV9Y+jZ7HwDozvgWA4AWDImLVMvvd38lNGGoGitPyFN/8bOWDV9+tatOaL+hXq+3fH0fAOjJCJQA0ILIMLsSW9nJJmLE9yXDo3P7tzZ9ZrgaVVPwtkIHDJc9pq/X6xPjIhQZZvdJvQDgL3yLAYAXKcMTtCr/aIutg8IGDFfEiJtUtfMFeWqrZO8zQM6Cv8p1tkz9fvBzr2PbrBalDEvojLIBoEuxlzcAeFFUek6py3Z5PcdwNahq11d7ebvrahSaMES9J85V+NCxrY6//YFJSkqI9lW5AOAXBEoAaMW8v+Rr75EKrw3O28tmtWjC0Ditune8z8YEAH/hGUoAaMWS9FGye9l+sSPsVouWpI/y6ZgA4C8ESgBoxaDYCD2aNtKnYz6WNlKDWnnhBwB6CgIlALTB7HGJenDqMJ+M9cupw5U5LtEnYwFAd8AzlADQDmv3ObT4tYNyeYx2PVNps1pkt1r0WNpIwiSAgEOgBIB2OlZZq0UbC5RXXC6b1eI1WF44PjEpXkvSR7HMDSAgESgBoIOKSs9pTb5DOwrL5Kio1Te/TC36qml5yrAEzb0hkdZAAAIagRIAfMBZ71JJhVMNLo9C7VYNiYtkBxwAQYNACQAAAFN4yxsAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKYQKAEAAGAKgRIAAACmECgBAABgCoESAAAAphAoAQAAYAqBEgAAAKbY/V0AAABAT+Osd6mkwqkGl0ehdquGxEUqMix4Y1Xw/uQAAADtUFR6TmvyHdpxuEyOyloZ3zhmkZQYG6GU4QmaMz5Ryf2i/VWmX1gMwzBaPw0AACA4Haus1aKNBcorLpfNapHb03J0unB8YlK8lqSP0qDYiC6s1H8IlAAAAC1Yu8+hxa8dlMtjeA2S32azWmS3WvRo2kjNHpfYiRV2DwRKAACAZjy7o0hLtxWaHufBqcN0f0qyDyrqvnjLGwAA4FvW7nP4JExK0tJthcrZ5/DJWN0VM5QAAADfcKyyVlOe2al6l6fFc+pPFevs7pdUf/yQDFej7L37KeraaYq5Pq3Z88PsVm1/YHLAPlPJDCUAAMA3LNpYIJeX5yXP//0jnVr1oNy1Z3XJhNnqM2WBwpO+J/e58havcXkMLdpY0Bnldgu0DQIAAPhaUek55RW3HAw99bUqf/1phV8xTn3T/10WS9vm5tweQ3nF5SouO6ekhMBrKcQMJQAAwNfW5Dtks1paPO489K48zir1mXSPLBarPA11MoyWl8a/yWa1aPX7gfksJTOUAAAAX9txuMxre6C6kv2yhEXIVVOhstzH5ao8IUtIL0VenaLYWxfIYg9t8Vq3x9COwjI9opGdUbpfESgBAAAk1dS75Kis9XpOY+WXkset0xt+o6jRU9Vr8o9V5yjQuQ83y1PnVN87/83r9Y6KWjnrXQG3TWNg/TQAAAAddLTCqdZa3xiNdTIa6xV13Q8Um/q/JEkRwyfIcDeqZv9WNU6co5DYy1q+XlJJhVMjB1ziu8K7AZ6hBAAAkNTgpU3QBReWtCOvnHzR55FX3SxJqj/xuU/u09MQKAEAACSF2luPRbaouK/+N7L3xZ9HfjXj6Kmr8cl9eprA+4kAAAA6YEhcpFp+v/sroZdeIUlynau46HPXuUpJki3C+1K25ev7BBoCJQAACHqnT5/WK2vXKLSh2ut5kSMmSpJqDmy76POaA9skq01hiaO8Xp8YFxFwL+RIvJQDAACCkGEYOnTokDZv3qzNmzfrvffekySNmPOwLAPHyWhhrjL00isUOTpVzgNv67THo16JV6vOUaDaz3cr5saZskfHtXhPm9WilGEJnfLz+Bt7eQMAgKDQ0NCgXbt2NYXIv//974qIiNDUqVM1Y8YM3XHHHapWhFKX7fI6juF26ex761RzYLvcNZWyX9JX0WOmK2bcna3WsP2BSQG5Uw6BEgAABKyKigpt2bJFmzdv1ltvvaXq6moNHDhQM2bM0IwZM5SSkqJevXpddM28v+Rr75EKrw3O28tmtWjC0Ditune8z8bsTgiUAAAgYBiGoc8//7xpFnLv3r3yeDwaN25cU4i85pprZLG0/PrNscpaTXlmp+p92N4nzG7V9gcma1BshM/G7E4IlAAAoEdrbGxUXl5eU4j84osvFB4ertTU1Kal7P79+7drzLX7HHoot8BnNf42Y5QyxyX6bLzuhkAJAAB6nMrKSr355pvavHmztm7dqrNnz+qyyy7T9OnTNWPGDN1yyy0KDw83dY9ndxRp6bZC07X+cupw/TQlyfQ43RmBEgAA9AiHDx/Wa6+9ps2bN2vPnj3yeDwaO3Zs01L2dddd53UpuyPW7nNo8WsH5fIY7Xqm0ma1yG616LG0kQE9M3kBgRIAAHRLjY2N2r17tzZv3qzXX39dRUVF6tWrl6ZMmaIZM2Zo+vTpGjBgQKfXcayyVos2FiivuFw2q8VrsLxwfGJSvJakjwrYZya/jUAJAAC6jTNnzly0lF1VVaX+/fs3LWXfeuutiojwT0grKj2nNfkO7Sgsk6OiVt8MUBZ91bQ8ZViC5t6QGJCtgbwhUAIAEMCc9S6VVDjV4PIo1G7VkLjIbrdTS2FhYdMLNbt375bb7dZ1113XtJQ9ZswYWa3da3O/nvDvtSsRKAEACDBNM2mHy+SobGYmLTZCKcMTNGd8opL7df1Mmsvl0p49e5pCZGFhocLCwnTrrbc2LWUPHDiwy+tCxxEoAQAIEN35Wb+qqipt3bpVmzdv1ptvvqkzZ86oX79+TUvZU6ZMUWRkZKfWgM5DoAQAIACYfRv50bSRmu3jt5GLi4ubZiHz8vLkcrl0zTXXNC1lX3/99d1uKRsdQ6AEAKCH81W/xAenDtP9Kckdvt7lcum9995rCpGff/65QkNDdcsttzQtZScmBn4LnWBEoAQAoAfz944uZ8+e1VtvvaXNmzdry5YtqqysVEJCgu644w7NmDFDqampioqK8ll96J4IlAAA9FDt3XP67N4cVe1apZD4RA2473+aPacte04fOXKkaRZy586dcrlcGj16dNMs5Pe+9z2WsoNM8L7fDgBAD7doY4FcbXxe0lVdrrPvrZMlpJf38zyGFm0s0Kp7xzd95na79f777zeFyEOHDik0NFQpKSlatmyZpk+frsGDB5v6WdCzESgBAOiBikrPKa+4vM3nn9nxF4UNGC7D45HnfHWL57k9hvKKy7X/yCkVf7S7aSm7vLxcffv21R133KHf/OY3Sk1NVXR0cDXvRssIlAAA9EBr8h2ttga6oM7xqWo/36P+Wf+tyrefa31ww6Mp/+dRVWx7TldffbUWLFigGTNm6Hvf+55sNpsPqkegIVACANAD7Thc1qYwaXjcqnz7OUVdM1WhCUPaNrjFqoHjbtO+5/5Nl19+ublCERR4YhYAgB6mpt4lR2Vt2879+E25qk+r96R57brHWXeIEgYM6kh5CEIESgAAepijFU615VUc9/lqVeWtUe8JmbJFXNKuexiSSiqcHaoPwYdACQBAD9PQxjZBVbtWyRoepejrZ3TqfQCeoQQAoIcJtbc+H9RYeUI1+99Sn1sXyH2usulzw90ow+OWq6pUlrAI2cJbflO7LfcBJAIlAAA9zpC4SFkkr8ve7nMVkuHRme1/0pntf/rO8RPP3avo69MUO2Vhs9dbvr4P0BYESgAAehh3fa36hLhV2dhyC5+QvoPVN+M/vvN51a5V8jScV+yUhbL37t/i9YlxEYoMIyagbfgvBQCAHsDpdOr1119XTk6OtmzZooiJP1bMmOlSC1sc2iIuUcSwG7/zefW+VyWp2WNN11otShmW4JvCERR4OAIAgG6qrq5OGzdu1OzZs5WQkKDZs2fr2LFjevzxx7Xpd/9fi2HSLLfH0NwbEjtlbAQmi2EYbdsEFAAAdLqGhgZt27ZNOTk5evXVV3Xu3Dldc801yszM1KxZs3TFFVc0nTvvL/nae6SiTQ3O28pmtWjC0LiL9vIGWkOgBADAz1wul9555x3l5OQoNzdXVVVVuvLKK5WZmanMzEyNGDGi2euOVdZqyjM7Ve/D9j5hdqu2PzBZg2IjfDYmAh+BEgAAP3C73dq1a5dycnK0YcMGlZeX64orrtDs2bOVmZmpq6++WhaLpdVx1u5z6KHcAp/V9duMUcocx3I32oeXcgAA6CIej0fvvfeecnJytH79ep06dUqDBw9WVlaWMjMzNWbMmDaFyG+aPS5R5TX1Wrqt0HR9v5w6nDCJDmGGEgCATmQYhv72t79p7dq1WrdunY4fP64BAwZo1qxZyszM1Pjx49sdIpuzdp9Di187KJfHaNczlTarRXarRY+ljSRMosMIlAAA+JhhGPrkk0+Uk5OjdevW6ciRI0pISNAPf/hDZWZm6qabbpK1E97QPlZZq0UbC5RXXC6b1eI1WF44PjEpXkvSR/HMJEwhUAIA4COHDh3S2rVrlZOTo8LCQsXGxuruu+9WZmamJk+eLLu9a540Kyo9pzX5Du0oLJOjovaiHXUs+qppecqwBM29IVFJCS1vvQi0FYESAAATioqKlJOTo5ycHH366aeKiYlRenq6MjMzNWXKFIWEhPi1Pme9SyUVTjW4PAq1WzUkLpIdcOBzBEoAANqppKRE69at09q1a/Xxxx8rMjJSd955pzIzM3XbbbcpLCzM3yUCXYpACQBAGxw/flzr169XTk6O8vPz1atXL02fPl2ZmZm6/fbbFRHBM4gIXgTKb3G73SovL1ddXZ1cLpciIyMVGxur0NBQf5cGAOhipaWleuWVV5STk6O8vDyFhoZq2rRpmj17tmbMmKGoqCh/lwh0C0EdKA3D0P79+/Xqq6/qo48+UlFRkb744gs1NjZedJ7VatWQIUOUnJys0aNHa8aMGZowYYJsNpufKgcAdJby8nLl5uYqJydH7777rqxWq1JTU5WZmak777xTvXv39neJQLcTlIHy3LlzWrZsmVauXKmSkhL17t1bN954o5KTk5WcnKxBgwbJ7XartrZWl1xyiU6ePKmioiIVFRUpPz9fp06dUt++fTVnzhw99NBD6tevn79/JACACVVVVdq0aZNycnL09ttvyzAMpaSkaPbs2UpPT1dcXJy/SwS6taAKlIZh6I9//KMeeeQRVVdX65577tHMmTN18803t/ktPI/How8++EAbNmzQihUr5HK59K//+q/69a9/zbI4APQg586d02uvvaacnBy99dZbamxs1MSJE5WZmam7776byQKgHYImUDqdTmVlZWn9+vWaP3++HnnkEQ0aNMjUmGfOnNGTTz6pp59+Wtdff702bNigSy+91EcVAwB8rba2Vm+88YZycnL0xhtvqK6uTjfccIMyMzM1c+ZMXXbZZf4uEeiRgiJQ1tbW6uabb9ahQ4e0atUqpaen+3T8999/XxkZGbLb7crPz1f//v19Oj4AoOPq6uq0detW5eTkaPPmzXI6nRo7dqwyMzM1a9YsDR482N8lAj1ewAdKwzA0d+5cbdy4UXl5eRo7dmyn3Of48eMaP368Bg8erB07dtCDDAD8qKGhQdu3b1dOTo42bdqk6upqjRo1SrNnz9asWbOUlJTk7xKBgBLwgXLdunXKzMzU2rVrlZmZ2an3ys/P16RJk/TrX/9aDz/8cKfe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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Exercise 2\n", + "import networkx as nx\n", + "from random import randint, sample\n", + "import time\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Aufgabe 1\n", + "def generate_graph(nodes: int, edges: int) -> nx.Graph:\n", + " G = nx.Graph()\n", + " G.add_nodes_from(range(nodes))\n", + " G.add_edges_from([(randint(0, nodes-1), randint(0, nodes-1)) for _ in range(edges)])\n", + " return G\n", + "\n", + "G = generate_graph(10,12)\n", + "nx.draw(G, with_labels=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": {}, + "outputs": [], + "source": [ + "# Aufgabe 2\n", + "\n", + "def fitness(G: nx.Graph, solution : list) -> float:\n", + " for a in solution:\n", + " for b in solution:\n", + " if a == b:\n", + " continue\n", + " if (a,b) not in G.edges:\n", + " return 0\n", + " \n", + " return len(solution) " + ] + }, + { + "cell_type": "code", + "execution_count": 118, + "metadata": {}, + "outputs": [], + "source": [ + "# Aufgabe 3\n", + "def solve(G: nx.Graph, pop_size: int, generations: int) -> list:\n", + " #initialize random\n", + " pop = [sample(list(G.nodes), 2) for _ in range(pop_size)]\n", + "\n", + "\n", + " for _ in range(generations):\n", + "\n", + " # termination condition\n", + " if max(pop, key=len) == len(G.nodes):\n", + " return max(pop, key=len)\n", + "\n", + " #selection\n", + " for indi in pop:\n", + " if fitness(G, indi) == 0: #individual of pop is no clique --> remove individual from pop\n", + " pop.remove(indi)\n", + "\n", + " #recombination\n", + " new_pop = pop\n", + " for _ in range(pop_size - len(pop)):\n", + " #combine 2 random parents (disjoint)\n", + " child = list(set(pop[randint(0, len(pop)-1)] + pop[randint(0, len(pop)-1)]))\n", + " new_pop.append(child)\n", + "\n", + " #mutation\n", + " for indi in pop:\n", + " #add random node to individual\n", + " while True:\n", + " rand = randint(0, len(G.nodes)-1)\n", + " if G.nodes[rand] not in indi:\n", + " indi.append(G.nodes[rand])\n", + " break\n", + "\n", + "\n", + " return [1,2,3]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 120, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "unhashable type: 'dict'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[120], line 13\u001b[0m\n\u001b[1;32m 9\u001b[0m nx\u001b[39m.\u001b[39mdraw_networkx_labels(G, pos, {n:n \u001b[39mfor\u001b[39;00m n \u001b[39min\u001b[39;00m G\u001b[39m.\u001b[39mnodes})\n\u001b[1;32m 12\u001b[0m G \u001b[39m=\u001b[39m generate_graph(\u001b[39m10\u001b[39m,\u001b[39m15\u001b[39m)\n\u001b[0;32m---> 13\u001b[0m draw_solution(G, solve(G, \u001b[39m30\u001b[39;49m, \u001b[39m20\u001b[39;49m))\n", + "Cell \u001b[0;32mIn[118], line 15\u001b[0m, in \u001b[0;36msolve\u001b[0;34m(G, pop_size, generations)\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[39m#selection\u001b[39;00m\n\u001b[1;32m 14\u001b[0m \u001b[39mfor\u001b[39;00m indi \u001b[39min\u001b[39;00m pop:\n\u001b[0;32m---> 15\u001b[0m \u001b[39mif\u001b[39;00m fitness(G, indi) \u001b[39m==\u001b[39m \u001b[39m0\u001b[39m: \u001b[39m#individual of pop is no clique --> remove individual from pop\u001b[39;00m\n\u001b[1;32m 16\u001b[0m pop\u001b[39m.\u001b[39mremove(indi)\n\u001b[1;32m 18\u001b[0m \u001b[39m#recombination\u001b[39;00m\n", + "Cell \u001b[0;32mIn[90], line 8\u001b[0m, in \u001b[0;36mfitness\u001b[0;34m(G, solution)\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[39mif\u001b[39;00m a \u001b[39m==\u001b[39m b:\n\u001b[1;32m 7\u001b[0m \u001b[39mcontinue\u001b[39;00m\n\u001b[0;32m----> 8\u001b[0m \u001b[39mif\u001b[39;00m (a,b) \u001b[39mnot\u001b[39;49;00m \u001b[39min\u001b[39;49;00m G\u001b[39m.\u001b[39;49medges:\n\u001b[1;32m 9\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39m0\u001b[39m\n\u001b[1;32m 11\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mlen\u001b[39m(solution)\n", + "File \u001b[0;32m/opt/homebrew/lib/python3.10/site-packages/networkx/classes/reportviews.py:1270\u001b[0m, in \u001b[0;36mEdgeView.__contains__\u001b[0;34m(self, e)\u001b[0m\n\u001b[1;32m 1268\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m 1269\u001b[0m u, v \u001b[39m=\u001b[39m e[:\u001b[39m2\u001b[39m]\n\u001b[0;32m-> 1270\u001b[0m \u001b[39mreturn\u001b[39;00m v \u001b[39min\u001b[39;49;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_adjdict[u] \u001b[39mor\u001b[39;00m u \u001b[39min\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_adjdict[v]\n\u001b[1;32m 1271\u001b[0m \u001b[39mexcept\u001b[39;00m (\u001b[39mKeyError\u001b[39;00m, \u001b[39mValueError\u001b[39;00m):\n\u001b[1;32m 1272\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mFalse\u001b[39;00m\n", + "\u001b[0;31mTypeError\u001b[0m: unhashable type: 'dict'" + ] + } + ], + "source": [ + "# Aufgabe 4\n", + "def draw_solution(G: nx.Graph, solution: list):\n", + " pos = nx.spring_layout(G)\n", + "\n", + " nx.draw_networkx_nodes(G, pos, nodelist=[n for n in G.nodes if n not in solution], node_color=\"tab:blue\")\n", + " nx.draw_networkx_nodes(G, pos, nodelist=solution, node_color=\"tab:red\")\n", + "\n", + " nx.draw_networkx_edges(G, pos)\n", + " nx.draw_networkx_labels(G, pos, {n:n for n in G.nodes})\n", + " \n", + "\n", + "G = generate_graph(10,15)\n", + "draw_solution(G, solve(G, 30, 20))\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# drawing biggest clique of find_cliques\n", + "max_cliques = nx.find_cliques(G)\n", + "draw_solution(G, max(max_cliques, key=len))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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 (main, Dec 15 2022, 17:11:09) [Clang 14.0.0 (clang-1400.0.29.202)]" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "b0fa6594d8f4cbf19f97940f81e996739fb7646882a419484c72d19e05852a7e" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}