Skip to content

Instantly share code, notes, and snippets.

@gsoleilhac
Last active April 21, 2018 14:19
Show Gist options
  • Save gsoleilhac/d07a574c43b16335917bb1a80a3f7c70 to your computer and use it in GitHub Desktop.
Save gsoleilhac/d07a574c43b16335917bb1a80a3f7c70 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"PSO"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"module PSO\n",
" export pso\n",
"\n",
" function pso(f, lb::Number, ub::Number ; args...)\n",
" res, val = pso(x->f(x[1]), [ub], [lb] ; args...)\n",
" res[1], val\n",
" end\n",
"\n",
" function pso(f, lb::AbstractVector, ub::AbstractVector ; nbparticles = 100, nbiter = 500 , ω = 0.75, Φp=2., Φg=2.)\n",
" dim = length(lb)\n",
"\n",
" x_i = [lb[i] + rand()*(ub[i] - lb[i]) for _ = 1:nbparticles, i = 1:dim] #Particle position\n",
" p_i = copy(x_i) #Particle best known position\n",
" f_i = [f(view(x_i, i, :)) for i = 1:nbparticles] #particle best known value\n",
" v_i = [ub[i]-lb[i] + rand()*2*(ub[i]-lb[i]) for _ = 1:nbparticles, i = 1:dim] #Particle velocity\n",
"\n",
" g = x_i[indmin(f_i), :] #best known solution\n",
" f_g = minimum(f_i) #best known value\n",
"\n",
" for iter = 1:nbiter\n",
" for i = 1:nbparticles\n",
" for d = 1:dim\n",
" rp, rg = rand(), rand()\n",
" v_i[i,d] = ω*v_i[i,d] + Φp*rp*(p_i[i,d]-x_i[i,d]) + Φp*rg*(g[d]-x_i[i,d]) #update velocity\n",
" x_i[i,d] += v_i[i, d] #update position\n",
" \n",
" #make sure particle position stays in-bounds\n",
" x_i[i,d] = max(x_i[i,d], lb[d])\n",
" x_i[i,d] = min(x_i[i,d], ub[d])\n",
" end\n",
" \n",
" #evaluate particle position\n",
" z = f(view(x_i, i, :))\n",
" if z < f_i[i]\n",
" p_i[i,:] .= view(x_i, i, :) #update particle best-known position\n",
" f_i[i] = z \n",
" if z < f_g\n",
" g .= x_i[i,:] #update global best-known position\n",
" f_g = z\n",
" end\n",
" end\n",
" end\n",
" end\n",
" g, f_g\n",
" end\n",
"\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"using PSO\n",
"\n",
"struct Bezier{T}\n",
"\tSP::Tuple{T,T}\n",
"\tSCP::Tuple{T,T}\n",
"\tECP::Tuple{T,T}\n",
"\tEP::Tuple{T,T}\n",
"end\n",
"\n",
"(b::Bezier)(t) = @. b.SP*(1-t)^3 + 3*b.SCP*t*(1-t)^2 + 3*b.ECP*t^2*(1-t) + b.EP*t^3\n",
"distance(a,b) = sqrt(sum((a.-b).^2));"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"sol = (5.4031475148403985, 5.67893656022448)\n",
"dist = 0.7896092524353034\n"
]
}
],
"source": [
"b = Bezier((2.,6.), (6.,7.), (8.,4.), (4.,1.));\n",
"target = (5,5);\n",
"\n",
"res, dist = pso(x->distance(b(x), target), 0, 1, nbiter = 500);\n",
"sol = b(res)\n",
"@show sol\n",
"@show dist;"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"scrolled": false
},
"outputs": [],
"source": [
"using PyPlot\n",
"function plot_bezier(b, target, sol)\n",
" d = b.(linspace(0, 1, 100))\n",
" plot(first.((b.SP, b.SCP, b.ECP, b.EP)), last.((b.SP, b.SCP, b.ECP, b.EP)), \"k-\")\n",
" plot(map(x->x[1], d), map(x->x[2], d), \"b-\")\n",
" plot([sol[1], target[1]], [sol[2], target[2]], \"k--\")\n",
" plot([target[1]], [target[2]], \"ko\", markersize=3, label=\"target\")\n",
" plot([sol[1]], [sol[2]], \"gx\", label=\"solution\")\n",
" legend()\n",
"end;"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"PyPlot.Figure(PyObject <matplotlib.figure.Figure object at 0x7effa3527990>)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"PyObject <matplotlib.legend.Legend object at 0x7effa0fb95d0>"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"plot_bezier(b, target, sol)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"sol = (5.874381802914346, 4.5185373697256095)\n",
"dist = 3.2956460978821824\n"
]
}
],
"source": [
"b = Bezier((0, 0), (6, 12), (10, 0), (0, 6));\n",
"target = (8, 2);\n",
"res, dist = pso(x->distance(b(x), target), 0, 1, nbiter = 50);\n",
"sol = b(res)\n",
"@show sol\n",
"@show dist;"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"PyPlot.Figure(PyObject <matplotlib.figure.Figure object at 0x7effa0f97050>)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"PyObject <matplotlib.legend.Legend object at 0x7effa0f0c350>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"plot_bezier(b, target, sol)"
]
}
],
"metadata": {
"gist": {
"data": {
"description": "Bezier Curve Closest Point PSO.ipynb",
"public": true
},
"id": ""
},
"kernelspec": {
"display_name": "Julia 0.6.2",
"language": "julia",
"name": "julia-0.6"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "0.6.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment