{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "GA.ipynb", "provenance": [], "collapsed_sections": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "code", "metadata": { "id": "ZG0euCr89ma8" }, "source": [ "" ], "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "O0OAgpOT9naf" }, "source": [ "**Задание 1**" ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "38DxP7jFv-HE", "outputId": "69e240bd-6ec9-4a33-dc8f-a02dcb689564" }, "source": [ "\n", "\n", "from numpy.random import randint\n", "from numpy.random import rand\n", " \n", "# objective function\n", "def onemax(x):\n", "\treturn -sum(x)\n", " \n", "# tournament selection\n", "def selection(pop, scores, k=3):\n", "\t# first random selection\n", "\tselection_ix = randint(len(pop))\n", "\tfor ix in randint(0, len(pop), k-1):\n", "\t\t# check if better (e.g. perform a tournament)\n", "\t\tif scores[ix] < scores[selection_ix]:\n", "\t\t\tselection_ix = ix\n", "\treturn pop[selection_ix]\n", " \n", "# crossover two parents to create two children\n", "def crossover(p1, p2, r_cross):\n", "\t# children are copies of parents by default\n", "\tc1, c2 = p1.copy(), p2.copy()\n", "\t# check for recombination\n", "\tif rand() < r_cross:\n", "\t\t# select crossover point that is not on the end of the string\n", "\t\tpt = randint(1, len(p1)-2)\n", "\t\t# perform crossover\n", "\t\tc1 = p1[:pt] + p2[pt:]\n", "\t\tc2 = p2[:pt] + p1[pt:]\n", "\treturn [c1, c2]\n", " \n", "# mutation operator\n", "def mutation(bitstring, r_mut):\n", "\tfor i in range(len(bitstring)):\n", "\t\t# check for a mutation\n", "\t\tif rand() < r_mut:\n", "\t\t\t# flip the bit\n", "\t\t\tbitstring[i] = 1 - bitstring[i]\n", " \n", "# genetic algorithm\n", "def genetic_algorithm(objective, n_bits, n_iter, n_pop, r_cross, r_mut):\n", "\t# initial population of random bitstring\n", "\tpop = [randint(0, 2, n_bits).tolist() for _ in range(n_pop)]\n", "\t# keep track of best solution\n", "\tbest, best_eval = 0, objective(pop[0])\n", "\t# enumerate generations\n", "\tfor gen in range(n_iter):\n", "\t\t# evaluate all candidates in the population\n", "\t\tscores = [objective(c) for c in pop]\n", "\t\t# check for new best solution\n", "\t\tfor i in range(n_pop):\n", "\t\t\tif scores[i] < best_eval:\n", "\t\t\t\tbest, best_eval = pop[i], scores[i]\n", "\t\t\t\tprint(\">%d, new best f(%s) = %.3f\" % (gen, pop[i], scores[i]))\n", "\t\t# select parents\n", "\t\tselected = [selection(pop, scores) for _ in range(n_pop)]\n", "\t\t# create the next generation\n", "\t\tchildren = list()\n", "\t\tfor i in range(0, n_pop, 2):\n", "\t\t\t# get selected parents in pairs\n", "\t\t\tp1, p2 = selected[i], selected[i+1]\n", "\t\t\t# crossover and mutation\n", "\t\t\tfor c in crossover(p1, p2, r_cross):\n", "\t\t\t\t# mutation\n", "\t\t\t\tmutation(c, r_mut)\n", "\t\t\t\t# store for next generation\n", "\t\t\t\tchildren.append(c)\n", "\t\t# replace population\n", "\t\tpop = children\n", "\treturn [best, best_eval]\n", " \n", "# define the total iterations\n", "n_iter = 100\n", "# bits\n", "n_bits = 20\n", "# define the population size\n", "n_pop = 100\n", "# crossover rate\n", "r_cross = 0.9\n", "# mutation rate\n", "r_mut = 1.0 / float(n_bits)\n", "# perform the genetic algorithm search\n", "best, score = genetic_algorithm(onemax, n_bits, n_iter, n_pop, r_cross, r_mut)\n", "print('Done!')\n", "print('f(%s) = %f' % (best, score))" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ ">0, new best f([1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1]) = -11.000\n", ">0, new best f([1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1]) = -13.000\n", ">0, new best f([1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1]) = -14.000\n", ">1, new best f([0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1]) = -15.000\n", ">1, new best f([1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1]) = -16.000\n", ">1, new best f([1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1]) = -17.000\n", ">3, new best f([1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) = -18.000\n", ">5, new best f([1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) = -19.000\n", ">6, new best f([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) = -20.000\n", "Done!\n", "f([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) = -20.000000\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "AwRY0upwysIE" }, "source": [ "" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "nJMnpg4oysM1" }, "source": [ "" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "W1fLVewRysQb" }, "source": [ "" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "SQrsdZuXysUM" }, "source": [ "" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "Jdzr2G0owYlb" }, "source": [ "Genetic Algorithm for OneMax\n" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "t5uylCNTw984" }, "source": [ "# objective function\n", "def onemax(x):\n", "\treturn -sum(x)" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "Rb-sq91kxAlu" }, "source": [ "# define the total iterations\n", "n_iter = 100\n", "# bits\n", "n_bits = 20\n", "# define the population size\n", "n_pop = 100\n", "# crossover rate\n", "r_cross = 0.9\n", "# mutation rate\n", "r_mut = 1.0 / float(n_bits)" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "ZyrOd_laxD7n", "outputId": "c72af402-0551-440d-9663-b5eda6320870" }, "source": [ "# perform the genetic algorithm search\n", "best, score = genetic_algorithm(onemax, n_bits, n_iter, n_pop, r_cross, r_mut)\n", "print('Done!')\n", "print('f(%s) = %f' % (best, score))" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ ">0, new best f([1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1]) = -11.000\n", ">0, new best f([0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1]) = -13.000\n", ">0, new best f([0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1]) = -14.000\n", ">0, new best f([0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) = -16.000\n", ">2, new best f([1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1]) = -17.000\n", ">2, new best f([1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) = -18.000\n", ">3, new best f([1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) = -19.000\n", ">7, new best f([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) = -20.000\n", "Done!\n", "f([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) = -20.000000\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "y6PhBI57wlQa" }, "source": [ "# genetic algorithm search of the one max optimization problem\n", "from numpy.random import randint\n", "from numpy.random import rand\n", "\n", "# objective function\n", "def onemax(x):\n", "\treturn -sum(x)\n", " \n", "# tournament selection\n", "def selection(pop, scores, k=3):\n", "\t# first random selection\n", "\tselection_ix = randint(len(pop))\n", "\tfor ix in randint(0, len(pop), k-1):\n", "\t\t# check if better (e.g. perform a tournament)\n", "\t\tif scores[ix] < scores[selection_ix]:\n", "\t\t\tselection_ix = ix\n", "\treturn pop[selection_ix]" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "4LPvZvkCxPws" }, "source": [ "# crossover two parents to create two children\n", "def crossover(p1, p2, r_cross):\n", "\t# children are copies of parents by default\n", "\tc1, c2 = p1.copy(), p2.copy()\n", "\t# check for recombination\n", "\tif rand() < r_cross:\n", "\t\t# select crossover point that is not on the end of the string\n", "\t\tpt = randint(1, len(p1)-2)\n", "\t\t# perform crossover\n", "\t\tc1 = p1[:pt] + p2[pt:]\n", "\t\tc2 = p2[:pt] + p1[pt:]\n", "\treturn [c1, c2]\n", " " ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "Y2Xp__K7xRxP" }, "source": [ "# mutation operator\n", "def mutation(bitstring, r_mut):\n", "\tfor i in range(len(bitstring)):\n", "\t\t# check for a mutation\n", "\t\tif rand() < r_mut:\n", "\t\t\t# flip the bit\n", "\t\t\tbitstring[i] = 1 - bitstring[i]" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "eDkau4vPxUqi" }, "source": [ "# genetic algorithm\n", "def genetic_algorithm(objective, n_bits, n_iter, n_pop, r_cross, r_mut):\n", "\t# initial population of random bitstring\n", "\tpop = [randint(0, 2, n_bits).tolist() for _ in range(n_pop)]\n", "\t# keep track of best solution\n", "\tbest, best_eval = 0, objective(pop[0])\n", "\t# enumerate generations\n", "\tfor gen in range(n_iter):\n", "\t\t# evaluate all candidates in the population\n", "\t\tscores = [objective(c) for c in pop]\n", "\t\t# check for new best solution\n", "\t\tfor i in range(n_pop):\n", "\t\t\tif scores[i] < best_eval:\n", "\t\t\t\tbest, best_eval = pop[i], scores[i]\n", "\t\t\t\tprint(\">%d, new best f(%s) = %.3f\" % (gen, pop[i], scores[i]))\n", "\t\t# select parents\n", "\t\tselected = [selection(pop, scores) for _ in range(n_pop)]\n", "\t\t# create the next generation\n", "\t\tchildren = list()\n", "\t\tfor i in range(0, n_pop, 2):\n", "\t\t\t# get selected parents in pairs\n", "\t\t\tp1, p2 = selected[i], selected[i+1]\n", "\t\t\t# crossover and mutation\n", "\t\t\tfor c in crossover(p1, p2, r_cross):\n", "\t\t\t\t# mutation\n", "\t\t\t\tmutation(c, r_mut)\n", "\t\t\t\t# store for next generation\n", "\t\t\t\tchildren.append(c)\n", "\t\t# replace population\n", "\t\tpop = children\n", "\treturn [best, best_eval]" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "Dqdvqjg8xWf9", "outputId": "6e70c83c-fb46-460a-8203-35df1cb94cac" }, "source": [ "# define the total iterations\n", "n_iter = 100\n", "# bits\n", "n_bits = 20\n", "# define the population size\n", "n_pop = 100\n", "# crossover rate\n", "r_cross = 0.9\n", "# mutation rate\n", "r_mut = 1.0 / float(n_bits)\n", "# perform the genetic algorithm search\n", "best, score = genetic_algorithm(onemax, n_bits, n_iter, n_pop, r_cross, r_mut)\n", "print('Done!')\n", "print('f(%s) = %f' % (best, score))" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ ">0, new best f([1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1]) = -11.000\n", ">0, new best f([1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1]) = -15.000\n", ">1, new best f([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1]) = -17.000\n", ">2, new best f([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0]) = -18.000\n", ">5, new best f([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1]) = -19.000\n", ">8, new best f([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) = -20.000\n", "Done!\n", "f([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) = -20.000000\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "51gWZvOWy6tS" }, "source": [ "" ], "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "LmcrnNE-87pK" }, "source": [ "**Задание 2**" ] }, { "cell_type": "code", "metadata": { "id": "uG_7ms7Ny6xK" }, "source": [ "\n", "pip install pygad" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "qWFX79jOy62y" }, "source": [ "#Y = w1X1 + w2X2 + w3X3 + w4X4\n", "# Y = w1(4) + w2(-2) + w3(3.5) + w4(5)" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 643 }, "id": "jtd8-b_vzGR9", "outputId": "2d5e0524-83d6-4d1b-8d60-b715a15c9584" }, "source": [ "import pygad\n", "import numpy\n", "\n", "function_inputs = [4,-2,3.5,5]\n", "desired_output = 44\n", "\n", "def fitness_func(solution, solution_idx):\n", " output = numpy.sum(solution*function_inputs)\n", " fitness = 1.0 / (numpy.abs(output - desired_output) + 0.000001)\n", " \n", " return fitness\n", "\n", "ga_instance = pygad.GA(num_generations=100,\n", " sol_per_pop=5,\n", " num_genes=4,\n", " num_parents_mating=2,\n", " fitness_func=fitness_func,\n", " mutation_type=\"random\")\n", "\n", "ga_instance.run()\n", "\n", "ga_instance.plot_result()" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "/usr/local/lib/python3.7/dist-packages/pygad/pygad.py:357: UserWarning: The percentage of genes to mutate (mutation_percent_genes=10) resutled in selecting (0) genes. The number of genes to mutate is set to 1 (mutation_num_genes=1).\n", "If you do not want to mutate any gene, please set mutation_type=None.\n", " if not self.suppress_warnings: warnings.warn(\"The percentage of genes to mutate (mutation_percent_genes={mutation_percent}) resutled in selecting ({mutation_num}) genes. The number of genes to mutate is set to 1 (mutation_num_genes=1).\\nIf you do not want to mutate any gene, please set mutation_type=None.\".format(mutation_percent=mutation_percent_genes, mutation_num=mutation_num_genes))\n" ], "name": "stderr" }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [], "needs_background": "light" } }, { "output_type": "execute_result", "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEWCAYAAACJ0YulAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3deZhcVbnv8e8vnYmQQBiayBQSMILAlagtgyMKekBRcGIQMSieiNPRI17E4QrHB3yccUI4USLgAUREMHJRzAEBuUeQBHiQUSAGSQhJMwRIAulO571/7NWdXU13upKq6ura+/d5nnpStfau2u9O9dpvrbX2XlsRgZmZGcCoZgdgZmYjh5OCmZn1cVIwM7M+TgpmZtbHScHMzPo4KZiZWR8nBbMGknSPpIObHUctJP1e0qxmx2HDw0nBAJC0WNLzklZJWi7pAkkTq3xvh6SrJT0taaWkeyWdJWmbfusdLCkkfaFf+bRUviq3/aslvbXGfbpB0kdz215Sy+dVsb0LJJ2ZL4uIfSLihkZut15S/F2572GVpGMi4vCIuDCtc6Kkm5sdqzWOk4LlvTMiJgKvAjqArwz1BkmvBW4A/h+wV0RMBg4D1gH79Vt9FvAU8KFBPm5y2v5+wHzgSkknbvpu1J+k0c2OYZh8KyIm5h6XNTsgG2YR4YcfAIuBQ3Ovvw1cDbwfWNhv3c8Bv03PbwZ+VMXnbwk8BxwLdAEduWXTgABG93vP54HlwKjN3KcbgI+mbT8PrAdWpcdOZD+KTgMeBp4EfgVs2y+mk4B/Ajel8suBx4FngJuAfVL5bKA77dsq4Hf9/1+BccD3gcfS4/vAuLTsYGAJcAqwAlgGfHiQ/ToGWNCv7N+Been524F70//3UuDzVf5/XQCcuZH/x5cDLwA9aR9X5t53DvB/0zZvBfbIvX8vsiT/FPAAcHRu2YCxAtunv7+V6X1/3ty/Az827eGWgr2IpF3JKusdwDxguqSX51Y5AbhI0pbAQcAVVXzse8gOJJcD15K1GobyG2AHYM/qo3+xiFgNHA48Fht+AT8GfBo4CngTWZJ4muzglvcmsoPhv6TXvwdmpLhuBy5O25iTnvf+0n7nAKF8GTgQmEnWGtqfytbYS4CtgZ3JktE5/bvgkt8Be0qakSv7AHBJen4+8LGImATsC1w/yH/NJomI+4CTgb+kfZycW3ws8B/ANsBDwFkA6W9kfopth7TeTyTtPUSsp5AlyXZgCvAlsiRtDeakYHlXSVpJ9uv/RuDrEbEWuAz4IICkfch+RV9NdgAYRfbLmbT8W2lcYbWk/AFvFnBZRPSQHSCOlTRmiHgeS/9uW/OeDexk4MsRsSTt5xnA+/p1FZ0REasj4nmAiJgbEc/l1t9P0tZVbu944GsRsSIiOskOoifklnen5d0RcQ1ZEn1RQoyINcBvgeMAUnLYiyyB937O3pK2ioinI+L2KuMD+Hz6/lZKemIT3ndlRPw1ItaRJceZqfwIYHFE/Dwi1kXEHWQ/It4/RKzdwI7Abun/488R4aQwDJwULO+oiJgcEbtFxCd6D4TAhcAHJInsIPardFB8mqxLZsfeD4iIU9MvyCuB0dDX8ngz6Vc12QFtPPCOIeLZOf37VP8Fkr6UGww9b3N2FtiNbNxiZUqG95F1jUzJrfNobpttkr4h6WFJz5J1DUHW1VGNnYBHcq8fSWW9nkwH1V5rgMEG+y8hJQWyVsJVKVkAvJespfeIpBslHVRlfADfSX8DkyOi2v2C3A+DfnHvBhyQSzQryZLjS4aI9dtkLY4/Slok6bRNiMVq4KRgQ4qIW8j6yt9AdgD6RSpfTdZ//J4hPuIEsr+130l6HFhElhSG6kJ6N1n/+gMDxPT1XFfQydXsxgBljwKH5w6CkyNifEQsHeR9HwCOBA4l6+aZlsq1kW3kPUZ2kOw1lQ2toU01H2iXNJMsOfR2HRERt0XEkWTdNVeRjZXUy6b+Wn8UuLHf//HEiPj4xmJNrbFTImJ34F3A5yQdUsf9sEE4KVi1LgJ+DHRHRP6UxFOBj0g6TdIOAJJ2Aabn1plF1lUyM/d4L/B2Sdv135CkKZI+BZwOfDEi1tch/uXAdv26es4DzpK0W9puu6QjN/IZk4C1ZIPSE4CvD7CN3Tfy/kuBr6TtbA98FfivTduNTER0k43PfJuse21+2oexko6XtHVa51my1ly9LAd2kTS2yvWvBl4m6QRJY9LjNZJevrFYJR0h6aWpdfoMWQuunvthg3BSsGr9gmwgsOIglhLEW4A3An9P3QN/IDtj5UeSDiT7dXxORDyee8wj6x44LvdxKyWtBv5G1qXw/oiYW4/gI+J+soPyotSNsRPwA7J++D9Keg64BThgIx9zEVmXz1KyM2Zu6bf8fLL+8ZWSrhrg/WcCC4C7yPbx9lS2uS4ha7Vc3q/b6QRgceriOpmsuwZJU1N329Qatnk9cA/weDVjDhHxHPA2sgHmx8i6mb5JdibWoLGSDeb/N9m4yl+An0TEn2qI26okj91YNSRtQdaV86qIeLDZ8ZhZY7ilYNX6OHCbE4JZsZXlKk2rgaTFZIOpRzU5FDNrMHcfmZlZH3cfmZlZn5buPtp+++1j2rRpzQ7DzKylLFy48ImIaB9oWUsnhWnTprFgwYJmh2Fm1lIkPTLYMncfmZlZHycFMzPr46RgZmZ9nBTMzKyPk4KZmfVxUjAzsz4tfUqqjSz/eGI1y1Y+P/SKZlYXu7dP5CVbj6/rZzopWF1cfOsjfPnKu5sdhlmpnHnUvnzwwN2GXnETuPvI6uKavy1rdghmVgduKVhdvNC94aZY++68FZPGjWliNGblMGWr+nYdgZOC1Ul3z4akcOZR/4uZu05uYjRmtrncfWR10bVuQ1IY06aNrGlmI5mTgtVFvqUwts1/VmatyrXX6qK7Z8PNmsaO9p+VWaty7bW6yLcUxrilYNayXHutLpwUzIrBtdfqYu06jymYFYFrr9VFRUthtM8+MmtVTgpWF/mBZncfmbUu116rWc/6oGf9hqQwepRbCmatqmFJQdJcSSsk3Z0ru0zSnemxWNKdqXyapOdzy85rVFxWfxXXKIweheSkYNaqGjnNxQXAj4GLegsi4pje55K+CzyTW//hiJjZwHisQXzhmllxNCwpRMRNkqYNtEzZT8mjgbc0avs2fCrHE9xKMGtlzfpZ9wZgeUQ8mCubLukOSTdKesNgb5Q0W9ICSQs6OzsbH6kNqXLeI7cUzFpZs2rwccCludfLgKkR8Urgc8AlkrYa6I0RMSciOiKio729fRhCtaH4wjWz4hj2GixpNPAe4LLesohYGxFPpucLgYeBlw13bLZ5uvoNNJtZ62pGDT4UuD8ilvQWSGqX1Jae7w7MABY1ITbbDJUtBY8pmLWyRp6SeinwF2BPSUsknZQWHUtl1xHAG4G70imqvwZOjoinGhWb1Vf3Os+QalYUjTz76LhByk8coOwK4IpGxWKN1eUxBbPCcA22mnmg2aw4XIOtZl2eIdWsMFyDrWYeaDYrDicFq5m7j8yKwzXYataVn+bCZx+ZtTTXYKtZd25MYZxbCmYtzTXYaubuI7PicA22mnX5VpxmheGkYDXzLKlmxeEabDXL30/B1ymYtTbXYKuZxxTMisM12GrW/x7NZta6XIOtZp4Qz6w4XIOtZvmpsz3NhVlrc1KwmnX19PQ9d/eRWWtzDbaaVbYU/Cdl1spcg61mPvvIrDgaeTvOuZJWSLo7V3aGpKWS7kyPt+eWfVHSQ5IekPQvjYrL6q/LU2ebFUYjf9ZdABw2QPnZETEzPa4BkLQ32b2b90nv+YmktgbGZnWUbymM85iCWUtrWA2OiJuAp6pc/UjglxGxNiL+ATwE7N+o2Ky+8lc0u/vIrLU1owZ/StJdqXtpm1S2M/Bobp0lqexFJM2WtEDSgs7OzkbHalXwmIJZcQx3DT4X2AOYCSwDvrupHxARcyKiIyI62tvb6x2fbYa1nhDPrDCGtQZHxPKI6ImI9cBP2dBFtBTYNbfqLqnMWkDlNBceaDZrZcOaFCTtmHv5bqD3zKR5wLGSxkmaDswA/jqcsdnmc/eRWXGMbtQHS7oUOBjYXtIS4HTgYEkzgQAWAx8DiIh7JP0KuBdYB3wyInoG+lwbeXzxmllxNCwpRMRxAxSfv5H1zwLOalQ81jieJdWsOFyDrWb5i9d8kx2z1uYabDXzmIJZcbgGW80q79Hss4/MWpmTgtWs4opmjymYtTTXYKuZxxTMisM12GoSER5TMCsQ12CrSc/6IFLvUdso0TbKYwpmrcxJwWpSOUOqE4JZq3NSsJp0uevIrFBci60m+dNRPchs1vpci60mHmQ2KxbXYqtJRVLwtNlmLc9JwWrS7WsUzArFtdhq0uVps80KxbXYauJps82KxbXYauJTUs2KxbXYatLtGVLNCqVhSUHSXEkrJN2dK/u2pPsl3SXpSkmTU/k0Sc9LujM9zmtUXFZfbimYFUsja/EFwGH9yuYD+0bEK4C/A1/MLXs4Imamx8kNjMvqKD/Nhc8+Mmt9DavFEXET8FS/sj9GxLr08hZgl0Zt34aHB5rNiqWZtfgjwO9zr6dLukPSjZLe0KygbNP4imazYhndjI1K+jKwDrg4FS0DpkbEk5JeDVwlaZ+IeHaA984GZgNMnTp1uEK2QVTeitNJwazVDXstlnQicARwfEQ2E39ErI2IJ9PzhcDDwMsGen9EzImIjojoaG9vH6aobTAVd13zNBdmLW9Yk4Kkw4BTgXdFxJpcebuktvR8d2AGsGg4Y7PN0+2WglmhNKz7SNKlwMHA9pKWAKeTnW00DpgvCeCWdKbRG4GvSeoG1gMnR8RTA36wjSiVN9lxUjBrdQ1LChFx3ADF5w+y7hXAFY2KxRrH1ymYFYtrsdXEp6SaFYtrsdWkcupsDzSbtTonBauJxxTMisW12Gri6xTMisW12GpSMdDsMQWzludabDXJX6fgMQWz1uekYDXx3EdmxeJabDWpmDrb3UdmLc+12Grii9fMisW12GpSeZ2C/5zMWp1rsdXEp6SaFcsm12JJ20h6RSOCsdZTOdDss4/MWl1VSUHSDZK2krQtcDvwU0nfa2xo1gq68lc0e6DZrOVVW4u3TndBew9wUUQcABzauLCsVVRep+CkYNbqqq3FoyXtCBwNXN3AeKzFeJZUs2KpthZ/DbgWeCgibkt3R3uwcWFZq/DFa2bFUtVNdiLicuDy3OtFwHsbFZS1jsqzjzzQbNbqqh1o/lYaaB4j6TpJnZI+WMX75kpaIenuXNm2kuZLejD9u00ql6QfSnpI0l2SXrX5u2XDJT/Q7DEFs9ZXbS1+WxpoPgJYDLwU+N9VvO8C4LB+ZacB10XEDOC69BrgcGBGeswGzq0yNmsidx+ZFUvVA83p33cAl0fEM9W8KSJuAp7qV3wkcGF6fiFwVK78osjcAkxOg9s2gnV76myzQqm2Fl8t6X7g1cB1ktqBFzZzm1MiYll6/jgwJT3fGXg0t96SVGYjmKe5MCuWqmpxRJwGvBboiIhuYA3ZL/uaREQAMeSKOZJmS1ogaUFnZ2etIVgNIqLf7Tg90GzW6qodaJ4AfIIN/fw7AR2buc3lvd1C6d8VqXwpsGtuvV1SWYWImBMRHRHR0d7evpkhWD30TwiSk4JZq6u2vf9zoIustQDZwfrMzdzmPGBWej4L+G2u/EPpLKQDgWdy3Uw2AnnabLPiqbYm7xER3wK6ASJiDTDkz0JJlwJ/AfaUtETSScA3gLdKepBsqoxvpNWvARYBDwE/JWuZ2AjW7RlSzQqnqovXgC5JW5D6/yXtAawd6k0Rcdwgiw4ZYN0APlllPDYC+HRUs+KpNimcDvwB2FXSxcDrgBMbFZS1hq6KM488nmBWBNVOczFf0u3AgWTdRp+JiCcaGpmNeL4/s1nxVNtSABgPPJ3es7ek3ovTrKTcfWRWPFUlBUnfBI4B7gF6jwQBOCmUmG/FaVY81bYUjgL2jIghB5etPLo8xYVZ4VRbkxcBYxoZiLWeyruueaDZrAiqbSmsAe6UdB25U1Ej4t8aEpW1hMormt1SMCuCapPCvPTI26Q5i6x4PNBsVjzVJoXJEfGDfIGkzzQgHmshXb4/s1nhVFuTZw1QdmId47AW5GmzzYpnoy0FSccBHwCmS8p3H03ixTfPsZKp7D7yQLNZEQzVffQ/wDJge+C7ufLngLsaFZS1Bl+nYFY8G00KEfEI8Ahw0PCEY62kK3/2kccUzAphqO6jmyPi9ZKeo/JsI5FNbLpVQ6OzEa3yOgUnBbMiGKr76HiAiJg0DLFYi/GYglnxDPXz7sreJ5KuaHAs1mK6fUqqWeEMVZPzP/92b2Qg1nq6fEWzWeEMVZNjkOdmPvvIrICGGlPYT9KzZC2GLdJzqGGgWdKewGW5ot2BrwKTgX8FOlP5lyLimk39fBs+vnjNrHiGOiW1rd4bjIgHgJkAktqApWRjFx8Gzo6I79R7m9YYHmg2K55m/7w7BHg4XQ9hLabb91MwK5xm1+RjgUtzrz8l6S5JcyVtM9AbJM2WtEDSgs7OzoFWsWHStS53j2Z3H5kVQtNqsqSxwLuAy1PRucAeZF1Ly6icVqNPRMyJiI6I6Ghvbx+WWG1gPiXVrHiaWZMPB26PiOUAEbE8InoiYj3wU2D/JsZmVfD9FMyKp5k1+ThyXUeSdswtezdw97BHZJvEp6SaFU+1N9mpK0lbAm8FPpYr/pakmWTXQyzut8xGoC6ffWRWOE1JChGxGtiuX9kJzYil7P755Bp+c8cS1nT1bPJ7H16xqu+5B5rNiqEpScFGhohg9i8WcP/jz9X8WT4l1awYXJNLrKtnfV0SwsRxo9nrJZ5I16wI3FIosTVrN3QZbTGmjc8eOmOTP6NtlDjk5VOYNH5MPUMzsyZxUiixVWvX9T3fZsIYPvamPZoYjZmNBO4+KrH84PKEcf59YGZOCqW2umtDS2FLJwUzw0mh1PJjCluOrfuEuGbWgpwUSiw/pjBhrFsKZuakUGprct1HE8e5pWBmTgqlttoDzWbWj5NCia3OdR95TMHMwEmh1NZ4TMHM+nFSKLF899FEdx+ZGU4KpZYfaJ7ggWYzw0mh1FZVXKfgloKZOSmUWuWYglsKZuakUGqrK65TcEvBzJo4S6qkxcBzQA+wLiI6JG0LXAZMI7sl59ER8XSzYiw6T4hnZv01u6Xw5oiYGREd6fVpwHURMQO4Lr22Blnl6xTMrJ9mJ4X+jgQuTM8vBI5qYiyFVzEhnlsKZkZzk0IAf5S0UNLsVDYlIpal548DU/q/SdJsSQskLejs7ByuWAupYupsn31kZjT3zmuvj4ilknYA5ku6P78wIkJS9H9TRMwB5gB0dHS8aLlVJyIqxhS2cPeRmdHElkJELE3/rgCuBPYHlkvaESD9u6JZ8RXd2nXr6Vmf5dSxbaMYO3qk9SSaWTM05UggaUtJk3qfA28D7gbmAbPSarOA3zYjvjKomAzPVzObWdKs7qMpwJWSemO4JCL+IOk24FeSTgIeAY5uUnyFV3E6qscTzCxpytEgIhYB+w1Q/iRwyPBHVD6V92d2S8HMMu5ILqnVnjbbzAbgpFBSq9d62mwzezEnhZKqmDbbp6OaWeKkUFKrfTWzmQ3ASaGkPNBsZgNxUiip1b7BjpkNwEmhpCrHFJwUzCzjpFBSlWMK7j4ys4yTQklVTnPhloKZZZwUSmq1T0k1swE4KZRUfu4jDzSbWS8nhZJa5e4jMxuAk0JJrfF1CmY2ACeFksrfn9mnpJpZLyeFkvIVzWY2ECeFkvLcR2Y2ECeFEoqIylNSx7ilYGaZYU8KknaV9CdJ90q6R9JnUvkZkpZKujM93j7csZXFC93riciejxs9itFt/m1gZplm9BusA06JiNslTQIWSpqflp0dEd9pQkylUjme4K4jM9tg2I8IEbEMWJaePyfpPmDn4Y6jzCqnuHDXkZlt0NR+A0nTgFcCt6aiT0m6S9JcSdsM8p7ZkhZIWtDZ2TlMkRaLp802s8E0LSlImghcAXw2Ip4FzgX2AGaStSS+O9D7ImJORHREREd7e/uwxVskvhWnmQ2mKUlB0hiyhHBxRPwGICKWR0RPRKwHfgrs34zYymB1l09HNbOBNePsIwHnA/dFxPdy5TvmVns3cPdwx1YWFWMK7j4ys5xmHBFeB5wA/E3SnansS8BxkmYCASwGPtaE2EohnxQmeKDZzHKacfbRzYAGWHTNcMdSVp4228wG46uWSsjXKZjZYJwUSqhyTMHdR2a2gZNCCeWvU5jgloKZ5TgplFDFDXbcUjCzHCeFEvJ1CmY2GCeFEvLcR2Y2GCeFEvKtOM1sME4KJZQ/JXWiu4/MLMdJoYTyF695Qjwzy3NSKKFVa33xmpkNzEeEOupZH3StW9/sMIZUMfeRWwpmluOkUCe3LHqSk/9rISvXdDc7lE3igWYzy3P3UR2sXx/8n6vubrmEsN2WY2kbNdDchGZWVv6ZWAfX3vM4D65YBYAE40aP/Fw7afwYTnnry5odhpmNME4KNYoIfnT9Q32vT37THnzhsL2aGJGZ2eYb+T9pR7jr71/BvcueBWD8mFF89PXTmxyRmdnmc1KoQf9WwvEH7MZ2E8c1MSIzs9qMuO4jSYcBPwDagJ9FxDeaGc+arnX8930ruOGBFX3TQwRBd0+w6oV13PnoSgDGjh7F7Dfu3sxQzcxqNqKSgqQ24BzgrcAS4DZJ8yLi3npu52u/u5fung3XEwRBz3roWb+eXDHPvtDNzQ8+wfPdPQN8SqVjOnZlylbj6xmmmdmwG1FJAdgfeCgiFgFI+iVwJFDXpHDpX/9Z1YG+WtttOZZPvHmPun2emVmzjLSksDPwaO71EuCA/AqSZgOzAaZOnTosQc3YYSLv3G8nZuwwsa9sTNsoxo0Zxfgxbez1kklMGj9mWGIxM2ukkZYUhhQRc4A5AB0dHbE5n/GVI15Oz/rKt7aNEm0So0aJ3su5Rknss/NW7DllEpIv8jKz4htpSWEpsGvu9S6prK6OP2C3en+kmVkhjLRTUm8DZkiaLmkscCwwr8kxmZmVxohqKUTEOkmfAq4lOyV1bkTc0+SwzMxKY0QlBYCIuAa4ptlxmJmV0UjrPjIzsyZyUjAzsz5OCmZm1sdJwczM+ihis67/GhEkdQKP1PAR2wNP1CmcVlC2/QXvc1l4nzfNbhHRPtCClk4KtZK0ICI6mh3HcCnb/oL3uSy8z/Xj7iMzM+vjpGBmZn3KnhTmNDuAYVa2/QXvc1l4n+uk1GMKZmZWqewtBTMzy3FSMDOzPqVMCpIOk/SApIckndbseBpB0q6S/iTpXkn3SPpMKt9W0nxJD6Z/t2l2rPUkqU3SHZKuTq+nS7o1fdeXpSnZC0XSZEm/lnS/pPskHVTk71nSv6e/6bslXSppfBG/Z0lzJa2QdHeubMDvVZkfpv2/S9KrNne7pUsKktqAc4DDgb2B4yTt3dyoGmIdcEpE7A0cCHwy7edpwHURMQO4Lr0uks8A9+VefxM4OyJeCjwNnNSUqBrrB8AfImIvYD+y/S/k9yxpZ+DfgI6I2Jdsiv1jKeb3fAFwWL+ywb7Xw4EZ6TEbOHdzN1q6pADsDzwUEYsiogv4JXBkk2Oqu4hYFhG3p+fPkR0odibb1wvTahcCRzUnwvqTtAvwDuBn6bWAtwC/TqsUan8BJG0NvBE4HyAiuiJiJQX+nsmm/N9C0mhgArCMAn7PEXET8FS/4sG+1yOBiyJzCzBZ0o6bs90yJoWdgUdzr5ekssKSNA14JXArMCUilqVFjwNTmhRWI3wfOBVYn15vB6yMiHXpdRG/6+lAJ/Dz1G32M0lbUtDvOSKWAt8B/kmWDJ4BFlL877nXYN9r3Y5rZUwKpSJpInAF8NmIeDa/LLLzkQtxTrKkI4AVEbGw2bEMs9HAq4BzI+KVwGr6dRUV7HvehuxX8XRgJ2BLXtzFUgqN+l7LmBSWArvmXu+SygpH0hiyhHBxRPwmFS/vbVamf1c0K746ex3wLkmLyboE30LW1z45dTNAMb/rJcCSiLg1vf41WZIo6vd8KPCPiOiMiG7gN2TffdG/516Dfa91O66VMSncBsxIZyuMJRukmtfkmOou9aefD9wXEd/LLZoHzErPZwG/He7YGiEivhgRu0TENLLv9PqIOB74E/C+tFph9rdXRDwOPCppz1R0CHAvBf2eybqNDpQ0If2N9+5vob/nnMG+13nAh9JZSAcCz+S6mTZJKa9olvR2sv7nNmBuRJzV5JDqTtLrgT8Df2NDH/uXyMYVfgVMJZt2/OiI6D+Y1dIkHQx8PiKOkLQ7WcthW+AO4IMRsbaZ8dWbpJlkg+tjgUXAh8l+8BXye5b0H8AxZGfY3QF8lKz/vFDfs6RLgYPJpsheDpwOXMUA32tKkD8m60pbA3w4IhZs1nbLmBTMzGxgZew+MjOzQTgpmJlZHycFMzPr46RgZmZ9nBTMzKyPk4KViqQpki6RtEjSQkl/kfTuJsVysKTX5l6fLOlDzYjFrNfooVcxK4Z0LvdVwIUR8YFUthvwrgZuc3RuTp7+DgZWAf8DEBHnNSoOs2r5OgUrDUmHAF+NiDcNsKwN+AbZgXoccE5E/Ge6EO4M4AlgX7LJ1z4YESHp1cD3gIlp+YkRsUzSDcCdwOuBS4G/A18hu7jsSeB4YAvgFqCHbEK7T5NdnbsqIr6TLkg7j2wW0IeBj0TE0+mzbwXeDEwGToqIP9fvf8nKzt1HVib7ALcPsuwksqkBXgO8BvhXSdPTslcCnyW7/8buwOvSvFI/At4XEa8G5gL5K+PHRkRHRHwXuBk4ME1Y90vg1IhYTHbQPzsiZg5wYL8I+EJEvILsqvTTc8tGR8T+KabTMasjdx9ZaUk6h+zXfBfZlAGvkNQ7f87WZDcs6QL+GhFL0nvuBKYBK8laDvOzXinayKZy7nVZ7vkuwGVpArOxwD+GiGtrYHJE3JiKLgQuz63SO7nhwhSLWd04KViZ3AO8t/dFRHxS0vbAArKJ1j4dEdfm35C6j/Jz6PSQ1RsB90TEQYNsa3Xu+Y+A70XEvFx3VC164+mNxaxu3H1kZXI9MF7Sx3NlE9K/16tFQmMAAAC/SURBVAIfT91CSHpZulnNYB4A2iUdlNYfI2mfQdbdmg3TGM/KlT8HTOq/ckQ8Azwt6Q2p6ATgxv7rmTWCf2VYaaTB4aOAsyWdSjbAuxr4Aln3zDTg9nSWUicbuaVjRHSlrqYfpu6e0WQz794zwOpnAJdLeposMfWOVfwO+LWkI8kGmvNmAedJmsCGmU/NGs5nH5mZWR93H5mZWR8nBTMz6+OkYGZmfZwUzMysj5OCmZn1cVIwM7M+TgpmZtbn/wOcGoMmsxtcwQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "execution_count": 35 } ] }, { "cell_type": "code", "metadata": { "id": "ZuAvJZ3AzhlU" }, "source": [ "# Constant mutation probability Python example\n", "\n", "#PyGAD offers an argument named mutation_probability in the constructor of the pygad.GA class to feed a constant mutation probability, used across all solutions regardless of their fitness (i.e. quality).The constant probability is 0.6, which means if the random probability of the gene is <=0.6, it’s mutated." ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 573 }, "id": "Ac_USRCHz7AW", "outputId": "98f9434d-d680-47ac-8378-4bb95a4ec013" }, "source": [ "\n", "function_inputs = [4,-2,3.5,5]\n", "desired_output = 44\n", "\n", "def fitness_func(solution, solution_idx):\n", " output = numpy.sum(solution*function_inputs)\n", " fitness = 1.0 / (numpy.abs(output - desired_output) + 0.000001)\n", " \n", " return fitness\n", "\n", "ga_instance = pygad.GA(num_generations=100,\n", " sol_per_pop=5,\n", " num_genes=4,\n", " num_parents_mating=2,\n", " fitness_func=fitness_func,\n", " mutation_type=\"random\",\n", " mutation_probability=0.6)\n", "\n", "ga_instance.run()\n", "\n", "ga_instance.plot_result()" ], "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [], "needs_background": "light" } }, { "output_type": "execute_result", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] }, "execution_count": 38 } ] }, { "cell_type": "code", "metadata": { "id": "uVyeYaQZz2tX" }, "source": [ "https://neptune.ai/blog/adaptive-mutation-in-genetic-algorithm-with-python-examples" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "WS4IiSj70XB8" }, "source": [ "https://datascienceplus.com/genetic-algorithm-in-machine-learning-using-python/" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "SWcLBxnF0Xg4" }, "source": [ "https://pypi.org/project/geneticalgorithm/" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "Yid_7MjL0XlC" }, "source": [ "\n" ], "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "epS1I7LS9EdT" }, "source": [ "**Задание 3**" ] }, { "cell_type": "markdown", "metadata": { "id": "G-oU3X_U9GBc" }, "source": [ "" ] }, { "cell_type": "code", "metadata": { "id": "BVwhP-JI04x3" }, "source": [ "import numpy as np\n", "import pandas as pd\n", "import random\n", "import matplotlib.pyplot\n", "%matplotlib inline \n", "from sklearn.datasets import load_breast_cancer\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.linear_model import LogisticRegression\n", "from sklearn.metrics import accuracy_score" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "D7PSsyho05ep" }, "source": [ "#import the breast cancer dataset \n", "from sklearn.datasets import load_breast_cancer\n", "cancer=load_breast_cancer()\n", "df = pd.DataFrame(cancer['data'],columns=cancer['feature_names'])\n", "label=cancer[\"target\"]" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "BSbq9hNM0-bz" }, "source": [ "#splitting the model into training and testing set\n", "X_train, X_test, y_train, y_test = train_test_split(df, \n", " label, test_size=0.30, \n", " random_state=101)\n" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "2SAgZntA0_Ht", "outputId": "6d971ac5-fe78-45d8-843b-2300eb9332b7" }, "source": [ "#training a logistics regression model\n", "logmodel = LogisticRegression()\n", "logmodel.fit(X_train,y_train)\n", "predictions = logmodel.predict(X_test)\n", "print(\"Accuracy = \"+ str(accuracy_score(y_test,predictions)))\n", "\n", "#0.9239766081871345\n", "#\n", "#" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "Accuracy = 0.9239766081871345\n" ], "name": "stdout" }, { "output_type": "stream", "text": [ "/usr/local/lib/python3.7/dist-packages/sklearn/linear_model/_logistic.py:940: ConvergenceWarning: lbfgs failed to converge (status=1):\n", "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", "\n", "Increase the number of iterations (max_iter) or scale the data as shown in:\n", " https://scikit-learn.org/stable/modules/preprocessing.html\n", "Please also refer to the documentation for alternative solver options:\n", " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", " extra_warning_msg=_LOGISTIC_SOLVER_CONVERGENCE_MSG)\n" ], "name": "stderr" } ] }, { "cell_type": "code", "metadata": { "id": "8h6kPZrS1MNP" }, "source": [ "#defining various steps required for the genetic algorithm\n", "def initilization_of_population(size,n_feat):\n", " population = []\n", " for i in range(size):\n", " chromosome = np.ones(n_feat,dtype=np.bool)\n", " chromosome[:int(0.3*n_feat)]=False\n", " np.random.shuffle(chromosome)\n", " population.append(chromosome)\n", " return population\n", "\n", "def fitness_score(population):\n", " scores = []\n", " for chromosome in population:\n", " logmodel.fit(X_train.iloc[:,chromosome],y_train)\n", " predictions = logmodel.predict(X_test.iloc[:,chromosome])\n", " scores.append(accuracy_score(y_test,predictions))\n", " scores, population = np.array(scores), np.array(population) \n", " inds = np.argsort(scores)\n", " return list(scores[inds][::-1]), list(population[inds,:][::-1])\n", "\n", "def selection(pop_after_fit,n_parents):\n", " population_nextgen = []\n", " for i in range(n_parents):\n", " population_nextgen.append(pop_after_fit[i])\n", " return population_nextgen\n", "\n", "def crossover(pop_after_sel):\n", " population_nextgen=pop_after_sel\n", " for i in range(len(pop_after_sel)):\n", " child=pop_after_sel[i]\n", " child[3:7]=pop_after_sel[(i+1)%len(pop_after_sel)][3:7]\n", " population_nextgen.append(child)\n", " return population_nextgen\n", "\n", "def mutation(pop_after_cross,mutation_rate):\n", " population_nextgen = []\n", " for i in range(0,len(pop_after_cross)):\n", " chromosome = pop_after_cross[i]\n", " for j in range(len(chromosome)):\n", " if random.random() < mutation_rate:\n", " chromosome[j]= not chromosome[j]\n", " population_nextgen.append(chromosome)\n", " #print(population_nextgen)\n", " return population_nextgen\n", "\n", "def generations(size,n_feat,n_parents,mutation_rate,n_gen,X_train,\n", " X_test, y_train, y_test):\n", " best_chromo= []\n", " best_score= []\n", " population_nextgen=initilization_of_population(size,n_feat)\n", " for i in range(n_gen):\n", " scores, pop_after_fit = fitness_score(population_nextgen)\n", " print(scores[:2])\n", " pop_after_sel = selection(pop_after_fit,n_parents)\n", " pop_after_cross = crossover(pop_after_sel)\n", " population_nextgen = mutation(pop_after_cross,mutation_rate)\n", " best_chromo.append(pop_after_fit[0])\n", " best_score.append(scores[0])\n", " return best_chromo,best_score" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "wIA3ax3L3KOm" }, "source": [ "" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "3ze_td8A1Nbb" }, "source": [ "chromo,score=generations(size=200,n_feat=30,n_parents=100,mutation_rate=0.10,\n", " n_gen=38,X_train=X_train,X_test=X_test,y_train=y_train,y_test=y_test)\n", "logmodel.fit(X_train.iloc[:,chromo[-1]],y_train)\n", "predictions = logmodel.predict(X_test.iloc[:,chromo[-1]])\n", "print(\"Accuracy score after genetic algorithm is= \"+str(accuracy_score(y_test,predictions)))\n", "\n", "\n", "# Accuracy score after genetic algorithm is= 0.9532163742690059\n", "\n" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "_GyCH4ZY1SMO" }, "source": [ "" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "gOuuivuY1XiU" }, "source": [ "" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "bfSvE3bI0ZUJ" }, "source": [ "" ], "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "oGAldgVK9KGz" }, "source": [ "**Задание 4. Самостоятельно выполните обучение генетическим алгоритмом, используя свйо набор данных\n", "Приведите комментарии, результаты и выводы в отчете по лабораторной работе**" ] }, { "cell_type": "markdown", "metadata": { "id": "bCl1w0I09LsI" }, "source": [ "" ] }, { "cell_type": "markdown", "metadata": { "id": "B4UdPKvG9Pnt" }, "source": [ "**Задание 5**" ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "NSWFtgNF3elR", "outputId": "83c9fbd8-4e4c-4ab1-833f-f6017196010a" }, "source": [ "pip install geneticalgorithm\n", "# https://pypi.org/project/geneticalgorithm/ " ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "Collecting geneticalgorithm\n", " Downloading https://files.pythonhosted.org/packages/ac/d2/fb9061239eaeee5c0373844f27f43514f33201bc08aea54d65b437402966/geneticalgorithm-1.0.2-py3-none-any.whl\n", "Collecting func-timeout\n", "\u001b[?25l Downloading https://files.pythonhosted.org/packages/b3/0d/bf0567477f7281d9a3926c582bfef21bff7498fc0ffd3e9de21811896a0b/func_timeout-4.3.5.tar.gz (44kB)\n", "\u001b[K |████████████████████████████████| 51kB 2.7MB/s \n", "\u001b[?25hRequirement already satisfied: numpy in /usr/local/lib/python3.7/dist-packages (from geneticalgorithm) (1.19.5)\n", "Building wheels for collected packages: func-timeout\n", " Building wheel for func-timeout (setup.py) ... \u001b[?25l\u001b[?25hdone\n", " Created wheel for func-timeout: filename=func_timeout-4.3.5-cp37-none-any.whl size=15079 sha256=64847bf20d7d903eec3eb68e82bdff83c670e1bd1a643ec51d4945edb3653402\n", " Stored in directory: /root/.cache/pip/wheels/46/7c/4f/24f1d2d5bbff92219debe7ea19af84f76ddeb90dd4ec544f26\n", "Successfully built func-timeout\n", "Installing collected packages: func-timeout, geneticalgorithm\n", "Successfully installed func-timeout-4.3.5 geneticalgorithm-1.0.2\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 379 }, "id": "XVAyGo1N3iRb", "outputId": "d5802312-716f-495c-a078-3354be03a52d" }, "source": [ "import numpy as np\n", "from geneticalgorithm import geneticalgorithm as ga\n", "\n", "def f(X):\n", " return np.sum(X)\n", "\n", "\n", "varbound=np.array([[0,10]]*3)\n", "\n", "model=ga(function=f,dimension=3,variable_type='real',variable_boundaries=varbound)\n", "\n", "model.run()" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ " The best solution found:\n", " [0.00368214 0.0009355 0.00218141]\n", "\n", " Objective function:\n", " 0.006799051591528715\n" ], "name": "stdout" }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [], "needs_background": "light" } } ] }, { "cell_type": "code", "metadata": { "id": "GxDbgRnv3km4" }, "source": [ "#convergence=model.report\n", "#solution=model.ouput_dict" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "us1odPoD3mjt" }, "source": [ "# The simple example with integer variables" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 379 }, "id": "jf7d12BQ3phg", "outputId": "5e091ad0-195c-407d-833e-9499deb7625b" }, "source": [ "import numpy as np\n", "from geneticalgorithm import geneticalgorithm as ga\n", "\n", "def f(X):\n", " return np.sum(X)\n", "\n", "\n", "varbound=np.array([[0,10]]*3)\n", "\n", "model=ga(function=f,dimension=3,variable_type='int',variable_boundaries=varbound)\n", "\n", "model.run()" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ " The best solution found:\n", " [0. 0. 0.]\n", "\n", " Objective function:\n", " 0.0\n" ], "name": "stdout" }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [], "needs_background": "light" } } ] }, { "cell_type": "code", "metadata": { "id": "pFsyYFiI3rMT" }, "source": [ "#The simple example with Boolean variables" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 396 }, "id": "lXzXN5m033Q1", "outputId": "04c91610-8707-423d-86a2-c44e56681e81" }, "source": [ "import numpy as np\n", "from geneticalgorithm import geneticalgorithm as ga\n", "\n", "def f(X):\n", " return np.sum(X)\n", "\n", "\n", "model=ga(function=f,dimension=30,variable_type='bool')\n", "\n", "model.run()" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ " The best solution found:\n", " [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", " 0. 0. 0. 0. 0. 0.]\n", "\n", " Objective function:\n", " 0.0\n" ], "name": "stdout" }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [], "needs_background": "light" } } ] }, { "cell_type": "code", "metadata": { "id": "C30YEihr35Dd" }, "source": [ "The simple example with mixed variables" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 379 }, "id": "4_PiqdOJ36pr", "outputId": "b460a4c0-64a0-45a3-abf4-43034e9d11ad" }, "source": [ "import numpy as np\n", "from geneticalgorithm import geneticalgorithm as ga\n", "\n", "def f(X):\n", " return np.sum(X)\n", "\n", "varbound=np.array([[0.5,1.5],[1,100],[0,1]])\n", "vartype=np.array([['real'],['int'],['int']])\n", "model=ga(function=f,dimension=3,variable_type_mixed=vartype,variable_boundaries=varbound)\n", "\n", "model.run()" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ " The best solution found:\n", " [0.50007308 1. 0. ]\n", "\n", " Objective function:\n", " 1.5000730844396029\n" ], "name": "stdout" }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [], "needs_background": "light" } } ] }, { "cell_type": "code", "metadata": { "id": "IMB3JXxj38DM" }, "source": [ "Maximization problems" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 379 }, "id": "RkN_faQj3-qJ", "outputId": "f36b0957-a0f6-479b-eb52-847596de5b4f" }, "source": [ "import numpy as np\n", "from geneticalgorithm import geneticalgorithm as ga\n", "\n", "def f(X):\n", " return -np.sum(X)\n", "\n", "varbound=np.array([[0,10]]*3)\n", "\n", "model=ga(function=f,dimension=3,variable_type='real',variable_boundaries=varbound)\n", "\n", "model.run()" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ " The best solution found:\n", " [9.99782786 9.99671549 9.99876343]\n", "\n", " Objective function:\n", " -29.993306783345393\n" ], "name": "stdout" }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [], "needs_background": "light" } } ] }, { "cell_type": "code", "metadata": { "id": "eFymAnRi4Azu" }, "source": [ "Optimization problems with constraints" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 379 }, "id": "QOadMiIq4CI6", "outputId": "3e063269-5dfc-42ad-ee5e-8d2eaa051d20" }, "source": [ "import numpy as np\n", "from geneticalgorithm import geneticalgorithm as ga\n", "\n", "def f(X):\n", " pen=0\n", " if X[0]+X[1]<2:\n", " pen=500+1000*(2-X[0]-X[1])\n", " return np.sum(X)+pen\n", "\n", "varbound=np.array([[0,10]]*3)\n", "\n", "model=ga(function=f,dimension=3,variable_type='real',variable_boundaries=varbound)\n", "\n", "model.run()" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ " The best solution found:\n", " [1.19553143 0.80464566 0.01408231]\n", "\n", " Objective function:\n", " 2.0142594122683977\n" ], "name": "stdout" }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [], "needs_background": "light" } } ] }, { "cell_type": "code", "metadata": { "id": "a0p1gd2t4Ew3" }, "source": [ "Genetic algorithm's parameters" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "DDRpUKd74GJk" }, "source": [ "algorithm_param = {'max_num_iteration': None,\\\n", " 'population_size':100,\\\n", " 'mutation_probability':0.1,\\\n", " 'elit_ratio': 0.01,\\\n", " 'crossover_probability': 0.5,\\\n", " 'parents_portion': 0.3,\\\n", " 'crossover_type':'uniform',\\\n", " 'max_iteration_without_improv':None}" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "pSWrUDp34HS7" }, "source": [ "import numpy as np\n", "from geneticalgorithm import geneticalgorithm as ga\n", "\n", "def f(X):\n", " return np.sum(X)\n", "\n", "\n", "model=ga(function=f,dimension=3,variable_type='bool')\n", "\n", "print(model.param)" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "CTBgjlKM4Ijx" }, "source": [ "import numpy as np\n", "from geneticalgorithm import geneticalgorithm as ga\n", "\n", "def f(X):\n", " return np.sum(X)\n", "\n", "\n", "varbound=np.array([[0,10]]*3)\n", "\n", "algorithm_param = {'max_num_iteration': 3000,\\\n", " 'population_size':100,\\\n", " 'mutation_probability':0.1,\\\n", " 'elit_ratio': 0.01,\\\n", " 'crossover_probability': 0.5,\\\n", " 'parents_portion': 0.3,\\\n", " 'crossover_type':'uniform',\\\n", " 'max_iteration_without_improv':None}\n", "\n", "model=ga(function=f,\\\n", " dimension=3,\\\n", " variable_type='real',\\\n", " variable_boundaries=varbound,\\\n", " algorithm_parameters=algorithm_param)\n", "\n", "model.run()" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "8g4RmgtF4Oex" }, "source": [ "Optimization test functions\n", "Rastrigin" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 379 }, "id": "LRX3D_V_4QH6", "outputId": "28aae881-efb9-4994-abfc-859333a62f0d" }, "source": [ "import numpy as np\n", "import math\n", "from geneticalgorithm import geneticalgorithm as ga\n", "\n", "def f(X):\n", "\n", " dim=len(X) \n", "\n", " OF=0\n", " for i in range (0,dim):\n", " OF+=(X[i]**2)-10*math.cos(2*math.pi*X[i])+10\n", "\n", " return OF\n", "\n", "\n", "varbound=np.array([[-5.12,5.12]]*2)\n", "\n", "model=ga(function=f,dimension=2,variable_type='real',variable_boundaries=varbound)\n", "\n", "model.run()" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ " The best solution found:\n", " [ 1.19416300e-04 -3.60779499e-06]\n", "\n", " Objective function:\n", " 2.8317034974634225e-06\n" ], "name": "stdout" }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [], "needs_background": "light" } } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 379 }, "id": "8x5rmrSK4Yu_", "outputId": "b41261fe-d877-4a32-83af-158157940e26" }, "source": [ "#Ackley\n", "import numpy as np\n", "import math\n", "from geneticalgorithm import geneticalgorithm as ga\n", "\n", "def f(X):\n", "\n", " dim=len(X)\n", "\n", " t1=0\n", " t2=0\n", " for i in range (0,dim):\n", " t1+=X[i]**2\n", " t2+=math.cos(2*math.pi*X[i]) \n", "\n", " OF=20+math.e-20*math.exp((t1/dim)*-0.2)-math.exp(t2/dim)\n", "\n", " return OF\n", "\n", "varbound=np.array([[-32.768,32.768]]*2)\n", "\n", "model=ga(function=f,dimension=2,variable_type='real',variable_boundaries=varbound)\n", "\n", "model.run()" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ " The best solution found:\n", " [ 1.40532672e-07 -1.33900103e-05]\n", "\n", " Objective function:\n", " 5.169275674177243e-09\n" ], "name": "stdout" }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [], "needs_background": "light" } } ] }, { "cell_type": "code", "metadata": { "id": "SlKXxkko4fLc" }, "source": [ "# Weierstrass\n", "import numpy as np\n", "import math\n", "from geneticalgorithm import geneticalgorithm as ga\n", "\n", "def f(X):\n", "\n", " dim=len(X) \n", "\n", " a=0.5\n", " b=3\n", " OF=0\n", " for i in range (0,dim):\n", " t1=0\n", " for k in range (0,21):\n", " t1+=(a**k)*math.cos((2*math.pi*(b**k))*(X[i]+0.5))\n", " OF+=t1\n", " t2=0 \n", " for k in range (0,21):\n", " t2+=(a**k)*math.cos(math.pi*(b**k))\n", " OF-=dim*t2\n", "\n", " return OF\n", "\n", "\n", "varbound=np.array([[-0.5,0.5]]*2)\n", "\n", "algorithm_param = {'max_num_iteration': 1000,\\\n", " 'population_size':100,\\\n", " 'mutation_probability':0.1,\\\n", " 'elit_ratio': 0.01,\\\n", " 'crossover_probability': 0.5,\\\n", " 'parents_portion': 0.3,\\\n", " 'crossover_type':'uniform',\\\n", " 'max_iteration_without_improv':None}\n", "\n", "model=ga(function=f,dimension=2,\\\n", " variable_type='real',\\\n", " variable_boundaries=varbound,\n", " algorithm_parameters=algorithm_param)\n", "\n", "model.run()\n" ], "execution_count": null, "outputs": [] } ] }