From 00b298ca9b5c31ff23fd7c83e20ad5b4ffba69f8 Mon Sep 17 00:00:00 2001 From: Remi Ehounou Date: Sat, 27 Mar 2021 22:21:39 +0000 Subject: [PATCH] Add new file --- Sample codes/sim_annealing.ipynb | 1904 ++++++++++++++++++++++++++++++ 1 file changed, 1904 insertions(+) create mode 100644 Sample codes/sim_annealing.ipynb diff --git a/Sample codes/sim_annealing.ipynb b/Sample codes/sim_annealing.ipynb new file mode 100644 index 0000000..40463ce --- /dev/null +++ b/Sample codes/sim_annealing.ipynb @@ -0,0 +1,1904 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + " \n", + " " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import math as m\n", + "import numpy as np\n", + "from numpy import random as r\n", + "import time\n", + "import matplotlib.pyplot as plt\n", + "from mpl_toolkits import mplot3d\n", + "import copy as cp\n", + "import plotly\n", + "import plotly.graph_objs as go\n", + "\n", + "# Configure Plotly to be rendered inline in the notebook.\n", + "plotly.offline.init_notebook_mode()\n", + "\n", + "%matplotlib inline\n", + "r.seed(int(time.time()))\n", + "route = list()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "class settings:\n", + " iter_max = 10000\n", + " pop_size = 100\n", + " dimensions = 2\n", + " c1 = 2\n", + " c2 = 2\n", + " neededQuality = 1000000\n", + " objective = 0\n", + " sigma = 0.001" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "def func(Sc):\n", + " x1 = Sc[0]\n", + " x2 = Sc[1]\n", + " return m.sqrt(x1**2+x2**2)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "def Quality(Sc,objective):\n", + " func_output = func(Sc)\n", + " if type(func_output) == list:\n", + " error = [func_output[i]-objective[i] for i in range(len(func_output))]\n", + " else:\n", + " error = func_output - objective\n", + " return 1/abs(error)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "def tweak(St,twprob,sigma,high,low):\n", + " for i in range(len(St)):\n", + " if twprob > r.random():\n", + " while True:\n", + " n = r.normal(loc=0, scale=sigma)\n", + " if (high > St[i]+n) and (low < St[i]+n):\n", + " St[i]+=n\n", + " break\n", + " return np.array(St)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "def move(p,world,best):\n", + " v = p.v + world.c1 * r.random() * (p.best - p.params) \\\n", + " + world.c2 * r.random() * (best.params - p.params)\n", + " \n", + " return v" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "def simulatedAnnealing(high,low,t,twprob,world):\n", + " route = list()\n", + " #initialize the particles\n", + " particles = []\n", + " for i in range(world.pop_size):\n", + " p = Particle()\n", + " p.params = np.array([r.uniform(-100,100) for i in range(world.dimensions)])\n", + " p.fitness = 0.0\n", + " p.v = 0.0\n", + " particles.append(p)\n", + " \n", + " Best = cp.deepcopy(particles[0])\n", + " Q = 0\n", + " route.append(cp.deepcopy(Best.params[:]))\n", + " for i in range(world.iter_max):\n", + " for p in particles:\n", + " Q = Quality(p.params,world.objective)\n", + " try:\n", + " prob = m.e**((Q-p.fitness)/t)\n", + " except:\n", + " pass\n", + " \n", + " if (Q > p.fitness) or (r.random() < prob):\n", + " p.fitness = Q\n", + " p.best = p.params\n", + " \n", + " if t > 0.01:\n", + " t-= t/10\n", + " \n", + " if Q > Best.fitness:\n", + " Best = cp.deepcopy(p)\n", + " route.append(Best.params[:])\n", + " print('////////////\\n////////////\\n******new Best: {}'.format(Best.params))\n", + " \n", + " v = move(p,world,Best)\n", + " p.params += v\n", + " p.params = tweak(cp.deepcopy(p.params),twprob,world.sigma,high,low)\n", + " \n", + " if Q > world.neededQuality:\n", + " break\n", + " \n", + " return Best, route" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "class Particle:\n", + " pass" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "#initialize the particles\n", + "world = settings()\n", + "particles = []\n", + "for i in range(world.pop_size):\n", + " p = Particle()\n", + " p.params = np.array([r.random() for i in range(world.dimensions)])\n", + " p.fitness = 0.0\n", + " p.v = 0.0\n", + " particles.append(p)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "////////////\n", + "////////////\n", + "******new Best: [ 8.80091737 54.31489738]\n", + "////////////\n", + "////////////\n", + "******new Best: [ 0.90003976 32.42886985]\n", + "////////////\n", + "////////////\n", + "******new Best: [-14.25252957 -12.22367071]\n", + "////////////\n", + "////////////\n", + "******new Best: [-0.21023678 1.75864441]\n", + "////////////\n", + "////////////\n", + "******new Best: [-0.21023678 1.7585004 ]\n", + "////////////\n", + "////////////\n", + "******new Best: [-0.321148 -1.30557749]\n", + "////////////\n", + "////////////\n", + "******new Best: [-1.16680824 -0.52723487]\n", + "////////////\n", + "////////////\n", + "******new Best: [-0.01933279 0.38534687]\n", + "////////////\n", + "////////////\n", + "******new Best: [0.06641201 0.0600155 ]\n", + "////////////\n", + "////////////\n", + "******new Best: [0.05225936 0.06420853]\n", + "////////////\n", + "////////////\n", + "******new Best: [-0.0381331 0.00451434]\n", + "////////////\n", + "////////////\n", + "******new Best: [-0.03334581 0.00023158]\n", + "////////////\n", + "////////////\n", + "******new Best: [-0.01656216 -0.01598667]\n", + "////////////\n", + "////////////\n", + "******new Best: [-0.01018823 -0.00708454]\n", + "////////////\n", + "////////////\n", + "******new Best: [ 0.00693716 -0.00165677]\n", + "////////////\n", + "////////////\n", + "******new Best: [ 0.00269686 -0.00636808]\n", + "////////////\n", + "////////////\n", + "******new Best: [ 0.0025804 -0.00331996]\n", + "////////////\n", + "////////////\n", + "******new Best: [ 0.0031575 -0.00258449]\n", + "////////////\n", + "////////////\n", + "******new Best: [ 0.00207138 -0.00215465]\n", + "////////////\n", + "////////////\n", + "******new Best: [ 0.00161053 -0.00233385]\n", + "////////////\n", + "////////////\n", + "******new Best: [ 0.00019309 -0.0011909 ]\n", + "////////////\n", + "////////////\n", + "******new Best: [0.00023637 0.00020185]\n", + "////////////\n", + "////////////\n", + "******new Best: [ 0.0002592 -0.0001078]\n", + "////////////\n", + "////////////\n", + "******new Best: [-0.000109 -0.00023383]\n", + "////////////\n", + "////////////\n", + "******new Best: [2.14326952e-04 4.09178763e-05]\n", + "////////////\n", + "////////////\n", + "******new Best: [ 1.96352778e-04 -7.67010934e-05]\n", + "////////////\n", + "////////////\n", + "******new Best: [0.00010629 0.00017847]\n", + "////////////\n", + "////////////\n", + "******new Best: [ 1.29681180e-04 -8.66467184e-06]\n", + "////////////\n", + "////////////\n", + "******new Best: [-1.35549682e-05 -2.06371552e-05]\n", + "////////////\n", + "////////////\n", + "******new Best: [-6.72719898e-06 -1.45844374e-05]\n", + "////////////\n", + "////////////\n", + "******new Best: [-9.29702968e-06 5.47138433e-07]\n", + "////////////\n", + "////////////\n", + "******new Best: [-8.94573240e-06 -1.52135637e-06]\n", + "////////////\n", + "////////////\n", + "******new Best: [-2.92114219e-07 6.44970596e-06]\n", + "////////////\n", + "////////////\n", + "******new Best: [-4.80211347e-06 2.14761437e-06]\n", + "////////////\n", + "////////////\n", + "******new Best: [-4.75484093e-06 4.49045730e-07]\n", + "////////////\n", + "////////////\n", + "******new Best: [-2.96136818e-06 -4.56184922e-07]\n", + "////////////\n", + "////////////\n", + "******new Best: [-2.05783627e-06 -6.00801209e-07]\n", + "////////////\n", + "////////////\n", + "******new Best: [ 1.88129246e-06 -4.87863133e-07]\n", + "////////////\n", + "////////////\n", + "******new Best: [1.86577718e-06 6.63715928e-08]\n", + "////////////\n", + "////////////\n", + "******new Best: [-8.92296012e-07 6.52741211e-07]\n", + "////////////\n", + "////////////\n", + "******new Best: [-5.44326882e-07 8.18734726e-07]\n", + "////////////\n", + "////////////\n", + "******new Best: [5.33408916e-07 2.63689230e-08]\n", + "////////////\n", + "////////////\n", + "******new Best: [4.09105502e-07 3.35688869e-08]\n", + "////////////\n", + "////////////\n", + "******new Best: [ 1.69180715e-08 -2.43391724e-08]\n", + "////////////\n", + "////////////\n", + "******new Best: [ 1.03079214e-08 -2.54900928e-08]\n", + "////////////\n", + "////////////\n", + "******new Best: [-5.02785069e-09 1.69569567e-08]\n", + "////////////\n", + "////////////\n", + "******new Best: [-1.19640956e-08 7.66106298e-09]\n", + "////////////\n", + "////////////\n", + "******new Best: [-9.48263415e-09 7.86956390e-09]\n", + "////////////\n", + "////////////\n", + "******new Best: [-9.48713327e-09 7.53082012e-09]\n", + "////////////\n", + "////////////\n", + "******new Best: [-2.18178192e-09 3.80470277e-09]\n" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mworld\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msettings\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpath\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msimulatedAnnealing\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhigh\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m100\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mlow\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m-\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mt\u001b[0m \u001b[0;34m=\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtwprob\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m0.2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mworld\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mworld\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m\u001b[0m in \u001b[0;36msimulatedAnnealing\u001b[0;34m(high, low, t, twprob, world)\u001b[0m\n\u001b[1;32m 35\u001b[0m \u001b[0mv\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmove\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mp\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mworld\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mBest\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 36\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mparams\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0mv\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 37\u001b[0;31m \u001b[0mp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mparams\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtweak\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdeepcopy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mparams\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mtwprob\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mworld\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msigma\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mhigh\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mlow\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 38\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 39\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mQ\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0mworld\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mneededQuality\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m\u001b[0m in \u001b[0;36mtweak\u001b[0;34m(St, twprob, sigma, high, low)\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mtwprob\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0mr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0mn\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnormal\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mloc\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mscale\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msigma\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 6\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mhigh\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0mSt\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mlow\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0mSt\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0mSt\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m+=\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "world = settings()\n", + "a, path = simulatedAnnealing(high = 100,low = -100,t =100, twprob = 0.2, world = world)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([-8.76862994e-07, -1.26566209e-06])" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a.params" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "h1 = [i[0] for i in path]\n", + "h2 = [i[1] for i in path]\n", + "plt.plot(h1,h2)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "linkText": "Export to plot.ly", + "plotlyServerURL": "https://plot.ly", + "showLink": false + }, + "data": [ + { + "marker": { + "opacity": 0.8, + "size": 5 + }, + "mode": "markers", + "type": "scatter3d", + "x": [ + -73.05789347897482, + -73.05789347897482, + -22.48842807612266, + -6.579374313223724, + 9.541420360553431, + -8.144506902989335, + 2.1917143050206764, + -6.742406049553953, + 2.020036025458844, + -2.9266375397562765, + -1.282284602629149, + 0.26799279122852104, + 1.1609978426983574, + -0.7206090649448891, + 0.21436634629481643, + -0.26040486540838614, + 0.13591151391989645, + -0.20070657792805985, + -0.10169767449575076, + 0.07126306792844894, + -0.07819444411594278, + 0.03722556643393177, + -0.008369054927866826, + 0.01223052539777817, + -0.006710233294789866, + 0.004332694563603079, + 0.00047145201245381643, + 0.00014648072172059566, + 0.00017087601814925487, + 0.00010282941469771662, + 4.35849419107459e-05, + -1.9758608321231044e-05, + -1.6198288179831923e-05, + -1.0657427282820999e-05, + -1.3464328400331046e-05, + -8.76862993834573e-07 + ], + "y": [ + 88.91383399322882, + 88.91383399322882, + 11.520444362050512, + 10.923397644054916, + 4.310070877652024, + 6.40425472746942, + 9.925596781418992, + 5.39978501110356, + -7.472271056763841, + 3.6831744785526785, + 4.39356407739675, + -1.519268168058474, + -0.5709694095623021, + -0.4465226641067118, + 0.5519281318252123, + -0.39350658874629985, + -0.31134152487747935, + -0.25865467979118517, + 0.13074827927489596, + -0.09991216025547403, + -0.09004197097697852, + 0.01140570986407019, + 0.013100730646248282, + -0.008842339836786131, + 0.00787776467527744, + 0.007994862285628956, + -0.0005751844738485293, + 0.00029407679246401877, + -9.315356909180006e-05, + 8.221887914846725e-05, + -0.0001026038937697617, + -3.238480739120846e-08, + -9.636335547154665e-06, + -1.3000496349495512e-05, + -4.394055220245483e-06, + -1.2656620906564725e-06 + ], + "z": [ + 115.07878029837075, + 115.07878029837075, + 25.267568850881624, + 12.751814868623706, + 10.469737984647354, + 10.360862478923043, + 10.16469788346645, + 8.638154751056526, + 7.740502586389476, + 4.704357716901688, + 4.57686127213082, + 1.5427235340871046, + 1.2938013979765843, + 0.8477381164261182, + 0.5920959323655737, + 0.47186664357115693, + 0.33971382769771424, + 0.32739177418113746, + 0.16564277687599258, + 0.12272271435023857, + 0.11925572366985303, + 0.03893370023296547, + 0.015545746165790849, + 0.015092141176616123, + 0.01034825623714235, + 0.009093407785184164, + 0.0007437097410974007, + 0.0003285388283014843, + 0.0001946180901485914, + 0.00013165801386738764, + 0.00011147737966995653, + 1.975863486093031e-05, + 1.8847904465330865e-05, + 1.6810522348275304e-05, + 1.4163186807725433e-05, + 1.5397367429796054e-06 + ] + } + ], + "layout": { + "margin": { + "b": 0, + "l": 0, + "r": 0, + "t": 0 + }, + "template": { + "data": { + "bar": [ + { + "error_x": { + "color": "#2a3f5f" + }, + "error_y": { + "color": "#2a3f5f" + }, + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + } + }, + "type": "bar" + } + ], + "barpolar": [ + { + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + } + }, + "type": "barpolar" + } + ], + "carpet": [ + { + "aaxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "baxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "type": "carpet" + } + ], + "choropleth": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "choropleth" + } + ], + "contour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "contour" + } + ], + "contourcarpet": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "contourcarpet" + } + ], + "heatmap": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmap" + } + ], + "heatmapgl": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmapgl" + } + ], + "histogram": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "histogram" + } + ], + "histogram2d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2d" + } + ], + "histogram2dcontour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2dcontour" + } + ], + "mesh3d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "mesh3d" + } + ], + "parcoords": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "parcoords" + } + ], + "pie": [ + { + "automargin": true, + "type": "pie" + } + ], + "scatter": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatter" + } + ], + "scatter3d": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatter3d" + } + ], + "scattercarpet": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattercarpet" + } + ], + "scattergeo": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergeo" + } + ], + "scattergl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergl" + } + ], + "scattermapbox": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermapbox" + } + ], + "scatterpolar": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolar" + } + ], + "scatterpolargl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolargl" + } + ], + "scatterternary": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterternary" + } + ], + "surface": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "surface" + } + ], + "table": [ + { + "cells": { + "fill": { + "color": "#EBF0F8" + }, + "line": { + "color": "white" + } + }, + "header": { + "fill": { + "color": "#C8D4E3" + }, + "line": { + "color": "white" + } + }, + "type": "table" + } + ] + }, + "layout": { + "annotationdefaults": { + "arrowcolor": "#2a3f5f", + "arrowhead": 0, + "arrowwidth": 1 + }, + "coloraxis": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "colorscale": { + "diverging": [ + [ + 0, + "#8e0152" + ], + [ + 0.1, + "#c51b7d" + ], + [ + 0.2, + "#de77ae" + ], + [ + 0.3, + "#f1b6da" + ], + [ + 0.4, + "#fde0ef" + ], + [ + 0.5, + "#f7f7f7" + ], + [ + 0.6, + "#e6f5d0" + ], + [ + 0.7, + "#b8e186" + ], + [ + 0.8, + "#7fbc41" + ], + [ + 0.9, + "#4d9221" + ], + [ + 1, + "#276419" + ] + ], + "sequential": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "sequentialminus": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ] + }, + "colorway": [ + "#636efa", + "#EF553B", + "#00cc96", + "#ab63fa", + "#FFA15A", + "#19d3f3", + "#FF6692", + "#B6E880", + "#FF97FF", + "#FECB52" + ], + "font": { + "color": "#2a3f5f" + }, + "geo": { + "bgcolor": "white", + "lakecolor": "white", + "landcolor": "#E5ECF6", + "showlakes": true, + "showland": true, + "subunitcolor": "white" + }, + "hoverlabel": { + "align": "left" + }, + "hovermode": "closest", + "mapbox": { + "style": "light" + }, + "paper_bgcolor": "white", + "plot_bgcolor": "#E5ECF6", + "polar": { + "angularaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "radialaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "scene": { + "xaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "yaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "zaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + } + }, + "shapedefaults": { + "line": { + "color": "#2a3f5f" + } + }, + "ternary": { + "aaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "baxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "caxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "title": { + "x": 0.05 + }, + "xaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + }, + "yaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + } + } + } + } + }, + "text/html": [ + "
\n", + " \n", + " \n", + "
\n", + " \n", + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "h3 = [func(s) for s in path]\n", + "trace = go.Scatter3d(\n", + " x=h1, # <-- Put your data instead\n", + " y=h2, # <-- Put your data instead\n", + " z=h3, # <-- Put your data instead\n", + " mode='markers',\n", + " marker={\n", + " 'size': 5,\n", + " 'opacity': 0.8,\n", + " }\n", + ")\n", + "\n", + "#Configure the layout.\n", + "layout = go.Layout(\n", + " margin={'l': 0, 'r': 0, 'b': 0, 't': 0}\n", + ")\n", + "\n", + "data = [trace]\n", + "\n", + "plot_figure = go.Figure(data=data, layout=layout)\n", + "\n", + "# Render the plot.\n", + "plotly.offline.iplot(plot_figure)\n", + "\n", + "#fig = plt.figure()\n", + "#ax = plt.axes(projection='3d')\n", + "#ax.scatter3D(h1, h2, h3, c=h3, cmap='Greens');\n", + "#plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.8.2" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +}