{ "metadata": { "name": "", "signature": "sha256:b5c998aca1c214e1b55bc521b22a40579e8bfc85f66c8c201d8cb11db341a47b" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Particle Swarm Optimization Algorithm" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "by Stuart Reid (www.stuartreid.co.za)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Originally inspired by the behaviour of flocking birds, the particle swarm optimization algorithm solves optimization problems by moving a \"swarm\" of three or more particles (vectors) towards the best particle in the swarm. As such, the optimization algorithm can be classified as a direct-search, population-based, meta-heuristic, global optimization algorithm. This IPython notebook will introduce the algorithm using Numpy and mention a few of it's applications in quantitative finance." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import math\n", "import numpy\n", "import numpy.random as nrand\n", "import matplotlib.pylab as plt\n", "import matplotlib.gridspec as gridspec" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 535 }, { "cell_type": "markdown", "metadata": {}, "source": [ "This class contains the logic belonging to each particle. Particles are defined by three n-dimensional vectors, their current position in the search space, their best ever position in the search space, and their velocities. The velocity of a particle is an n-dimensional vector which describes in which direction it will travel. The velocity is calculated as the currency velocity plus a cognitive component and social component all multiplied by inertia. The cognitive component is the dot-product of a uniformly distributed n-dimensional random vector between zero and one and the difference " ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Particle:\n", " def __init__(self, n, r):\n", " self.n = n # Dimensions\n", " self.position = nrand.uniform(low=r[0], high=r[1], size=n)\n", " self.velocity = nrand.rand(n) / 100.0\n", " self.pbest = self.position\n", " \n", " def update_particle(self, gbest):\n", " self.update_velocity(gbest)\n", " self.update_position()\n", " \n", " def update_velocity(self, gbest):\n", " r1 = nrand.rand(self.n)\n", " r2 = nrand.rand(self.n)\n", " social = 1.496180 * r1 * gbest.position - self.position\n", " cognitive = 1.496180 * r2 * self.pbest - self.position\n", " self.velocity += social + cognitive\n", " self.velocity *= 0.729844\n", " \n", " def update_position(self):\n", " self.position += self.velocity" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 526 }, { "cell_type": "markdown", "metadata": {}, "source": [ "This class contains a simple minimization objective function which I have created. It is simply the sum of the sin graphs for each element in the vector minus the mean of the vector. The resulting fitness lanscape is non-convex and has infinitely many local optima." ] }, { "cell_type": "code", "collapsed": false, "input": [ "def problem_1d(x):\n", " if x > 8.0 or x < -8.0:\n", " return 5.0\n", " return math.sin(x) - (x / 2.0)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 527 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Example output for the objective function where each element in the vector is equal and increasing by 0.01" ] }, { "cell_type": "code", "collapsed": false, "input": [ "values = []\n", "solution = -9.0\n", "while solution < 9.0:\n", " values.append(problem_1d(solution))\n", " solution += 0.01\n", "x_axis = numpy.linspace(-9.0, 9.0, len(values))\n", "plt.plot(x_axis, values)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 528, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n0k07tAAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 528 }, { "cell_type": "markdown", "metadata": {}, "source": [ "This class contains the optimizer code" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Optimizer:\n", " def __init__(self, m, n, opt):\n", " self.opt = opt\n", " self.swarm = []\n", " for i in range(m):\n", " self.swarm.append(Particle(n, [-9.0, 9.0]))\n", " \n", " def get_best(self):\n", " gbest = None\n", " min_fit = float('+inf')\n", " for i in range(len(self.swarm)):\n", " f = problem(self.swarm[i].pbest) \n", " if f < min_fit:\n", " gbest = i\n", " min_fit = f\n", " return gbest\n", " \n", " def optimize(self, steps):\n", " positions = [self.swarm[i].position[0] for i in range(len(self.swarm))]\n", " fitnesses = [problem_1d(positions[i]) for i in range(len(positions))]\n", " for i in range(steps):\n", " positions, fitnesses = self.optimize_step()\n", " return positions, fitnesses\n", " \n", " def optimize_step(self):\n", " gbest = self.get_best()\n", " positions = []\n", " fitnesses = []\n", " for i in range(len(self.swarm)):\n", " if i != gbest:\n", " self.swarm[i].update_particle(self.swarm[gbest])\n", " pos_fit = problem(self.swarm[i].position)\n", " pbest_fit = problem(self.swarm[i].pbest)\n", " if pos_fit < pbest_fit:\n", " self.swarm[i].pbest = self.swarm[i].position\n", " positions.append(self.swarm[i].pbest)\n", " fitnesses.append(pos_fit)\n", " gbest_fit = problem(self.swarm[gbest].position)\n", " positions.append(self.swarm[gbest].position)\n", " fitnesses.append(gbest_fit)\n", " return positions, fitnesses" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 529 }, { "cell_type": "code", "collapsed": false, "input": [ "optimizer = Optimizer(10, 1, problem_1d)\n", "pos, fit = optimizer.optimize(0)\n", "plt.plot(x_axis, values)\n", "plt.plot(pos, fit, 'go')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 537, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 537 }, { "cell_type": "code", "collapsed": false, "input": [ "pos, fit = optimizer.optimize(5)\n", "plt.plot(x_axis, values)\n", "plt.plot(pos, fit, 'go')\n", "plt.plot(pos[len(pos) - 1], fit[len(fit) - 1], 'ko')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 539, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 539 }, { "cell_type": "code", "collapsed": false, "input": [ "pos, fit = optimizer.optimize(5)\n", "plt.plot(x_axis, values)\n", "plt.plot(pos, fit, 'go')\n", "plt.plot(pos[len(pos) - 1], fit[len(fit) - 1], 'ko')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 540, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 540 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }