Created
October 30, 2018 21:43
-
-
Save lgvaz/c239e8786acf4b296a27822720015b4a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "%matplotlib inline\n", | |
| "import numpy as np\n", | |
| "from collections import namedtuple\n", | |
| "import matplotlib.pyplot as plt" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "letter2idx = {chr(i + 65): i for i in range(15)}" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "Point = namedtuple('Point', ['x', 'y'])\n", | |
| "with open('cities.dat', 'r') as f:\n", | |
| " lines = [l.split() for l in f.readlines()]\n", | |
| " cities = {letter2idx[v[0]]: Point(int(v[1]), int(v[2])) for v in lines}" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "def get_distance(a, b):\n", | |
| " return ((a.x - b.x)**2 + (a.y - b.y)**2) ** 0.5" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "def softmax(arr): \n", | |
| " arr_exp = np.exp(arr)\n", | |
| " return arr_exp / arr_exp.sum()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "def normalize(arr):\n", | |
| " return (arr - arr.mean()) / arr.std()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "def has_duplicate(arr):\n", | |
| " return len(np.unique(arr)) != len(arr)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "def draw_path(dna, cities):\n", | |
| " for i, p in cities.items():\n", | |
| " plt.scatter(p.x, p.y, c='b')\n", | |
| " plt.text(p.x, p.y, i)\n", | |
| "\n", | |
| " for c1, c2 in zip(dna[:-1], dna[1:]):\n", | |
| " p1, p2 = cities[c1], cities[c2]\n", | |
| " plt.plot([p1.x, p2.x], [p1.y, p2.y], c='r')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 9, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "class GeneticAgent:\n", | |
| " def __init__(self, pop_size, num_features, keep_top=10):\n", | |
| " self.pop_size = pop_size\n", | |
| " self.num_features = num_features\n", | |
| " self.keep_top = keep_top\n", | |
| " self.pop = self._create_pop()\n", | |
| " self.best = None\n", | |
| " \n", | |
| " def _create_pop(self):\n", | |
| " return np.array([np.random.choice(self.num_features, size=self.num_features, replace=False)\n", | |
| " for _ in range(self.pop_size)])\n", | |
| " \n", | |
| " def get_fitness(self, dna, cities):\n", | |
| " dist = 0\n", | |
| " for c1, c2 in zip(dna[:-1], dna[1:]):\n", | |
| " dist += get_distance(cities[c1], cities[c2])\n", | |
| " return dist\n", | |
| " \n", | |
| " def eval_pop(self, cities):\n", | |
| " fit = [-self.get_fitness(dna, cities) for dna in self.pop]\n", | |
| " return np.array(fit)\n", | |
| " \n", | |
| " def get_probs(self, fit, cities):\n", | |
| " return softmax(normalize(fit))\n", | |
| " \n", | |
| " def new_gen(self, probs, mutate_prob): \n", | |
| " # TODO: UNIQUE\n", | |
| " # Start new gen with strongest top k unique individuals\n", | |
| " strongs = np.argsort(probs)[::-1]\n", | |
| " new_gen = []\n", | |
| " i = 0\n", | |
| " while len(new_gen) < self.keep_top:\n", | |
| " dna = self.pop[strongs[i]].tolist() \n", | |
| " if dna not in new_gen:\n", | |
| " new_gen.append(dna)\n", | |
| " i += 1\n", | |
| " \n", | |
| " # Reproduce \n", | |
| " while len(new_gen) < self.pop_size:\n", | |
| " # Select 2 individuals\n", | |
| " g1, g2 = self.pop[np.random.choice(agent.pop_size, size=2, p=probs, replace=False)]\n", | |
| " # Cross over region\n", | |
| " cross = np.random.randint(low=0, high=self.num_features)\n", | |
| " # Join genes\n", | |
| " dna = np.concatenate((g1[cross:], g2[:cross]))\n", | |
| " # Mutate\n", | |
| " if np.random.random() < mutate_prob:\n", | |
| " m1, m2 = np.random.choice(self.num_features, size=2, replace=False)\n", | |
| " dna[m1], dna[m2] = dna[m2], dna[m1]\n", | |
| " # Don't add if invalid (duplicate values) \n", | |
| " if has_duplicate(dna):\n", | |
| " continue \n", | |
| " new_gen.append(dna)\n", | |
| " \n", | |
| " return np.array(new_gen)\n", | |
| " \n", | |
| " def train(self, n_iters, cities, mutate_prob=1., render=True):\n", | |
| " fits = []\n", | |
| " for _ in range(n_iters):\n", | |
| " fit = self.eval_pop(cities=cities)\n", | |
| " probs = self.get_probs(fit=fit, cities=cities)\n", | |
| " self.pop = self.new_gen(probs=probs, mutate_prob=mutate_prob)\n", | |
| " fits.append(fit)\n", | |
| " \n", | |
| " if render:\n", | |
| " fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(16, 4))\n", | |
| " axs[0].plot(np.mean(fits, axis=1), label='mean')\n", | |
| " axs[1].plot(np.max(fits, axis=1), label='max')\n", | |
| " \n", | |
| " fit = self.eval_pop(cities=cities)\n", | |
| " return self.pop[:self.keep_top], fit[:self.keep_top]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 10, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "agent = GeneticAgent(pop_size=100, num_features=15, keep_top=30)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 11, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 1152x288 with 2 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "pop, fits = agent.train(n_iters=500, cities=cities)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 12, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "draw_path(dna=agent.pop[0], cities=cities)\n", | |
| "_ = plt.title('Fitness: {}'.format(fits[0]))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 13, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "draw_path(dna=agent.pop[1], cities=cities)\n", | |
| "_ = plt.title('Fitness: {}'.format(fits[1]))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 14, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "draw_path(dna=agent.pop[2], cities=cities)\n", | |
| "_ = plt.title('Fitness: {}'.format(fits[2]))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 15, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "draw_path(dna=agent.pop[3], cities=cities)\n", | |
| "_ = plt.title('Fitness: {}'.format(fits[3]))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 16, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "draw_path(dna=agent.pop[4], cities=cities)\n", | |
| "_ = plt.title('Fitness: {}'.format(fits[4]))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 17, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "draw_path(dna=agent.pop[5], cities=cities)\n", | |
| "_ = plt.title('Fitness: {}'.format(fits[5]))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 18, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "draw_path(dna=agent.pop[6], cities=cities)\n", | |
| "_ = plt.title('Fitness: {}'.format(fits[6]))" | |
| ] | |
| } | |
| ], | |
| "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.6.5" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 2 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment