Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 34,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": [
- "def get_population():\n",
- " population = []\n",
- " for i in range(N_POP):\n",
- " arr = [random.randint(0,99) for j in range(16)]\n",
- " population.append(arr)\n",
- "\n",
- " return population\n",
- "\n",
- "def clac_score(x):\n",
- " return np.mean(x)\n",
- "\n",
- "def evaluate(pop):\n",
- " fitness = []\n",
- " for p in pop:\n",
- " if p[0] == -1:\n",
- " fitness.append((clac_score(p[1]), p[1]))\n",
- " else:\n",
- " fitness.append(p)\n",
- " fitness.sort()\n",
- " fitness.reverse()\n",
- " \n",
- " return fitness\n",
- "\n",
- "def mutate(parent):\n",
- " r = int(math.floor(random.random()*len(parent)))\n",
- " child = copy.deepcopy(parent)\n",
- " child[r] = (parent[r] + 1) % 2\n",
- " \n",
- " return child\n",
- "\n",
- "def crossover(parent1, parent2):\n",
- " length = len(parent1)\n",
- " r1 = int(math.floor(random.random()*length))\n",
- " r2 = r1 + int(math.floor(random.random()*(length-r1)))\n",
- " \n",
- " child = copy.deepcopy(parent1)\n",
- " child[r1:r2] = parent2[r1:r2]\n",
- "\n",
- " return child"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 49,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": [
- "import random\n",
- "import math\n",
- "import copy\n",
- "import numpy as np\n",
- "\n",
- "N_PARAM = 16\n",
- "N_POP = 500\n",
- "N_GEN = 40\n",
- "MUTATE_PROB = 0.35\n",
- "ELITE_RATE = 0.4\n",
- "\n",
- "\n",
- "def main():\n",
- " pop = [(-1, p) for p in get_population()]\n",
- " \n",
- " for g in range(N_GEN):\n",
- " print(\"Generation: \" + str(g))\n",
- " \n",
- " # Get elites\n",
- " fitness = evaluate(pop)\n",
- " elites = fitness[:int(len(pop)*ELITE_RATE)]\n",
- " \n",
- " # Cross and mutate\n",
- " pop = elites[:]\n",
- " while len(pop) < N_POP:\n",
- " if random.random() < MUTATE_PROB:\n",
- " m = random.randint(0, len(elites)-1)\n",
- " child = mutate(elites[m][1])\n",
- " else:\n",
- " c1 = random.randint(0, len(elites)-1)\n",
- " c2 = random.randint(0, len(elites)-1)\n",
- " child = crossover(elites[c1][1], elites[c2][1])\n",
- " pop.append((-1, child))\n",
- " \n",
- " # Evaluate individual \n",
- " fitness = evaluate(pop)\n",
- " elites = fitness[:int(len(pop)*ELITE_RATE)]\n",
- " \n",
- " print(pop[0])\n",
- " print()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 50,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Generation: 0\n",
- "(69.875, [74, 32, 50, 82, 59, 93, 61, 52, 71, 79, 65, 53, 91, 69, 96, 91])\n",
- "\n",
- "Generation: 1\n",
- "(69.875, [74, 32, 50, 82, 59, 93, 61, 52, 71, 79, 65, 53, 91, 69, 96, 91])\n",
- "\n",
- "Generation: 2\n",
- "(73.875, [86, 75, 94, 82, 59, 93, 61, 52, 71, 79, 65, 53, 91, 69, 96, 56])\n",
- "\n",
- "Generation: 3\n",
- "(75.125, [88, 47, 85, 92, 63, 85, 59, 97, 98, 90, 41, 82, 89, 79, 11, 96])\n",
- "\n",
- "Generation: 4\n",
- "(77.9375, [99, 75, 94, 87, 34, 86, 37, 69, 91, 95, 90, 88, 85, 71, 90, 56])\n",
- "\n",
- "Generation: 5\n",
- "(80.75, [97, 90, 37, 75, 65, 77, 92, 91, 98, 92, 9, 98, 93, 96, 87, 95])\n",
- "\n",
- "Generation: 6\n",
- "(80.75, [97, 90, 37, 75, 65, 77, 92, 91, 98, 92, 9, 98, 93, 96, 87, 95])\n",
- "\n",
- "Generation: 7\n",
- "(84.0625, [97, 92, 82, 76, 99, 96, 26, 71, 69, 96, 67, 96, 93, 89, 99, 97])\n",
- "\n",
- "Generation: 8\n",
- "(85.375, [99, 75, 94, 87, 93, 61, 76, 85, 99, 92, 72, 98, 93, 96, 90, 56])\n",
- "\n",
- "Generation: 9\n",
- "(89.25, [99, 58, 94, 87, 99, 98, 78, 85, 99, 92, 78, 88, 85, 96, 95, 97])\n",
- "\n",
- "Generation: 10\n",
- "(89.25, [99, 58, 94, 87, 99, 98, 78, 85, 99, 92, 78, 88, 85, 96, 95, 97])\n",
- "\n",
- "Generation: 11\n",
- "(90.3125, [88, 75, 94, 87, 93, 86, 99, 97, 91, 79, 78, 98, 93, 96, 95, 96])\n",
- "\n",
- "Generation: 12\n",
- "(91.625, [97, 90, 94, 87, 93, 73, 96, 97, 99, 92, 72, 98, 93, 96, 94, 95])\n",
- "\n",
- "Generation: 13\n",
- "(91.6875, [89, 92, 82, 76, 99, 73, 96, 97, 98, 95, 92, 98, 93, 96, 95, 96])\n",
- "\n",
- "Generation: 14\n",
- "(92.125, [99, 75, 94, 87, 93, 86, 99, 97, 98, 90, 97, 98, 93, 96, 98, 74])\n",
- "\n",
- "Generation: 15\n",
- "(92.625, [99, 75, 94, 87, 93, 73, 96, 97, 98, 95, 92, 98, 93, 96, 99, 97])\n",
- "\n",
- "Generation: 16\n",
- "(93.375, [99, 75, 94, 87, 93, 86, 99, 97, 98, 90, 97, 98, 93, 96, 95, 97])\n",
- "\n",
- "Generation: 17\n",
- "(94.5625, [99, 75, 94, 87, 99, 98, 96, 97, 99, 98, 92, 98, 93, 96, 95, 97])\n",
- "\n",
- "Generation: 18\n",
- "(94.5625, [99, 75, 94, 87, 99, 98, 96, 97, 99, 98, 92, 98, 93, 96, 95, 97])\n",
- "\n",
- "Generation: 19\n",
- "(94.625, [97, 90, 94, 87, 99, 86, 99, 97, 98, 90, 97, 98, 93, 96, 98, 95])\n",
- "\n",
- "Generation: 20\n",
- "(94.875, [99, 92, 94, 87, 93, 86, 99, 97, 98, 98, 92, 98, 93, 96, 99, 97])\n",
- "\n",
- "Generation: 21\n",
- "(95.875, [99, 92, 94, 87, 99, 98, 96, 97, 99, 98, 92, 98, 93, 96, 99, 97])\n",
- "\n",
- "Generation: 22\n",
- "(95.875, [99, 92, 94, 87, 99, 98, 96, 97, 99, 98, 92, 98, 93, 96, 99, 97])\n",
- "\n",
- "Generation: 23\n",
- "(95.875, [99, 92, 94, 87, 99, 98, 96, 97, 99, 98, 92, 98, 93, 96, 99, 97])\n",
- "\n",
- "Generation: 24\n",
- "(96.0625, [99, 92, 94, 87, 99, 98, 99, 97, 98, 98, 97, 98, 93, 96, 95, 97])\n",
- "\n",
- "Generation: 25\n",
- "(96.0625, [99, 92, 94, 87, 99, 98, 99, 97, 98, 98, 97, 98, 93, 96, 95, 97])\n",
- "\n",
- "Generation: 26\n",
- "(96.0625, [99, 92, 94, 87, 99, 98, 99, 97, 98, 98, 97, 98, 93, 96, 95, 97])\n",
- "\n",
- "Generation: 27\n",
- "(96.0625, [99, 92, 94, 87, 99, 98, 99, 97, 98, 98, 97, 98, 93, 96, 95, 97])\n",
- "\n",
- "Generation: 28\n",
- "(96.375, [97, 91, 94, 98, 99, 98, 96, 97, 99, 98, 92, 98, 93, 96, 99, 97])\n",
- "\n",
- "Generation: 29\n",
- "(96.5, [97, 91, 94, 98, 99, 98, 99, 97, 98, 98, 92, 98, 93, 96, 99, 97])\n",
- "\n",
- "Generation: 30\n",
- "(96.75, [99, 92, 94, 98, 99, 98, 99, 97, 98, 98, 97, 98, 93, 96, 95, 97])\n",
- "\n",
- "Generation: 31\n",
- "(96.75, [99, 92, 94, 98, 99, 98, 99, 97, 98, 98, 97, 98, 93, 96, 95, 97])\n",
- "\n",
- "Generation: 32\n",
- "(96.8125, [97, 91, 94, 98, 99, 98, 99, 97, 98, 98, 97, 98, 93, 96, 99, 97])\n",
- "\n",
- "Generation: 33\n",
- "(97.0, [99, 92, 94, 98, 99, 98, 99, 97, 98, 98, 97, 98, 93, 96, 99, 97])\n",
- "\n",
- "Generation: 34\n",
- "(97.0, [99, 92, 94, 98, 99, 98, 99, 97, 98, 98, 97, 98, 93, 96, 99, 97])\n",
- "\n",
- "Generation: 35\n",
- "(97.0625, [99, 92, 94, 98, 99, 98, 99, 97, 99, 98, 97, 98, 93, 96, 99, 97])\n",
- "\n",
- "Generation: 36\n",
- "(97.0625, [99, 92, 94, 98, 99, 98, 99, 97, 99, 98, 97, 98, 93, 96, 99, 97])\n",
- "\n",
- "Generation: 37\n",
- "(97.0625, [99, 92, 94, 98, 99, 98, 99, 97, 99, 98, 97, 98, 93, 96, 99, 97])\n",
- "\n",
- "Generation: 38\n",
- "(97.0625, [99, 92, 94, 98, 99, 98, 99, 97, 99, 98, 97, 98, 93, 96, 99, 97])\n",
- "\n",
- "Generation: 39\n",
- "(97.0625, [99, 92, 94, 98, 99, 98, 99, 97, 99, 98, 97, 98, 93, 96, 99, 97])\n",
- "\n"
- ]
- }
- ],
- "source": [
- "if __name__ == \"__main__\":\n",
- " main()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": []
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": []
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": []
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": []
- }
- ],
- "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.2"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 2
- }
Add Comment
Please, Sign In to add comment