Last active
June 13, 2016 13:21
-
-
Save mstimberg/fc202e19382d2344fb0b7c4b2d24a758 to your computer and use it in GitHub Desktop.
Optimize a Brian 2 model with BluePyOpt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "%matplotlib inline\n", | |
| "import multiprocessing\n", | |
| "\n", | |
| "from brian2 import *\n", | |
| "prefs.codegen.target = 'cython' # weave is not multiprocess-safe!\n", | |
| "\n", | |
| "import bluepyopt as bpop\n", | |
| "from bluepyopt.parameters import Parameter" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "area = 20000*umetre**2\n", | |
| "\n", | |
| "def run_brian_sim(parameters, input_current, dt=0.01*ms, runtime=20*ms):\n", | |
| " # Parameters\n", | |
| " Cm = 1*ufarad*cm**-2 * area\n", | |
| " El = -65*mV\n", | |
| " EK = -90*mV\n", | |
| " ENa = 50*mV\n", | |
| " VT = -63*mV\n", | |
| " defaultclock.dt = dt\n", | |
| " I = TimedArray(input_current, dt=dt)\n", | |
| " # The model\n", | |
| " eqs = Equations('''\n", | |
| " dv/dt = (gl*(El-v) - g_na*(m*m*m)*h*(v-ENa) - g_kd*(n*n*n*n)*(v-EK) + I(t))/Cm : volt\n", | |
| " dm/dt = 0.32*(mV**-1)*(13.*mV-v+VT)/\n", | |
| " (exp((13.*mV-v+VT)/(4.*mV))-1.)/ms*(1-m)-0.28*(mV**-1)*(v-VT-40.*mV)/\n", | |
| " (exp((v-VT-40.*mV)/(5.*mV))-1.)/ms*m : 1\n", | |
| " dn/dt = 0.032*(mV**-1)*(15.*mV-v+VT)/\n", | |
| " (exp((15.*mV-v+VT)/(5.*mV))-1.)/ms*(1.-n)-.5*exp((10.*mV-v+VT)/(40.*mV))/ms*n : 1\n", | |
| " dh/dt = 0.128*exp((17.*mV-v+VT)/(18.*mV))/ms*(1.-h)-4./(1+exp((40.*mV-v+VT)/(5.*mV)))/ms*h : 1\n", | |
| " g_na : siemens (constant)\n", | |
| " g_kd : siemens (constant)\n", | |
| " gl : siemens (constant)\n", | |
| " ''')\n", | |
| "\n", | |
| " G = NeuronGroup(1, eqs, method='exponential_euler')\n", | |
| " G.v = El\n", | |
| " G.set_states(parameters, units=False)\n", | |
| " mon = StateMonitor(G, 'v', record=0)\n", | |
| " run(runtime)\n", | |
| " return mon.v[0]/mV" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "\"correct\" parameters: {'gl': 1e-08, 'g_na': 2e-05, 'g_kd': 6e-06}\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<matplotlib.text.Text at 0x7efdd9d36f10>" | |
| ] | |
| }, | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<matplotlib.figure.Figure at 0x7efddac25190>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "# Generate a step-current input and an \"experimental\" voltage trace\n", | |
| "dt = 0.01*ms\n", | |
| "input_current = np.hstack([np.zeros(int(5*ms/dt)), np.ones(int(5*ms/dt)), np.zeros(int(5*ms/dt))])*nA\n", | |
| "params = {'gl': float(5e-5*siemens*cm**-2 * area),\n", | |
| " 'g_na': float(100*msiemens*cm**-2 * area),\n", | |
| " 'g_kd': float(30*msiemens*cm**-2 * area)}\n", | |
| "print '\"correct\" parameters:', params\n", | |
| "\n", | |
| "voltage = run_brian_sim(params, input_current, dt=dt, runtime=15*ms) # returns voltage in mV\n", | |
| "voltage += np.random.randn(len(voltage))\n", | |
| "plot(np.arange(len(voltage))*dt/ms, voltage); title('target voltage'); xlabel('time (ms)'); ylabel('v (mV)')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "class HHBrianEvaluator(bpop.evaluators.Evaluator):\n", | |
| " def __init__(self, input_current, dt, runtime, target_voltage):\n", | |
| " self.input_current = input_current\n", | |
| " self.dt = dt\n", | |
| " self.runtime = runtime\n", | |
| " self.target_voltage = target_voltage\n", | |
| " super(HHBrianEvaluator, self).__init__(objectives=['RMS'],\n", | |
| " params=[Parameter('gl', bounds=[1e-09, 1e-07]),\n", | |
| " Parameter('g_na', bounds=[1e-07, 1e-03]),\n", | |
| " Parameter('g_kd', bounds=[1e-08, 1e-04])])\n", | |
| " \n", | |
| " def evaluate_with_dicts(self, param_dict):\n", | |
| " voltage = run_brian_sim(param_dict, self.input_current, self.dt, self.runtime)\n", | |
| " return {'RMS': np.array([np.sqrt(np.mean((voltage - self.target_voltage)**2))])}\n", | |
| " \n", | |
| " def evaluate_with_lists(self, param_list):\n", | |
| " gl, g_na, g_kd = param_list\n", | |
| " param_dict = {'gl': gl, 'g_na': g_na, 'g_kd': g_kd}\n", | |
| " return [self.evaluate_with_dicts(param_dict)['RMS']]\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": { | |
| "collapsed": false, | |
| "scrolled": true | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "CPU times: user 116 ms, sys: 13.7 ms, total: 130 ms\n", | |
| "Wall time: 22.3 s\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "pool = multiprocessing.Pool() # Use available cores\n", | |
| "evaluator = HHBrianEvaluator(input_current, dt=0.01*ms, runtime=15*ms, target_voltage=voltage)\n", | |
| "opt = bpop.deapext.optimisations.DEAPOptimisation(evaluator, map_function=pool.map)\n", | |
| "%time final_pop, hall_of_fame, logs, hist = opt.run(max_ngen=20)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "Best individual: [7.649143062743348e-08, 7.267280134595518e-05, 1.338652331817965e-05]\n", | |
| "Fitness values: (array([ 5.09005847]),)\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "best_ind = hall_of_fame[0]\n", | |
| "print 'Best individual: ', best_ind\n", | |
| "print 'Fitness values: ', best_ind.fitness.values" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "# Run the simulation for the best parameters\n", | |
| "fitted_voltage = run_brian_sim({'gl': best_ind[0],\n", | |
| " 'g_na': best_ind[1],\n", | |
| " 'g_kd': best_ind[2]},\n", | |
| " input_current, dt=0.01*ms, runtime=15*ms)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "10. nS 76.49143063 nS\n", | |
| "20. uS 72.67280135 uS\n", | |
| "6. uS 13.38652332 uS\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\nSUVORK5CYII=\n", | |
| "text/plain": [ | |
| "<matplotlib.figure.Figure at 0x7efe0a169810>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "plot(np.arange(len(voltage))*dt/ms, voltage, label='target')\n", | |
| "plot(np.arange(len(voltage))*dt/ms, fitted_voltage, label='fit')\n", | |
| "legend(frameon=False); xlabel('time (ms)'); ylabel('v (mV)')\n", | |
| "print params['gl']*siemens, best_ind[0]*siemens\n", | |
| "print params['g_na']*siemens, best_ind[1]*siemens\n", | |
| "print params['g_kd']*siemens, best_ind[2]*siemens\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 9, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<matplotlib.text.Text at 0x7efdd5265610>" | |
| ] | |
| }, | |
| "execution_count": 9, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYMAAAEZCAYAAAB1mUk3AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xd8FHX6wPHPk9B7C4SOdGkKKLEBARuKBVQspwjqYTnv\n1LMC9/PQU+/sigdKRywgoAiiKEgJoiIgvRcJHUIIJYRA2j6/P2aSW0LKJtnNJuF5v17z2tnZKc/s\nzs4z3/nOfEdUFWOMMee3kGAHYIwxJvgsGRhjjLFkYIwxxpKBMcYYLBkYY4zBkoExxhgsGRSIiFwl\nIpvzOW1DEYkXESkqMfk4/59F5KJAzd/4h4h8JCL/8HHct0Xk0UDHVFKJyEkRaRLsOApK7D4D34mI\nB2iuqjuDHUu6woxJRG4C/qKqNwZ6WabwiEg4sBxoqqqpwY6nKBORRcCnqjoh2LH4m5UM8qYoZs7C\njOlR4NNCXF6RIiKhwY4hEFT1ELAZuCXQyyrK32FRjq1QqOp51QGtgUXAMWA9cLPXZxOBj4B5QLw7\nXkP3s8WAB0hwP+sHdAf2ek0fDTwLrAVOAmOB2sAcd5p5QFV33Mbu/EKAy9zx493uNLDTHe9S4Fc3\n3v3Af4FSeYgpt/UdAXzrTr8UuCCb7600kAjU8xo2DJiGkyDi3fVuAQwGYoDdwDVe4w8ENrnj7gAe\n9vrseeA3IMR9/5gbbxkfftOcvqMPgbcyjT8TeMrtrwt8CRwG/gD+lmn9prvrdxx4MKdludNcB2xx\nPx8JRAEPen3+oPsdxAHfA4183G4HAD8D77rz3gFc7g7fAxwC7s/02/7L7e8O7AWedn+X/cDATPMf\nCozPZtnp2+ogd9r9wDNen4v7m+8AYoEvgGqZpn3Q3R6islnG88ABYB/wkDtNU/ezMsDb7vQH3d+0\nrC/r5uO0z7ufTQKqAbPd7SHO7a/njv8qkIrzP4gHPnCHe8daBfjEnT4a+Eem33AJ8BZwFGd76xXs\nfWJGfMEOoFBXFkoB24EX3P4e7o/awusPdAK4Emfn9z6wxGt6D147S3dj2uP1PhpnR1ELZycTA/wO\ndHA3ygXAi15/kjTcnV+mGKOAV933nYAu7h+uEbAReMKXmHxc31igM05S+gyYnM131wY4mWnYMPeP\ncY07/SRgJzAECAX+jJvU3PFvAJq4/V2BU8DF7ntx1/ufQHP3z9LBx9812+/IXc5ur3GruTHXccf/\nHfiHG28TnB3atV7rl4SbQIGyQMccllXT3X5udb+PJ9zpH3Q/vxXYBrR0Px8K/OLjOg4AkoH73WW/\ngrOD+y/Otnqt+9tW8PptvZNBirs+oe7vcAr3wMQdpy/wezbLTt+hfw6UA9rh7Ox6up8/ibPd13Vj\n+Sh9O/Ka9mOgPO6OONP8e+Ekgtbu/D/F+W+k72Dfw0ngVYGKwCzgNV/Wzcdp/+3GXRao4X4XZd3x\npwJfe8W6CK/k7g7zjvUT4GuggrvuW4EHvH7DJJzEKDgl7f3B3i9mrEewAyjUlYWrgAOZhk0G/un1\nB5rs9VlFnCOB+u77jCMAr40pczK4x+v9l8BIr/d/BWZ4/UmySgYfAd/ksA5PAl95vc82JpwdYW7r\nO8brsxuATdks94os5jUMmOv1/iacHVJ6XVQldx2rZDPPrzn7SLwxztHYJuD5AvzOmb+jXcBVbv+f\ngflufwSwK9O0g3GPkN31i/J1WUB/Mu3ccY7a05PBnPQdg/s+BGfH1dCHdRoAbPV63879bmt5DTuC\nm0A5Nxmc8t7WcA5Uuni9vwbYkc2y03foLbyGvQGMdfs3AT28PquLk7hCvLbzxjms23jcHbT7vhln\nH20ncPYBz+X8r+Sc47r5MO0ZoHQOsV0MxHm9zyoZeICm7vomAa28PnsYWOj1G27z+qy8+93Uzu+2\n7s+uFOeXejjFQm+7gfpe7zM+V9VTInLUnW6/j8uI8eo/ncX7StlNKCKPAN1wdlLpw1rgnBq4BGfj\nKQWs9DGWuuS+voe8+hNziO8YUDmL4ZnX74i6W7r7Xtx5xovIDThH/ulHxuWBdekTq+put4LuBpzi\nvE98+I6mAvfgnGb5E/+r92gE1Hd/Y9xYQ4CfvKY96/vLZVlZbV/7vPobA8NF5B2v5SnO75F5uqxk\n/q5R1SOZhmX3+8WpqsfrfebfujLOqbDsKGevy26chATOen3tXswAznql4JS+0nlPm1k9YIXX+4zv\nQkTCcI6yV3pdeBfiLiNdluvm47SxqpritbzyOGcErscpRYo7L/HarrNTC2d72OM1LNv/m6qedq8m\nrIRT0gqq860C+QDQMNOwRpy9o8/4XEQq4RQbfU0E+SYiXYGXgVtUNcHro49wKveaqWo1nFMavl6O\n6sv6+mqHE6bUzce0iEgZnJLSm0CYqlbHOWcuXuP0xjlyW4BzntdXuX1HU4A7RKQRTqL9yh2+F+co\nsYbbVVfVqqp6s9e0mXcAOS3rIOd+3w28+vcCj2RaXiVV/S0P6xooF+LU+WRHOHvdGuFsX+Ds/G7I\ntF4VVfWg1/g57UgPcvb31Mir/wjOzr2t1/yrqWrV3FbIx2kzx/UMTr3Xpe7v280dLtmMn3l5KTjJ\nMV1jCmH/4Q/nWzJYBiSKyPMiUkpEInFObUzxGudGEbnC3Xm9AixV1fSN/hBOcdBfBJx7DnCOXu9X\n1T8yjVMZiFfVRBFpjVOx6i2nmHxZX5+4R0/zcYrW+VHG7Y6oqsctJVyX/qGI1MKpcH8Qp6L5Jnec\n9M+jReT+bOad43ekqmtwTj+NA35Q1Xj3o+XASff7KScioSLSVkQuyWE9clrWd0A7EbnFnddfOfvo\neBQwVETauOtUVUTu8FrHRSLyzxyWnZk/71HpjpOcc/KiiJQXkbbAAzgVxQCjgX+7yRYRCRMR7yuT\ncotzGvCAiLQWkQrA/+HudN2j8bHA++6RPiJSX0Suy3ZurnxOWxmnhBUvIjWAlzJ9HkM2/ze3dDIN\neE1EKolIY+DvFJMr8M6rZODu0G4GbsTJ4iOA/qq63Wu0yTgbQBxOZeF9Xp+9BHwiIke9/8Tei8jl\nfXbj98S56uhL90a0kyKy3v3sWeBeEYnH+dN9kWke2cbkw/rmFl9mY3AqMPMi/U+dgFOhOt09LXM3\nTmVeutE4FXVzVfUozrn9sSJSXURK45TQsjuCzu07Aud3vRqnEhQ3Jg9OcrwYp77nMM7Oo0oO65Pt\nslQ1DueKrrdwvu/WOBXUSe7nM4HXgS9E5DjOKbJeXvNuiHMqy1d53d6yHNct7V2IU9Gak8U4JcQf\ngTdVdYE7fDjObzlPRE7gVCZ38TUuVf0B+ADnfPw2nKvawP3ecC6A2AH85n5v83BONea6bvzvKidf\np30f59TSEXc95mT6fDjQT0TiROT9LJb3BE5pZCfO6cbPVHWij7EGVcBvOhORqjhHZO343yVm23CO\nhBvjVO7dqaonAhqID0RkIs5lmXk5OjuviMgS4K+qmtMpBX8v80qcm93uLaxl+oN7Pngf8CdVXZzL\nuPWBqap6VaEEd/ay38apPB6VzeeNcXZupTOdmw9UPK1xLisuWxjLM47CSAYfA4tVdaKIlMK5Qmco\nTqXPmyLyAlBdVQcHNBAfWDIwBeWegliGc5XKczinkZqqalKOExZhbjKIxrmfIiA7ZxHpg3MUXhHn\nMtRUVb09EMsyWQvoaSIRqQJ0TS8mqWqqWwK4FeeadNzXPoGMIw+KTJHNFFuX49xMdBjoDdxanBOB\nl0D/Nx7B+c6241TC/iXAyzOZBLRk4DZoNgbnOuSLcM6fPoVzo0V1r/GOqmqNgAVijDEmR4GuQC6F\nc3foSFXthHNzyGAKVvFljDHGzwJ909k+nHPwv7vvv8Jtt0ZE6qhqjNtiYpY3XIiIJQljjMkHVc3T\npccBLRmoagywV0TSL+W6Gqctl29wriUH5xbtWedOnTEP6/zUDRs2LOgxlJTOvkv7Potylx+F0RzF\nE8Dn7rXiO3FuVgkFpolIekuGdxZCHMYYY7IR8GSgzvXol2bx0TWBXrYxxhjfnFd3IJ/vIiMjgx1C\niWHfpX/Z9xl8Rfqxl741FGiMMcabiKBFqQLZGGNM8WDJwBhjjCUDY4wxlgyMMcZgycAYYwyWDIwx\nxmDJwBhjDJYMjDHGYMnAGGMMlgyMMcZgycAYYwyWDIwxxmDJwBhjDJYMjDHGYMnAGGMMlgyMMcZg\nycAYYwyWDIwxxmDJwBhjDJYMjDHGYMnAGGMMlgyMMcYApYIdQCDFxyeRlqYFmke5cqGUL1/aTxEZ\nY0zRJKoF21kGkohoQeLr1u0L1q+PLVAMoaEhxMQ8RmioFaKMMcWDiKCqkqdpSnIy8IfmzcfxzTd9\naNOmVlDjMMYYX+UnGdjhbi4iIuqybNnBYIdhjDEBFfBkICK7RGStiKwWkeXusOoiMk9EtorIXBGp\nGug48qtLl3CWLz8U7DCMMSagCqNk4AEiVbWjqnZxhw0G5qtqK2AhMKQQ4sgXKxkYY84HhZEMJIvl\n3ApMcvsnAX0KIY58ufji2mzdepTExJRgh2KMMQFTGMlAgR9FZIWI/NkdVkdVYwBU9RBQuxDiyJdy\n5UrRpk1NVq8+HOxQjDEmYAojGVypqp2AG4HHRaQrToLwVnQvaQK6dLFTRcaYki3gN52p6kH3NVZE\nZgJdgBgRqaOqMSISDmR72P3SSy9l9EdGRhIZGRnYgLMQEVGXOXN2FvpyjTHGF1FRUURFRRVoHgG9\nz0BEKgAhqpogIhWBecDLwNXAUVV9Q0ReAKqr6uAspg/6fQYAW7bEccMNXxEd/XCwQzHGmFzl5z6D\nQJcM6gBfi4i6y/pcVeeJyO/ANBF5ENgN3BngOAqkZcsaHDuWxOHDp6hdu2KwwzHGGL8LaDJQ1Wjg\n4iyGHwWuCeSy/SkkRLj0Uud+g5tuahbscIwxxu/sDmQfRUTUZflyq0Q2xpRMlgx81KVLOMuW2Z3I\nxpiSyZKBj7p0qcuKFYcoChXaxhjjb5YMfBQeXpHKlUuzffuxYIdijDF+Z8kgD5x6AztVZIwpeSwZ\n5IHdiWyMKaksGeSBXVFkjCmpLBnkQadOtdmw4QhJSanBDsUYY/zKkkEeVKxYhhYtqrN2bcGeq2yM\nMUWNJYM8snoDY0xJZMkgj+yKImNMSWTJII+cO5GtZGCMKVksGeRRmzY1OXToFEePng52KMYY4zeW\nDPIoNDSEzp3rsGKFnSoyxpQclgzyoUuXcKs3MMaUKJYM8iEiwq4oMsaULJYM8qFLF+dOZGvB1BhT\nUlgyyIcGDSpTunQou3adCHYoxhjjF5YM8snqDYwxJYklg3yyegNjTEliySCfrFkKY0xJYskgny65\npA5r1hwmJSUt2KEYY0yBWTLIpypVytKkSVXWrz8S7FCMMabALBkUgD3sxhhTUlgyKABrtM4YU1JY\nMigAa87aGFNSWDIogHbtarF7dzzx8UnBDsUYYwrEkkEBlC4dysUX1+b332OCHYoxxhSIJYMCsnoD\nY0xJUCjJQERCRGSViHzjvq8uIvNEZKuIzBWRqoURRyDYFUXGmJKgsEoGTwKbvN4PBuaraitgITCk\nkOLwu/SSgbVgaowpzgKeDESkAXAjMM5r8K3AJLd/EtAn0HEESpMmVUlN9bB/f0KwQzHGmHwrjJLB\ne8BzgPehcx1VjQFQ1UNA7UKIIyBExNopMsYUe6UCOXMR6Q3EqOoaEYnMYdRsz7G89NJLGf2RkZFE\nRuY0m+BIrze4/faWwQ7FGHMeioqKIioqqkDzkECe6xaRfwP3AalAeaAy8DVwCRCpqjEiEg4sUtUL\ns5hei8O5+Llzo/nPf5YRFXV3sEMxxhhEBFWVvEwT0NNEqjpUVRupalPgbmChqvYHZgMD3dEGALMC\nGUegXXppOCtXxpCW5gl2KMYYky/Bus/gdeBaEdkKXO2+L7Zq1ChP3bqV2LQpLtihGGNMvgS0zsCb\nqi4GFrv9R4FrCmvZhSG9naL27cOCHYoxxuSZ3YHsJ3YnsjGmOLNk4Cd2J7IxpjjzKRmISGMRucbt\nLy8ilQMbVvFz0UVhbN9+jFOnkoMdijHG5FmuyUBEBgFfAqPdQQ2AmYEMqjgqW7YU7drVYtWqw8EO\nxRhj8syXksHjwJVAPICqbqcY3zEcSHYnsjGmuPIlGSSpasa5DxEpRQ53DJ/PrN7AGFNc+ZIMFovI\nUKC8iFwLTMe5acxkEhFhJQNjTPHkSzIYDMQC64FHgDnA/wUyqOKqefNqnDyZwqFDp4IdijHG5Emu\nyUBVPao6VlX7qeodbr+dJsqC04JpuJ0qMsYUO75cTRQtIjszd4URXHFkN58ZY4ojX5qjuMSrvxzQ\nD6gRmHCKv4iIurz//qpgh2GMMXmSryasRWSlqnYOQDyZl1PszkjFxibSosV4jh79KyEheWpB1hhj\n/CI/TVjnWjIQkU5eb0NwSgqF1sBdcRMWVoEaNcqxbdtRWreuGexwjDHGJ77s1N/x6k8FdgF3BiQa\nP9q//yRRUXupVKkMlSqV9nr9X3+ZMqGI+P/oPb3ewJKBMaa4yDUZqGqPwgjE31aujOG+++bkOE6p\nUiHZJor017CwCjz33KVUr17O52WnN2c9YEC7gq6GMcYUimyTgYg8ndOEqvqu/8Pxn/DwivzpTxeS\nkJBMQkJKFq8pJCencfx4EsePJ+U4ryNHTjNmzHU+L7tLl7p8/vnmgq6CMcYUmmwrkEVkWE4TqurL\nAYno7BgCWoGcnJzGqVNZJ4qEhGSOHDnN3/++CFXYsGEgF17o22mf06dTqFlzJEeP/pVy5ax6xRhT\nuPxagVwYO/tgK1MmlDJlQnM8BbRpUxyjRq1lyJAlzJzZx6f5li9fmtata7B69WEuv7yev8I1xpiA\n8eWms3Ii8riIfCgiE9K7wgiuKBg27AoqVizNrFk7+OWX/T5PZ43WGWOKE1/aJvoUCAeux3mGcQPg\nZCCDKkrCwyvyzDPOfXfPPbcYX09b2Z3IxpjixJdk0FxVXwROqeokoDcQEdiwipZnn72U2rUrsHTp\nAWbO3OHTNOlXFBljTHHgSzJIcV+Pi0g7oCrn2cNtKlcuwz//eTkAQ4YsITXVk+s0rVrVIDY2kSNH\nEgMdnjHGFJgvyWCMiFQHXgS+ATYBbwQ0qiLo4Yc70Lx5NbZuPcr48etzHT80NIRLLglnxQorHRhj\nij5fksFEVT2mqotVtamq1lbV0blPVrKULh3Kv//dFYCXXvrVpwffW72BMaa48CUZRIvIGBG5WgLR\ndkMxcscdLenSJZxDh07x7rsrcx3f6g2MMcWFL8mgNTAfeBzYJSIjROSqwIZVNIkIb77ZHYA331zO\n4cM5P9GsSxcnGRS3lleNMecfX550lqiq01T1NuBioArOJabnpe7dG9K7d1MSElJ45ZXfchy3Xr1K\nlC9fip07TxRSdCY3R44k0rDhaHr2nMro0Wutgt8Yly8lA0Sku4h8CKzEecBNkW+1NJBef70rISHC\nqFFr2bHjWI7jWr1B0fLMM1Hcemsz/va3TixcuIdmzcbRq9eXfPzxBo4fPxPs8IwJGl/uQN4FPAUs\nAdqr6p2q+pUvMxeRsiKyTERWi8j69PaORKS6iMwTka0iMldEqhZkJQpbu3ZhDBzYltRUD0OHLslx\n3IiIunzzzQ6fKpxNYM2fv5vFi/fx+uvd6Nu3BVOn3sz+/Y8ycGA7Zs3aQePGY7jllq+ZPHkzJ0/a\n72XOL7k+6UxEqqhqfL4XIFJBVRNFJBT4BXgCuB2IU9U3ReQFoLqqDs5i2iL7pLN9+07SosV4zpxJ\nZdmye+nSpW6W4+3dG89jj83nl1/2c/vtLXnggXZccUW9gDxHwWQvMTGFDh0m8cEHPbnxxqZZjnPi\nRBKzZu1g6tQt/Pzzfq67rgl33dWKG29sSoUKpQs5YlPcxMYm8vvvh7jhhqy3r8KUn4bq8vXYy/wQ\nkQrAT8BjOE1cdFfVGBEJB6JUtXUW0xTZZAAwZMhPvP76crp3b8CiRXfluIM/cCCBTz/dyMSJG1FV\nBg5sx/33t6F+/cqFGPH5a8iQn4iOPsEXX9zs0/hxcaf5+uvtTJ26lRUrDtG7d1PuuqsV11/fhLJl\nrSVac7aEhGR69JjKxo1xREcPok6dikGNp0gmAxEJwalraAaMVNUhInJMVat7jXNUVWtkMW2RTgbH\nj5+hWbNxHD16hm+/7Uvv3s1ynUZVWbbsIBMmbODLL7cRERHOAw+045Zbmhfp5q6jo48zevQ6evVq\nQrduDYvV853Xrj3MtddOZ/36gfn6k8bEnOKrr7YxdepW1q8/wq23NuPBB9vTtWuDAERripuUlDRu\nvXUmdetWpGzZUKpWLct//tMtqDEVyWSQsSCRKsDXOKeJlnjv/EUkTlXPeViAiOiwYf97rEJkZCSR\nkZGFEK3v3nvvd55+Oop27WqxZs39hIb6VCcPOKcuZszYzsSJG1i7Npa7727FAw+0o1OnOkXqNNKP\nP+6if/853HZbC3755QDHj5+hf/+29O/fhlatzsnhRUpamofLL5/MI49cxEMPtS/w/PbvP8n06dt4\n883lDB/ek379WvkhSlNcqSoPPTSXmJhTzJzZh/37E+jc+VP++OPPVKvm+9MRCyoqKoqoqKiM9y+/\n/HKekwGqmmMHPIlzOakA44FVwHW5TZfNvF4EngE2A3XcYeHA5mzG16LuzJkUbdJktMJbOmHCunzP\nJzr6uL788i96wQVjtH37ifruuyv08OFTfow07zwej7755jIND/9Qo6L2ZAxfsyZGn356oYaHf6gR\nEZ/pyJGr9MiRxCBGmr3hw1dq9+5T1OPx+HW+a9bEaO3aI3XOnD/8Ol/jO4/Ho3v3xuuMGdv0n//8\nWdevP1zoMbz44hK99NJPNSEhKWNY//7f6auvLi30WLy5+8687Z9zHQHWuq/XAzOAtsAqn2YOtYCq\nbn95nDqDG3HaNnrBHf4C8Ho20wfy+/Kbzz7bqPCWNmgwShMTkws0r7Q0jy5atFv79/9Oq1b9QPv0\n+VpnzdquKSlpforWNwkJSXr33bP1kks+0T17TmQ5TkpKms6Z84feffdsrVJluPbtO1O//nqbJiWl\nFmqs2dm9+4TWqjVCt2yJC8j8f/11v9aqNUIXL96T+8imwOLiEnXu3Gh95ZVf9ZZbZmjduh9qWNgI\n7d37K33iiQUaFjZCFy7cXWjxjBq1Rps1G6sxMQlnDd+4MVZr1x6pp04VbF9QEIFKBuvc1+FAX7d/\ntU8zh/ZuSWINsA74hzu8Bs5dzVuBeUC1bKYP5PflN2lpHu3YcZLCW/r667/5bb4nTpzRsWPX6mWX\nfaZt207QBQsKZ0PfufOYdujwsQ4YMMfn5Hb8+BkdN26ddus2RWvVGqGPP/6jLlt2wO9H5L7yeDx6\n001f6Suv/BrQ5fz44y4NCxuhv/9+MKDLOd+cOpWsP/+8T99773e9557Z2rz5WK1cebh27z5Fn3su\nSqdN26K7dh0/a/tauHC3hoWN0ClTNgc8vlmztmt4+Ie6ffvRLD/v23emDh++MuBxZCdQyWCiu8Pe\nDlQAKgMr87qg/HTFJRmoqs6bF63wllat+oHfT5l4PB6dMWObNmkyWu+4Y5bu3p31kbo/zJsXrXXq\njNQPPliZ7x35zp3H9F//+lWbNx+rrVqN19deWxrQmLMybdoWbdNmQqGUUr7+epvWqTNSN26MDfiy\n/K2gJVl/SE1N0zVrYnTMmLU6aNBcveiij7V8+ff0kks+0ccem6cTJ67XDRtiNTU199LxunWHtUGD\nUfrOOysCFm96iXD58gPZjrN8+QFt2HBU0ErJgUoGIUCn9KN396i+Q14XlJ+uOCUDVdVrr52m8JY+\n/fTCgMw/MTFZhw37WWvWHKGvvPKrnj6d4rd5Z1c/UNB5/vrrfn300Xlao8Z/tUePLwrlHPvRo6e1\nbt0P9Zdf9gV8Wek++WSDNmgwSnfuPFZoyyyIxMRkHTLkJy1T5t2A7jhzc+LEGb366qnarNlY7d//\nO/3vf1fqb78dKNC2vWfPCW3bdoI+9dRCTUvzb8l0y5Y4rVNnpH73Xe7b8TXXTCtQPWJBBCoZXAlU\ndPvvA94FGud1QfnpilsyWLXqkMJbWqbMuxodfTxgy4mOPq59+87Upk3H6KxZ2wt8KsaX+oGCOn06\nRadN26L16n0U8OLzww/P1ccemxfQZWRlxIhV2rTpGN2//2ShLzsvFizYrc2bj9V+/WbpsmUHtE2b\nCfr00/7fcebmwIGTetFFH+tjj83z6ag/L44ePa3duk3RO+/8xm8HTQcPJugFF4zR8eN928EvWLBb\nW7Yc5/d180XA6gzcK4kuAlbjtF66OK8Lyk9X3JKBquq9936r8Jbed993AV/WvHnR2rr1eO3Va7pu\n3Zq/StL81A8URHT0cW3Varw+91xUQHY+ixfv0fr1P9Ljx8/4fd6+eO21pdq27YQieXXVkSOJ+sAD\n32vDhqP0m292ZAyPi0vUq66arPfcM7vQTmts3nxEmzQZra++ujRg9UqnT6dov36ztFu3KXr06OkC\nzSs+Pkk7dpyk//qX73VQHo9HIyI+0+nTtxRo2fkRqGSwyn39J/CQ97BAd8UxGURHH9cyZd5Vkbd0\n9eqYgC8vKSlV3357udasOUKffz5K4+OTcp/I5Y/6gfw4ciRRr7jic73nntl65oz/TnWdOZOirVqN\n1xkztvltnnnl8Xj0+eej9JJLPtETJ4KTkDLzeDw6efImDQ//UP/2t/lZbiOJicnat+9MvfrqqQGP\n+9df92udOiN14sT1AV2OqnNxx1NPLdS2bSfku9SblJSq1103XR9+eG6e/yezZm3Xjh0nFfqFFIFK\nBouBIW4Fcrhbh7A+rwvKT1cck4Gq6tNPL1R4S6+7bnqhLfPAgZPav/93Wr/+R/r555ty3PgCUT+Q\nV4mJydqnz9fas+dUvx3FDxv2s/bp87Vf5lUQHo9HH3lknnbvPiXoFbTR0ce1V6/p2r79RP3tt+wr\nPFWdity//OVHvfjiSXrgQGBOdc2atV1r1RpR6PdnvPPOCm3QYJSuW5e3exE8Ho/27/+d3nzzjHxd\n3p2W5tG/Q0fqAAAgAElEQVS2bSfo99/vzPO0BRGoZBAOPA10dd83Au7P64Ly0xXXZHDkSKJWrfqB\nwlv644+7CnXZv/yyTzt2nKRdu07RNWvOLZmk1w907hy4+gFfpaam6eOP/6gdOnys+/bFF2heGzfG\naq1aI3Tv3oLNx19SU9P0T3/6Vnv3/iooV5SkpKTpO++s0Jo1R+i///2bJif7FoPH49FXX12qTZqM\n9vv9GaNHr9Hw8A9zvAonkKZM2axhYSN00SLfL9EeMuQnjYj4rED3DHz22Ubt1m1KvqfPj4AkA2e+\nNAaucfsrAJXzuqD8dMU1Gaiqvv76bwpvaceOkwq9Yi41NU1HjVqjtWuP1L/85UeNi3POX6fXD9x/\n/3dBP2JN5/F49PXXf9NGjUbl+9LMtDSPXnnlZB0xYpWfoyuY5ORUvfnmGXrXXd8UaiXiqlWHtHPn\nT7RHjy9027asr4PPzYQJ67ROnZG6dOn+Asfj8Xj0n//8WZs1G5vtdfmFZeHC3Vq79kj94ovc70UY\nMWKVtmw5TmNjC9YSQEpKml5wwRj9+efCu7otUCWDQcAK4A/3fQtgQV4XlJ+uOCeDxMRkbdBglMJb\n+vnnm4ISQ1xcov7lLz9q7doj9cUXl2idOiN1+PDCrR/w1aefbtTatUfm627eUaPW6OWXf17oSdcX\np0+naI8eX+igQXk/35xXp04l63PPRWlY2AidMGFdgZf37bc7tFatETp79o7cR85GSkqaPvTQD3rJ\nJZ/ooUMJuU9QCHy5F2HGjG1ar95H+scf/rlU+KOPVmvv3l/5ZV6+CFQyWAOU8b7r2OoMfDNhwjqF\nt7RJk9FBu7pFVXX16hi9995vg1Y/4Kt586I1LGyETpvm+9UX+/ef1Fq1RgSlXRpfxccnaZcun+qz\nzy4KWEKYOzdaL7hgjN5zz2y/7nSXLTug4eEf6rhxeb9ePiEhSXv3/kqvv366njzp+4UNhSH9XoS/\n//3cS2qXLNmrtWqN0JUrD/lteadPp2jduh8WykUlqoFLBsvc19Xua6n0JioC3RX3ZJCamqYdOnys\n8JZGRHwW1IRQXKxeHaP163+k77//u0/j3377TP3HP5YEOKqCi4tL1HbtJvq9AbPDh0/pffd9p40b\njw5YpezWrXHatOkY/de/fvU5mR0+fEq7dPlUBwyY43N9RWHzvhch/aq2TZuOaO3aI3Xu3Gi/L++t\nt5brXXd94/f5ZiVQyeBNYCiwBbgWpxnq1/K6oPx0xT0ZqDpXc6S3anrppZ8W+Hrn88GuXce1devx\n+uyzi3I89TNz5nZt0WKcX+/EDqQDB05qs2Zj9YMP8nfTncfj0UOHEnT58gM6ffoWfe21pVqnzkh9\n+umFAT/yPngwQTt2nKSPPJL7DWJ//HFMW7QYp0OH/lQkT0l6S78XoXv3KbpxY6w2bjxaJ03aEJBl\nxccnaa1aI/Jdj5MX+UkGvjz2MgR4CLjOvflsLjBOc5vQD4r6w218tWdPPD16TGXnzhN06lSHH3+8\ngxo1ygc7rCLt6NHT3HLLTBo2rMzHH/c65+li8fFJtGv3MZ98cgORkY2CFGXe7dp1gm7dvuCVV65k\nwIB2Z3125kwqe/eeZM+eePbsiWf37nj27DmZ0b9370kqVy5Do0ZVaNSoMo0bV+G++9pwySXhhRL7\nyZPJ3H77LCpUKM2UKb0pX/7cR4GuWhXDzTd/zdChETz+eMdCiaugPB7lmWeiGD58Ja+91pUhQyIC\ntqxhw37hwIEExo69PmDLgCL+cJv8KCnJAJxnIffsOY0dO45z8cW1mT+/HzVrWkLIyenTKdx33xyO\nHTvD11/3oWrVshmfPfHEAk6dSmH8+F5BjDB/tmyJo0ePadxySzPi4k5n7PCPHUuifv1KNG7s7Owb\nNari9jvvGzasTMWKZYIae3JyGg8++APR0SeYPbvvWQc18+bt4t57v2P06Gu57baWQYwyf1avjuHi\ni2sH9MFScXGnadFiPOvXDwjoI28DkgxE5ErgJZzLS0vhlA5UVQP+1OeSlAzAeUpWz57T2LbtGB06\nhDF/fj/CwioEO6wiLS3Nw1NPLWLx4r18//3t1K9fmd9+O0DfvrPYuHFgsS1hbdx4hO+/j6Zhw8oZ\nO/w6dSrk6Ul5weLxKIMH/8Ts2X/www+307hxVT79dCPPPruYr766hauusseB5uTppxcB8O67PQK2\njEAlgy3A33GeY5yWPlxV4/ITZF6UtGQAcPBgAj16TGPr1qO0a1eLBQv6Ubt2cB+eXdSpKm+9tYKR\nI1cza1Zf+vefw9ChEdxzz4XBDu28Nnz4St5++3fuuqsV06dv5fvvb6dNm1rBDqvI27//JO3bT2Lb\ntgepVSswB4OBSgbLVDVwJ9FyXnaJSwYAhw6domfPqWzefJQ2bWqycOGd+XpQ+/lm8uTN/PnPc4mM\nbMh3391WpJ4Tfb6aNm0Lo0at5ZNPbqRBg8Cd9ihpBg2aS716lXj55SsDMv9AJYPXgVCcR14mpQ9X\n1VX5CTIvSmoyADh8+BQ9e05j48Y4WreuwcKFd1K3bqVgh1XkrVx5iIYNK1tpyhRr27cf44orJrNz\n5yAqV/ZfPVBychqvv76MYcOuDEgyWJTFYFXVnnlZUH6U5GQAEBubyNVXT2P9+iO0bFmdhQvvDGil\nkjGm6Ljnnm/p1Kk2zz3XxS/zW7culgEDvqdevYrMmXNHQJJBU1XdmduwQCjpyQDgyJFErrlmOmvX\nxtK8eTUWLbrLitvGnAfWrj3MDTd8xc6dgyhXrlTuE2QjNdXDG28s5/33V/Lmm90YOLAdISEheU4G\nvly68GUWw6bnZSEme7VqVWDhwjvp2LE2O3Ycp3v3L9izJz7YYRljAuyii2rTqVMdPv54Q77nsXlz\nHFdcMZnFi/eycmV/Hnigfb7r0rJNBiLSWkRuB6qKyG1e3UCgXP5CN1mpUaM8CxbcSefOddi58wSR\nkVPZvftEsMMyxgTY0KERvPnmClJTPXmaLi3Nw9tvr6Br1y948MF2zJ17B40aVSlQLDmVDFoBNwHV\ngJu9uk44LZkaP6pevRzz5/ejS5dwoqNP0L37VKKjjwc7LGNMAF1xRX0aNqzM1KlbfJ5m+/ZjdO8+\nldmz/2D58nt59NGL/XJlnS91Bper6tICLykfzoc6g8xOnEiiV68v+e23gzRqVJmFC++iWbNqwQ7L\nGBMgc+dG88wzUaxbN5CQkOx36h6P8uGHq3nppaW8+OJl/O1vnbId36+XlorI86r6poj8FzhnJFV9\nIi8Lyo/zMRmA0+7ODTd8xa+/HqBBg8osWnQnzZtXD3ZYxpgAUFU6d/6Ul166gltuaZ7lOLt2neDB\nB3/g9OlUPv74Blq1qpHjPPOTDHI6TbTJff0d5+7jzJ0JkCpVyvLDD3dw1VX12bfvJN27T2Xr1qPB\nDssYEwAiwtChEbz22m9kPvhVVcaMWcull37G9dc34eef78k1EeQ7jhxKBp+qan8ReVJVhwdk6bk4\nX0sG6RISkundewY//bSPUqVC6NOnOQ8/3IGrr26cY3HSGFO8pKV5aNv2Yz788Bp69nRa4d237yR/\n/vNcYmNPM2lSL9q1C/N5fv4+TbQJuAb4HojEaaAug6oG/FC1oMng2LEzea6lz0qpUiFuJxn9hdUU\nwqlTyQwaNI+pU7fi8TjfxQUXVGXQoA488EA7wsPtTlxjSoKJE9czefIW5s27g08/3cSzz0bx1792\nZMiQCEqXDs3TvPydDJ4AHgOaAvs5OxkUi1ZLe/SYyoYNRwoUg6qTtVNTPaSkOK9paUpoqHglCacr\nXfrcpFG6dAi33daCl14qWBsk+/efZMKEDYwbt449e04CTpK69dZmPPzwRVxzjZUWjCnOkpPTaN58\nHE2bVuXo0TNMmnQDHTvWyde8AtU20Ueq+lg+A2oAfALUATzAWFX9QESqA1NxmsXeBdypqudcWF9U\nTxOpKmlpelaC8O68hyUkpHD99V+yefODfjmKT0vzMG/eLsaMWcfs2X+QluZ8P02aVMkoLVgbR8YU\nT9Onb2XjxiMMGRJxzgOd8qLIPdxGRMKBcFVdIyKVcCqebwUeAOLcq5VeAKqr6uAspi+SySCvHnvs\nR2rXruD3FgoPHEhg4sQNjB27jt27nbuWQ0OFW25x6hauvbZxsWgf3xjjX0UuGZyzMJGZwAi3666q\nMW7CiFLV1lmMXyKSwebNcfToMZVdux4uUBsk2UlL8zB//m7GjFnHrFk7MkoLjRtX4c9/bs+DD7an\nXj0rLRhzvijSyUBEmgBRQDtgr6pW9/rsqKqec71USUkGAL16fcndd7dm4MB2uY9cAAcPJvDxxxsZ\nO3Yd0dHOmbfQUOGmm5rxwgtduPzyegFdvjEm+IpsMnBPEUUBr6jqrMw7fxGJU9WaWUynw4YNy3gf\nGRlJZGRkwOMNhB9+iGbw4J9Yvfr+QrkSyeNRFixwSgszZ+7IuKqqX7+WvP56N5o2tbuajSkpoqKi\niIqKynj/8ssvF71kICKlgG+B79PvVxCRzUCk12miRap6zjMMS1LJwONR2radyKhR19K9e8NCXXZM\nzCn++9/VvPvu75w+nUqZMqH87W8d+cc/LqN6dWtz0JiSxt93IPvLBGBTphvXvgEGuv0DgFmFEEdQ\nhYQITzzRifffL/ybt+vUqcirr17Ftm0Pcf/9bUhOTuOdd36nefNxfPDBKpKT03KfiTGmRAv01URX\nAj8B63HaN1JgKLAcmAY0BHbjXFp6ThOdJalkAM4NZI0bj2X58nuDeppm1aoYnnkmiqiovQC0aFGd\nN97oRp8+ze25wsaUAEW2ziC/SloyAHj++cWkpnp4990eQY1DVZk9+w+ee24x27YdA6Bbtwa8804k\nl1wSHtTYjDEFY8mgGNizJ56LL/6EXbsGUaVK2WCHQ0pKGqNHr+Wll5YSF3cagHvvvZB//7trgR+W\nYYwJDksGxcSdd37DVVc14IknOgU7lAzHj5/h3/9exvDhTh1CuXKl+PvfOzN4cJcikbSMMb6zZFBM\n/PLLfgYM+J5t2x4qcu0JRUcfZ8iQJUyduhWAsLDyvPzylQwa1IFSpexuZmOKg6J6NZHJ5Ior6lG9\nelm++25nsEM5xwUXVOOLL25m6dI/cfnl9YiNPc1f/jKfDh0+5rvv/gh2eMaYALGSQZB8/vkmJkzY\nwIIFdwY7lGypKl9+uY0XXvgp427mBx5ox4gRV1OhQukgR2eMyY6dJipGkpPTaNJkDHPn3kH79r4/\ntCIYkpJSGTFiNf/3f79w5kwq7dvXYvr0WwL2xCVjTMFYMihmXn11Kbt2xTNu3PXBDsUn69bF0q/f\nN2zbdoxKlUozduz13H33Oe0LGmOCzJJBMRMbm0jLluPZtu0hwsIqBDscn5w8mczDD8/jiy+2APDY\nYxfx7rs9AtIaqzEmf6wCuZgJC6vAbbe1YMyYdcEOxWeVK5dh8uTefPjhNZQpE8pHH63lyiunsHPn\nOTeQG2OKESsZBNm6dbHccMNXREcPokyZvD3nNNhWrjxEv36ziY4+QdWqZZk4sRd9+7YIdljGnPes\nZFAMdegQRuvWNfjyy23BDiXPOncOZ9Wq/vTp05wTJ5K47bZZPP30Imv4zphiyJJBEfDkk514773f\nKY6loGrVyjFjxq28914PSpUK4b33VtK9+xfs2RMf7NCMMXlgyaAI6N27KceOJbF06YFgh5IvIsJT\nT3VmyZK7adiwMr/9dpCOHT9hzpyid1OdMSZrlgyKgNDQEJ54ohPDh68KdigFctll9Vi9+n5uvPEC\njh49Q+/eMxg6dEnGU9aMMUWXVSAXEfHxSTRpMpY1a+4v9q2FejzKm28u5x//+BmPR+nWrQFTptxE\nvXqVgh2aMecFu8+gmPv73xdRpkwIb7zRPdih+MXixXu5555vOXjwFLVrV2Dy5N5cfXXjYIdlTIln\nyaCY27nzOBERn7Nr1yAqViwT7HD8IibmFPfe+x0LFuxBBIYMieDvf+9MrVrF4yY7Y4ojSwYlQJ8+\nM+nVqwmPPnpxsEPxm7Q0D6+8spR//WspqlCmTCi33daChx/uQGRkw2LxqM2kpFT27j3J7t3x7NkT\nT2qqcs89ralUqWQkbVOyWDIoAaKi9vDYY/PZuPGBIvesg4L66ae9vPHGcr7/Ppr0n7VFi+oMGtSe\ngQPbBbVJjvj4pIwd/e7d53aHDp0i86bYuHEVRo++luuvvyA4QRuTDUsGJYCq0rHjJ7zxRrcSu5PZ\nsyee8ePXM378evbvTwCgdOkQ+vZ1Sgs9ejQKSCJMTExh5coYfv/9ENHRJ87a2R8/npTjtCEhQoMG\nlWjUqAqNG1dh48Y41qw5DMCAAW15991IatQo7/eYjckPSwYlxMSJ65k2bSvff39HsEMJqNRUD99/\nH82YMWuZMycaj8f5rZs1q8agQe154IF21K5dMV/z9niULVviWLbsIMuWHWLZsoOsXx9LWlrW21O5\ncqVo3NjZ0TdqVDmjP72rX7/yWU96S0lJ4913f2fYsF9JSkqjdu0KjBhxNXfc0bJYnPYyJZslgxLi\nzJlUmjQZQ1TUXbRuXTPY4RSKvXvjmTBhA+PGrWffvpOAU1ro06c5Dz98ET175lxaOHz4VMZOf9my\ngyxffpD4+OSzxgkNFdq3D6NLl3Batqx+1s4+LKxCvnbiW7ceZdCgeSxZsg+APn2aM3LkNXYZrQkq\nSwYlyLBhvxAbm8iHH14b7FAKVVqahx9+iGbMmHV8++3OjNJC06ZVGTSoAwMHtqNatbKsXn04Y8f/\n228H2LXr3OYvGjSoTEREOBERdYmIqEvnznUCcpWWx6OMHr2WF174iZMnk6latSzvvBPJgw+2s1KC\nCQpLBiXIoUOnuPDCCezcOYjq1csFO5yg2LfvJBMmrGfcuPXs3euUFkqVCkEEUlLOvqu5YsXSXHJJ\nHSIi6nLZZfWIiKhb6Efne/fG8+ijPzJnTjQAPXs2YuzY62jatFqhxmGMJYMS5v7759C+fS2ee65L\nsEMJqrQ0D3Pn7nJLC3/g8Sht2tTM2OlHRNSlTZuaZ53TDxZVZcqULTzxxELi4k5TvnwpXn31Kp58\nshOhocGPz5wfLBmUMCtXHqJv31ns3DmoSOzoioLjx88QEiJUqVI22KHkKDY2kaeeWsTkyZsB6NIl\nnPHjr6ddu6L9vGtTMtjzDEqYzp3Dady4Cl9/vT3YoRQZ1aqVK/KJAJyn2H3+eW9mz+5L/fqVWL78\nEJ06fcpLL/1CUlJqsMMDnEttjxxJDHYYpoiwkkER99VX23jvvZX8/PM9wQ7F5NOJE0kMHvwTo0at\nBaBt25qMH9+LiIi6fluGqhIfn0xsbCKxsaczvTr9R46cPTwx0UlKvXo14aOPrqVJk6p+i8cEV5E7\nTSQi44GbgBhV7eAOqw5MBRoDu4A7VfVENtOf98kgNdVD8+bjeOih9lSvnv8j4pAQoWnTarRvX4t6\n9SrZVS5BsHjxXv7857ns2HEcEbj11uZUqFAaVcXj8e6cK5RyG56Wppw4kZSxo8/rE+bKlnUes5qU\nlEaFCk7dxhNPWN1GSVAUk8FVQALwiVcyeAOIU9U3ReQFoLqqDs5m+vM+GQDMn7+bmTMLdqooNVXZ\nseMY69bFkpqqtG9fy+3C6NAhjHbtalG5srWzE2inT6fw8stLefvtFdneAJdfFSuWJiysPGFhFXJ4\n/V9/pUqlOXw4kSefXMjUqVsBuPTScMaOvY6LLqrt19iyk5SUypQpW9i37yRt2tSkXbtaNGtWzRJS\nARW5ZAAgIo2B2V7JYAvQXVVjRCQciFLV1tlMa8kgAGJiTrF+/RHWr4/NeN20KY7atSvQvn2YV5Ko\nRcuWNazyOgA2b45jxYpDhISIV+f8ic8elv1wEahSpUzGDr58+dL5jufbb//gscfms2/fSUJDheee\nu5R//vPyAs0zJ4mJKYwdu4633lqR0SRJunLlSnHhhTVo374W7dr9r2vQoLKVaH1UXJLBUVWt4fX5\nWe8zTWvJoJCkpXnYufME69bFeiWJI+zbd5KWLavTvn0YnTrV5tZbm9t18yXUyZPJDB26hJEjV6MK\nzZtXY8yY6+jRo5Ffl/HRR2t4553fOXzYqbzu0CGMa65pxJYtR1m//kjGPSWZValSJiMxeCcKaw79\nXMU1GcSpapZtLlgyCL7ExBQ2bYpj/fpYli49yMyZ22nUqAr9+rWkX79WlhhKoKVLDzBo0Fw2bowD\n4MEH2/H225EFuvnx2LEz/Pe/q3j//VUcO3YGcE5J/d//XcZNNzU7q6mREyeS2LjxCBs2OF36gUlc\n3Oks512nToWzShDt2tWibdvz+7RncUkGm4FIr9NEi1T1wmym1WHDhmW8j4yMJDIyMqDxmpylpnr4\n6ad9TJu2lRkztlliKKGSk9N4443lvPrqbyQnp1GnTgU++KAn/fq1ytOpmtjYRN57byUjRqzm5Emn\nrairrqrPiy9ezrXXNvZ5XqrK4cOJGQkiPUls3HiEhISULKdp0qTKOUmidesalC1byuf4i4uoqCii\noqIy3r/88stFMhk0wUkG7d33bwBHVfUNq0Au3tITw/TpW5kxYzsNG1a2xFDCbNkSx6BB8/j55/0A\n3HxzM0aOvJqGDXN+TveBAwm8/fYKRo9em3EJ6zXXNObFFy+jW7eGfovP41H27InPSAzpSWLLlqNZ\nXl0VGiq0aFH9nPqI4l5pffBgAkuW7GPJkv0sWbKPtWsHFq1kICKTgUigJhADDANmAtOBhsBunEtL\nj2czvSWDYiJzYmjQoDJ33mmJoSTweJSxY9fx/POLiY9PplKl0rz+ejcee+zic1qS3b37BG+8sZwJ\nEzaQlOTsjG+6qSn/+MdlXHZZvUKLOSUljR07jp9Vktiw4Qg7dhzPaPzQW7lypWjdugZNmlShQYPK\nNGhQyX2tTMOGlalfv1KRKVGoKjt3nmDJkn389NM+lizZx44dmXehzxWtZFBQlgyKp7Q071NJlhhK\niv37T/K3vy3MuCP+8svrMXbsdbRtW4vt24/xn/8s49NPN5Ga6kEEbr+9JUOHRtCxY50gR/4/p0+n\nsGXL0XOSxJ49WVdaewsLK5+RIBo0qETDhlXOShr161eiQgX/X33l8SgbNhxxj/ydBHDw4KmzxqlY\nsTRXXFGPrl0b0LVrfXr0aGzJwBQtmRND+mWRwVSmTAhPPdWZxx/vaJfN5sOMGdv4618XcPDgKUqX\nDqFHj0bMn78bj0cJCRH+9KcLGTKkC23a1Ap2qD47cSKJLVuOsndvPPv2JbBv30m3S2Dv3ngOHDhF\naqon1/lUq1aW6tXLuZ0v/c77qlXLZpymSk5OY9WqmIyj/p9/3n/Ok/hq1ixP1671M3b+HTvWOWtb\nLpIVyAVhyaBkSUvzcOjQqdxHDLCYmESefTaK48eTGDXqWrp08V+zEOeL48fPMHjwEkaPdprYKFUq\nhAED2jJ4cBeaN68e5Oj8Ly3Nw+HDiV4J4uRZCSO9P3PT6nlRtWpZqlcvS0xMIqdPn91+VcOGlenW\nrUHGzr9165o5HlRZMjDGR6rK559v5rnnFnP77S147bWuVK1a9BvAK2p++WU/CxfuYcCAtjRqlHOl\ncknn8SjHjp3x6pKy6T/3sxMnzj7yb926xlk7/8aN89ZulCUDY/Lo2LEzDBmyhNmz/+CddyK56668\nXTppjD+kpXk4cSKJY8eSqFq1TIFvpLNkYEw+LV16gEcemUd4eEU+/PCaEnmqw5w/7HkGxuTT5ZfX\nY+XK/lx/fRMuu2wy//rXr0XmuQPGFAYrGRiTyZ498Tz55EI2bYrjo4+upWdP/7XNY0xhsNNExvjR\nN9/s4IknFtK1awPefrs7depUDHZIxvjEThMZ40e33NKcjRsHUrduRdq3/5jRo9dmefeqMSWBlQyM\n8cH69bE8+uiPeDzKqFHXFtrDX4zJDztNZEwAeTzKhAnrGTp0Cb16XUCtWuWDHRJ16lSgZcsatGpV\nnWbNqhWZ9nNMcFkyMKYQxMYmMmXKFp+aJwgkVeXAgQS2bTvGtm3H2L07nnr1KtGyZXWvzkkUDRtW\nCXozIKbwWDIw5jyWkpLGrl3xbNt2lG3bjrF167GM/qNHz9CsWbVzEkWzZtUoVy402KEXGWXKhFKm\nTGhQ2qxSVVJTPX6plypXrrQlA2PMuRISktmx43hGcnCSxVF27jxRoPZ0ShJVJSXFk9H0dpkyoZQt\nG0qZMiGULVvKfQ31Gn7ua2iokJLiITk5ze2y68/6s9BQ8ctzFZKTn7ZkYIwxBZWW5iSF5OS0bF49\nJCWlZnpNIy3Nk1G6KFMmxKs/8/uzPytdOoTSpUP89oAdO01kjDHG7jMwxhiTP5YMjDHGWDIwxhhj\nycAYYwyWDIwxxmDJwBhjDJYMjDHGYMnAGGMMlgyMMcZgycAYYwyWDIwxxmDJwBhjDEFMBiLSS0S2\niMg2EXkhWHEYY4wJUjIQkRBgBHA90Ba4R0RaByOW80lUVFSwQygx7Lv0L/s+gy9YJYMuwHZV3a2q\nKcAXwK1BiuW8YX84/7Hv0r/s+wy+YCWD+sBer/f73GHGGGOCwCqQjTHGBOdJZyJyGfCSqvZy3w8G\nVFXfyDSePebMGGPyoVg89lJEQoGtwNXAQWA5cI+qbi70YIwxxlAqGAtV1TQR+SswD+dU1XhLBMYY\nEzxBKRkYY4wpWopkBbLdkOZfIrJLRNaKyGoRWR7seIobERkvIjEiss5rWHURmSciW0VkrohUDWaM\nxUk23+cwEdknIqvcrlcwYywuRKSBiCwUkY0isl5EnnCH53n7LHLJwG5ICwgPEKmqHVW1S7CDKYYm\n4myP3gYD81W1FbAQGFLoURVfWX2fAO+qaie3+6GwgyqmUoGnVbUtcDnwuLu/zPP2WeSSAXZDWiAI\nRfO3LhZU9WfgWKbBtwKT3P5JQJ9CDaoYy+b7BGc7NXmgqodUdY3bnwBsBhqQj+2zKO4g7IY0/1Pg\nR+fw3lIAAAQsSURBVBFZISKDgh1MCVFbVWPA+UMCtYMcT0nwVxFZIyLj7LRb3olIE+Bi4DegTl63\nz6KYDIz/XamqnYAbcYqRVwU7oBLIrsQomA+Bpqp6MXAIeDfI8RQrIlIJ+BJ40i0hZN4ec90+i2Iy\n2A808nrfwB1m8klVD7qvscDXOKfiTMHEiEgdABEJBw4HOZ5iTVVj9X+XNo4FLg1mPMWJiJTCSQSf\nquosd3Cet8+imAxWAM1FpLGIlAHuBr4JckzFlohUcI8aEJGKwHXAhuBGVSwJZ5/T/gYY6PYPAGZl\nnsDk6Kzv091hpbsN20bzYgKwSVWHew3L8/ZZJO8zcC8rG87/bkh7PcghFVsicgFOaUBxbjL83L7P\nvBGRyUAkUBOIAYYBM4HpQENgN3Cnqh4PVozFSTbfZw+c890eYBfwSPo5b5M9EbkS+AlYj/MfV2Ao\nTqsO08jD9lkkk4ExxpjCVRRPExljjClklgyMMcZYMjDGGGPJwBhjDJYMjDHGYMnAGGMMlgyMCRgR\neVJEynm9/1ZEqgQzJmOyY/cZGFMAIiKazZ9IRKKBzqp6tJDDMibPrGRgShwRedF9ONJPIjJZRJ4W\nkaYi8r3bcutiEWnpjjtRRIaLyC8iskNEbvOaz7MistxtSXOYO6yxO+9JIrIeaCAiH7rjrfca729A\nPWCRiCxwh0WLSA23/2l3/HUi8qTXvDeJyBgR2SAiP4hI2UL98sz5S1Wts67EdMAlwCqgNFAJ2AY8\nDcwHmrnjdAEWuP0Tgalu/4U4z9IAuBYY7fYLMBu4CmiM80CRS72WWc19DQEWAe3c9zuB6l7j7QRq\nAJ2AtUA5oCJOOzwXufNOBtq7408F/hTs79S686Mr5d/UYkzQXQnMUufBSCki8g1QHrgCmC4i6Y2j\nlfaaZiaAqm4WkfR2368DrhWRVTjJoCLQAudZG7tVdYXX9He7z4koBYQDbXB28Jkbt0t3FfC1qp4B\nEJEZQFechBOtquvd8VYCTfL1LRiTR5YMTEmX/pS3Y+o80yErSZnGT3/9j6qOPWtmIo2BU17vmwDP\n4NQNxIvIRJwj/vzyjiWtgPMyxmdWZ2BKml+Am0WkrNt09004O+9oEbkjfSQR6ZDN9OnJYC7woNvs\nNyJST0TCMo0DUAVIAE667cff4PVZvPt55nkvAfqISDl3/n3dYZnnbUyhsZKBKVFU9Xf31NBanOaR\n1wEngHuBUSLyfzjb/RfuZ1k+EUpVf3QfLL7UPbN0ErgPp4nljGlUdZ2IrMF59uxe4GeveY0FfhCR\n/ap6tde8V4vIxzjP7lBgjKqudUsddnmfCQq7tNSUOCJSUVVPiUh5nLbeB6n70HBjTNasZGBKojEi\n0gYoC3xsicCY3FnJwBhjjFUgG2OMsWRgjDEGSwbGGGOwZGCMMQZLBsYYY7BkYIwxBvh/3PnEvzL4\nhW8AAAAASUVORK5CYII=\n", | |
| "text/plain": [ | |
| "<matplotlib.figure.Figure at 0x7efdd51fcf90>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "# Plot statistics about the optimization process\n", | |
| "plot(logs.select('gen'), logs.select('max'), lw=1, color='darkblue')\n", | |
| "plot(logs.select('gen'), logs.select('avg'), lw=2, color='darkblue')\n", | |
| "plot(logs.select('gen'), logs.select('min'), lw=1, color='darkblue')\n", | |
| "title('optimization (max, average, min) per generation'); xlabel('generation'); ylabel('fitness value')" | |
| ] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 2", | |
| "language": "python", | |
| "name": "python2" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 2 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython2", | |
| "version": "2.7.11" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 0 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment