{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Artificial Neural Network Test"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"-----\n",
"### TOC\n",
"\n",
"\n",
"* [Docs](#docs)\n",
"* [Predefined Functions and Tests](#general)\n",
"* [Minimization](#minimization)\n",
" 1. [without Jacobian](#withoutJac)\n",
" 2. [Analytical Jacobian](#usingJac)\n",
"* [Summary](#summary)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"-----\n",
"### Docs - Example"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The problem to solve is the differential equation $$\\frac{d}{dt}y(t)= - y(t).$$ Using the network, this is $$y_i= 1+t_i v_k f(t_i w_k+u_k).$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The procedures are\n",
"\n",
"**Deal with the function first.**\n",
" \n",
"1. The cost is $$I=\\sum_i\\left( \\frac{dy_i}{dt}+y_i \\right)^2.$$ Our purpose is to minimize this cost.\n",
" \n",
"2. To calculate the differential of y, we can write down the explicit expression for it. $$\\frac{dy}{dt} = v_k f(t w_k+u_k) + t v_k f(tw_k+u_k) (1-f(tw_k+u_k))w_k,$$ where the function f is defined as a trigf().\n",
"\n",
"3. So the cost becomse $$I = \\sum_i \\left( v_k f(t w_k+u_k) + t v_k f(tw_k+u_k) (1-f(tw_k+u_k)) w_k + y \\right)^2.$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"-----\n",
"### General Functions"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Import Modules used in this notebook"
]
},
{
"cell_type": "code",
"execution_count": 88,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The snakeviz extension is already loaded. To reload it, use:\n",
" %reload_ext snakeviz\n"
]
}
],
"source": [
"# This line configures matplotlib to show figures embedded in the notebook, \n",
"# instead of opening a new window for each figure. More about that later. \n",
"# If you are using an old version of IPython, try using '%pylab inline' instead.\n",
"%matplotlib inline\n",
"%load_ext snakeviz\n",
"\n",
"import numpy as np\n",
"from scipy.optimize import minimize\n",
"from scipy.special import expit\n",
"import matplotlib.pyplot as plt\n",
"\n",
"from matplotlib.lines import Line2D\n",
"\n",
"import timeit\n",
"\n",
"import pandas as pd\n",
"\n",
"import plotly.plotly as py\n",
"from plotly.graph_objs import *\n",
"import plotly.tools as tls"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Define the general part of cost function"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For an first order ODE, $$ L \\equiv \\frac{d}{dt}y + f(t) =0 ,$$ in which $y(t)$ is the function to be solved.\n",
"The cost is defined as $$I = \\sum_{i} I_i^2 = I_i * I_i,$$ where \n",
"$$ I_{i} = \\left( \\frac{d}{dt}y + f(t) \\right) $$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Using the following function"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def trigf(x):\n",
" #return 1/(1+np.exp(-x)) # It's not bad to define this function here for people could use other functions other than expit(x).\n",
" return expit(x)"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"## Very important notes\n",
"## fOft(x,ti) should be specified, here ti is a scalar value not a list. and it should return a value.\n",
"## Here I use t as the variables list and ti as the variable.\n",
"\n",
"\n",
"\n",
"def costODE(x,t,initialCondition,fOfArg): # x is a list of the order v,w,u. x will be splited to three equal parts.\n",
" # initialCondition can only be constants.\n",
"\n",
" t = np.array(t)\n",
" \n",
" costODETotal = np.sum( costODETList(x,t,initialCondition,fOfArg) )\n",
" \n",
" return costODETotal\n",
" \n",
"\n",
"def costODETList(x,t,initialCondition,fOfArg): ## This is the function WITHOUT the square!!! \n",
" \n",
" v,w,u = np.split(x,3)[:3]\n",
" \n",
" t = np.array(t)\n",
" \n",
" costList = np.asarray([])\n",
" \n",
" for temp in t:\n",
" tempElement = costODETi(x,temp,initialCondition,fOfArg)\n",
" costList = np.append(costList, tempElement)\n",
" \n",
" return np.array(costList)\n",
"\n",
" \n",
"\n",
"def costODETi(x,ti,initialCondition,fOfArg): # function for each t. here t is a single value \n",
" # fOfArg is the function f(t) in the example\n",
"\n",
" v,w,u = np.split(x,3)[:3]\n",
" \n",
" args = np.array([x,ti,initialCondition])\n",
" \n",
" fvec = np.array(trigf(ti*w + u) ) # This is a vector!!!\n",
" ft = fOfArg(args) ## fOft should be specified in a problem!!!!!!!!!!!! And it takes a whole array of all the arguments\n",
" # For a given t, this calculates the value of y(t), given the parameters, v, w, u. Notice this initialCondition.\n",
" \n",
" return ( np.sum (v*fvec + ti * v* fvec * ( 1 - fvec ) * w ) + ft ) ** 2\n",
" \n",
"\n",
" \n",
"## The funNNi(x,ti,initialCondition) takes a time ti and exports the function value with input x.\n",
"\n",
" \n",
"def funNNi(x,ti,initialCondition): # for a single time stamp t\n",
" \n",
" v,w,u = np.split(x,3)[:3]\n",
" \n",
" return initialCondition + np.sum(ti * v * trigf( ti*w +u ) )\n",
"\n",
"## funNNList(x,t,initialCondition) takes a list of time and exports the function values of these times.\n",
"\n",
"def funNNList(x,t,initialCondition):\n",
" \n",
" t = np.array(t)\n",
" \n",
" tempList = np.asarray([])\n",
" \n",
" for ti in t:\n",
" tempElement = funNNi(x,ti,initialCondition)\n",
" tempList = np.append(tempList,tempElement)\n",
" \n",
" return np.array(tempList)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"An example of the fOfArgs(args) which corresponds to the equation $$\\frac{d}{dt}y + y(t)=0 .$$"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def yOft(args):\n",
" \n",
" return funNNi(args[0],args[1],args[2]) # As in our definition, args[0] is x, args[1] is ti, args[2] is initialCondition\n"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"455.812570558\n",
"43.5568746139\n"
]
}
],
"source": [
"### This is a test based on the comparison between this notebook and the other one called Basics.ipynb.\n",
"\n",
"testx = np.ones(30)\n",
"testt = np.linspace(0,1,2)\n",
"\n",
"print costODE(testx,testt,1,yOft) ## This is not right, should be 455.812570558\n",
"print costODETi(np.ones(9),1,1,yOft) ## This should be 43.556874613889988"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"-----\n",
"### Minimizatioin | [toc](#toc)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The example $$\\frac{d}{dt}y +y=0$$"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def funY(t):\n",
"\n",
" return np.exp(-t)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"-----\n",
"#### Without Jac"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"tlin = np.linspace(0,5,11)\n",
"initGuess = np.zeros(30)\n",
"# initGuess = np.random.rand(1,30)+2\n",
"\n",
"costODEF = lambda x: costODE(x,tlin,1,yOft)"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2.75075912476\n",
" status: 2\n",
" success: False\n",
" njev: 15\n",
" nfev: 492\n",
" fun: 0.1920503865598962\n",
" x: array([-0.14291016, -0.14291016, -0.14291016, -0.14291016, -0.14291016,\n",
" -0.14291016, -0.14291016, -0.14291016, -0.14291016, -0.14291016,\n",
" -0.3767748 , -0.3767748 , -0.3767748 , -0.3767748 , -0.3767748 ,\n",
" -0.3767748 , -0.3767748 , -0.3767748 , -0.3767748 , -0.3767748 ,\n",
" -0.00415728, -0.00415728, -0.00415728, -0.00415728, -0.00415728,\n",
" -0.00415728, -0.00415728, -0.00415728, -0.00415728, -0.00415728])\n",
" message: 'Desired error not necessarily achieved due to precision loss.'\n",
" jac: array([-0.03935309, -0.03935309, -0.03935309, -0.03935309, -0.03935309,\n",
" -0.03935308, -0.03935308, -0.03935309, -0.03935309, -0.03935309,\n",
" -0.013696 , -0.013696 , -0.01369601, -0.013696 , -0.01369601,\n",
" -0.013696 , -0.013696 , -0.013696 , -0.013696 , -0.013696 ,\n",
" 0.01049041, 0.01049041, 0.01049041, 0.01049041, 0.01049041,\n",
" 0.01049041, 0.01049041, 0.01049041, 0.01049041, 0.01049041])\n"
]
}
],
"source": [
"# %%snakeviz\n",
"startCG = timeit.default_timer()\n",
"costODEFResultCG = minimize(costODEF,initGuess,method=\"CG\")\n",
"stopCG = timeit.default_timer()\n",
"\n",
"print stopCG - startCG\n",
"\n",
"print costODEFResultCG"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"4.81118392944\n",
" status: 0\n",
" success: True\n",
" njev: 51\n",
" nfev: 1649\n",
" fun: 2.5774431624374406e-05\n",
" x: array([-0.48540402, -0.48455081, -0.48705338, -0.26501179, -0.35788204,\n",
" -0.34565228, -0.21748088, -0.18660911, -0.6594982 , -0.27068346,\n",
" -1.2048972 , -1.19990967, -1.21438905, -0.48933447, -0.31391794,\n",
" -0.31977515, -0.38418466, -0.40543151, -0.52481992, 0.01588255,\n",
" -1.25067626, -1.24966621, -1.25259283, -0.92609278, -0.89419533,\n",
" -0.89597664, -0.91608505, -0.92190289, -0.88950163, -0.7106579 ])\n",
" message: 'Optimization terminated successfully.'\n",
" jac: array([ 3.94333608e-05, 4.04668297e-05, 3.75074985e-05,\n",
" 2.27300134e-04, 1.83917041e-05, 3.09371953e-05,\n",
" 1.37970724e-04, 1.62817417e-04, 2.48804897e-04,\n",
" -2.32962982e-03, -1.01557895e-04, -1.02731517e-04,\n",
" -9.93060075e-05, 1.37743003e-04, 8.00560364e-04,\n",
" 7.43729275e-04, 2.97237345e-04, 2.16706698e-04,\n",
" 2.19471341e-04, 3.18754385e-03, -1.07516480e-05,\n",
" -1.14018064e-05, -9.52650726e-06, -4.68119949e-05,\n",
" 1.95385976e-05, 1.45992992e-05, -1.52366731e-05,\n",
" -1.84541357e-05, -1.30783258e-04, 4.02199468e-04,\n",
" 0.00000000e+00])\n",
" nit: 51\n"
]
}
],
"source": [
"# %%snakeviz\n",
"startSLSQP = timeit.default_timer()\n",
"costODEFResultSLSQP = minimize(costODEF,initGuess,method=\"SLSQP\")\n",
"stopSLSQP = timeit.default_timer()\n",
"\n",
"print stopSLSQP - startSLSQP\n",
"\n",
"print costODEFResultSLSQP"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"10.4770479202\n",
" status: 0\n",
" success: True\n",
" nfev: 119\n",
" fun: 1.6905137501642895e-07\n",
" x: array([-2.0603106 , -2.0603106 , -2.06419974, -2.11583824, -2.0634141 ,\n",
" -2.06405499, -2.06078037, -2.06384378, -2.0830549 , -2.08666077,\n",
" -0.45891181, -0.45891181, -0.20174149, -0.04508755, -0.63243257,\n",
" -0.64959747, -0.51989713, -0.21305195, -0.98190186, -1.07819291,\n",
" -3.00675577, -3.00675577, -2.99724866, -2.89726978, -3.00055964,\n",
" -2.99920211, -3.00596847, -2.99805874, -2.96010668, -2.9544031 ])\n",
" message: 'CONVERGENCE: REL_REDUCTION_OF_F_<=_FACTR*EPSMCH'\n",
" jac: array([ -1.02126515e-05, -1.02126515e-05, -1.87774584e-05,\n",
" -2.77189401e-05, -6.42969453e-06, -6.13260136e-06,\n",
" -8.71123541e-06, -1.83276307e-05, -2.24984889e-06,\n",
" -1.55853109e-06, 5.41300468e-05, 5.41300468e-05,\n",
" 7.99575741e-05, 9.91664506e-05, 3.74608826e-05,\n",
" 3.60326294e-05, 4.78763702e-05, 7.90094451e-05,\n",
" 1.68361325e-05, 1.37648216e-05, 2.07773905e-05,\n",
" 2.07773905e-05, 3.75926323e-05, 5.58314251e-05,\n",
" 1.32191342e-05, 1.26251075e-05, 1.77820218e-05,\n",
" 3.67225784e-05, 4.90846728e-06, 3.54729548e-06])\n",
" nit: 93\n"
]
}
],
"source": [
"# %%snakeviz\n",
"startLBFGSB = timeit.default_timer()\n",
"# costODEFResult = minimize(costODEF,initGuess,method=\"Nelder-Mead\")\n",
"# minimize(costTotalF,initGuess,method=\"TNC\")\n",
"costODEFResultLBFGSB = minimize(costODEF,initGuess,method=\"L-BFGS-B\")\n",
"stopLBFGSB = timeit.default_timer()\n",
"\n",
"print stopLBFGSB - startLBFGSB\n",
"\n",
"print costODEFResultLBFGSB"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"17.0160830021\n",
" status: 1\n",
" nfev: 6001\n",
" success: False\n",
" fun: 0.00031884090490975285\n",
" x: array([ 0.1330613 , 1.05982273, 0.18777729, -0.60789078, -0.96393469,\n",
" -0.65270373, -1.55257864, 0.8002259 , -0.12414033, -0.21230861,\n",
" -0.88629202, 0.47527367, 0.21401419, 0.2130512 , -1.5236408 ,\n",
" 1.35208616, -0.48922234, -0.85850735, 0.72135512, -1.03407686,\n",
" 2.29041152, 0.91184671, -0.56987761, 0.16597395, -0.43267372,\n",
" 2.1772668 , -0.1318482 , -0.80817762, 0.44533168, -0.28545885])\n",
" message: 'Maximum number of function evaluations has been exceeded.'\n",
" nit: 5029\n"
]
}
],
"source": [
"# %%snakeviz\n",
"startNM = timeit.default_timer()\n",
"costODEFResultNM = minimize(costODEF,initGuess,method=\"Nelder-Mead\")\n",
"stopNM = timeit.default_timer()\n",
"\n",
"print stopNM - startNM\n",
"\n",
"print costODEFResultNM"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"26.2406368256\n",
" status: 3\n",
" success: False\n",
" nfev: 300\n",
" fun: 0.0014134200168788226\n",
" x: array([-0.20190472, -0.20190472, -0.18808703, -0.19295435, -0.19572038,\n",
" -0.04796784, -0.19396957, -0.21892287, -0.21447547, -0.17392687,\n",
" -1.67899527, -1.67899527, -0.42007525, -0.91695886, -1.19221734,\n",
" 0.22111673, -0.25818086, -0.88921753, -0.46715631, -0.19627801,\n",
" 0.20087304, 0.20087304, 0.65713399, -0.05456812, 0.22742078,\n",
" 0.15573394, 0.0956364 , -0.20943573, 0.24956391, 0.13324245])\n",
" message: 'Max. number of function evaluations reach'\n",
" jac: array([ 0.00101461, 0.00101461, -0.00061286, 0.00456347, 0.00292545,\n",
" -0.0167402 , -0.00407698, 0.00421885, 0.00257763, -0.00631483,\n",
" 0.00024155, 0.00024155, 0.00862044, -0.00134179, -0.00182214,\n",
" 0.00145435, 0.00664002, -0.00121416, 0.00651105, 0.00539998,\n",
" 0.00070286, 0.00070286, 0.0010624 , -0.00067795, -0.00029385,\n",
" 0.00021479, 0.00098624, -0.00069649, 0.00027266, 0.00097921])\n",
" nit: 31\n"
]
}
],
"source": [
"# %%snakeviz\n",
"startTNC = timeit.default_timer()\n",
"# costODEFResult = minimize(costODEF,initGuess,method=\"Nelder-Mead\")\n",
"costODEFResultTNC = minimize(costODEF,initGuess,method=\"TNC\")\n",
"stopTNC = timeit.default_timer()\n",
"\n",
"print stopTNC - startTNC\n",
"\n",
"print costODEFResultTNC"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"### This method is extremely slow\n",
"# %%snakeviz\n",
"# startPowell = timeit.default_timer()\n",
"# costODEFResultPowell = minimize(costODEF,initGuess,method=\"Powell\")\n",
"# stopPowell = timeit.default_timer()\n",
"\n",
"# print stopPowell - startPowell\n",
"\n",
"# print costODEFResultPowell"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# for L-BFGS-B method\n",
"\n",
"# print \"Success is\", costODEFResult.get('success'), \"\\n\", \"# of function evaluations\", costODEFResult.get('nfev'), \"\\n\",\\\n",
"# \"value of minimized function\", costODEFResult.get('fun'), \"\\n\",\"# of iter\", costODEFResult.get('nit')\n",
"#\n",
"# print \"x is\\n\", costODEFResult.get('x')"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 1.00000000e+00 6.77014463e-01 4.19924637e-01 2.25297162e-01\n",
" 8.78206321e-02 8.04407022e-04 -4.32511996e-02 -5.20970637e-02\n",
" -3.32556540e-02 6.34133845e-03 6.05864590e-02]\n",
"[ 1. 0.60517646 0.36711424 0.22343151 0.13558498 0.08159165\n",
" 0.04879234 0.02940344 0.01824505 0.01166132 0.00700062]\n",
"[ 1. 0.60641483 0.3678138 0.22314944 0.13534572 0.08203464\n",
" 0.04970017 0.03013128 0.0183094 0.01115312 0.00676784]\n",
"[ 1. 0.60129567 0.36281266 0.22220159 0.13660322 0.08295539\n",
" 0.04904241 0.02817986 0.01636935 0.01048205 0.00741821]\n"
]
}
],
"source": [
"print funNNList(np.array( costODEFResultCG.get('x') ),tlin,1)\n",
"print funNNList(np.array( costODEFResultSLSQP.get('x') ),tlin,1)\n",
"print funNNList(np.array( costODEFResultLBFGSB.get('x') ),tlin,1)\n",
"print funNNList(np.array( costODEFResultNM.get('x') ),tlin,1)"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tlinplt = np.linspace(0,5,20)\n",
"tlinplt2 = np.linspace(0,40,50)\n",
"plt.figure(figsize=(20,12.35))\n",
"plt.plot(tlinplt,funY(tlinplt),'g-', label = \"pltAnalytical\")\n",
"plt.plot(tlinplt,funNNList(np.array( costODEFResultCG.get('x') ),tlinplt,1),'c^',label = \"pltODEFResultCG\")\n",
"plt.plot(tlinplt,funNNList(np.array( costODEFResultSLSQP.get('x') ),tlinplt,1),'r+',label=\"pltODEFResultSLSQP\")\n",
"plt.plot(tlinplt,funNNList(np.array( costODEFResultLBFGSB.get('x') ),tlinplt,1),'bo',label=\"pltODEFResultLBFGSB\")\n",
"plt.plot(tlinplt,funNNList(np.array( costODEFResultNM.get('x') ),tlinplt,1),'m1',label=\"pltODEFResultNM\")\n",
"# plt.yscale('log')\n",
"# plt.legend()\n",
"# plt.show()\n",
"\n",
"\n",
"##############\n",
"# plot using plot.ly\n",
"\n",
"# figMethodTest = plt.gcf()\n",
"\n",
"# Send figure object to Plotly, show result in notebook\n",
"# py.iplot_mpl(figMethodTest,filename=\"ANN-test-figMethodTest\")\n",
"py.iplot_mpl(plt.gcf(),filename=\"ANN-test-figMethodTest\")"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Let's not worry about that.\n",
"\n",
"# plt.figure(figsize=(20,12.35))\n",
"# plt.plot(tlinplt2,funY(tlinplt2),'g-', label = \"pltAnalytical\")\n",
"# plt.plot(tlinplt2,funNNList(np.array( costODEFResultSLSQP.get('x') ),tlinplt2,1),'r+',label=\"pltODEFResultSLSQP\")\n",
"# plt.plot(tlinplt2,funNNList(np.array( costODEFResultLBFGSB.get('x') ),tlinplt2,1),'bo',label=\"pltODEFResultLBFGSB\")\n",
"\n",
"# plt.yscale('log')\n",
"# plt.legent()\n",
"# plt.show()\n",
"\n",
"# py.iplot_mpl(plt.gcf(),filename=\"ANN-test-figMethodTest2\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"-----\n",
"#### Using Jac"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def mhelper(v,w,u,t): ## This function should output a result ## t is a number in this function not array!!\n",
" v = np.array(v)\n",
" w = np.array(w)\n",
" u = np.array(u)\n",
" \n",
" return np.sum( v*trigf( t*w + u ) + t* v* trigf(t*w + u) * ( 1 - trigf( t*w +u) ) * w ) + ( 1 + np.sum( t * v * trigf( t*w +u ) ) ) \n",
" # Checked # Pass\n",
" \n",
"def vhelper(v,w,u,t):\n",
" v = np.array(v)\n",
" w = np.array(w)\n",
" u = np.array(u)\n",
" \n",
" return trigf(t*w+u) + t*trigf(t*w+u)*( 1-trigf(t*w+u) )*w + t*trigf(t*w+u)\n",
"\n",
"def whelper(v,w,u,t):\n",
" v = np.array(v)\n",
" w = np.array(w)\n",
" u = np.array(u)\n",
" \n",
" return v*t*trigf(t*w+u)*( 1- trigf(t*w+u) ) + t*v*( trigf(t*w+u)*(1-trigf(t*w+u))*t* (1-trigf(t*w+u)) )*w - t*v*trigf(t*w+u)*trigf(t*w+u)*(1-trigf(t*w+u))*t*w + t*v*trigf(t*w+u)*(1-trigf(t*w+u)) + t*v*trigf(t*w+u)*(1-trigf(t*w+u))*t \n",
"\n",
"def uhelper(v,w,u,t):\n",
" v = np.array(v)\n",
" w = np.array(w)\n",
" u = np.array(u)\n",
" \n",
" return v*trigf(t*w+u)*( 1 - trigf(t*w+u)) + t* v * trigf(t*w+u) * (1-trigf(t*w+u))*(1-trigf(t*w+u))*w - t*v*trigf(t*w+u)*trigf(t*w+u)*(1-trigf(t*w+u))*w + t*v*trigf(t*w+u)*(1-trigf(t*w+u))\n"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def costJac(v,w,u,t):\n",
" v = np.array(v)\n",
" w = np.array(w)\n",
" u = np.array(u)\n",
" \n",
" vout = 0\n",
" wout = 0\n",
" uout = 0\n",
" \n",
" for temp in t:\n",
" vout = vout + 2*mhelper(v,w,u,temp)*vhelper(v,w,u,temp)\n",
" wout = wout + 2*mhelper(v,w,u,temp)*whelper(v,w,u,temp)\n",
" uout = uout + 2*mhelper(v,w,u,temp)*uhelper(v,w,u,temp)\n",
" \n",
" out = np.hstack((vout,wout,uout))\n",
" \n",
" return np.array(out)\n"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"costODEJacF = lambda x: costJac(np.split(x,3)[0],np.split(x,3)[1],np.split(x,3)[2],tlin)\n",
"initGuessJ = np.zeros(30)\n",
"# initGuessJ = np.random.rand(1,30)+2"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"28.8225519657\n",
" status: 0\n",
" success: True\n",
" njev: 4178\n",
" nfev: 548\n",
" fun: 0.09398293779213696\n",
" x: array([-31.20588236, -31.20588236, -31.20588236, -31.20588236,\n",
" -31.20588236, -31.20588236, -31.20588236, -31.20588236,\n",
" -31.20588236, -31.20588236, -0.28889755, -0.28889755,\n",
" -0.28889755, -0.28889755, -0.28889755, -0.28889755,\n",
" -0.28889755, -0.28889755, -0.28889755, -0.28889755,\n",
" -5.9568862 , -5.9568862 , -5.9568862 , -5.9568862 ,\n",
" -5.9568862 , -5.9568862 , -5.9568862 , -5.9568862 ,\n",
" -5.9568862 , -5.9568862 ])\n",
" message: 'Optimization terminated successfully.'\n",
" nhev: 0\n",
" jac: array([ 7.71837928e-06, 7.71837928e-06, 7.71837928e-06,\n",
" 7.71837928e-06, 7.71837928e-06, 7.71837928e-06,\n",
" 7.71837928e-06, 7.71837928e-06, 7.71837928e-06,\n",
" 7.71837928e-06, -6.89322453e-04, -6.89322453e-04,\n",
" -6.89322453e-04, -6.89322453e-04, -6.89322453e-04,\n",
" -6.89322453e-04, -6.89322453e-04, -6.89322453e-04,\n",
" -6.89322453e-04, -6.89322453e-04, -2.09622450e-04,\n",
" -2.09622450e-04, -2.09622450e-04, -2.09622450e-04,\n",
" -2.09622450e-04, -2.09622450e-04, -2.09622450e-04,\n",
" -2.09622450e-04, -2.09622450e-04, -2.09622450e-04])\n"
]
}
],
"source": [
"# %%snakeviz\n",
"startJacNCG = timeit.default_timer()\n",
"costODEResultJacNCG = minimize(costODEF,initGuessJ,method=\"Newton-CG\",jac=costODEJacF)\n",
"stopJacNCG = timeit.default_timer()\n",
"\n",
"print stopJacNCG - startJacNCG\n",
"print costODEResultJacNCG"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A test of the results"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Success is True \n",
"# of function evaluations 548 \n",
"value of minimized function 0.0939829377921 \n",
"# of iter None\n",
"x is\n",
"[-31.20588236 -31.20588236 -31.20588236 -31.20588236 -31.20588236\n",
" -31.20588236 -31.20588236 -31.20588236 -31.20588236 -31.20588236\n",
" -0.28889755 -0.28889755 -0.28889755 -0.28889755 -0.28889755\n",
" -0.28889755 -0.28889755 -0.28889755 -0.28889755 -0.28889755\n",
" -5.9568862 -5.9568862 -5.9568862 -5.9568862 -5.9568862\n",
" -5.9568862 -5.9568862 -5.9568862 -5.9568862 -5.9568862 ]\n"
]
}
],
"source": [
"# for NCG method\n",
"\n",
"print \"Success is\", costODEResultJacNCG.get('success'), \"\\n\", \"# of function evaluations\", costODEResultJacNCG.get('nfev'), \"\\n\",\\\n",
"\"value of minimized function\", costODEResultJacNCG.get('fun'), \"\\n\",\"# of iter\", costODEResultJacNCG.get('nit')\n",
"\n",
"print \"x is\\n\", costODEResultJacNCG.get('x')"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.170196056366\n",
" status: 2\n",
" success: False\n",
" njev: 15\n",
" nfev: 27\n",
" fun: 0.1920504147526792\n",
" x: array([-0.1429102 , -0.1429102 , -0.1429102 , -0.1429102 , -0.1429102 ,\n",
" -0.1429102 , -0.1429102 , -0.1429102 , -0.1429102 , -0.1429102 ,\n",
" -0.37677492, -0.37677492, -0.37677492, -0.37677492, -0.37677492,\n",
" -0.37677492, -0.37677492, -0.37677492, -0.37677492, -0.37677492,\n",
" -0.00415729, -0.00415729, -0.00415729, -0.00415729, -0.00415729,\n",
" -0.00415729, -0.00415729, -0.00415729, -0.00415729, -0.00415729])\n",
" message: 'Desired error not necessarily achieved due to precision loss.'\n",
" jac: array([-0.03935216, -0.03935216, -0.03935216, -0.03935216, -0.03935216,\n",
" -0.03935216, -0.03935216, -0.03935216, -0.03935216, -0.03935216,\n",
" -0.01369694, -0.01369694, -0.01369694, -0.01369694, -0.01369694,\n",
" -0.01369694, -0.01369694, -0.01369694, -0.01369694, -0.01369694,\n",
" 0.01049026, 0.01049026, 0.01049026, 0.01049026, 0.01049026,\n",
" 0.01049026, 0.01049026, 0.01049026, 0.01049026, 0.01049026])\n"
]
}
],
"source": [
"# %%snakeviz\n",
"startJacCG = timeit.default_timer()\n",
"costODEResultJacCG = minimize(costODEF,initGuessJ,method=\"CG\",jac=costODEJacF)\n",
"stopJacCG = timeit.default_timer()\n",
"\n",
"print stopJacCG - startJacCG\n",
"print costODEResultJacCG"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.570199966431\n",
" status: 0\n",
" success: True\n",
" njev: 51\n",
" nfev: 66\n",
" fun: 1.080248266970841e-05\n",
" x: array([-1.14137679, -0.94627375, -0.87087044, -1.01525169, -1.09187733,\n",
" -1.18014787, -1.19580593, -1.23912592, -1.31330351, -1.36371235,\n",
" -0.36628767, -0.16915114, 0.02718512, -0.21314756, -0.28643278,\n",
" -0.44737585, -0.48474124, -0.60405077, -0.89880536, -1.23277504,\n",
" -2.35587854, -2.53950768, -2.6062629 , -2.47658718, -2.40362568,\n",
" -2.31855785, -2.30356691, -2.26261292, -2.19727012, -2.16279234])\n",
" message: 'Optimization terminated successfully.'\n",
" jac: array([ -1.54062257e-04, -1.88647024e-04, -2.26829058e-04,\n",
" -1.86997132e-04, -1.75526822e-04, -1.28483659e-04,\n",
" -1.16205693e-04, -7.76984490e-05, -6.92506587e-06,\n",
" 1.96097088e-05, 4.29105762e-04, 2.62610025e-04,\n",
" 2.46523021e-04, 3.12471903e-04, 3.82432081e-04,\n",
" 4.48266944e-04, 4.47819412e-04, 4.12766626e-04,\n",
" 2.12299593e-04, 1.48749876e-05, 1.71845514e-04,\n",
" 1.68939160e-04, 1.83470792e-04, 1.80527154e-04,\n",
" 1.84416789e-04, 1.50520621e-04, 1.38893181e-04,\n",
" 9.81518456e-05, 9.11415478e-06, -3.17775200e-05,\n",
" 0.00000000e+00])\n",
" nit: 51\n"
]
}
],
"source": [
"# %%snakeviz\n",
"startJacSLSQP = timeit.default_timer()\n",
"costODEResultJacSLSQP = minimize(costODEF,initGuessJ,method=\"SLSQP\",jac=costODEJacF)\n",
"stopJacSLSQP = timeit.default_timer()\n",
"\n",
"print stopJacSLSQP - startJacSLSQP\n",
"print costODEResultJacSLSQP"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"5.17962908745\n",
" status: 0\n",
" success: True\n",
" nfev: 466\n",
" fun: 0.093712249132977959\n",
" x: array([-247.62057116, -247.62057116, -247.62057116, -247.62057116,\n",
" -247.62057116, -247.62057116, -247.62057116, -247.62057116,\n",
" -247.62057116, -247.62057116, -0.28867261, -0.28867261,\n",
" -0.28867261, -0.28867261, -0.28867261, -0.28867261,\n",
" -0.28867261, -0.28867261, -0.28867261, -0.28867261,\n",
" -8.02983967, -8.02983967, -8.02983967, -8.02983967,\n",
" -8.02983967, -8.02983967, -8.02983967, -8.02983967,\n",
" -8.02983967, -8.02983967])\n",
" message: 'CONVERGENCE: NORM_OF_PROJECTED_GRADIENT_<=_PGTOL'\n",
" jac: array([ 2.15718599e-08, 2.15718599e-08, 2.15718599e-08,\n",
" 2.15718599e-08, 2.15718599e-08, 2.15718599e-08,\n",
" 2.15718599e-08, 2.15718599e-08, 2.15718599e-08,\n",
" 2.15718599e-08, -5.22190220e-06, -5.22190220e-06,\n",
" -5.22190220e-06, -5.22190220e-06, -5.22190220e-06,\n",
" -5.22190220e-06, -5.22190220e-06, -5.22190220e-06,\n",
" -5.22190220e-06, -5.22190220e-06, -1.44369234e-06,\n",
" -1.44369234e-06, -1.44369234e-06, -1.44369234e-06,\n",
" -1.44369234e-06, -1.44369234e-06, -1.44369234e-06,\n",
" -1.44369234e-06, -1.44369234e-06, -1.44369234e-06])\n",
" nit: 358\n"
]
}
],
"source": [
"# %%snakeviz\n",
"startJacLBFGSB = timeit.default_timer()\n",
"costODEResultJacLBFGSB = minimize(costODEF,initGuessJ,method=\"L-BFGS-B\",jac=costODEJacF)\n",
"stopJacLBFGSB = timeit.default_timer()\n",
"\n",
"print stopJacLBFGSB - startJacLBFGSB\n",
"print costODEResultJacLBFGSB"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"initGuessJ2 = np.zeros(30)\n",
"tlin2 = np.linspace(0,5,100)\n",
"costODEJacF2 = lambda x: costJac(np.split(x,3)[0],np.split(x,3)[1],np.split(x,3)[2],tlin2)\n",
"costODEF2 = lambda x: costODE(x,tlin2,1,yOft)\n",
"\n",
"initGuessJ3 = np.zeros(30)\n",
"tlin3 = np.linspace(0,5,5)\n",
"costODEJacF3 = lambda x: costJac(np.split(x,3)[0],np.split(x,3)[1],np.split(x,3)[2],tlin3)\n",
"costODEF3 = lambda x: costODE(x,tlin3,1,yOft)\n"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"132.125494957\n",
" status: 0\n",
" success: True\n",
" nfev: 1644\n",
" fun: 0.59402660993173084\n",
" x: array([ -6.09970583e+03, -6.09970583e+03, -6.09970583e+03,\n",
" -6.09970583e+03, -6.09970583e+03, -6.09970583e+03,\n",
" -6.09970583e+03, -6.09970583e+03, -6.09970583e+03,\n",
" -6.09970583e+03, -2.83950110e-01, -2.83950110e-01,\n",
" -2.83950110e-01, -2.83950110e-01, -2.83950110e-01,\n",
" -2.83950110e-01, -2.83950110e-01, -2.83950110e-01,\n",
" -2.83950110e-01, -2.83950110e-01, -1.12626969e+01,\n",
" -1.12626969e+01, -1.12626969e+01, -1.12626969e+01,\n",
" -1.12626969e+01, -1.12626969e+01, -1.12626969e+01,\n",
" -1.12626969e+01, -1.12626969e+01, -1.12626969e+01])\n",
" message: 'CONVERGENCE: NORM_OF_PROJECTED_GRADIENT_<=_PGTOL'\n",
" jac: array([ 1.37439344e-09, 1.37439344e-09, 1.37439344e-09,\n",
" 1.37439344e-09, 1.37439344e-09, 1.37439344e-09,\n",
" 1.37439344e-09, 1.37439344e-09, 1.37439344e-09,\n",
" 1.37439344e-09, 2.09065112e-06, 2.09065112e-06,\n",
" 2.09065112e-06, 2.09065112e-06, 2.09065112e-06,\n",
" 2.09065112e-06, 2.09065112e-06, 2.09065112e-06,\n",
" 2.09065112e-06, 2.09065112e-06, -7.43602645e-06,\n",
" -7.43602645e-06, -7.43602645e-06, -7.43602645e-06,\n",
" -7.43602645e-06, -7.43602645e-06, -7.43602645e-06,\n",
" -7.43602645e-06, -7.43602645e-06, -7.43602645e-06])\n",
" nit: 1230\n"
]
}
],
"source": [
"# %%snakeviz\n",
"startJacLBFGSB2 = timeit.default_timer()\n",
"costODEResultJacLBFGSB2 = minimize(costODEF2,initGuessJ2,method=\"L-BFGS-B\",jac=costODEJacF2)\n",
"stopJacLBFGSB2 = timeit.default_timer()\n",
"\n",
"print stopJacLBFGSB2 - startJacLBFGSB2\n",
"print costODEResultJacLBFGSB2"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2.09725189209\n",
" status: 0\n",
" success: True\n",
" nfev: 481\n",
" fun: 0.063449481315827297\n",
" x: array([ -4.01464350e+02, -4.01464350e+02, -4.01464350e+02,\n",
" -4.01464350e+02, -4.01464350e+02, -4.01464350e+02,\n",
" -4.01464350e+02, -4.01464350e+02, -4.01464350e+02,\n",
" -4.01464350e+02, -2.95997459e-01, -2.95997459e-01,\n",
" -2.95997459e-01, -2.95997459e-01, -2.95997459e-01,\n",
" -2.95997459e-01, -2.95997459e-01, -2.95997459e-01,\n",
" -2.95997459e-01, -2.95997459e-01, -8.46635757e+00,\n",
" -8.46635757e+00, -8.46635757e+00, -8.46635757e+00,\n",
" -8.46635757e+00, -8.46635757e+00, -8.46635757e+00,\n",
" -8.46635757e+00, -8.46635757e+00, -8.46635757e+00])\n",
" message: 'CONVERGENCE: NORM_OF_PROJECTED_GRADIENT_<=_PGTOL'\n",
" jac: array([ 6.19175223e-09, 6.19175223e-09, 6.19175223e-09,\n",
" 6.19175223e-09, 6.19175223e-09, 6.19175223e-09,\n",
" 6.19175223e-09, 6.19175223e-09, 6.19175223e-09,\n",
" 6.19175223e-09, 7.76604365e-06, 7.76604365e-06,\n",
" 7.76604365e-06, 7.76604365e-06, 7.76604365e-06,\n",
" 7.76604365e-06, 7.76604365e-06, 7.76604365e-06,\n",
" 7.76604365e-06, 7.76604365e-06, -6.81405371e-07,\n",
" -6.81405371e-07, -6.81405371e-07, -6.81405371e-07,\n",
" -6.81405371e-07, -6.81405371e-07, -6.81405371e-07,\n",
" -6.81405371e-07, -6.81405371e-07, -6.81405371e-07])\n",
" nit: 361\n"
]
}
],
"source": [
"# %%snakeviz\n",
"startJacLBFGSB3 = timeit.default_timer()\n",
"costODEResultJacLBFGSB3 = minimize(costODEF3,initGuessJ3,method=\"L-BFGS-B\",jac=costODEJacF3)\n",
"stopJacLBFGSB3 = timeit.default_timer()\n",
"\n",
"print stopJacLBFGSB3 - startJacLBFGSB3\n",
"print costODEResultJacLBFGSB3"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"4.7097029686\n",
" status: 0\n",
" success: True\n",
" njev: 50\n",
" nfev: 85\n",
" fun: 0.00015456941229943612\n",
" x: array([-0.32264221, -0.48107001, -0.04941097, -0.22179986, -0.32500703,\n",
" -0.26811866, -0.16689592, -0.29099586, -0.28023271, 0.35581623,\n",
" -2.13215359, -0.19907189, -0.44445211, -0.83605933, -1.57465365,\n",
" -1.0165954 , -0.20845835, -0.09278176, 0.4425471 , 0.73163168,\n",
" -0.79214907, -0.0083873 , 0.07852109, 0.05472123, -0.24917395,\n",
" 0.00498926, 0.07293642, -0.08552639, -0.41189544, -0.94173643])\n",
" message: 'Optimization terminated successfully.'\n",
" jac: array([ 5.86155143e-04, 1.76026318e-03, 1.06070592e-03,\n",
" -5.63759577e-06, -5.99931515e-05, -1.15979657e-04,\n",
" 1.82416397e-03, 2.02892373e-03, 3.55605356e-03,\n",
" 4.43492803e-03, 3.06517195e-04, -1.50612327e-03,\n",
" -1.77555087e-04, -2.62277898e-04, 2.54115876e-05,\n",
" -7.49442817e-05, -5.24330569e-04, -1.06579689e-03,\n",
" -1.14473878e-03, 2.05294059e-03, 1.11972625e-04,\n",
" -5.47604421e-04, -4.80618135e-05, 1.17612504e-05,\n",
" 2.03893304e-04, 5.73858019e-05, -1.93123627e-04,\n",
" -3.48156620e-04, -3.48580405e-04, 3.28262764e-04,\n",
" 0.00000000e+00])\n",
" nit: 50\n"
]
}
],
"source": [
"# %%snakeviz\n",
"startJacSLSQP2 = timeit.default_timer()\n",
"costODEResultJacSLSQP2 = minimize(costODEF2,initGuessJ2,method=\"SLSQP\",jac=costODEJacF2)\n",
"stopJacSLSQP2 = timeit.default_timer()\n",
"\n",
"print stopJacSLSQP2 - startJacSLSQP2\n",
"print costODEResultJacSLSQP2"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.312636137009\n",
" status: 0\n",
" success: True\n",
" njev: 67\n",
" nfev: 87\n",
" fun: 1.9284071715143801e-06\n",
" x: array([-2.6109115 , -2.57599424, -2.58878461, -2.57940213, -2.59059415,\n",
" -2.59852687, -2.59236843, -2.61274745, -2.6048374 , -2.6027068 ,\n",
" -0.06868534, -0.13921381, -0.41686679, -0.17524607, -0.47645344,\n",
" -0.69273789, -0.53162242, -0.94586645, -0.81984537, -0.7802183 ,\n",
" -3.23122383, -3.25291901, -3.2255435 , -3.24481987, -3.2221723 ,\n",
" -3.20718217, -3.21886615, -3.17908483, -3.19486312, -3.19905495])\n",
" message: 'Optimization terminated successfully.'\n",
" jac: array([ -1.59890302e-05, -8.27722239e-06, -3.19991413e-06,\n",
" -6.09584424e-06, -3.56792170e-06, -4.10967168e-06,\n",
" -3.88109099e-06, -2.08827414e-06, -3.41089909e-06,\n",
" -3.70672787e-06, 3.73531400e-04, 1.90783426e-04,\n",
" -1.43706761e-05, 1.31844527e-04, -1.55772645e-05,\n",
" 7.43164027e-06, -1.21567161e-05, 3.33575815e-05,\n",
" 2.26259113e-05, 1.82858906e-05, 4.08845422e-05,\n",
" 2.10158782e-05, 7.96822283e-06, 1.54458386e-05,\n",
" 9.04685408e-06, 1.10836184e-05, 1.00058323e-05,\n",
" 6.43663495e-06, 9.61254995e-06, 1.02814845e-05,\n",
" 0.00000000e+00])\n",
" nit: 67\n"
]
}
],
"source": [
"# %%snakeviz\n",
"startJacSLSQP3 = timeit.default_timer()\n",
"costODEResultJacSLSQP3 = minimize(costODEF3,initGuessJ3,method=\"SLSQP\",jac=costODEJacF3)\n",
"stopJacSLSQP3 = timeit.default_timer()\n",
"\n",
"print stopJacSLSQP3 - startJacSLSQP3\n",
"print costODEResultJacSLSQP3"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2.67713308334\n",
" status: 3\n",
" success: False\n",
" nfev: 300\n",
" fun: 0.094505048071264891\n",
" x: array([-11.81688438, -11.81688438, -11.81688438, -11.81688438,\n",
" -11.81688438, -11.81688438, -11.81688438, -11.81688438,\n",
" -11.81688438, -11.81688438, -0.28973009, -0.28973009,\n",
" -0.28973009, -0.28973009, -0.28973009, -0.28973009,\n",
" -0.28973009, -0.28973009, -0.28973009, -0.28973009,\n",
" -4.98217919, -4.98217919, -4.98217919, -4.98217919,\n",
" -4.98217919, -4.98217919, -4.98217919, -4.98217919,\n",
" -4.98217919, -4.98217919])\n",
" message: 'Max. number of function evaluations reach'\n",
" jac: array([ 0.00017029, 0.00017029, 0.00017029, 0.00017029, 0.00017029,\n",
" 0.00017029, 0.00017029, 0.00017029, 0.00017029, 0.00017029,\n",
" -0.00833811, -0.00833811, -0.00833811, -0.00833811, -0.00833811,\n",
" -0.00833811, -0.00833811, -0.00833811, -0.00833811, -0.00833811,\n",
" -0.00192607, -0.00192607, -0.00192607, -0.00192607, -0.00192607,\n",
" -0.00192607, -0.00192607, -0.00192607, -0.00192607, -0.00192607])\n",
" nit: 45\n"
]
}
],
"source": [
"# %%snakeviz\n",
"startJacTNC = timeit.default_timer()\n",
"costODEResultJacTNC = minimize(costODEF,initGuessJ,method=\"TNC\",jac=costODEJacF)\n",
"stopJacTNC = timeit.default_timer()\n",
"\n",
"print stopJacTNC - startJacTNC\n",
"print costODEResultJacTNC"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 1. 0.65129459 0.39620997 0.21592623 0.09497576 0.02068675\n",
" -0.01728562 -0.02735341 -0.01632698 0.0103076 0.04815641]\n",
"[ 1.00000000e+00 6.77014395e-01 4.19924537e-01 2.25297061e-01\n",
" 8.78205562e-02 8.04374164e-04 -4.32511778e-02 -5.20969821e-02\n",
" -3.32555132e-02 6.34153378e-03 6.05867015e-02]\n",
"[ 1. 0.65115314 0.39605582 0.21581625 0.09492528 0.02068895\n",
" -0.0172476 -0.02729931 -0.01627537 0.01034129 0.04816063]\n",
"[ 1. 0.65145693 0.39644341 0.21621956 0.09535513 0.02119023\n",
" -0.01662211 -0.02650305 -0.01527453 0.01156584 0.049614 ]\n",
"[ 1. 0.60653179 0.36822681 0.22338883 0.13506892 0.08135047\n",
" 0.04901432 0.02985158 0.01859964 0.01178781 0.00707764]\n",
"[ 1. 0.66014948 0.41026134 0.23247518 0.1120824 0.03700482\n",
" -0.00264396 -0.01492713 -0.00639414 0.01765989 0.05297687]\n",
"[ 1. 0.95094837 0.90416658 0.85959181 0.81715416 0.7767782\n",
" 0.73838451 0.70189113 0.66721476 0.63427191 0.60297981 0.57325721\n",
" 0.545025 0.51820668 0.49272871 0.46852076 0.44551587 0.42365048\n",
" 0.40286447 0.38310107 0.36430683 0.3464314 0.3294275 0.31325068\n",
" 0.29785919 0.28321379 0.26927762 0.25601598 0.24339622 0.23138756\n",
" 0.21996095 0.20908894 0.19874555 0.18890615 0.17954737 0.170647\n",
" 0.16218387 0.15413781 0.14648958 0.13922076 0.13231374 0.12575165\n",
" 0.11951832 0.11359823 0.1079765 0.10263881 0.09757143 0.09276117\n",
" 0.08819535 0.08386178 0.07974878 0.07584511 0.07214001 0.06862315\n",
" 0.06528464 0.062115 0.05910517 0.05624652 0.05353076 0.05095005\n",
" 0.04849688 0.04616413 0.04394506 0.04183326 0.03982267 0.03790759\n",
" 0.03608264 0.03434275 0.03268317 0.03109947 0.02958749 0.02814338\n",
" 0.02676356 0.02544471 0.02418378 0.02297796 0.02182468 0.02072161\n",
" 0.01966663 0.01865783 0.01769351 0.01677216 0.01589244 0.0150532\n",
" 0.01425344 0.01349233 0.01276918 0.01208341 0.01143462 0.0108225\n",
" 0.01024684 0.00970757 0.00920469 0.0087383 0.00830858 0.00791579\n",
" 0.00756025 0.00724236 0.00696257 0.00672135]\n"
]
}
],
"source": [
"print funNNList(np.array( costODEResultJacNCG.get('x') ),tlin,1)\n",
"print funNNList(np.array( costODEResultJacCG.get('x') ),tlin,1)\n",
"print funNNList(np.array( costODEResultJacLBFGSB.get('x') ),tlin,1)\n",
"print funNNList(np.array( costODEResultJacTNC.get('x') ),tlin,1)\n",
"print funNNList(np.array( costODEResultJacSLSQP.get('x') ),tlin,1)\n",
"print funNNList(np.array( costODEResultJacLBFGSB2.get('x') ),tlin,1)\n",
"print funNNList(np.array( costODEResultJacSLSQP2.get('x') ),tlin2,1)"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": [
"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\n",
"eYepD+cfVvSSaFPnl+Rr4T8WmjokIER3xtxp6piOMVo3YZ2pOwZ2NJuoA4AVCIYAAACAekqISjB7\n",
"HjkcDm26Z1OtWR2LRi0ydamrVK/ufdWMLykv0dCV1fshFTuL1faZ6tlL55zn1PfFvqYuKS/R2NVj\n",
"TV3mKtPDGx42tdPl1LMfP2vq8opyvbX/LVO7Kly1ZrRUuCtqLZNrblwVLuUU5Ji6pLxEH/zzA1MX\n",
"lBZo8aeLTX363Gn96t1fmfpE0QkNWTHE1DmFOeq5pKepz5SeqRX8lFeU1wqK/H38dVX7q0zdvnV7\n",
"PXHDE6bu0q6Ldk3bZerwNuF6ffzrpg7yC1JCVMK/9qQBoAkRDAEAAACNyMvhpf4R/U3dyqeV3rzz\n",
"TVO39m2tjBkZ1bVPa5167JSp/X38tfbutab28fLRrPhZtR6jX+d+5rLL7VKRs8jUTpdTGw5uMHVJ\n",
"eYmeeL862CgqK9INL91g6rOlZ9Xp2er9mArLCjVg+YBa42vOmDnnPKfZm2eburS8VIu2L6r1+G/u\n",
"r36+hWWFenLLk6Y+U3JGt79xu6lPFZ/S1X++2tSnS05rxCsjavW//PPlpnY4HLU2a27t21qjuo8y\n",
"dfvW7fXSuJdMHd4mXIdmVu/x0ymwk96d9K6pg1sH648j/mjqIL8gJcUmmdrfx7/W/6eXw0sBvgEC\n",
"gJaK4+oBAAAAGG63WyXlJWrt21pS5Yydg3kH1aNDD0mVQU9aZppGXFkZ1pSUl+h/9/6vplw7RVLl\n",
"jKcFHy0wJ2MVlBZodups/XXsX8345buWm5OynC6nPjrykZlVU+GuUN65PDZQBoAGUJe8hWAIAAAA\n",
"AADAA9Ulb2EpGQAAAAAAgE0RDAEAAAAAANgUwRAAAAAAAIBNEQwBAAAAAADYFMEQAAAAAACATREM\n",
"AQAAAAAA2BTBEAAAAAAAgE0RDAEAAAAAANgUwRAAAAAAAIBNEQwBAAAAAADYFMEQAAAAAACATREM\n",
"AQAAAAAA2BTBEAAAAAAAgE0RDAEAAAAAANgUwRAAAAAAAIBNEQwBAAAAAADYFMEQAAAAAACATREM\n",
"AQAAAAAA2BTBEAAAAAAAgE0RDAEAAAAAANgUwRAAAAAAAIBNEQwBAAAAAADYFMEQAAAAAACATREM\n",
"AQAAAAAA2BTBEAAAAAAAgE0RDAEAAAAAANgUwRAAAAAAAIBNEQwBAAAAAADYFMEQAAAAAACATREM\n",
"AQAAAAAA2BTBEAAAAAAAgE0RDAEAAAAAANgUwRAAAAAAAIBNEQwBAAAAAADYFMEQAAAAAACATREM\n",
"AQAAAAAA2BTBEAAAAAAAgE0RDAEAAAAAANgUwRAAAAAAAIBNEQwBAAAAAADYFMEQAAAAAACATREM\n",
"AQAAAAAA2BTBEAAAAAAAgE0RDAEAAAAAANgUwRAAAAAAAIBNEQwBAAAAAADYFMEQAAAAAACATREM\n",
"AQAAAAAA2BTBEAAAAAAAgE0RDAEAAAAAANgUwRAAAAAAAIBNEQwBAAAAAADYFMEQAAAAAACATREM\n",
"AQAAAAAA2BTBEAAAAAAAgE0RDAEAAAAAANgUwRAAAAAAAIBNEQwBAAAAAADYFMEQAAAAAACATREM\n",
"AQAAAAAA2BTBEAAAAAAAgE0RDAEAAAAAANgUwRAAAAAAAIBNEQwBAAAAAADYFMEQAAAAAACATREM\n",
"AQAAAAAA2BTBEAAAAAAAgE0RDAEAAAAAANgUwRAAAAAAAIBNEQwBAAAAAADYFMEQAAAAAACATREM\n",
"AQAAAAAA2BTBEAAAAAAAgE0RDAEAAAAAANgUwRAAAAAAAIBNEQwBAAAAAADYFMEQAAAAAACATREM\n",
"AQAAAAAA2NQlB0N5eXkaMWKErr76ao0cOVL5+fnnjcnKylJCQoJ69eql3r17a/HixfVqFgAAAAAA\n",
"AA3nkoOhBQsWaMSIEfr222914403asGCBeeN8fX11fPPP6/9+/dr+/btWrJkib7++ut6NQygYaWl\n",
"pVndAmBLvPcAa/DeA6zBew9ovi45GFq/fr2SkpIkSUlJSVq3bt15Y8LCwhQbGytJCgoKUnR0tLKz\n",
"sy/1IQE0Ar5JA9bgvQdYg/ceYA3ee0DzdcnBUG5urkJDQyVJoaGhys3N/cnxmZmZ2r17t+Lj4y/1\n",
"IQEAAAAAANCAfH7qgyNGjNDx48fPu/7pp5+uVTscDjkcjh+9n8LCQo0fP16LFi1SUFDQJbYKAAAA\n",
"AACAhuRwu93uS7lhz549lZaWprCwMOXk5CghIUEHDhw4b5zT6dSYMWP085//XLNmzbrgfXXv3l0Z\n",
"GRmX0gYAAAAAAAAu4Morr9TBgwd/cswlB0OPPfaYQkJC9Pjjj2vBggXKz88/bwNqt9utpKQkhYSE\n",
"6Pnnn7+UhwEAAAAAAEAjueRgKC8vT3fddZeOHDmibt266c0339Rll12m7Oxs3X///UpJSdFHH32k\n",
"oUOHqm/fvmap2TPPPKNRo0Y16JMAAAAAAADAv+6SgyEAAAAAAAC0bJd8KllD2bRpk3r27KmrrrpK\n",
"f/jDH6xuB7CFyZMnKzQ0VH369LG6FcB2srKylJCQoF69eql3795avHix1S0BtlBSUqL4+HjFxsYq\n",
"JiZGc+bMsbolwFZcLpfi4uI0duxYq1sBbKNbt27q27ev4uLiNGDAgB8dZ+mMIZfLpR49euj9999X\n",
"RESE+vfvr9WrVys6OtqqlgBb2LZtm4KCgnTvvfdq3759VrcD2Mrx48d1/PhxxcbGqrCwUP369dO6\n",
"dev43gc0geLiYgUEBKi8vFyDBw/Wc889p8GDB1vdFmALCxcu1K5du1RQUKD169db3Q5gC1FRUdq1\n",
"a5fat2//k+MsnTG0Y8cOde/eXd26dZOvr68mTJig5ORkK1sCbGHIkCEKDg62ug3AlsLCwhQbGytJ\n",
"CgoKUnR0tLKzsy3uCrCHgIAASVJZWZlcLtdFf1AG0DCOHj2qDRs2aOrUqWInE6Bp1eU9Z2kwdOzY\n",
"MXXp0sXUkZGROnbsmIUdAQDQdDIzM7V7927Fx8db3QpgCxUVFYqNjVVoaKgSEhIUExNjdUuALTzy\n",
"yCN69tln5eVl+U4mgK04HA7ddNNNuu6667R8+fIfHWfpO7PqpDIAAOymsLBQ48eP16JFixQUFGR1\n",
"O4AteHl5ac+ePTp69Ki2bt2qtLQ0q1sCPN67776rTp06KS4ujtlCQBP7+OOPtXv3bm3cuFFLlizR\n",
"tm3bLjjO0mAoIiJCWVlZps7KylJkZKSFHQEA0PicTqfuuOMO3XPPPbr11lutbgewnXbt2mn06NHa\n",
"uXOn1a0AHu+TTz7R+vXrFRUVpYkTJ+rvf/+77r33XqvbAmyhc+fOkqSOHTvqtttu044dOy44ztJg\n",
"6LrrrlN6eroyMzNVVlamN954Q+PGjbOyJQAAGpXb7daUKVMUExOjWbNmWd0OYBsnT55Ufn6+JOnc\n",
"uXN67733FBcXZ3FXgOebP3++srKydOjQIb3++usaPny4Xn75ZavbAjxecXGxCgoKJElFRUVKTU39\n",
"0VOpLQ2GfHx89MILLygxMVExMTG6++67OZUFaAITJ07UoEGD9O2336pLly5asWKF1S0BtvHxxx/r\n",
"1Vdf1ZYtWxQXF6e4uDht2rTJ6rYAj5eTk6Phw4crNjZW8fHxGjt2rG688Uar2wJsh+1EgKaRm5ur\n",
"IUOGmO97Y8aM0ciRIy841tLj6gEAAAAAAGAdtoUHAAAAAACwKYIhAAAAAAAAmyIYAgAAAAAAsCmC\n",
"IQAAAAAAAJsiGAIAAAAAALApgiEAAAAAAACbIhgCAAAAAACwKYIhAAAAAAAAm/p/YLF3E5JGOKMA\n",
"AAAASUVORK5CYII=\n"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(20,12.36))\n",
"plt.plot(tlinplt,funY(tlinplt),'g-')\n",
"plt.plot(tlinplt,funNNList(np.array( costODEResultJacNCG.get('x') ),tlinplt,1),'c^')\n",
"plt.plot(tlinplt,funNNList(np.array( costODEResultJacCG.get('x') ),tlinplt,1),'g:')\n",
"plt.plot(tlinplt,funNNList(np.array( costODEResultJacSLSQP.get('x') ),tlinplt,1),'ro')\n",
"plt.plot(tlinplt,funNNList(np.array( costODEResultJacLBFGSB.get('x') ),tlinplt,1),'bo')\n",
"plt.plot(tlinplt,funNNList(np.array( costODEResultJacTNC.get('x') ),tlinplt,1),'m+')\n",
"plt.plot(tlinplt,funNNList(np.array( costODEResultJacLBFGSB2.get('x') ),tlinplt,1),'b*')\n",
"plt.plot(tlinplt,funNNList(np.array( costODEResultJacSLSQP2.get('x') ),tlinplt,1),'r*')\n",
"# plt.yscale('log')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": [
"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\n",
"X1peONGzU89LAAAAAElFTkSuQmCC\n"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(20,12.36))\n",
"plt.plot(tlinplt,funY(tlinplt),'g-')\n",
"plt.plot(tlinplt,funNNList(np.array( costODEFResultLBFGSB.get('x') ),tlinplt,1),'b:')\n",
"plt.plot(tlinplt,funNNList(np.array( costODEResultJacLBFGSB.get('x') ),tlinplt,1),'bo')\n",
"plt.plot(tlinplt,funNNList(np.array( costODEResultJacLBFGSB2.get('x') ),tlinplt,1),'b*')\n",
"plt.plot(tlinplt,funNNList(np.array( costODEResultJacLBFGSB3.get('x') ),tlinplt,1),'b^')\n",
"plt.plot(tlinplt,funNNList(np.array( costODEFResultSLSQP.get('x') ),tlinplt,1),'r:')\n",
"plt.plot(tlinplt,funNNList(np.array( costODEResultJacSLSQP.get('x') ),tlinplt,1),'ro')\n",
"plt.plot(tlinplt,funNNList(np.array( costODEResultJacSLSQP2.get('x') ),tlinplt,1),'r*')\n",
"plt.plot(tlinplt,funNNList(np.array( costODEResultJacSLSQP3.get('x') ),tlinplt,1),'r^')\n",
"# plt.yscale('log')\n",
"plt.show()\n",
"\n",
"# plt.figure(figsize=(20,12.36))\n",
"# plt.plot(tlinplt2,funY(tlinplt2),'g-')\n",
"# plt.plot(tlinplt2,funNNList(np.array( costODEFResultLBFGSB.get('x') ),tlinplt2,1),'b:')\n",
"# plt.plot(tlinplt2,funNNList(np.array( costODEResultJacLBFGSB.get('x') ),tlinplt2,1),'bo')\n",
"# plt.plot(tlinplt2,funNNList(np.array( costODEResultJacLBFGSB2.get('x') ),tlinplt2,1),'b*')\n",
"# plt.plot(tlinplt2,funNNList(np.array( costODEResultJacLBFGSB3.get('x') ),tlinplt2,1),'b^')\n",
"# plt.plot(tlinplt2,funNNList(np.array( costODEFResultSLSQP.get('x') ),tlinplt2,1),'r:')\n",
"# plt.plot(tlinplt2,funNNList(np.array( costODEResultJacSLSQP.get('x') ),tlinplt2,1),'ro')\n",
"# plt.plot(tlinplt2,funNNList(np.array( costODEResultJacSLSQP2.get('x') ),tlinplt2,1),'r*')\n",
"# plt.plot(tlinplt2,funNNList(np.array( costODEResultJacSLSQP3.get('x') ),tlinplt2,1),'r^')\n",
"# plt.yscale('log')\n",
"# plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"-----\n",
"## [Summary](#summary) | [toc](#toc)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"To tests the time increase as dimension increases.\n",
"\n",
"1. Compare the numerical Jac and analytical Jac trends."
]
},
{
"cell_type": "code",
"execution_count": 132,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 30. 117. 204. 291. 378. 465. 552. 639. 726. 813. 900.]\n"
]
}
],
"source": [
"tlin4 = np.linspace(0,5,11)\n",
"\n",
"costODEJacF4 = lambda x: costJac(np.split(x,3)[0],np.split(x,3)[1],np.split(x,3)[2],tlin4)\n",
"costODEF4 = lambda x: costODE(x,tlin4,1,yOft)\n",
"\n",
"dim = np.linspace(10,300,11)*3\n",
"print dim"
]
},
{
"cell_type": "code",
"execution_count": 133,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.623954057693 1.08024826697e-05 True\n",
"1.16640520096 1.35058753539e-06 True\n",
"4.1815290451 1.58370900842e-07 True\n",
"8.39232397079 4.94832263067e-07 True\n",
"16.0506448746 6.67396785998e-06 True\n",
"40.4828448296 4.17348311169e-06 True\n",
"61.232724905 3.5066461297e-05 True\n",
"106.302225113 4.61129888585e-05 True\n",
"242.989250183 2.25098747509e-05 False\n",
"362.700165987 0.000110150535298 False\n",
"527.457528114 4.38909088929e-05 True\n",
"[ 0.62395406 1.1664052 4.18152905 8.39232397 16.05064487\n",
" 40.48284483 61.23272491 106.30222511 242.98925018 362.70016599\n",
" 527.45752811]\n"
]
}
],
"source": [
"# Play with the \n",
"\n",
"# %%snakeviz\n",
"resultdim = np.asarray([])\n",
"vwuDimTest = np.linspace(10,300,11)*3\n",
" \n",
"for dimele in vwuDimTest:\n",
" \n",
" initGuessJ4 = np.zeros(dimele)\n",
" \n",
" startJacSLSQP4 = timeit.default_timer()\n",
" costODEResultJacSLSQP4 = minimize(costODEF4,initGuessJ4,method=\"SLSQP\",jac=costODEJacF4)\n",
" stopJacSLSQP4 = timeit.default_timer()\n",
" \n",
" resultdim = np.append(resultdim, stopJacSLSQP4 - startJacSLSQP4)\n",
" \n",
" print stopJacSLSQP4 - startJacSLSQP4, costODEResultJacSLSQP4.get(\"fun\"), costODEResultJacSLSQP4.get(\"success\")\n",
" \n",
"print resultdim\n"
]
},
{
"cell_type": "code",
"execution_count": 146,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"np.savetxt('./assets/dataTest_ResultDim.txt', resultdim, delimiter = ',')"
]
},
{
"cell_type": "code",
"execution_count": 148,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"resultdim = np.genfromtxt('./assets/dataTest_ResultDim.txt', delimiter = ',')"
]
},
{
"cell_type": "code",
"execution_count": 156,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"execution_count": 156,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"plt.figure(figsize=(20,12.36))\n",
"plt.ylabel('Time needed')\n",
"plt.xlabel('Dimension of total uvw array')\n",
"plt.plot(vwuDimTest,resultdim,\"b4-\",label=\"ANN-test-figMethod-TimeTest-InitGuess\")\n",
"py.iplot_mpl(plt.gcf(),filename=\"ANN-test-figMethod-TimeTest-InitGuess\")\n",
"\n",
"# tls.embed(\"https://plot.ly/~emptymalei/73/\")"
]
},
{
"cell_type": "code",
"execution_count": 157,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"execution_count": 157,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"plt.figure(figsize=(20,12.36))\n",
"plt.ylabel('Time needed')\n",
"plt.xlabel('Dimension of total uvw array')\n",
"plt.plot(vwuDimTest,resultdim,\"b4-\",label=\"ANN-test-figMethod-TimeTest-InitGuess\")\n",
"plt.yscale('log')\n",
"py.iplot_mpl(plt.gcf(),filename=\"ANN-test-figMethod-TimeTest-InitGuess-log\")\n"
]
},
{
"cell_type": "code",
"execution_count": 118,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 10., 20., 30., 40., 50., 60., 70., 80., 90.,\n",
" 100., 110., 120.])"
]
},
"execution_count": 118,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.linspace(10,120,12)"
]
},
{
"cell_type": "code",
"execution_count": 161,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.401245117188 2.9421126197e-05 True\n",
"0.720057964325 2.17825387004e-05 True\n",
"1.42888689041 7.82736267945e-05 True\n",
"1.29306983948 3.79683866651e-05 True\n",
"2.04963111877 0.000174305034917 True\n",
"2.81797814369 9.11683414227e-05 True\n",
"3.6012969017 1.69136614353e-05 True\n",
"4.36051607132 2.2770805775e-05 True\n",
"5.8360748291 5.92628131519e-06 True\n",
"5.01994013786 0.000154569412299 True\n",
"5.30923199654 0.000284399212198 True\n",
"9.28647613525 7.91642545381e-05 True\n",
"[ 0.40124512 0.72005796 1.42888689 1.29306984 2.04963112 2.81797814\n",
" 3.6012969 4.36051607 5.83607483 5.01994014 5.309232 9.28647614]\n"
]
}
],
"source": [
"# %%snakeviz\n",
"resultdim2 = np.asarray([])\n",
"\n",
"initGuessJ5 = np.zeros(30)\n",
"\n",
"timeseg = np.linspace(10,120,12)\n",
"\n",
"for dim5 in timeseg:\n",
" \n",
" tlin5 = np.linspace(0,5,dim5)\n",
" \n",
" costODEJacF5 = lambda x: costJac(np.split(x,3)[0],np.split(x,3)[1],np.split(x,3)[2],tlin5)\n",
" costODEF5 = lambda x: costODE(x,tlin5,1,yOft)\n",
"\n",
" startJacSLSQP5 = timeit.default_timer()\n",
" costODEResultJacSLSQP5 = minimize(costODEF5,initGuessJ5,method=\"SLSQP\",jac=costODEJacF5)\n",
" stopJacSLSQP5 = timeit.default_timer()\n",
" \n",
" resultdim2 = np.append(resultdim2, stopJacSLSQP5 - startJacSLSQP5)\n",
" \n",
" print stopJacSLSQP5 - startJacSLSQP5, costODEResultJacSLSQP5.get(\"fun\"), costODEResultJacSLSQP5.get(\"success\")\n",
" \n",
"print resultdim2\n"
]
},
{
"cell_type": "code",
"execution_count": 162,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# np.savetxt('./assets/dataTest_ResultDim2.txt', resultdim2, delimiter = ',')"
]
},
{
"cell_type": "code",
"execution_count": 163,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"resultdim2 = np.genfromtxt('./assets/dataTest_ResultDim2.txt', delimiter = ',')"
]
},
{
"cell_type": "code",
"execution_count": 164,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"execution_count": 164,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"plt.figure(figsize=(20,12.36))\n",
"plt.ylabel('Time needed')\n",
"plt.xlabel('Dimension of time array')\n",
"plt.plot(timeseg,resultdim2,\"b4-\",label=\"ANN-test-figMethod-TimeTest-TimeSeg\")\n",
"\n",
"py.iplot_mpl(plt.gcf(),filename=\"ANN-test-figMethod-TimeTest-TimeSeg\")\n",
"\n",
"# tls.embed(\"https://plot.ly/~emptymalei/\")"
]
},
{
"cell_type": "code",
"execution_count": 165,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"execution_count": 165,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"plt.figure(figsize=(20,12.36))\n",
"plt.ylabel('Time needed')\n",
"plt.xlabel('Dimension of time array')\n",
"plt.plot(timeseg,resultdim2,\"b4-\",label=\"ANN-test-figMethod-TimeTest-TimeSeg\")\n",
"plt.yscale('log')\n",
"\n",
"py.iplot_mpl(plt.gcf(),filename=\"ANN-test-figMethod-TimeTest-TimeSeg-log\")\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**To summarize, **\n",
"\n",
"1. CG is extremely fast, however, it's not so accurate.\n",
"2. SLSQP is also very fast, and it is very accurate\n",
"3. L-BFGS-B gives us the best result and it's not slow.\n",
"\n",
"| Method | Time | Function | nfev/njev | nit |\n",
"|:--------:|:----------------------------------:|:-------------------------------------------------:|:---------------------------------------:|:-----------------:|\n",
"| CG | 2.95948886871(Jac: 0.341506004333) | 0.1920503701634634(Jac: 0.19205041475267956) | nfev: 492,njev: 15 (nfev: 27,njev: 15) | |\n",
"| SLSQP | 10.7389249802(Jac:0.955240011215) | 2.5774431624374406e-05(Jac:1.080248266970841e-05) | nfev: 1649,njev: 51 (nfev: 66,njev: 51) | nit: 51(nit: 51) |\n",
"| L-BFGS-B | 18.576128006(Jac:8.60380482674) | 1.6905137501642895e-07(Jac:0.093712249132977959) | nfev: 119(nfev: 466) | nit: 93(nit: 358) |\n",
"| N-M | 30.9348311424 | 0.00031884090490975285 | nfev: 6001 | |\n",
"| NCG | (Jac:37.292183876) | (0.09397294690879396) | (njev: 3149,nfev: 526) | |\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Smaller vwu dimensions, less time? True for SLSQP Jac. \n",
"* Seems that by solving an equation, we are solving a equation **in a particular region** with a specific initial condition. **Be careful with extrapolation.**"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Plotting"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here in this section I def some function used to plot the data.\n",
"\n",
"The plot function outputs a plot with inputs of a list of ts and ys."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"startTemp = timeit.default_timer()\n",
"testArraySplit = np.zeros(30)\n",
"np.split(testArraySplit,3)[0]\n",
"np.split(testArraySplit,3)[1]\n",
"np.split(testArraySplit,3)[2]\n",
"stopTemp = timeit.default_timer()\n",
"print stopTemp - startTemp"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"print tlin2\n",
"print tlin"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"x1 = np.zeros(30)\n",
"v1, w1, u1 = np.split(x1,3)[:3]\n",
"print v1, w1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
}
],
"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.6"
}
},
"nbformat": 4,
"nbformat_minor": 0
}