{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "dd2ed0d5-ee09-452b-ace5-89b2be772bb8",
   "metadata": {},
   "source": [
    "# Usando algorítmo genético\n",
    "### Encontrar o máximo de $f(x)=cos(20x) - \\frac{|x|}{2} + \\frac{x^3}{4}$,  $-2 \\le x \\le 2$"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0f0f670a-282f-4f71-824a-33ca5be6e9b4",
   "metadata": {},
   "source": [
    "# Importando pacotes necessários"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "8d5900cb",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "950a2db7-4386-4538-9f13-04d3107d7675",
   "metadata": {},
   "source": [
    "### Gráfico"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "73c001a9-ee73-4399-9223-978994f6c2ce",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x=np.arange(-2,2.01,0.01) # gera x de -2 até 2 com passo 0.01\n",
    "y=np.cos(20*x)-np.abs(x)/2+np.power(x,3)/4\n",
    "plt.plot(x,y)\n",
    "plt.grid('on')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "af30d0cb-4fe2-4d02-a464-8893f1bad7fb",
   "metadata": {},
   "source": [
    "# Definindo variáveis"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5136df45-d732-4bbf-bcdc-ccf703f0afad",
   "metadata": {},
   "source": [
    "### Tamanho do cromossomo"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "a591da6d-011b-4779-95c1-5327880eb768",
   "metadata": {},
   "outputs": [],
   "source": [
    "nBits=22  #número de genes"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4367c004-016c-4e73-9b3c-f26086f7d6d4",
   "metadata": {},
   "source": [
    "### Tamanho da população"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "f2035fb3-73cc-4afd-a85e-43658d1ca4ee",
   "metadata": {},
   "outputs": [],
   "source": [
    "nPop=20"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e1760ab2-5870-41ec-a3ef-db1ae2e87fdd",
   "metadata": {},
   "source": [
    "### Probabilidade de mutação"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "1e71a657-88e5-42be-ac68-9701f6d18683",
   "metadata": {},
   "outputs": [],
   "source": [
    "pMut=0.15 #15% de probabilidade de mutar"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0898324a-1f7a-4606-b588-3c9477616ed1",
   "metadata": {},
   "source": [
    "### Convergência"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "efb646ce-bb26-41f1-81a4-89186e957764",
   "metadata": {},
   "source": [
    "#### Intervalo de convergência"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "761b3b8c-1a90-49db-90f2-f986a73637bd",
   "metadata": {},
   "outputs": [],
   "source": [
    "intConvergencia=0.0001"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c2935207-359d-483b-8d2c-e17e8ed29bc2",
   "metadata": {},
   "source": [
    "#### Número de gerações com solução próxima da anterior"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "41cbc6f5-1692-4e96-b07e-843f442e133d",
   "metadata": {},
   "outputs": [],
   "source": [
    "nGeracoesConv = 10"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8b660eb1-61eb-42ec-a442-665b76220f14",
   "metadata": {},
   "source": [
    "### Intervalo da solução"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "f1079e32-7cd1-46e0-a93a-29e7df910fa9",
   "metadata": {},
   "outputs": [],
   "source": [
    "vMin=-2\n",
    "vMax=2"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "866db291-5b21-47bc-9827-68061fe45a13",
   "metadata": {},
   "source": [
    "### Gerando uma população inicial"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "6f860c5d",
   "metadata": {},
   "outputs": [],
   "source": [
    "cromossomo=[] #vários cromossomos, vários indivíduos ou soluções\n",
    "acromossomo = np.random.randint(0,2,(nPop,nBits))#array de 22 bits cada\n",
    "for i in range(nPop):\n",
    "    cromossomo.append(''.join(str(x) for x in acromossomo[i]))\n",
    "\n",
    "#processo semelhante ao acima com array    \n",
    "pot=np.power(2,np.arange(nBits-1,-1,-1))#potências de 2²¹ a 2⁰\n",
    "#acromossomo"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "c3419b1d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0],\n",
       "       [0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1],\n",
       "       [0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0],\n",
       "       [1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1],\n",
       "       [0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0],\n",
       "       [1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0],\n",
       "       [0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1],\n",
       "       [1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0],\n",
       "       [1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0],\n",
       "       [1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0],\n",
       "       [0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1],\n",
       "       [0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0],\n",
       "       [1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0],\n",
       "       [1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1],\n",
       "       [0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1],\n",
       "       [0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1],\n",
       "       [1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],\n",
       "       [1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0],\n",
       "       [1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1],\n",
       "       [0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1]])"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "acromossomo"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "28faca9d-510e-4750-9559-5b872e3cc10d",
   "metadata": {},
   "source": [
    "### População inicial gerada"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "0cb26868-1973-4c91-bbf6-334ca4704d30",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['1111010101111100000110',\n",
       " '0101110101011000110011',\n",
       " '0001101000101100000010',\n",
       " '1110011011100001001101',\n",
       " '0110001111000101101110',\n",
       " '1011011010010000011010',\n",
       " '0010110000000001111111',\n",
       " '1111010110110101111000',\n",
       " '1001111010010010111110',\n",
       " '1000010111111011100110',\n",
       " '0010010011111011010001',\n",
       " '0111110110101001100110',\n",
       " '1001101010001010101110',\n",
       " '1111101010110101100011',\n",
       " '0011101111011010011111',\n",
       " '0011101110111011111001',\n",
       " '1101011101111111000000',\n",
       " '1010010010010101010010',\n",
       " '1111111010011010000101',\n",
       " '0011101110100001100011']"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cromossomo"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dc5732ff-4608-4e03-bc9f-863e3a816bb6",
   "metadata": {},
   "source": [
    "### Converter sequência de bits em reais decimais, conforme os valores máximos e mínimos do intervalo de soluções $-2\\le x \\le2$\n",
    "### $$V_r = V_{min} + (V_{max} - V_{min})\\frac{V_{dec}}{2^g - 1}$$\n",
    "### onde\n",
    "### $V_r$: valor em real, que será dentro do intervalo $[V_{min}, V_{max}]$, neste caso $[-2,2]$\n",
    "### $V_{min}$: valor mínimo do intervalo\n",
    "### $V_{max}$: valor máximo \n",
    "### $V_{dec}$: valor decimal do cromossomo\n",
    "### $g$: número de genes (bits) do cromossomo"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "f9de50c1-6e1f-47a7-95d8-0c411239a858",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 1.8357    , -0.54145492, -1.59106245,  1.60749617, -0.44105683,\n",
       "        0.85256454, -1.31237872,  1.83922668,  0.47772085,  0.09348156,\n",
       "       -1.42216383, -0.03652335,  0.4147173 ,  1.91733168, -1.06478955,\n",
       "       -1.06665684,  1.36712727,  0.57161202,  1.97815513, -1.06826474])"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#transformando vetor de bits e reais no intervalo [vMin, vMax]\n",
    "dec=acromossomo@pot\n",
    "axr=vMin + (vMax-vMin)*dec/(2**nBits - 1)\n",
    "axr"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6318f16b",
   "metadata": {},
   "source": [
    "### O código da célula abaixo faz o mesmo que o da célula [12]\n",
    "#### Pode escolher um dos códigos"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "16bba39e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 1.8357     -0.54145492 -1.59106245  1.60749617 -0.44105683  0.85256454\n",
      " -1.31237872  1.83922668  0.47772085  0.09348156 -1.42216383 -0.03652335\n",
      "  0.4147173   1.91733168 -1.06478955 -1.06665684  1.36712727  0.57161202\n",
      "  1.97815513 -1.06826474]\n"
     ]
    }
   ],
   "source": [
    "#função que poderia ser utilizada para fazer o mesmo da célula [12]\n",
    "def bin2float(b):\n",
    "    dec=int(b,2) #b é uma string de 0s e 1s  int('1100',2) retorna 12\n",
    "    return vMin + (vMax-vMin)*dec/(2**nBits - 1)\n",
    "\n",
    "xr=np.array(list(map(bin2float,cromossomo)))     \n",
    "print(xr)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c1f8aab8-7658-4455-ac3c-645fd68170ef",
   "metadata": {},
   "source": [
    "### $$f(x)$$"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d89e8cfe",
   "metadata": {},
   "source": [
    "## Gerando os 20 valores de $f(x)$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "a7a82839-6135-4f6c-9490-c5611904d4ad",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 1.18140278, -0.47612048, -0.8834915 ,  0.97721519, -1.06525236,\n",
       "       -0.49686945, -0.78095198,  1.24592474, -1.20321301, -0.34094353,\n",
       "       -2.41594436,  0.72658903, -0.61579583,  1.60102023, -1.60202785,\n",
       "       -1.62793718, -0.64116009,  0.18380688,  0.6570892 , -1.64936878])"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fx=np.cos(20*xr)-np.abs(xr)/2+np.power(xr,3)/4\n",
    "fx"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "630c359e-84da-4caf-a8b2-9d3ea61a3c50",
   "metadata": {},
   "source": [
    "### A função de fitness é $f(x)+4$, assim retiramos os valores negativos para poderemos ter a função de distribuição acumulada"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "349975f1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([5.18140278, 3.52387952, 3.1165085 , 4.97721519, 2.93474764,\n",
       "       3.50313055, 3.21904802, 5.24592474, 2.79678699, 3.65905647,\n",
       "       1.58405564, 4.72658903, 3.38420417, 5.60102023, 2.39797215,\n",
       "       2.37206282, 3.35883991, 4.18380688, 4.6570892 , 2.35063122])"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fitness = fx+4\n",
    "fitness"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "07c60c43-210a-4a3d-ae67-a22db0fd6935",
   "metadata": {},
   "source": [
    "### Calculando a probabilidade de cada elemento $x$ ser a solução"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "8df5924e-8441-4704-9d49-c1f4c5570f04",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.07119857, 0.04842225, 0.04282449, 0.06839279, 0.04032689,\n",
       "       0.04813714, 0.04423351, 0.07208518, 0.03843114, 0.05027974,\n",
       "       0.02176679, 0.06494889, 0.04650295, 0.07696461, 0.03295096,\n",
       "       0.03259493, 0.04615441, 0.05749043, 0.06399389, 0.03230044])"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "solucaoAnterior=fx[np.argmin(fitness)] \n",
    "novaSolucao=fx[np.argmax(fitness)]\n",
    "numConv=0\n",
    "if abs(novaSolucao - solucaoAnterior) <= intConvergencia:\n",
    "    numConv += 1\n",
    "#while numConv<nGeracoesConv:\n",
    "px=fitness/np.sum(fitness)\n",
    "px"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bef7bfbf-4881-47b1-8bf5-7be0fc6a76c4",
   "metadata": {},
   "source": [
    "### Calculando a probabilidade acumulada de $x$ ser a solução"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "2e2452ca",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.07119857, 0.11962082, 0.16244532, 0.23083811, 0.27116499,\n",
       "       0.31930213, 0.36353564, 0.43562082, 0.47405196, 0.5243317 ,\n",
       "       0.54609849, 0.61104738, 0.65755033, 0.73451494, 0.7674659 ,\n",
       "       0.80006083, 0.84621525, 0.90370568, 0.96769956, 1.        ])"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prbAc=np.cumsum(fitness)/np.sum(fitness)\n",
    "prbAc"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8ae6d88f-0d4e-4e2b-affd-323b965449c7",
   "metadata": {},
   "source": [
    "### Seleção"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "195fdcf9-6437-40dd-ac09-8d01d01cd9b7",
   "metadata": {},
   "source": [
    "#### Selecionando os pais por roleta"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "bc12eef0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['1001101010001010101110',\n",
       " '0010110000000001111111',\n",
       " '0111110110101001100110',\n",
       " '1111111010011010000101',\n",
       " '1111101010110101100011',\n",
       " '0011101111011010011111',\n",
       " '1111010101111100000110',\n",
       " '1010010010010101010010',\n",
       " '1111010110110101111000',\n",
       " '0011101110100001100011']"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pais=[]\n",
    "#poderia usar apais\n",
    "for i in range(10):\n",
    "    r=np.random.uniform()\n",
    "    id=np.argmax(prbAc>r)\n",
    "    sel = cromossomo[id]  \n",
    "    if i>0:\n",
    "        while sel in pais: #evita seleção repetida\n",
    "            r=np.random.uniform()\n",
    "            id=np.argmax(prbAc>r)\n",
    "            sel=cromossomo[id]\n",
    "    pais.append(sel)\n",
    "    \n",
    "pais"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "13c2a595",
   "metadata": {},
   "source": [
    "### Lembrando que poderia selecionar os dez maiores valores\n",
    "#### Mas foi escolhido por roleta (acaso)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c4357e4c-9dfb-4ddc-bfd7-2e4ac9a366a3",
   "metadata": {},
   "source": [
    "### Cruzamento"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "ceaeaf90",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['0010110000001010101110',\n",
       " '1001101010000001111111',\n",
       " '0111110110001010101110',\n",
       " '1001101010101001100110',\n",
       " '1111111010001010101110',\n",
       " '1001101010011010000101',\n",
       " '1111101010111010101110',\n",
       " '1001101010000101100011',\n",
       " '0011101110001010101110',\n",
       " '1001101011011010011111',\n",
       " '1111010101001010101110',\n",
       " '1001101010111100000110',\n",
       " '1010101010001010101110',\n",
       " '1001010010010101010010',\n",
       " '1111010110110110101110',\n",
       " '1001101010001001111000',\n",
       " '0011101110100010101110',\n",
       " '1001101010001001100011',\n",
       " '0111110110101001111111',\n",
       " '0010110000000001100110',\n",
       " '1111111010011001111111',\n",
       " '0010110000000010000101',\n",
       " '1111101010110101100111',\n",
       " '0010110000000001111011',\n",
       " '0011110000000001111111',\n",
       " '0010101111011010011111',\n",
       " '1111010000000001111111',\n",
       " '0010110101111100000110',\n",
       " '1010110000000001111111',\n",
       " '0010010010010101010010',\n",
       " '1111010110000001111111',\n",
       " '0010110000110101111000',\n",
       " '0011101110100001111111',\n",
       " '0010110000000001100011',\n",
       " '1111111010001001100110',\n",
       " '0111110110111010000101',\n",
       " '1111110110101001100110',\n",
       " '0111101010110101100011',\n",
       " '0011110110101001100110',\n",
       " '0111101111011010011111',\n",
       " '1111010101111100100110',\n",
       " '0111110110101001000110',\n",
       " '1010010010010101010110',\n",
       " '0111110110101001100010',\n",
       " '1111010110101001100110',\n",
       " '0111110110110101111000',\n",
       " '0011101110100001100110',\n",
       " '0111110110101001100011',\n",
       " '1111101010011010000101',\n",
       " '1111111010110101100011',\n",
       " '0011111010011010000101',\n",
       " '1111101111011010011111',\n",
       " '1111011010011010000101',\n",
       " '1111110101111100000110',\n",
       " '1010010010010010000101',\n",
       " '1111111010011101010010',\n",
       " '1111010110111010000101',\n",
       " '1111111010010101111000',\n",
       " '0011101110100000000101',\n",
       " '1111111010011011100011',\n",
       " '0011101111011001100011',\n",
       " '1111101010110110011111',\n",
       " '1111010101111100000011',\n",
       " '1111101010110101100110',\n",
       " '1010010010010101100011',\n",
       " '1111101010110101010010',\n",
       " '1111010110110101100011',\n",
       " '1111101010110101111000',\n",
       " '0011101010110101100011',\n",
       " '1111101110100001100011',\n",
       " '1111010111011010011111',\n",
       " '0011101101111100000110',\n",
       " '1010010010011010011111',\n",
       " '0011101111010101010010',\n",
       " '1111010110110101111111',\n",
       " '0011101111011010011000',\n",
       " '0011101110100001011111',\n",
       " '0011101111011010100011',\n",
       " '1010010101111100000110',\n",
       " '1111010010010101010010',\n",
       " '1111010110110101111010',\n",
       " '1111010101111100000100',\n",
       " '0011110101111100000110',\n",
       " '1111001110100001100011',\n",
       " '1111010110110101010010',\n",
       " '1010010010010101111000',\n",
       " '0011101110100001110010',\n",
       " '1010010010010101000011',\n",
       " '0011101110100001101000',\n",
       " '1111010110110101110011']"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "filhos=[]\n",
    "for p1 in range(len(pais)-1):\n",
    "    for p2 in range(p1+1,len(pais)):\n",
    "        c=np.random.randint(1,20) #ponto de corte\n",
    "        #Trabalhando com array numpy  \n",
    "        #afilho1[0:c+1]=apais[p2][0:c+1]\n",
    "        #afilho1[c+1:]=apais[p1][c+1:]\n",
    "        #afilho2[0:c+1]=apais[p1][0:c+1]\n",
    "        #afilho2[c+1:]=apais[p2][c+1:]\n",
    "        \n",
    "        #Usando lista gasta menos linhas\n",
    "        filho1=pais[p2][0:c+1]+pais[p1][c+1:]\n",
    "        filho2=pais[p1][0:c+1]+pais[p2][c+1:]\n",
    "        \n",
    "        while (filho1 in filhos) or (filho2 in filhos) or (filho1 in cromossomo) or (filho2 in cromossomo):\n",
    "            c=np.random.randint(1,20)\n",
    "            filho1=pais[p2][0:c+1]+pais[p1][c+1:] #concatenando, são caracteres\n",
    "            filho2=pais[p1][0:c+1]+pais[p2][c+1:]\n",
    "            \n",
    "        filhos.append(filho1)\n",
    "        filhos.append(filho2) \n",
    "filhos"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1130b4e6-4c2c-4b87-8347-43a704822573",
   "metadata": {},
   "source": [
    "### Mutação\n",
    "##### O gene a ser mutado aparece entre [  ]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "a1f09714",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Mutou filho 011111 [0] 110001010101110\n",
      "Para filho  011111 [1] 110001010101110\n",
      "Mutou filho 10011010101111000001 [1] 0\n",
      "Para filho  10011010101111000001 [0] 0\n",
      "Mutou filho  [1] 001101010001001111000\n",
      "Para filho   [0] 001101010001001111000\n",
      "Mutou filho 01111101 [1] 0101001111111\n",
      "Para filho  01111101 [0] 0101001111111\n",
      "Mutou filho 001111 [0] 000000001111111\n",
      "Para filho  001111 [1] 000000001111111\n",
      "Mutou filho 00100100100101010100 [1] 0\n",
      "Para filho  00100100100101010100 [0] 0\n",
      "Mutou filho 00101100000000 [0] 1100011\n",
      "Para filho  00101100000000 [1] 1100011\n",
      "Mutou filho 11 [1] 1010101111100100110\n",
      "Para filho  11 [0] 1010101111100100110\n",
      "Mutou filho 0111110110 [1] 01001000110\n",
      "Para filho  0111110110 [0] 01001000110\n",
      "Mutou filho 11111 [1] 1010010101111000\n",
      "Para filho  11111 [0] 1010010101111000\n",
      "Mutou filho 111101 [0] 110110101100011\n",
      "Para filho  111101 [1] 110110101100011\n",
      "Mutou filho 0011101101111100000 [1] 10\n",
      "Para filho  0011101101111100000 [0] 10\n",
      "Mutou filho 1 [1] 11010110110101111111\n",
      "Para filho  1 [0] 11010110110101111111\n"
     ]
    }
   ],
   "source": [
    "#for i,f in enumerate(filhos):\n",
    "#    r=random.uniform()\n",
    "#    if r<pMut:\n",
    "#        bit=np.random.randint(0,nBits-1)\n",
    "#        if filhos[i,bit]==0\n",
    "#            filhos[i,bit]=1\n",
    "#        else:\n",
    "#            filhos[i,bit]=0\n",
    "\n",
    "for f in range(len(filhos)):\n",
    "    i=np.random.randint(0,nBits-1)  #indice do gene que poderá ser mutado\n",
    "    \n",
    "    #poderia ser lstfilho=list(filhos[f])\n",
    "    lstfilho=[b for b in filhos[f]] #uma lista de caracteres da string filhos[f]\n",
    "                                    #porque string não pode ser alterado  \n",
    "    r=np.random.uniform()\n",
    "    if r<pMut: #ocorre mutação \n",
    "        print(f'Mutou filho {filhos[f][0:i]} [{filhos[f][i]}] {filhos[f][i+1:]}')\n",
    "        \n",
    "        if lstfilho[i] == '0':\n",
    "            lstfilho[i] = '1'\n",
    "        else:\n",
    "            lstfilho[i] = '0'\n",
    "        \n",
    "        #transforma lstfilho em string de volta (uma ListToStr)\n",
    "        filhos[f]=''.join(s for s in lstfilho)\n",
    "        print(f'Para filho  {filhos[f][0:i]} [{filhos[f][i]}] {filhos[f][i+1:]}')\n",
    "        "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d519603f-1b87-4dbe-b5e5-eab384532089",
   "metadata": {},
   "source": [
    "### Nova população"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "3ee487db-6d2b-4f2c-8742-980e8275cdce",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true,
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['1111010101111100000110',\n",
       " '0101110101011000110011',\n",
       " '0001101000101100000010',\n",
       " '1110011011100001001101',\n",
       " '0110001111000101101110',\n",
       " '1011011010010000011010',\n",
       " '0010110000000001111111',\n",
       " '1111010110110101111000',\n",
       " '1001111010010010111110',\n",
       " '1000010111111011100110',\n",
       " '0010010011111011010001',\n",
       " '0111110110101001100110',\n",
       " '1001101010001010101110',\n",
       " '1111101010110101100011',\n",
       " '0011101111011010011111',\n",
       " '0011101110111011111001',\n",
       " '1101011101111111000000',\n",
       " '1010010010010101010010',\n",
       " '1111111010011010000101',\n",
       " '0011101110100001100011',\n",
       " '0010110000001010101110',\n",
       " '1001101010000001111111',\n",
       " '0111111110001010101110',\n",
       " '1001101010101001100110',\n",
       " '1111111010001010101110',\n",
       " '1001101010011010000101',\n",
       " '1111101010111010101110',\n",
       " '1001101010000101100011',\n",
       " '0011101110001010101110',\n",
       " '1001101011011010011111',\n",
       " '1111010101001010101110',\n",
       " '1001101010111100000100',\n",
       " '1010101010001010101110',\n",
       " '1001010010010101010010',\n",
       " '1111010110110110101110',\n",
       " '0001101010001001111000',\n",
       " '0011101110100010101110',\n",
       " '1001101010001001100011',\n",
       " '0111110100101001111111',\n",
       " '0010110000000001100110',\n",
       " '1111111010011001111111',\n",
       " '0010110000000010000101',\n",
       " '1111101010110101100111',\n",
       " '0010110000000001111011',\n",
       " '0011111000000001111111',\n",
       " '0010101111011010011111',\n",
       " '1111010000000001111111',\n",
       " '0010110101111100000110',\n",
       " '1010110000000001111111',\n",
       " '0010010010010101010000',\n",
       " '1111010110000001111111',\n",
       " '0010110000110101111000',\n",
       " '0011101110100001111111',\n",
       " '0010110000000011100011',\n",
       " '1111111010001001100110',\n",
       " '0111110110111010000101',\n",
       " '1111110110101001100110',\n",
       " '0111101010110101100011',\n",
       " '0011110110101001100110',\n",
       " '0111101111011010011111',\n",
       " '1101010101111100100110',\n",
       " '0111110110001001000110',\n",
       " '1010010010010101010110',\n",
       " '0111110110101001100010',\n",
       " '1111010110101001100110',\n",
       " '0111110110110101111000',\n",
       " '0011101110100001100110',\n",
       " '0111110110101001100011',\n",
       " '1111101010011010000101',\n",
       " '1111111010110101100011',\n",
       " '0011111010011010000101',\n",
       " '1111101111011010011111',\n",
       " '1111011010011010000101',\n",
       " '1111110101111100000110',\n",
       " '1010010010010010000101',\n",
       " '1111111010011101010010',\n",
       " '1111010110111010000101',\n",
       " '1111101010010101111000',\n",
       " '0011101110100000000101',\n",
       " '1111111010011011100011',\n",
       " '0011101111011001100011',\n",
       " '1111101010110110011111',\n",
       " '1111010101111100000011',\n",
       " '1111101010110101100110',\n",
       " '1010010010010101100011',\n",
       " '1111101010110101010010',\n",
       " '1111011110110101100011',\n",
       " '1111101010110101111000',\n",
       " '0011101010110101100011',\n",
       " '1111101110100001100011',\n",
       " '1111010111011010011111',\n",
       " '0011101101111100000010',\n",
       " '1010010010011010011111',\n",
       " '0011101111010101010010',\n",
       " '1011010110110101111111',\n",
       " '0011101111011010011000',\n",
       " '0011101110100001011111',\n",
       " '0011101111011010100011',\n",
       " '1010010101111100000110',\n",
       " '1111010010010101010010',\n",
       " '1111010110110101111010',\n",
       " '1111010101111100000100',\n",
       " '0011110101111100000110',\n",
       " '1111001110100001100011',\n",
       " '1111010110110101010010',\n",
       " '1010010010010101111000',\n",
       " '0011101110100001110010',\n",
       " '1010010010010101000011',\n",
       " '0011101110100001101000',\n",
       " '1111010110110101110011']"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "novageracao=[]\n",
    "novageracao=list(np.append(np.array(cromossomo),np.array(filhos)))\n",
    "novageracao"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7c333590-807c-48ac-a8ad-f5760a079bc7",
   "metadata": {},
   "source": [
    "### Novas soluções"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "dd5db0c9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 1.8357     -0.54145492 -1.59106245  1.60749617 -0.44105683  0.85256454\n",
      " -1.31237872  1.83922668  0.47772085  0.09348156 -1.42216383 -0.03652335\n",
      "  0.4147173   1.91733168 -1.06478955 -1.06665684  1.36712727  0.57161202\n",
      "  1.97815513 -1.06826474 -1.31184562  0.41418419 -0.0071578   0.41660176\n",
      "  1.97721767  0.41565476  1.91764734  0.41440163 -1.06965806  0.4195858\n",
      "  1.83268638  0.417729    0.66471736  0.32161196  1.83927818 -1.58533468\n",
      " -1.06819321  0.41464577 -0.04431201 -1.31240256  1.97814941 -1.312373\n",
      "  1.91733549 -1.31238253 -1.03112865 -1.31478961  1.81262203 -1.28930075\n",
      "  0.68762176 -1.42839037  1.83605953 -1.30921157 -1.06823804 -1.31228335\n",
      "  1.977149   -0.03551722  1.96347713 -0.0826688  -1.03652359 -0.06478931\n",
      "  1.33573039 -0.03850699  0.57161583 -0.03652717  1.8384771  -0.03577376\n",
      " -1.06826188 -0.03652621  1.91565512  1.97983169 -1.02184558  1.93521117\n",
      "  1.8531551   1.96070003  0.57141651  1.97835063  1.83948322  1.91539858\n",
      " -1.06835438  1.97824478 -1.06484677  1.9173889   1.83569713  1.91733454\n",
      "  0.57162823  1.91731546  1.87045666  1.9173517  -1.08266904  1.93173598\n",
      "  1.84146114 -1.07055451  0.57192959 -1.06510712  0.83923312 -1.06479622\n",
      " -1.06826855 -1.06478573  0.5856997   1.82161232  1.83922859  1.83569809\n",
      " -1.03930069  1.80673595  1.83919044  0.57164826 -1.06825043  0.57159771\n",
      " -1.06825997  1.83922192]\n"
     ]
    }
   ],
   "source": [
    "xr=np.array(list(map(bin2float,novageracao)))     \n",
    "print(xr)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "48d35202-eee9-46d2-bad7-34b7f2029c37",
   "metadata": {},
   "source": [
    "### $f(x)$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "0b34724b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 1.18140278, -0.47612048, -0.8834915 ,  0.97721519, -1.06525236,\n",
       "       -0.49686945, -0.78095198,  1.24592474, -1.20321301, -0.34094353,\n",
       "       -2.41594436,  0.72658903, -0.61579583,  1.60102023, -1.60202785,\n",
       "       -1.62793718, -0.64116009,  0.18380688,  0.6570892 , -1.64936878,\n",
       "       -0.77044946, -0.60592903,  0.98619166, -0.65027661,  0.67280682,\n",
       "       -0.63302794,  1.59790873, -0.60995921, -1.66726658, -0.70351715,\n",
       "        1.12410542, -0.67059191,  0.48758981,  0.83642247,  1.24684537,\n",
       "       -0.83074296, -1.648433  , -0.61447482,  0.61015143, -0.78142287,\n",
       "        0.65718482, -0.78083898,  1.60098282, -0.78102731, -0.99049047,\n",
       "       -0.82906415,  0.7063826 , -0.38635208,  0.11278063, -2.40002591,\n",
       "        1.18810977, -0.71933642, -1.64901961, -0.77906942,  0.67396198,\n",
       "        0.74036747,  0.91104717, -0.12396151, -1.10183962,  0.23909402,\n",
       "       -0.08314088,  0.69854552,  0.18387504,  0.72653621,  1.23245238,\n",
       "        0.73688325, -1.64933138,  0.72654941,  1.61701435,  0.6292437 ,\n",
       "       -0.79422619,  1.38025042,  1.46891355,  0.95993016,  0.18031034,\n",
       "        0.65382428,  1.2505045 ,  1.61938188, -1.6505393 ,  0.65559155,\n",
       "       -1.60283779,  1.60045854,  1.18134929,  1.60099217,  0.18409655,\n",
       "        1.60117918,  1.6590204 ,  1.60082376, -1.8020999 ,  1.42957976,\n",
       "        1.28526992, -1.67844507,  0.18947288, -1.60651038, -0.74608301,\n",
       "       -1.60212239, -1.64941864, -1.60197382,  0.41557611,  0.89961801,\n",
       "        1.24595885,  1.18136712, -1.15786662,  0.57746507,  1.2452765 ,\n",
       "        0.18445431, -1.64918176,  0.18355125, -1.64930645,  1.24583946])"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fx = np.cos(20*xr)-np.abs(xr)/2+np.power(xr,3)/4\n",
    "fx"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ad61eb6c-cdbd-456a-89df-5bf74a6ffd09",
   "metadata": {},
   "source": [
    "### Fitness"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "c1d57124-4e46-43b8-8a4e-7579740f831d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([5.18140278, 3.52387952, 3.1165085 , 4.97721519, 2.93474764,\n",
       "       3.50313055, 3.21904802, 5.24592474, 2.79678699, 3.65905647,\n",
       "       1.58405564, 4.72658903, 3.38420417, 5.60102023, 2.39797215,\n",
       "       2.37206282, 3.35883991, 4.18380688, 4.6570892 , 2.35063122,\n",
       "       3.22955054, 3.39407097, 4.98619166, 3.34972339, 4.67280682,\n",
       "       3.36697206, 5.59790873, 3.39004079, 2.33273342, 3.29648285,\n",
       "       5.12410542, 3.32940809, 4.48758981, 4.83642247, 5.24684537,\n",
       "       3.16925704, 2.351567  , 3.38552518, 4.61015143, 3.21857713,\n",
       "       4.65718482, 3.21916102, 5.60098282, 3.21897269, 3.00950953,\n",
       "       3.17093585, 4.7063826 , 3.61364792, 4.11278063, 1.59997409,\n",
       "       5.18810977, 3.28066358, 2.35098039, 3.22093058, 4.67396198,\n",
       "       4.74036747, 4.91104717, 3.87603849, 2.89816038, 4.23909402,\n",
       "       3.91685912, 4.69854552, 4.18387504, 4.72653621, 5.23245238,\n",
       "       4.73688325, 2.35066862, 4.72654941, 5.61701435, 4.6292437 ,\n",
       "       3.20577381, 5.38025042, 5.46891355, 4.95993016, 4.18031034,\n",
       "       4.65382428, 5.2505045 , 5.61938188, 2.3494607 , 4.65559155,\n",
       "       2.39716221, 5.60045854, 5.18134929, 5.60099217, 4.18409655,\n",
       "       5.60117918, 5.6590204 , 5.60082376, 2.1979001 , 5.42957976,\n",
       "       5.28526992, 2.32155493, 4.18947288, 2.39348962, 3.25391699,\n",
       "       2.39787761, 2.35058136, 2.39802618, 4.41557611, 4.89961801,\n",
       "       5.24595885, 5.18136712, 2.84213338, 4.57746507, 5.2452765 ,\n",
       "       4.18445431, 2.35081824, 4.18355125, 2.35069355, 5.24583946])"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fitness=fx+4\n",
    "fitness"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "5ce502ab",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Melhor solucão: f(1.8704566646711025)=1.659020402251561\n"
     ]
    }
   ],
   "source": [
    "indMax = np.argmax(fx)\n",
    "maxX=xr[indMax]\n",
    "solucao =fx[indMax]\n",
    "maxF=solucao\n",
    "print(f'Melhor solucão: f({maxX})={solucao}') \n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7c78d3e1-29ff-49cf-8fbb-7710563c6182",
   "metadata": {},
   "source": [
    "### Grafico solução"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "3a409efc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x=np.arange(-2,2.01,0.01)\n",
    "y=np.cos(20*x)-np.abs(x)/2+np.power(x,3)/4\n",
    "plt.plot(x,y)\n",
    "plt.plot(maxX,maxF,'ro')\n",
    "plt.grid('on')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8ae6d5c1-abd2-4c90-8d00-484c7d841978",
   "metadata": {},
   "source": [
    "# A seleção natural pode ser feita de várias maneiras, tais como:\n",
    "### 1) Tomando os 20 melhores individuos;\n",
    "### 2) Tomando aleatoriamente 19 indivíduos mais o melhor indivíduo.\n",
    "# O critério de parada pode ser, entre outros:\n",
    "### 1) Arbitrar um determinado número de iterações;\n",
    "### 2) Melhor solução nova não diferencie da anterior por um certo número de repetições;\n",
    "### 3) Melhor solução nova apresente pouca variação com a solução anterior."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a3d1506d-1c2d-4097-9099-0178d21cb2f0",
   "metadata": {},
   "source": [
    "# Selecionando os indivíduos de maior fitness da nova geração"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "id": "72173719-577b-41d3-aa7d-cd4db107accf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 62,  72,  47,  96,  89,  63,  38,  55,   5,   9, 100,  71,  76,\n",
       "        92,  32, 105,  16,  84,  80,  97])"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ind = np.argsort(fitness)[-nPop:] #toma os nPop melhores indivíduos\n",
    "ind"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "id": "028d843f-6b83-417b-ba70-38a0478c600d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['0011101010001000101101',\n",
       " '0110111101010111110000',\n",
       " '1010010000010110100011',\n",
       " '1101010101101010100110',\n",
       " '1111000001110001001100',\n",
       " '0110101110111110010011',\n",
       " '0001001110010100100011',\n",
       " '0100010111000001101010',\n",
       " '1000010001100100001011',\n",
       " '1001010000001111010000',\n",
       " '1010010011111011001111',\n",
       " '1010000000101110110110',\n",
       " '0101010010101010100000',\n",
       " '0110011010101111110110',\n",
       " '0010100001001100111111',\n",
       " '1000100111001100101011',\n",
       " '1111101011001000101000',\n",
       " '0100101001110111100000',\n",
       " '0101111001110111000100',\n",
       " '1010010001001101111110']"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ind = np.argsort(fx)[-nPop:]\n",
    "cromossomo=[]\n",
    "cromossomo = list(np.array(novageracao)[ind])\n",
    "cromossomo"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "id": "63ec31a9-884f-46ef-be78-c9d3b00bd902",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-1.82259854,  0.33871644,  0.04112349, -0.06208825, -0.35877524,\n",
       "        0.83271344, -2.8423068 ,  0.1535618 ,  0.16297873,  0.85087617,\n",
       "        0.29145166, -1.0262422 ,  0.14460895, -0.2695544 , -1.97452859,\n",
       "       -1.07252363,  1.58938741, -1.08691601, -0.79129364,  0.10453972])"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xr=np.array(list(map(bin2float,cromossomo)))  \n",
    "fx = np.cos(20*xr)-np.abs(xr)/2+np.power(xr,3)/4\n",
    "fx"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "id": "949c63a3-bd64-4417-9b06-78c669095e76",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "numConv=0\n",
    "novaSolucao=fx[-1]\n",
    "numConv += 1\n",
    "if abs(novaSolucao - solucao) > intConvergencia:\n",
    "    numConv=0\n",
    "else:\n",
    "    #break\n",
    "solucao=novaSolucao\n",
    "numConv"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "id": "b6ad6bfd",
   "metadata": {},
   "outputs": [],
   "source": [
    "def SubIndToChar(st,i,c):\n",
    "   lst=list(st)\n",
    "   lst[i]=c\n",
    "   st=''.join(s for s in lst) \n",
    " \n",
    "#st[i]=c #erro"
   ]
  }
 ],
 "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
}
