diff --git a/_images/0293889e5651601087e2954b9b15faa5a96edaa9c0d71dc99ac4336d58cc6488.png b/_images/0293889e5651601087e2954b9b15faa5a96edaa9c0d71dc99ac4336d58cc6488.png deleted file mode 100644 index cc246a7..0000000 Binary files a/_images/0293889e5651601087e2954b9b15faa5a96edaa9c0d71dc99ac4336d58cc6488.png and /dev/null differ diff --git a/_images/1f5b63d62e5a00cbc943106803267c6058880425dda5d7792e0483ba5c85cb49.png b/_images/1f5b63d62e5a00cbc943106803267c6058880425dda5d7792e0483ba5c85cb49.png deleted file mode 100644 index 0415bca..0000000 Binary files a/_images/1f5b63d62e5a00cbc943106803267c6058880425dda5d7792e0483ba5c85cb49.png and /dev/null differ diff --git a/_images/dce5c54680eea43a51eba7cca3eab836246e31e4cfc3ba68dbbb6deb0f916f60.png b/_images/2cd6e41eb60a04d3a8c8e0f3dba65e341e47847492ac3fca079ff7590d2d620a.png similarity index 99% rename from _images/dce5c54680eea43a51eba7cca3eab836246e31e4cfc3ba68dbbb6deb0f916f60.png rename to _images/2cd6e41eb60a04d3a8c8e0f3dba65e341e47847492ac3fca079ff7590d2d620a.png index d759fd7..3a63182 100644 Binary files a/_images/dce5c54680eea43a51eba7cca3eab836246e31e4cfc3ba68dbbb6deb0f916f60.png and b/_images/2cd6e41eb60a04d3a8c8e0f3dba65e341e47847492ac3fca079ff7590d2d620a.png differ diff --git a/_images/3749e58fcecefb63d415e0b714b69e9192e70263388392d014c8a7c1d59ce4a9.png b/_images/3749e58fcecefb63d415e0b714b69e9192e70263388392d014c8a7c1d59ce4a9.png new file mode 100644 index 0000000..c742795 Binary files /dev/null and b/_images/3749e58fcecefb63d415e0b714b69e9192e70263388392d014c8a7c1d59ce4a9.png differ diff --git a/_images/3dae57626a3b567cad10e9de720686602dd4cc325f35023bee1f01b70102c20e.png b/_images/3dae57626a3b567cad10e9de720686602dd4cc325f35023bee1f01b70102c20e.png new file mode 100644 index 0000000..96c407e Binary files /dev/null and b/_images/3dae57626a3b567cad10e9de720686602dd4cc325f35023bee1f01b70102c20e.png differ diff --git a/_images/42008612a1329165223a9fd1794d68c90873a5096831157c380fcab7c024af13.png b/_images/42008612a1329165223a9fd1794d68c90873a5096831157c380fcab7c024af13.png new file mode 100644 index 0000000..c1bcde5 Binary files /dev/null and b/_images/42008612a1329165223a9fd1794d68c90873a5096831157c380fcab7c024af13.png differ diff --git a/_images/3546bb5597287ebfce28138d3f0c3301184f9b348b30652fd13a4ead1aeffd74.png b/_images/531d77567c1b90a85a7388a909c47d032a11aa15a46de162b0d14eda6e65bcba.png similarity index 99% rename from _images/3546bb5597287ebfce28138d3f0c3301184f9b348b30652fd13a4ead1aeffd74.png rename to _images/531d77567c1b90a85a7388a909c47d032a11aa15a46de162b0d14eda6e65bcba.png index bfff5fe..eae7d9b 100644 Binary files a/_images/3546bb5597287ebfce28138d3f0c3301184f9b348b30652fd13a4ead1aeffd74.png and b/_images/531d77567c1b90a85a7388a909c47d032a11aa15a46de162b0d14eda6e65bcba.png differ diff --git a/_images/7243bfe4087b822870d5a18726e2015d293585820184dceef5d55a768a49f971.png b/_images/7243bfe4087b822870d5a18726e2015d293585820184dceef5d55a768a49f971.png new file mode 100644 index 0000000..3e5f886 Binary files /dev/null and b/_images/7243bfe4087b822870d5a18726e2015d293585820184dceef5d55a768a49f971.png differ diff --git a/_images/7b80001d91b87326c24c871092a270c632c04265556c4454fefb4ae4d4182f6c.png b/_images/7b80001d91b87326c24c871092a270c632c04265556c4454fefb4ae4d4182f6c.png deleted file mode 100644 index ffc9a18..0000000 Binary files a/_images/7b80001d91b87326c24c871092a270c632c04265556c4454fefb4ae4d4182f6c.png and /dev/null differ diff --git a/_images/96cac43e64f29eac6c718d74ff130cf052a7c9c6ecbf8ea79a015d4d489f4ba2.png b/_images/96cac43e64f29eac6c718d74ff130cf052a7c9c6ecbf8ea79a015d4d489f4ba2.png new file mode 100644 index 0000000..53ac2d5 Binary files /dev/null and b/_images/96cac43e64f29eac6c718d74ff130cf052a7c9c6ecbf8ea79a015d4d489f4ba2.png differ diff --git a/_images/a988b7d4757a7138202e15a39862388c23c170829066954c0ee7c871160e234f.png b/_images/a988b7d4757a7138202e15a39862388c23c170829066954c0ee7c871160e234f.png new file mode 100644 index 0000000..2fb6bd4 Binary files /dev/null and b/_images/a988b7d4757a7138202e15a39862388c23c170829066954c0ee7c871160e234f.png differ diff --git a/_images/b7988e5bd39d763183aca67a8f9c83ac6830064f7e1a5bd3c28d512a00444a3b.png b/_images/b7988e5bd39d763183aca67a8f9c83ac6830064f7e1a5bd3c28d512a00444a3b.png deleted file mode 100644 index 37b1ce2..0000000 Binary files a/_images/b7988e5bd39d763183aca67a8f9c83ac6830064f7e1a5bd3c28d512a00444a3b.png and /dev/null differ diff --git a/_images/c7580ac5663c46303460d6f091cc21b73bc5411a08410629a341127cd023ae44.png b/_images/c7580ac5663c46303460d6f091cc21b73bc5411a08410629a341127cd023ae44.png deleted file mode 100644 index 780dc7e..0000000 Binary files a/_images/c7580ac5663c46303460d6f091cc21b73bc5411a08410629a341127cd023ae44.png and /dev/null differ diff --git a/_images/cfe10624ec001205eb75198db6126ff26b314565b0abd800cd2efc1843999535.png b/_images/cfe10624ec001205eb75198db6126ff26b314565b0abd800cd2efc1843999535.png new file mode 100644 index 0000000..be17bb6 Binary files /dev/null and b/_images/cfe10624ec001205eb75198db6126ff26b314565b0abd800cd2efc1843999535.png differ diff --git a/_images/d70dbfca93a92ffeb2fa2af6b350d6cb30bb45aec2763c2c2d9de82f4f028807.png b/_images/d70dbfca93a92ffeb2fa2af6b350d6cb30bb45aec2763c2c2d9de82f4f028807.png deleted file mode 100644 index 9f1a690..0000000 Binary files a/_images/d70dbfca93a92ffeb2fa2af6b350d6cb30bb45aec2763c2c2d9de82f4f028807.png and /dev/null differ diff --git a/_sources/notebooks/interface_to_spice.ipynb b/_sources/notebooks/interface_to_spice.ipynb index 10f9c15..eb71feb 100644 --- a/_sources/notebooks/interface_to_spice.ipynb +++ b/_sources/notebooks/interface_to_spice.ipynb @@ -322,7 +322,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.3" + "version": "3.11.9" } }, "nbformat": 4, diff --git a/_sources/notebooks/udp_pl2pl.ipynb b/_sources/notebooks/udp_pl2pl.ipynb index cb1af3c..380bbd6 100644 --- a/_sources/notebooks/udp_pl2pl.ipynb +++ b/_sources/notebooks/udp_pl2pl.ipynb @@ -8,7 +8,7 @@ "\n", "In this tutorial we show the use of the {class}`pykep.trajopt.direct_pl2pl` to find a low-thrust trajectory connecting two moving planets. \n", "\n", - "The decision vector in this class compatible with {cite:p}`pagmo` UDPs (User Defined Problems) is:\n", + "The decision vector for this class, compatible with {cite:p}`pagmo` UDPs (User Defined Problems), is:\n", "\n", "$$\n", "\\mathbf x = [t_0, m_f, V_{sx}^\\infty, V^\\infty_{sy}, V^\\infty_{sz}, V^\\infty_{fx}, V^\\infty_{fy}, V^\\infty_{fz}, u_{x0}, u_{y0}, u_{z0}, u_{x1}, u_{y1}, u_{z1}, ..., T_{tof}]\n", @@ -24,12 +24,12 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ - "import pykep as _pk\n", - "import numpy as _np\n", + "import pykep as pk\n", + "import numpy as np\n", "import time\n", "import pygmo as pg\n", "import pygmo_plugins_nonfree as ppnf\n", @@ -38,399 +38,299 @@ "from matplotlib import pyplot as plt" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We start defining the problem data." + ] + }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 68, "metadata": {}, - "outputs": [ - { - "ename": "AttributeError", - "evalue": "'pykep.core.planet' object has no attribute 'mu_central_body'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[1], line 7\u001b[0m\n\u001b[1;32m 4\u001b[0m earth \u001b[38;5;241m=\u001b[39m _pk\u001b[38;5;241m.\u001b[39mplanet(_pk\u001b[38;5;241m.\u001b[39mudpla\u001b[38;5;241m.\u001b[39mjpl_lp(body\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mEARTH\u001b[39m\u001b[38;5;124m\"\u001b[39m))\n\u001b[1;32m 5\u001b[0m mars \u001b[38;5;241m=\u001b[39m _pk\u001b[38;5;241m.\u001b[39mplanet(_pk\u001b[38;5;241m.\u001b[39mudpla\u001b[38;5;241m.\u001b[39mjpl_lp(body\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mMARS\u001b[39m\u001b[38;5;124m\"\u001b[39m))\n\u001b[0;32m----> 7\u001b[0m \u001b[38;5;28;43;01mclass\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;21;43;01mdirect_pl2pl\u001b[39;49;00m\u001b[43m:\u001b[49m\n\u001b[1;32m 8\u001b[0m \u001b[38;5;250;43m \u001b[39;49m\u001b[38;5;124;43;03m\"\"\"Represents the optimal low-thrust transfer between two :class:`~pykep.planet` using a direct method.\u001b[39;49;00m\n\u001b[1;32m 9\u001b[0m \n\u001b[1;32m 10\u001b[0m \u001b[38;5;124;43;03m This problem works internally using the :class:`~pykep.leg.sims_flanagan` and manipulates its initial and final states, as well as its transfer time T, final mass mf\u001b[39;49;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 21\u001b[0m \n\u001b[1;32m 22\u001b[0m \u001b[38;5;124;43;03m \"\"\"\u001b[39;49;00m\n\u001b[1;32m 24\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mdef\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;21;43m__init__\u001b[39;49m\u001b[43m(\u001b[49m\n\u001b[1;32m 25\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 26\u001b[0m \u001b[43m \u001b[49m\u001b[43mpls\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mearth\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 39\u001b[0m \u001b[43m \u001b[49m\u001b[43mwith_gradient\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 40\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\u001b[43m:\u001b[49m\n", - "Cell \u001b[0;32mIn[1], line 29\u001b[0m, in \u001b[0;36mdirect_pl2pl\u001b[0;34m()\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[38;5;28;01mclass\u001b[39;00m \u001b[38;5;21;01mdirect_pl2pl\u001b[39;00m:\n\u001b[1;32m 8\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Represents the optimal low-thrust transfer between two :class:`~pykep.planet` using a direct method.\u001b[39;00m\n\u001b[1;32m 9\u001b[0m \n\u001b[1;32m 10\u001b[0m \u001b[38;5;124;03m This problem works internally using the :class:`~pykep.leg.sims_flanagan` and manipulates its initial and final states, as well as its transfer time T, final mass mf\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 21\u001b[0m \n\u001b[1;32m 22\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[1;32m 24\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__init__\u001b[39m(\n\u001b[1;32m 25\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 26\u001b[0m pls\u001b[38;5;241m=\u001b[39mearth,\n\u001b[1;32m 27\u001b[0m plf\u001b[38;5;241m=\u001b[39mmars,\n\u001b[1;32m 28\u001b[0m ms\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1000\u001b[39m,\n\u001b[0;32m---> 29\u001b[0m mu\u001b[38;5;241m=\u001b[39m\u001b[43mearth\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmu_central_body\u001b[49m(),\n\u001b[1;32m 30\u001b[0m max_thrust\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0.12\u001b[39m,\n\u001b[1;32m 31\u001b[0m isp\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m3000\u001b[39m,\n\u001b[1;32m 32\u001b[0m tof_bounds\u001b[38;5;241m=\u001b[39m[\u001b[38;5;241m80\u001b[39m, \u001b[38;5;241m400\u001b[39m],\n\u001b[1;32m 33\u001b[0m mf_bounds\u001b[38;5;241m=\u001b[39m[\u001b[38;5;241m200.0\u001b[39m, \u001b[38;5;241m1000.0\u001b[39m],\n\u001b[1;32m 34\u001b[0m nseg\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m10\u001b[39m,\n\u001b[1;32m 35\u001b[0m cut\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0.6\u001b[39m,\n\u001b[1;32m 36\u001b[0m mass_scaling\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1000\u001b[39m,\n\u001b[1;32m 37\u001b[0m r_scaling\u001b[38;5;241m=\u001b[39m_pk\u001b[38;5;241m.\u001b[39mAU,\n\u001b[1;32m 38\u001b[0m v_scaling\u001b[38;5;241m=\u001b[39m_pk\u001b[38;5;241m.\u001b[39mEARTH_VELOCITY,\n\u001b[1;32m 39\u001b[0m with_gradient\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[1;32m 40\u001b[0m ):\n\u001b[1;32m 41\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 42\u001b[0m \u001b[38;5;124;03m Initializes the direct_point2point instance with given parameters.\u001b[39;00m\n\u001b[1;32m 43\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 72\u001b[0m \n\u001b[1;32m 73\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[1;32m 74\u001b[0m \u001b[38;5;66;03m# We add as data member one single Sims-Flanagan leg using the problem data\u001b[39;00m\n\u001b[1;32m 75\u001b[0m \u001b[38;5;66;03m# and some temporary (and unused, thus irrelelvant) values for the to-be-optimzed parameters throttles, tof and mf.\u001b[39;00m\n", - "\u001b[0;31mAttributeError\u001b[0m: 'pykep.core.planet' object has no attribute 'mu_central_body'" - ] - } - ], + "outputs": [], "source": [ - "import numpy as _np\n", - "import pykep as _pk\n", - "\n", - "earth = _pk.planet(_pk.udpla.jpl_lp(body=\"EARTH\"))\n", - "mars = _pk.planet(_pk.udpla.jpl_lp(body=\"MARS\"))\n", - "\n", - "class direct_pl2pl:\n", - " \"\"\"Represents the optimal low-thrust transfer between two :class:`~pykep.planet` using a direct method.\n", - "\n", - " This problem works internally using the :class:`~pykep.leg.sims_flanagan` and manipulates its initial and final states, as well as its transfer time T, final mass mf\n", - " and the controls as to link the two planets with a low-thrust trajectory.\n", - "\n", - " It can be used to better profile and understand performances of optimizers on this type of direct approach, but has a limited use\n", - " in the design of interplanetary trajectories as per the fixed point limitation.\n", - "\n", - " The decision vector is::\n", + "# Problem data\n", + "mu = pk.MU_SUN\n", + "max_thrust = 0.3\n", + "isp = 3000\n", "\n", - " z = [t0, mf, Vsx, Vsy, Vsz, Vfx, Vfy, Vfz, throttles, tof]\n", + "# Source and destination planets\n", + "earth = pk.planet_to_keplerian(\n", + " pk.planet(pk.udpla.jpl_lp(body=\"EARTH\")), when=pk.epoch(5000)\n", + ")\n", + "mars = pk.planet_to_keplerian(\n", + " pk.planet(pk.udpla.jpl_lp(body=\"MARS\")), when=pk.epoch(5000)\n", + ")\n", "\n", - " where throttles is a vector of throttles structures as [u0x, u0y,u0z, ...]\n", + "# Initial state\n", + "ms = 1500.0\n", "\n", - " \"\"\"\n", + "# Number of segments\n", + "nseg = 10" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We here instantiate two different versions of the same UDP (User Defined Problem), with analytical gradients and without. \n", "\n", - " def __init__(\n", - " self,\n", + "For the purpose of this simple notebook we choose a relatively simple Earth to Mars transfer with an initial $V_{\\infty}$ of 3 km/s." + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [], + "source": [ + "udp_nog = pk.trajopt.direct_pl2pl(\n", " pls=earth,\n", " plf=mars,\n", - " ms=1000,\n", - " max_thrust=0.12,\n", + " ms=ms,\n", + " mu=pk.MU_SUN,\n", + " max_thrust=max_thrust,\n", " isp=3000,\n", - " t0_bounds=[4000, 5000],\n", - " tof_bounds=[80, 400],\n", - " mf_bounds=[200.0, 1000.0],\n", - " vinf_dep=1e-3,\n", - " vinf_arr=1e-3,\n", - " nseg=10,\n", + " t0_bounds=[6700.0, 6800.0],\n", + " tof_bounds=[200.0, 300.0],\n", + " mf_bounds=[1300., ms],\n", + " vinfs=3.,\n", + " vinff=0.,\n", + " nseg=nseg,\n", " cut=0.6,\n", - " mass_scaling=1000,\n", - " r_scaling=_pk.AU,\n", - " v_scaling=_pk.EARTH_VELOCITY,\n", + " mass_scaling=ms,\n", + " r_scaling=pk.AU,\n", + " v_scaling=pk.EARTH_VELOCITY,\n", " with_gradient=False,\n", - " ):\n", - " \"\"\"\n", - " Initializes the direct_pl2pl instance with given parameters.\n", - "\n", - " Args:\n", - " *rvs* (:class:`list`): Initial position and velocity vectors. Defaults to two vectors scaled by :class:`~pykep.AU` and Earth's velocity.\n", - "\n", - " *rvf* (:class:`list`): Final position and velocity vectors. Defaults to two vectors scaled by :class:`~pykep.AU` and Earth's velocity.\n", - "\n", - " *ms* (:class:`float`): Initial spacecraft mass in kg. Defaults to 1000 kg.\n", - "\n", - " *mu* (:class:`float`): Gravitational parameter, default is for the Sun (:class:`~pykep.MU_SUN`).\n", - "\n", - " *max_thrust* (:class:`float`): Maximum thrust in Newtons. Defaults to 0.12 N.\n", - "\n", - " *isp* (:class:`float`): Specific impulse in seconds. Defaults to 3000 s.\n", - " \n", - " *t0_bounds* (:class:`list`): Bounds for departure epoch in MJD2000. Defaults to [4000, 5000] days.\n", - "\n", - " *tof_bounds* (:class:`list`): Bounds for time of flight in days. Defaults to [0, 400] days.\n", - "\n", - " *mf_bounds* (:class:`list`): Bounds for final mass in kg. Defaults to [200.0, 1000.0] kg.\n", - " \n", - " *vinf_dep* (:class:`float`): Allowed magnitude for the departure's relative velocity in km/s. Defaults to 1e-3.\n", - "\n", - " *vinf_arr* (:class:`float`): Allowed magnitude for the arrival's relative velocity in km/s. Defaults to 1e-3.\n", - "\n", - " *nseg* (:class:`int`): Number of segments for the trajectory. Defaults to 10.\n", - "\n", - " *cut* (:class:`float`): Cut parameter for the :class:`~pykep.leg.sims_flanagan`. Defaults to 0.6.\n", - "\n", - " *mass_scaling* (:class:`float`): Scaling factor for mass (used to scale constraints). Defaults to 1000.\n", - "\n", - " *r_scaling* (:class:`float`): Scaling factor for distance, (used to scale constraints). Defaults AU (:class:`~pykep.AU`).\n", - "\n", - " *v_scaling* (:class:`float`): Scaling factor for velocity (used to scale constraints). Defaults the Earth's velocity (:class:`~pykep.EARTH_VELOCITY`).\n", - "\n", - " *with_gradient* (:class:`bool`): Indicates if gradient information should be used. Defaults True.\n", - "\n", - " \"\"\"\n", - " # We add as data member one single Sims-Flanagan leg using the problem data\n", - " # and some temporary (and unused, thus irrelelvant) values for the to-be-optimzed parameters throttles, tof and mf.\n", - " throttles = _np.random.uniform(-1, 1, size=(nseg * 3))\n", - " self.leg = _pk.leg.sims_flanagan(\n", - " rvs=rvs,\n", - " ms=ms,\n", - " throttles=throttles,\n", - " rvf=rvf,\n", - " mf=_np.mean(mf_bounds),\n", - " tof=_np.mean(tof_bounds) * _pk.DAY2SEC,\n", - " max_thrust=max_thrust,\n", - " isp=isp,\n", - " mu=mu,\n", - " cut=cut,\n", - " )\n", - " self.tof_bounds = tof_bounds\n", - " self.mf_bounds = mf_bounds\n", - " self.mass_scaling = mass_scaling\n", - " self.r_scaling = r_scaling\n", - " self.v_scaling = v_scaling\n", - " self.with_gradient = with_gradient\n", - "\n", - " def get_bounds(self):\n", - " lb = [self.mf_bounds[0]] + [-1, -1, -1] * self.leg.nseg + [self.tof_bounds[0]]\n", - " ub = [self.mf_bounds[1]] + [1, 1, 1] * self.leg.nseg + [self.tof_bounds[1]]\n", - " return (lb, ub)\n", - "\n", - " def _set_leg_from_x(self, x):\n", - " # We set the leg using data in the decision vector\n", - " self.leg.tof = x[-1] * _pk.DAY2SEC\n", - " self.leg.mf = x[0]\n", - " self.leg.throttles = x[1:-1]\n", - "\n", - " def fitness(self, x):\n", - " # 1 - We set the leg using data in the decision vector\n", - " self._set_leg_from_x(x)\n", - " obj = -x[0] / self.mass_scaling\n", - "\n", - " # 2 - We compute the constraints violations (mismatch+throttle)\n", - " ceq = self.leg.compute_mismatch_constraints()\n", - " cineq = self.leg.compute_throttle_constraints()\n", - " retval = _np.array([obj] + ceq + cineq) # here we can sum lists\n", - "\n", - " # 3 - We scale the values in nd units (numerical solvers are sensitive to well-scaled values)\n", - " retval[1:4] /= self.r_scaling\n", - " retval[4:7] /= self.v_scaling\n", - " retval[7] /= self.mass_scaling\n", - "\n", - " return retval\n", - "\n", - " def has_gradient(self):\n", - " return self.with_gradient\n", - "\n", - " def gradient(self, x):\n", - " self._set_leg_from_x(x)\n", - " _, mcg_xf, mcg_th_tof = self.leg.compute_mc_grad()\n", - " tcg_th = self.leg.compute_tc_grad()\n", - "\n", - " # 1 - The gradient of the objective function (obj = -mf)\n", - " retval = [-1.0 / self.mass_scaling]\n", - " # 2 - The gradient of the mismatch contraints (mcg). We divide them in pos, vel mass as they have different scaling units\n", - " # pos\n", - " for i in range(3):\n", - " # First w.r.t. mf\n", - " retval.append(mcg_xf[i, -1] / self.r_scaling)\n", - " # Then the [throttles, tof]\n", - " retval.extend(mcg_th_tof[i, :] / self.r_scaling)\n", - " retval[-1] *= _pk.DAY2SEC\n", - " # vel\n", - " for i in range(3, 6):\n", - " # First w.r.t. mf\n", - " retval.append(mcg_xf[i, -1] / self.v_scaling)\n", - " # Then the [throttles, tof]\n", - " retval.extend(mcg_th_tof[i, :] / self.v_scaling)\n", - " retval[-1] *= _pk.DAY2SEC\n", - " # mass\n", - " for i in range(6, 7):\n", - " # First w.r.t. mf\n", - " retval.append(mcg_xf[i, -1] / self.mass_scaling)\n", - " # Then the [throttles, tof]\n", - " retval.extend(mcg_th_tof[i, :] / self.mass_scaling)\n", - " retval[-1] *= _pk.DAY2SEC\n", - " # 3 - The gradient of the throttle constraints\n", - " for i in range(self.leg.nseg):\n", - " retval.extend(tcg_th[i, 3 * i : 3 * i + 3])\n", - "\n", - " return retval\n", - "\n", - " def gradient_sparsity(self):\n", - " dim = 2 + 3 * self.leg.nseg\n", - " # The objective function only depends on the final mass, which is in the chromosome.\n", - " retval = [[0, 0]]\n", - " # The mismatch constraints depend on all variables.\n", - " for i in range(1, 8):\n", - " for j in range(dim):\n", - " retval.append([i, j])\n", - " # The throttle constraints only depend on the specific throttles (3).\n", - " for i in range(self.leg.nseg):\n", - " retval.append([8 + i, 3 * i + 1])\n", - " retval.append([8 + i, 3 * i + 2])\n", - " retval.append([8 + i, 3 * i + 3])\n", - " # We return the sparsity pattern\n", - " return retval\n", - "\n", - " def get_nec(self):\n", - " return 7\n", - "\n", - " def get_nic(self):\n", - " return self.leg.nseg\n", - "\n", - " def pretty(self, x):\n", - " \"\"\"\n", - " Prints a detailed representation of the Point to point problem.\n", - "\n", - " Args:\n", - " *x* (:class:`list`): The decision vector containing final mass, thrust direction, and time of flight.\n", - " \"\"\"\n", - " self._set_leg_from_x(x)\n", - " print(self.leg)\n", - "\n", - " def plot(\n", - " self,\n", - " x,\n", - " ax=None,\n", - " units=_pk.AU,\n", - " show_midpoints=False,\n", - " show_gridpoints=False,\n", - " show_throttles=False,\n", - " length=0.1,\n", - " arrow_length_ratio=0.05,\n", - " **kwargs\n", - " ):\n", - " \"\"\"\n", - " Plots the trajectory leg 3D axes.\n", - "\n", - " Args:\n", - " *x* (:class:`list`): The decision vector containing final mass, thrust direction, and time of flight.\n", - "\n", - " *ax* (:class:`mpl_toolkits.mplot3d.axes3d.Axes3D`, optional): The 3D axis to plot on. Defaults to None.\n", - "\n", - " *units* (:class:`float`, optional): The unit scale for the plot. Defaults to _pk.AU.\n", - "\n", - " *show_midpoints* (:class:`bool`, optional): Whether to show midpoints on the trajectory. Defaults to False.\n", - "\n", - " *show_gridpoints* (:class:`bool`, optional): Whether to show grid points on the trajectory. Defaults to False.\n", - "\n", - " *show_throttles* (:class:`bool`, optional): Whether to show throttle vectors. Defaults to False.\n", - "\n", - " *length* (:class:`float`, optional): Length of the throttle vectors. Defaults to 0.1.\n", - "\n", - " *arrow_length_ratio* (:class:`float`, optional): Arrow length ratio for the throttle vectors. Defaults to 0.05.\n", - "\n", - " *\\*\\*kwargs*: Additional keyword arguments for the plot.\n", - "\n", - " Returns:\n", - " :class:`mpl_toolkits.mplot3d.axes3d.Axes3D`: The 3D axis with the plotted trajectory.\n", - " \"\"\"\n", - " self._set_leg_from_x(x)\n", - " sf = self.leg\n", - " # Making the axis\n", - " if ax is None:\n", - " ax = _pk.plot.make_3Daxis(figsize=(7, 7))\n", - "\n", - " rs, _ = sf.rvs\n", - " rf, _ = sf.rvf\n", - " ax.scatter(rs[0] / _pk.AU, rs[1] / units, rs[2] / units, c=\"k\", s=20)\n", - " ax.scatter(rf[0] / _pk.AU, rf[1] / units, rf[2] / units, c=\"k\", s=20)\n", + ")\n", "\n", - " # Plotting the trajctory leg\n", - " ax = _pk.plot.add_sf_leg(\n", - " ax,\n", - " sf,\n", - " units=units,\n", - " show_throttles=show_throttles,\n", - " length=length,\n", - " show_gridpoints=show_gridpoints,\n", - " show_midpoints=show_midpoints,\n", - " arrow_length_ratio=arrow_length_ratio,\n", - " **kwargs\n", - " )\n", + "udp_g = pk.trajopt.direct_pl2pl(\n", + " pls=earth,\n", + " plf=mars,\n", + " ms=ms,\n", + " mu=pk.MU_SUN,\n", + " max_thrust=max_thrust,\n", + " isp=3000,\n", + " t0_bounds=[6700.0, 6800.0],\n", + " tof_bounds=[200.0, 300.0],\n", + " mf_bounds=[1300., ms],\n", + " vinfs=3.,\n", + " vinff=0.,\n", + " nseg=nseg,\n", + " cut=0.6,\n", + " mass_scaling=ms,\n", + " r_scaling=pk.AU,\n", + " v_scaling=pk.EARTH_VELOCITY,\n", + " with_gradient=True,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Analytical performances of the analytical gradient\n", "\n", - " return ax\n" + "And we take a quick look at the performances of the analytical gradient with respect to the numerically computed one." ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 70, "metadata": {}, "outputs": [], "source": [ - "# Problem data\n", - "mu = pk.MU_SUN\n", - "max_thrust = 0.12\n", - "isp = 3000\n", - "\n", - "# Initial state\n", - "ms = 1500.0\n", - "rs = np.array([1.2, 0.0, -0.01]) * pk.AU\n", - "vs = np.array([0.01, 1, -0.01]) * pk.EARTH_VELOCITY\n", - "\n", - "# Final state\n", - "mf = 1300.0\n", - "rf = np.array([1, 0.0, -0.0]) * pk.AU\n", - "vf = np.array([0.01, 1.1, -0.0]) * pk.EARTH_VELOCITY\n", + "# We need to generste a random chromosomes compatible with the UDP where to test the gradient.\n", + "prob_g = pg.problem(udp_g)\n", + "pop_g = pg.population(prob_g, 1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First the analytical gradient:" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "166 μs ± 239 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n" + ] + } + ], + "source": [ + "%%timeit\n", + "udp_g.gradient(pop_g.champion_x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then a simple numerical gradient based on finite differences:" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.03 ms ± 618 ns per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" + ] + } + ], + "source": [ + "%%timeit\n", + "pg.estimate_gradient(udp_g.fitness, pop_g.champion_x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then a higher order numerical gradient:" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3.12 ms ± 34.8 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" + ] + } + ], + "source": [ + "%%timeit\n", + "pg.estimate_gradient_h(udp_g.fitness, pop_g.champion_x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The analytical gradient its exact and faster, seems like a no brainer to use it. \n", "\n", - "# Throttles and tof\n", - "nseg = 4\n", - "throttles = np.random.uniform(-1, 1, size=(nseg * 3))\n", - "tof = 2 * np.pi * np.sqrt(pk.AU**3 / pk.MU_SUN) / 4\n", + "In reality, the effects on the optimization technique used are not straightforward, making the option to use numerical gradients still interesting in some, albeit rare, cases." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Solving the low-thrust transfer\n", "\n", - "udp_nog = pk.trajopt.direct_point2point(\n", - " rvs=[rs, vs],\n", - " rvf=[rf, vf],\n", - " mu=pk.MU_SUN,\n", - " max_thrust=0.22,\n", - " isp=3000,\n", - " tof_bounds=[200, 500],\n", - " mf_bounds=[200.0, 1000.0],\n", - " nseg=nseg,\n", - " cut=0.6,\n", - " with_gradient=False,\n", - ")\n", + "We define (again) the optimization problem, and set a tolerance for *pagmo* to be able to judge the relative value of two individuals. \n", "\n", - "udp_g = pk.trajopt.direct_point2point(\n", - " rvs=[rs, vs],\n", - " rvf=[rf, vf],\n", - " mu=pk.MU_SUN,\n", - " max_thrust=0.22,\n", - " isp=3000,\n", - " tof_bounds=[200, 500],\n", - " mf_bounds=[200.0, 1000.0],\n", - " nseg=nseg,\n", - " cut=0.6,\n", - " with_gradient=True,\n", - ")" + ":::{note}\n", + "This tolerance has a different role from the numerical tolerance set in the particular algorithm chosen to solve the problem and is only used by the *pagmo* machinery to decide outside the optimizer whether the new proposed indivdual is better than what was the previous *champion*." ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 74, "metadata": {}, "outputs": [], "source": [ - "snopt72 = \"/usr/local/lib/libsnopt7_c.so\"\n", + "prob_g = pg.problem(udp_g)\n", + "prob_g.c_tol = 1e-6" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "... and we define an optimization algorithm." + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": {}, + "outputs": [], + "source": [ + "snopt72 = \"/Users/dario.izzo/opt/libsnopt7_c.dylib\"\n", "uda = ppnf.snopt7(library=snopt72, minor_version=2, screen_output=False)\n", "uda.set_integer_option(\"Major iterations limit\", 2000)\n", "uda.set_integer_option(\"Iterations limit\", 20000)\n", "uda.set_numeric_option(\"Major optimality tolerance\", 1e-3)\n", - "uda.set_numeric_option(\"Major feasibility tolerance\", 1e-12)\n", + "uda.set_numeric_option(\"Major feasibility tolerance\", 1e-11)\n", "\n", - "# uda = pg.nlopt(\"slsqp\")\n", + "#uda = pg.nlopt(\"slsqp\")\n", "algo = pg.algorithm(uda)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We solve the problem from random initial guess ten times and only save the result if a feasible solution is found (as defined by the criterias above)" + ] + }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 76, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "True\n" + ".......x..\n", + "Best mass is: 1344.393538122888\n", + "Worst mass is: 1300.026710328152\n" ] } ], "source": [ - "prob_nog = pg.problem(udp_nog)\n", - "prob_nog.c_tol = 1e-6\n", - "prob_g = pg.problem(udp_g)\n", - "prob_g.c_tol = 1e-6\n", - "pop_g = pg.population(prob_g, 1)\n", - "pop_g = algo.evolve(pop_g)\n", - "print(prob_g.feasibility_f(pop_g.champion_f))" + "masses = []\n", + "xs = []\n", + "for i in range(10):\n", + " pop_g = pg.population(prob_g, 1)\n", + " pop_g = algo.evolve(pop_g)\n", + " if(prob_g.feasibility_f(pop_g.champion_f)):\n", + " print(\".\", end=\"\")\n", + " masses.append(pop_g.champion_x[1])\n", + " xs.append(pop_g.champion_x)\n", + " else:\n", + " print(\"x\", end =\"\")\n", + "print(\"\\nBest mass is: \", np.max(masses))\n", + "print(\"Worst mass is: \", np.min(masses))\n", + "best_idx = np.argmax(masses)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And we plot the trajectory found:" ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 77, "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Mismatch on pos: [ 1.57696078e-12 1.61709535e-12 -1.75156764e-13]\n", - "Mismatch on mass: 4.126786734559573e-08\n" - ] - }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAi4AAAIvCAYAAABTFlB6AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABoH0lEQVR4nO39d3zV9f3//9/OOdmTDLKAhL1lBWUooIAo1FG0rW0tTmitb61oW6v101b7+3W3Vq1V68Q6Wtpa6wAHKkP23hBGAoQMsvdJznp9/wgciWxI8jqvc+7Xy+VcIOe8Ts7jmZOccz/P9bIZhmEgIiIiYgF2swsQEREROVsKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIi7eiZZ56hV69eREVFkZuby+eff37a45cuXUpubi5RUVH07t2b5557rs3tO3bs4MYbb6Rnz57YbDaeeOKJdnlcq1JwERERaSfz589n7ty5PPLII2zatIkJEyYwffp0Dh06dNLjCwoKmDFjBhMmTGDTpk389Kc/5Qc/+AFvvfWW/5impiZ69+7Nb3/7WzIyMtrlca3MZhiGYXYRIiIiwWDMmDGMGjWKZ5991n/doEGD+OpXv8pvfvObE47/yU9+wrvvvsuuXbv81911111s2bKFVatWnXB8z549mTt3LnPnzr2gx7Uy9biIiIhcoGeeeYaePXuydu1aPv744zbDNNOmTWPlypVtjj82PPSHP/yB4uLiNsNDV111FevXr2f+/PkMHjyYyMhIBg8ezNtvv93mezz66KPYbDZsNhtr167lueeea9Mjc7LHDQYKLiIiIhfg2DDNPffcA0Bubm6bYZr09HRKS0v9xx8/PJSdnc3kyZPbDA+lp6fj8Xj49re/zaxZs9iyZQuzZs3iG9/4Bi0tLW0ee8iQIWzatAmAd999l23btvlv+/LjBgsFFxERkfP0zDPPcMstt+D1enn11VcBuP/+++nRo4d/2MYwDGw2G9Da0zJu3DicTifvvvsuTqeTSy65hDvuuIM//vGPACxevBgAn8/Ha6+9xq5du3j44YeZMmUKdXV1/sd94okn2LlzJ7NmzQIgNTWVrl27+ms7/nGDiYKLiIjIeZg/fz733XcfHo+HJ554gssvvxyAbdu2tRmmKSsrIz093d/T4nA4uPnmm/npT39KeXk5y5cv9w8Pff755/z85z8H4Ec/+pG/p2XNmjVcddVVtLS0sGnTJubOncvEiROJiooiPz8fgB/84Af+/x//uMFGwUVEROQ8PP7443zrW9/C5/ORm5vLX/7yF6KionjuuefaDNMsWrSI8ePH89xzz5GdnU1sbCyDBg1i9uzZDBs2jMWLF/uHh/7whz/QrVs3bDYbI0eO9Pe0PPHEE6Snp+P1elmyZAl33nkn3//+93nttddYvXo1ERER7Nq1i/Hjx1NZWdnmcYNNmNkFiIiIWI3L5WLDhg1897vf5bXXXuOXv/wlq1atwu12s2nTJrKysnC5XNx///0cOnSIu+66i1mzZhEbG8uePXuA1sm1BQUFOJ1Orr/+egA+//xz6uvrsdvteDwe7r33XpYtW4bT6fTPZSksLKRfv37069ePqVOncvDgQX9NjY2NzJgxg/Hjx/sfN9iox0VEROQcVVRU4PV66du3LzabjV27dvHhhx8ye/ZsHA4HH374IQcPHmTZsmUsXLiQnJwcSktL8fl82O12FixYwOOPP85PfvIToHWvFoCamhpuueUWsrKyeO6553j77be57bbbAMjL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Q8FFRERELEPBRURERCxDwUVEREQsQ8FFRERELEPBRURERCxDwUVEREQsQ8FFRERELEPBRURERCxDwUVEREQsQ8FFRERELEPBRURERCxDwUVEREQsQ8FFRERELEPBRURERCxDwUVEREQsQ8FFRERELEPBRURERCxDwUVEREQsQ8FFRERELEPBRURERCxDwUVEREQsQ8FFRERELEPBRURERCxDwUVEREQsQ8FFRERELEPBRURERCxDwUVEREQsQ8FFRERELEPBRURERCxDwUVEREQsQ8FFRERELEPBRURERCxDwUVEREQsQ8FFRERELEPBRURERCxDwUVEREQsQ8FFRERELEPBRURERCxDwUVEREQsQ8FFRERELEPBRURERCxDwUVEREQsQ8FFRERELEPBRURERCxDwUVEREQsQ8FFRERELEPBRURERCxDwUVEREQsQ8FFRERELEPBRURERCxDwUVEREQsQ8FFRERELEPBRURERCxDwUVEREQsQ8FFRERELEPBRURERCxDwUVEREQsQ8FFRERELEPBRURERCxDwUVEREQsQ8FFRERELEPBRURERCxDwUVEREQsQ8FFRERELEPBRURERCxDwUVEREQsQ8FFRERELEPBRURERCxDwUVEREQsQ8FFRERELEPBRURERCxDwUVEREQsQ8FFRERELEPBRURERCxDwUVEREQsQ8FFRERELEPBRURERCxDwUVEREQsQ8FFRERELEPBRURERCxDwUVEREQsQ8FFRERELEPBRURERCxDwUVEREQsQ8FFRERELEPBRURERCxDwUVEREQsQ8FFRERELEPBRURERCxDwUVEREQsQ8FFRERELEPBRURERCxDwUVEREQsQ8FFRERELEPBRURERCxDwUVEREQsQ8FFRERELOP/Ax5WWfyVfBPhAAAAAElFTkSuQmCC", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAi4AAAIvCAYAAABTFlB6AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAACK/UlEQVR4nOzdeXgb9Z0/8PdodFuHb/k+Eie2c19Awk0pgXAUei1dWggUaFmWUkpZFsq2QPfX7ralbQotZbvQJuVo2S3QUgKFLOSAJJRcThxf8X2fsiTLuqX5/v5QZoiJk9iOpNFIn9fz6MGRdXwkpPF7vifHGGMghBBCCFEAldwFEEIIIYTMFAUXQgghhCgGBRdCCCGEKAYFF0IIIYQoBgUXQgghhCgGBRdCCCGEKAYFF0IIIYQoBgUXQgghhCgGBRdCCCGEKAYFF0IIIYQoBgUXQgghhCgGBRdCCCGEKAYFF0IIIYQoBgUXQgghhCgGBRdCCCGEKAYFF0IIIYQoBgUXQgghhCgGBRdCCCGEKAYFF0IIIYQoBgUXQgghhCgGBRdCCCGEKAYFF0IIIYQoBgUXQgghhCgGBRdCCCGEKAYFF0IIIYQoBgUXQgghhCgGBRdCCCGEKAYFF0IIIYQoBgUXQgghhCgGBRdCCCGEKAYFF0IIIYQoBgUXQgghhCgGBRdCCCGEKAYFF0IIIYQoBgUXQgghhCgGBRdCCCGEKAYFF0IIIYQoBgUXQgghhCgGBRdCCCGEKAYFF0IIIYQoBgUXQgghhCgGBRdCCCGEKAYFF0IIIYQoBgUXQgghhCgGBRdCCCGEKAYFF0IIIYQoBgUXQgghhCgGBRdCCCGEKAYFF0IIIYQoBgUXQgghhCgGBRdCCCGEKAYFF0IIIYQoBgUXQgghhCgGBRdCCCGEKAYFF0IIIYQoBgUXQgghhCgGBRdCCCGEKAYFF0IIIYQoBgUXQgghhCgGBRdCCCGEKAYFF0IIIYQoBgUXQgghhCgGBRdCCCGEKAYFF0IIIYQoBgUXQgghhCgGBRdCCCGEKAYFF0IIIYQoBgUXQgghhCgGBRdCCCGEKAYFF0IIIYQoBgUXQgghhCgGBRdCCCGEKAYFF0IIIYQoBgUXQgghJE6efvppVFZWQq/XY/Xq1Xj//fdPe/udO3di9erV0Ov1mDdvHp555plT3vaPf/wjOI7DDTfcEOOqkxsFF0IIISQOXn75Zdx333145JFHcOjQIVx00UXYsGEDenp6pr19Z2cnrr76alx00UU4dOgQvvOd7+Dee+/FK6+8ctJtu7u78cADD+Ciiy6K98tIOhxjjMldBCGEEJJqzjvvPKxatQq//vWvpetqa2txww034D/+4z9Ouv2//uu/4vXXX0dTU5N03V133YXDhw9j79690nWRSASXXHIJbrvtNrz//vtwOp3485//HNfXkkyoxYUQQgiJsWAwiAMHDmD9+vVTrl+/fj327Nkz7X327t170u2vvPJK7N+/H6FQSLru+9//PvLy8nD77bfHvnAFoOBCCCGExNDTTz+N+fPnIxKJ4KGHHpoyrsVms2FoaGjK7cVxLR988AGef/75KeNabDYbwuEwLrzwQmRlZcFsNuNHP/oR/umf/ilhryfZUHAhhBBCYkQc1/LNb34TALBixYop41oYY+A4Trr9ieNaysrKcOmll04Z1yKO5rjhhhvwxhtvwGq14uKLL8Y//MM/oL+/P8GvLjlQcCGEEEJi5Gc/+xluv/123HvvveB5Hl/60pdQWloqjXMZGRmBzWaTbv/MM8+grKwMmzZtQllZGUpLS/HVr34VTzzxhHR7tVqNBx54ABkZGejv78d7770Hl8uFsrIy/P73v8frr78OtVqN9vZ2WV5zolFwIYQQQs7S008/jYqKCnz00Ud455138Pe//x2rV6/Gtm3bpoxr2bZtG84//3ype+gnP/kJBgYG8Mwzz2DdunXYtm2bNK7l5Zdfxle/+lVEIhEsX74cLS0tqK+vx+7du6HVavHkk0/iM5/5DC677DLU1dWhtLRU5nchMSi4EEIIIWdB7B665557AACrV6/Ghg0bcMstt+DZZ59Fb28vuru78a1vfQs9PT245pprcPXVV0OlUsFoNOJTn/oU7r33XpSXl6O7uxsvv/wywuEw/vEf/xFutxubNm3CzTffjK985SvweDz4/e9/j9LSUtx+++3IzMyE2WzGkiVLoNVqZX4nEkMtdwGEEEKIkondQzfddBP+5V/+Bd/61rdQX1+Pvr4+bNq0CY888ghcLhd27dqFN998E3/9619RVlaGxYsXo6GhAeeeey5sNhuef/55vPnmm/ja174GANDpdPj5z3+Ou+66C0B0EO/Xv/519PT0YMeOHdDr9XK+bNnQOi6EEELIHAWDQRiN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", "text/plain": [ "
" ] @@ -440,30 +340,40 @@ } ], "source": [ - "ax = udp_nog.plot(pop_g.get_x()[0], show_gridpoints=True)\n", + "ax = udp_g.plot(xs[best_idx], show_gridpoints=True)\n", "ax.view_init(90, 0)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Graident vs no gradient\n", + "We here take a look at the difference in solving the problem using the analytical gradient and not using it.\n", + "To do so we solve the same problem starting from 100 different initial guesses using both versions and compare." + ] + }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 78, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "100%|██████████| 2000/2000 [02:18<00:00, 14.45it/s]" + "100%|██████████| 100/100 [02:09<00:00, 1.29s/it]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Gradient: 1.8443e-02s\n", - "No Gradient: 3.0552e-02s\n", - "Gradient: 192\n", - "No Gradient: 188\n" + "Gradient: 4.8809e-01s\n", + "No Gradient: 5.5510e-01s\n", + "\n", + "Gradient (n.fails): 7\n", + "No Gradient (n.fails): 64\n" ] }, { @@ -483,25 +393,31 @@ "fail_g = 0\n", "fail_nog = 0\n", "\n", - "for i in tqdm(range(2000)):\n", - " pop_nog = pg.population(prob_nog, 1)\n", + "prob_g = pg.problem(udp_g)\n", + "prob_nog = pg.problem(udp_nog)\n", + "prob_g.c_tol = 1e-6\n", + "prob_nog.c_tol = 1e-6\n", "\n", - " pop_g = pg.population(prob_g)\n", - " pop_g.push_back(pop_nog.get_x()[0])\n", + "for i in tqdm(range(100)):\n", + " pop_g = pg.population(prob_g, 1)\n", + " pop_nog = pg.population(prob_nog)\n", + " pop_nog.push_back(pop_g.champion_x)\n", "\n", " start = time.time()\n", " pop_g = algo.evolve(pop_g)\n", " end = time.time()\n", - " cpu_g.append(end - start)\n", " if not prob_g.feasibility_f(pop_g.champion_f):\n", " fail_g += 1\n", + " else: # We only record the time for successfull attempts\n", + " cpu_g.append(end - start)\n", "\n", " start = time.time()\n", " pop_nog = algo.evolve(pop_nog)\n", " end = time.time()\n", - " cpu_nog.append(end - start)\n", " if not prob_nog.feasibility_f(pop_nog.champion_f):\n", " fail_nog += 1\n", + " else: # We only record the time for successfull attempts\n", + " cpu_nog.append(end - start)\n", "\n", "print(f\"Gradient: {np.median(cpu_g):.4e}s\")\n", "print(f\"No Gradient: {np.median(cpu_nog):.4e}s\")\n", @@ -512,12 +428,22 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 80, "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjYAAAHFCAYAAADhWLMfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABH60lEQVR4nO3deVxU5f///+eogKAD5gKIC+IuKpqailZiimba1zLfalpu7VauZZqZaO7lUlq2vEuo3DLNlrepZGoLqWiaprzNtyJqSpQLuKLA+f3Rh/k1gsjAwAzHx/12m5uc61znOq9rZg68vM51zrEYhmEIAADABEq5OgAAAABnIbEBAACmQWIDAABMg8QGAACYBokNAAAwDRIbAABgGiQ2AADANEhsAACAaZDYAAAA0yCxAdzM4MGDVatWrQJtGxcXp6ioKJ09e9auPDMzU3PnztXdd9+t6tWry8fHR40aNdK4ceNy1C0K0dHRslgsOnLkiMPbnjhxQlFRUdq9e7fT4rl06ZLq168vi8Wi1157zWntAnA9EhvAzUycOFGfffZZgbaNi4vT5MmTcyQrly5dUlRUlIKDgzV//nytXbtWjz32mN599121b99ely5dckLk19e9e3f99NNPqlq1qsPbnjhxQpMnT3ZqYjNx4kRduHDBae0BcB9lXB0AAHt16tRxepve3t5KTExUpUqVbGURERGqWbOm/vWvf2nVqlV66KGHnL7fbFWqVFGVKlWKrH1HbN++XQsWLNCSJUv0r3/9y9XhAHAyRmyAQoiKipLFYtGuXbvUq1cv+fr6ys/PTw899JD+/PNPu7pZWVmaPXu2GjZsKC8vL/n7+2vgwIE6fvy4Xb3cTkVZLBY988wz+uijj9SoUSP5+PioWbNm+uqrr+xief755yVJISEhslgsslgs2rx5s0qXLm2X1GRr3bq1JOnYsWO2ss2bN8tisejjjz/W6NGjFRgYKG9vb3Xo0EG7du3K0cYXX3yh8PBw+fj4yGq1KjIyUj/99JNdndxORUVERKhJkyaKj4/XHXfcIR8fH9WuXVszZ85UVlaWLZbbbrtNkjRkyBBbn6KionL7OG7oypUrGjp0qJ5++mm1atXKoW0XLVqkZs2aqXz58rJarWrYsKFefPFFuzrJycl64oknVL16dXl6eiokJESTJ09WRkaGXb3jx4+rd+/eslqtqlChggYMGKD4+HhZLBZFR0ffMJbff/9djz/+uGrUqCFPT08FBQWpd+/e+uOPPyRJly9f1pgxY9S8eXP5+fmpYsWKCg8P1+eff56jrZUrV6pNmzby8/OzfQZDhw61q5OWlqbnnntOISEh8vT0VLVq1TRy5EhGveCWGLEBnOD+++9Xnz599OSTT2rfvn2aOHGi9u/fr23btsnDw0OS9NRTT+ndd9/VM888ox49eujIkSOaOHGiNm/erJ9//lmVK1fOcx//+c9/FB8frylTpqh8+fKaPXu27r//fh04cEC1a9fWo48+qtOnT2vBggVavXq17bRPaGjoddv89ttvJUmNGzfOse7FF19UixYt9O9//1upqamKiopSRESEdu3apdq1a0uSli5dqgEDBqhLly5atmyZ0tPTNXv2bEVERGjjxo26/fbb8+xTcnKyBgwYoDFjxmjSpEn67LPPNH78eAUFBWngwIFq0aKFFi9erCFDhuill15S9+7dJUnVq1fPs93rmTJlii5cuKBXXnklR+KZl+XLl2vYsGF69tln9dprr6lUqVL63//+p/3799v1pXXr1ipVqpRefvll1alTRz/99JOmTp2qI0eOaPHixZKkCxcuqGPHjjp9+rRmzZqlunXrat26derbt2++Yvn9999122236erVq3rxxRcVFhamU6dOaf369Tpz5owCAgKUnp6u06dP67nnnlO1atV05coVffPNN+rVq5cWL16sgQMHSpJ++ukn9e3bV3379lVUVJTKli2rpKQk2/dCki5evKgOHTro+PHjtv3t27dPL7/8svbu3atvvvlGFosl3+8lUOQMAAU2adIkQ5IxatQou/IlS5YYkoyPP/7YMAzDSEhIMCQZw4YNs6u3bds2Q5Lx4osv2soGDRpkBAcH29WTZAQEBBhpaWm2suTkZKNUqVLGjBkzbGWvvvqqIclITEy8YezHjx83AgICjFatWhmZmZm28k2bNhmSjBYtWhhZWVm28iNHjhgeHh7Go48+ahiGYWRmZhpBQUFG06ZN7bY/d+6c4e/vb7Rr185Wtnjx4hxxdejQwZBkbNu2zS6u0NBQo2vXrrbl+Ph4Q5KxePHiG/YpL7t27TI8PDyMdevWGYZhGImJiYYk49VXX73hts8884xRoUKFPOs88cQTRvny5Y2kpCS78tdee82QZOzbt88wDMN48803DUnG119/nWP7/PRz6NChhoeHh7F///4bxp0tIyPDuHr1qvHII48Yt956a47Yzp49e91tZ8yYYZQqVcqIj4+3K//0008NScbatWvzHQdQHDgVBTjBgAED7Jb79OmjMmXKaNOmTZJk+3fw4MF29Vq3bq1GjRpp48aNN9xHx44dZbVabcsBAQHy9/dXUlKSw/GePn1a99xzjwzD0IoVK1SqVM5fBf3797f7n3hwcLDatWtn68uBAwd04sQJPfzww3bbly9fXg888IC2bt2qixcv5hlHYGCg7XRYtrCwsAL1KS8ZGRkaOnSo+vbtq65duzq8fevWrXX27Fk9+OCD+vzzz/XXX3/lqPPVV1+pY8eOCgoKUkZGhu3VrVs3SdKWLVts/1qtVt1999122z/44IP5iuXrr79Wx44d1ahRozzrrVy5Uu3bt1f58uVVpkwZeXh46P3331dCQoKtTvZpvj59+uiTTz7R77//nmu/mjRpoubNm9v1q2vXrrZTnYA7IbEBnCAwMNBuuUyZMqpUqZJOnTolSbZ/c7sqKCgoyLY+L7nNkfHy8nL4iqYzZ84oMjJSv//+u2JjY22nla51bZ+yy/Lbp6ysLJ05cybPWJzVpxuZP3++Dh8+rEmTJuns2bM6e/as0tLSJP09H+Xs2bPKzMy87vYPP/ywPvjgAyUlJemBBx6Qv7+/2rRpo9jYWFudP/74Q19++aU8PDzsXtmn+bKToVOnTikgICDHPnIry82ff/55w1Nxq1evVp8+fVStWjV9/PHH+umnnxQfH6+hQ4fq8uXLtnp33nmn1qxZo4yMDA0cOFDVq1dXkyZNtGzZMrt+7dmzJ0e/rFarDMPINckDXIk5NoATJCcnq1q1arbljIwMnTp1yvaHO/vfkydP5vijdOLEiRvOr3GWM2fOqHPnzkpMTNTGjRsVFhZ23brJycm5luXWp2udOHFCpUqV0i233OKkyAvn119/VWpqqurVq5dj3cSJEzVx4kTt2rVLzZs3v24bQ4YM0ZAhQ3ThwgV99913mjRpknr06KHffvtNwcHBqly5ssLCwjRt2rRctw8KCpL09/u2ffv2HOtze79zU6VKlRwTzq/18ccfKyQkRCtWrLAbdUtPT89Rt2fPnurZs6fS09O1detWzZgxQ/3791etWrUUHh6uypUry9vbWx988EGu+yqu7y6QX4zYAE6wZMkSu+VPPvlEGRkZioiIkCTdddddkv7+g/NP8fHxSkhIUKdOnZwSh5eXlyTlOuKRndQcPnxYGzZs0K233ppnW8uWLZNhGLblpKQkxcXF2frUoEEDVatWTUuXLrWrd+HCBa1atcp2pVRR9im/xo0bp02bNtm9skclnnzySW3atEl169bNV1vlypVTt27dNGHCBF25ckX79u2TJPXo0UO//vqr6tSpo1atWuV4ZSc2HTp00Llz5/T111/btbt8+fJ87b9bt27atGmTDhw4cN06FotFnp6edklNcnJyrldFZfPy8lKHDh00a9YsSbJdAdejRw8dOnRIlSpVyrVfBb2ZJFBUGLEBnGD16tUqU6aMIiMjbVdFNWvWTH369JH0dxLw+OOPa8GCBSpVqpS6detmuyqqRo0aGjVqlFPiaNq0qSTp9ddf16BBg+Th4aEGDRqoTJky6tq1q3bt2qX58+crIyNDW7dutW1XpUqVHPfPSUlJ0f3336/HHntMqampmjRpksqWLavx48dLkkqVKqXZs2drwIAB6tGjh5544gmlp6fr1Vdf1dmzZzVz5kyn9KlOnTry9vbWkiVL1KhRI5UvX15BQUEKCgrSkSNHFBISokGDBuV5mXTDhg3VsGFDu7LsS8/r1KljS9au57HHHpO3t7fat2+vqlWrKjk5WTNmzJCfn59tnsqUKVMUGxurdu3aafjw4WrQoIEuX76sI0eOaO3atXr77bdVvXp1DRo0SPPmzdNDDz2kqVOnqm7duvr666+1fv16Scp1vtM/TZkyRV9//bXuvPNOvfjii2ratKnOnj2rdevWafTo0WrYsKF69Oih1atXa9iwYerdu7eOHTumV155RVWrVtXBgwdtbb388ss6fvy4OnXqpOrVq+vs2bN6/fXX5eHhoQ4dOkiSRo4cqVWrVunOO+/UqFGjFBYWpqysLB09elQbNmzQmDFj1KZNmzxjBoqVa+cuAyVb9lVRO3fuNO69916jfPnyhtVqNR588EHjjz/+sKubmZlpzJo1y6hfv77h4eFhVK5c2XjooYeMY8eO2dW73lVRTz/9dI79BwcHG4MGDbIrGz9+vBEUFGSUKlXKkGRs2rTJdgXQ9V7/bCP7qqiPPvrIGD58uFGlShXDy8vLuOOOO4wdO3bkiGHNmjVGmzZtjLJlyxrlypUzOnXqZPz44492da53VVTjxo1ztJdb/5ctW2Y0bNjQ8PDwMCQZkyZNMgzDMPbu3WtIMsaNG5ejnRtx5KqomJgYo2PHjkZAQIDh6elpBAUFGX369DH27NljV+/PP/80hg8fboSEhBgeHh5GxYoVjZYtWxoTJkwwzp8/b6t39OhRo1evXrbvywMPPGCsXbvWkGR8/vnnN4zn2LFjxtChQ43AwEDDw8PDFs8/v3MzZ840atWqZXh5eRmNGjUy3nvvPdv3NdtXX31ldOvWzahWrZrh6elp+Pv7G/fcc4/x/fff2+3v/PnzxksvvWQ0aNDA8PT0NPz8/IymTZsao0aNMpKTk28YL1CcLIbxjzFkAA6JiorS5MmT9eeff5pmrsHmzZvVsWNHrVy5Ur1793Z1OHl66623NHbsWB06dCjfk2/d1fTp0/XSSy/p6NGjBb5PDwBORQEowTZt2qThw4eXuKRm4cKFkv4+RXb16lV9++23euONN/TQQw+R1ACFRGIDoMRauXKlq0MoEB8fH82bN09HjhxRenq6atasqRdeeEEvvfSSq0MDSjxORQEAANPgcm8AAGAaJDYAAMA0SGwAAIBpmH7ycFZWlk6cOCGr1Wp3F04AAOC+DMPQuXPnFBQUdMMbV/6T6RObEydOqEaNGq4OAwAAFMCxY8ccug2C6RMbq9Uq6e83xtfX18XRAACA/EhLS1ONGjVsf8fzy/SJTfbpJ19fXxIbAABKGEenkTB5GAAAmAaJDQAAMA0SGwAAYBqmn2MDAHA/mZmZunr1qqvDgAt5eHiodOnSTm+XxAYAUGwMw1BycrLOnj3r6lDgBipUqKDAwECn3meOxAYAUGyykxp/f3/5+Phw49SblGEYunjxolJSUiRJVatWdVrbJDYAgGKRmZlpS2oqVark6nDgYt7e3pKklJQU+fv7O+20FJOHAQDFIntOjY+Pj4sjgbvI/i44c74ViQ0AoFhx+gnZiuK7QGIDAABMg8QGAAA3EhUVpebNm9uWBw8erPvuu89l8ZQ0TB4GALjcvNjfim1foyLrF9u+nOH111+XYRhObTMqKkpr1qzR7t27ndquOyCxAQDAya5cuSJPT0+ntOXn5+eUdm4WnIoCAOAGzp07pwEDBqhcuXKqWrWq5s2bp4iICI0cOVKSVKtWLU2dOlWDBw+Wn5+fHnvsMUnSCy+8oPr168vHx0e1a9fWxIkTc1wBNHPmTAUEBMhqteqRRx7R5cuX7dZfeyrKMAzNnj1btWvXlre3t5o1a6ZPP/3Utn7z5s2yWCzauHGjWrVqJR8fH7Vr104HDhyQJEVHR2vy5Mn65ZdfZLFYZLFYFB0d7fw3zUVIbAAAuIHRo0frxx9/1BdffKHY2Fh9//33+vnnn+3qvPrqq2rSpIl27typiRMnSpKsVquio6O1f/9+vf7663rvvfc0b9482zaffPKJJk2apGnTpmnHjh2qWrWq3nrrrTxjeemll7R48WItWrRI+/bt06hRo/TQQw9py5YtdvUmTJigOXPmaMeOHSpTpoyGDh0qSerbt6/GjBmjxo0b6+TJkzp58qT69u3rjLfJLXAqyk1ce365pJ0DBgCzOnfunGJiYrR06VJ16tRJkrR48WIFBQXZ1bvrrrv03HPP2ZW99NJLtp9r1aqlMWPGaMWKFRo7dqwkaf78+Ro6dKgeffRRSdLUqVP1zTff5Bi1yXbhwgXNnTtX3377rcLDwyVJtWvX1g8//KB33nlHHTp0sNWdNm2abXncuHHq3r27Ll++LG9vb5UvX15lypRRYGBgYd4at0Ri46Zym0hHsgMAxe/w4cO6evWqWrdubSvz8/NTgwYN7Oq1atUqx7affvqp5s+fr//97386f/68MjIy5Ovra1ufkJCgJ5980m6b8PBwbdq0KddY9u/fr8uXLysyMtKu/MqVK7r11lvtysLCwmw/Zz+yICUlRTVr1syruyUeiQ0AAHnIviLp2pvJXXulUrly5eyWt27dqn79+mny5Mnq2rWr/Pz8tHz5cs2ZM6fAsWRlZUmS/vOf/6hatWp267y8vOyWPTw8bD9nx569vZmR2AAAkIc6derIw8ND27dvV40aNSRJaWlpOnjwoN2pn2v9+OOPCg4O1oQJE2xlSUlJdnUaNWqkrVu3auDAgbayrVu3XrfN0NBQeXl56ejRo3nu+0Y8PT2VmZlZ4O3dGYkNAAB5sFqtGjRokJ5//nlVrFhR/v7+mjRpkkqVKpXnIwHq1q2ro0ePavny5brtttv0n//8R5999pldnREjRmjQoEFq1aqVbr/9di1ZskT79u1T7dq1rxvLc889p1GjRikrK0u333670tLSFBcXp/Lly2vQoEH56lOtWrWUmJio3bt3q3r16rJarTlGfEoqrooCAOAG5s6dq/DwcPXo0UOdO3dW+/bt1ahRI5UtW/a62/Ts2VOjRo3SM888o+bNmysuLs52tVS2vn376uWXX9YLL7ygli1bKikpSU899VSesbzyyit6+eWXNWPGDDVq1Ehdu3bVl19+qZCQkHz354EHHtDdd9+tjh07qkqVKlq2bFm+t3V3FsPZtzN0M2lpafLz81NqaqrdhC13k5+7bjJ5GEBJdvnyZSUmJiokJCTPhKAkuHDhgqpVq6Y5c+bokUcecXU4JVZe34mC/v3mVBQAADewa9cu/fe//1Xr1q2VmpqqKVOmSPp7VAbuhcQGAIB8eO2113TgwAF5enqqZcuW+v7771W5cmVXh4VrkNgAAHADt956q3bu3OnqMJAPTB4GAACmQWIDAABMw6WJTVRUlO3Jotmvfz63wjAMRUVFKSgoSN7e3oqIiNC+fftcGDEAAHBnLh+x+efTRU+ePKm9e/fa1s2ePVtz587VwoULFR8fr8DAQEVGRurcuXMujBgAALgrlyc22U8XzX5VqVJF0t+jNfPnz9eECRPUq1cvNWnSRDExMbp48aKWLl3q4qgBAIA7cnlic/DgQQUFBSkkJET9+vXT4cOHJUmJiYlKTk5Wly5dbHW9vLzUoUMHxcXFXbe99PR0paWl2b0AAMDNwaWJTZs2bfThhx9q/fr1eu+995ScnKx27drp1KlTSk5OliQFBATYbRMQEGBbl5sZM2bIz8/P9sp+YBkAAJA2b94si8Wis2fPSpKio6NVoUIFl8bkTC69j023bt1sPzdt2lTh4eGqU6eOYmJi1LZtW0m5PyY+r4eOjR8/XqNHj7Ytp6WlkdwAgLvbNKP49tVxfPHtqwTo27ev7rnnHqe2uXnzZnXs2FFnzpwp9qTJ5aei/qlcuXJq2rSpDh48aLs66trRmZSUlByjOP/k5eUlX19fuxcAAGZy5coVp7Xl7e0tf39/p7Xnam6V2KSnpyshIUFVq1ZVSEiIAgMDFRsba1t/5coVbdmyRe3atXNhlACAm01ERISGDx+usWPHqmLFigoMDFRUVJRt/dGjR9WzZ0+VL19evr6+6tOnj/744498tz916lT5+/vLarXq0Ucf1bhx49S8eXPb+sGDB+u+++7TjBkzFBQUpPr1/34o8scff6xWrVrJarUqMDBQ/fv3V0pKil3ba9euVf369eXt7a2OHTvqyJEjdutzOxX15ZdfqmXLlipbtqxq166tyZMnKyMjw7beYrHo3//+t+6//375+PioXr16+uKLLyRJR44cUceOHSVJt9xyiywWiwYPHpzv96KwXJrYPPfcc9qyZYsSExO1bds29e7dW2lpaRo0aJAsFotGjhyp6dOn67PPPtOvv/6qwYMHy8fHR/3793dl2ACAm1BMTIzKlSunbdu2afbs2ZoyZYpiY2NlGIbuu+8+nT59Wlu2bFFsbKwOHTqkvn375qvdJUuWaNq0aZo1a5Z27typmjVratGiRTnqbdy4UQkJCYqNjdVXX30l6e//8L/yyiv65ZdftGbNGiUmJtolEceOHVOvXr10zz33aPfu3bakKS/r16/XQw89pOHDh2v//v165513FB0drWnTptnVmzx5svr06aM9e/bonnvu0YABA3T69GnVqFFDq1atkiQdOHBAJ0+e1Ouvv56v98IZXDrH5vjx43rwwQf1119/qUqVKmrbtq22bt2q4OBgSdLYsWN16dIlDRs2TGfOnFGbNm20YcMGWa1WV4YNALgJhYWFadKkSZKkevXqaeHChdq4caMkac+ePUpMTLTN6fzoo4/UuHFjxcfH67bbbsuz3QULFuiRRx7RkCFDJEkvv/yyNmzYoPPnz9vVK1eunP7973/L09PTVjZ06FDbz7Vr19Ybb7yh1q1b6/z58ypfvrwWLVqk2rVra968ebJYLGrQoIH27t2rWbNmXTeeadOmady4cRo0aJCt3VdeeUVjx4619V/6exTpwQcflCRNnz5dCxYs0Pbt23X33XerYsWKkiR/f/9in2Pj0sRm+fLlea63WCyKioqyG+4DAMAVwsLC7JarVq2qlJQUJSQkqEaNGnYXqoSGhqpChQpKSEi4YWJz4MABDRs2zK6sdevW+vbbb+3KmjZtapfUSNKuXbsUFRWl3bt36/Tp08rKypL096mx0NBQJSQkqG3btnYX3YSHh+cZz86dOxUfH283QpOZmanLly/r4sWL8vHxyfF+lCtXTlarNcdpMFfg6d4AAOSDh4eH3bLFYlFWVtZ1r9a90VW817Z17bbXKleunN3yhQsX1KVLF3Xp0kUff/yxqlSpoqNHj6pr1662ycW5tXMjWVlZmjx5snr16pVjXdmyZW0/X+/9cDUSGwAACiE0NFRHjx7VsWPHbKM2+/fvV2pqqho1anTD7Rs0aKDt27fr4YcftpXt2LHjhtv997//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++WO410TBwAAuXB48vD69esVGhqq7du3KywsTE2aNNG2bdvUuHFjxcbGFkWMAAAA+eLwiM24ceM0atQozZw5M0f5Cy+8wJVRAADAZRwesUlISNAjjzySo3zo0KHcoA8AALiUw4lNlSpVtHv37hzlu3fvlr+/vzNiAgAAKBCHT0U99thjevzxx3X48GG1a9dOFotFP/zwg2bNmqUxY8YURYwAAAD54nBiM3HiRFmtVs2ZM0fjx/99RUxQUJCioqI0fPhwpwcIAACQXw4nNhaLRaNGjdKoUaN07tw5SZLVanV6YAAAAI4q1FMrSWiKT9uj77o6BAAA3J7Dk4cBAADcFYkNAAAwDRIbAABgGiQ2AADANJyW2OzYsUPfffeds5oDAABwWKGuivqnhx9+WL/99psyMzOd1SQAAIBDnJbYbNy4UVevXnVWcwAAAA5zWmITFBTkrKYAAAAKhMnDAADANPI9YlOqVClZLJY861gsFmVkZBQ6KAAAgILId2Lz2WefXXddXFycFixYIMMwnBIUAABAQeT7VFTPnj1zvBo0aKDo6GjNmTNH//rXv3TgwAGHdj5jxgzddtttslqt8vf313333ZejDcMwFBUVpaCgIHl7eysiIkL79u1zaD8AAODmUKA5NidOnNBjjz2msLAwZWRkaPfu3YqJiVHNmjUdamfLli16+umntXXrVsXGxiojI0NdunTRhQsXbHVmz56tuXPnauHChYqPj1dgYKAiIyNtTxYHAADI5tBVUampqZo+fboWLFig5s2ba+PGjbrjjjsKvPN169bZLS9evFj+/v7auXOn7rzzThmGofnz52vChAnq1auXJCkmJkYBAQFaunSpnnjiiQLvGwAAmE++R2xmz56t2rVr66uvvtKyZcsUFxdXqKQmN6mpqZKkihUrSpISExOVnJysLl262Op4eXmpQ4cOiouLc+q+AQBAyZfvEZtx48bJ29tbdevWVUxMjGJiYnKtt3r16gIFYhiGRo8erdtvv11NmjSRJCUnJ0uSAgIC7OoGBAQoKSkp13bS09OVnp5uW05LSytQPAAAoOTJd2IzcODAG17uXRjPPPOM9uzZox9++CHHumv3axjGdWOZMWOGJk+eXCQxAgAA95bvxCY6OrrIgnj22Wf1xRdf6LvvvlP16tVt5YGBgZL+HrmpWrWqrTwlJSXHKE628ePHa/To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f59n/S1btqhly5YqW7asateurbfffjtHnVWrVik0NFReXl4KDQ3VZ599Vuj9Fpaz+/nee+/pjjvu0C233KJbbrlFnTt31vbt2+3qREVFyWKx2L0CAwOd3rdrObuv0dHROfphsVh0+bL9M1VK+mcaERGRaz+7d+9uq1MSPtOTJ0+qf//+atCggUqVKqWRI0fmWq+kH6f56ae7HqfO7qe7HqOO7jM/fXXX49SRfq5evVqRkZGqUqWKfH19FR4ervXr1+eoV2zHaMGe4uSeli9fbnh4eBjvvfeesX//fmPEiBFGuXLljKSkpFzrHz582PDx8TFGjBhh7N+/33jvvfcMDw8P49NPP7XViYuLM0qXLm1Mnz7dSEhIMKZPn26UKVPG2Lp1a4H364797N+/v/Hmm28au3btMhISEowhQ4YYfn5+xvHjx211Jk2aZDRu3Ng4efKk7ZWSklIkfSzKvi5evNjw9fW168fJkycLtV937OepU6fs+vfrr78apUuXNhYvXmyrUxI+08TERGP48OFGTEyM0bx5c2PEiBE56pjhOM1PP93xOC2KfrrjMVqQfeanr+54nDrazxEjRhizZs0ytm/fbvz222/G+PHjDQ8PD+Pnn3+21SnOY9RUiU3r1q2NJ5980q6sYcOGxrhx43KtP3bsWKNhw4Z2ZU888YTRtm1b23KfPn2Mu+++265O165djX79+hV4v4VVFP28VkZGhmG1Wo2YmBhb2aRJk4xmzZoVPPACKIq+Ll682PDz83PqfgurOD7TefPmGVar1Th//rytrCR8pv/UoUOHXP84mOE4/afr9fNa7nCcFkU/3fEYLew+8/uZusNx6oz3NjQ01Jg8ebJtuTiPUdOcirpy5Yp27typLl262JV36dJFcXFxuW7z008/5ajftWtX7dixQ1evXs2zTnabBdlvYRRVP6918eJFXb16VRUrVrQrP3jwoIKCghQSEqJ+/frp8OHDhehN3oqyr+fPn1dwcLCqV6+uHj16aNeuXYXab2EU12f6/vvvq1+/fipXrpxdubt/pvlhhuO0IFx9nBZlP93pGC3Ofbr6OHVGP7OysnTu3Dm772VxHqOmSWz++usvZWZm5njqd0BAQI6ng2dLTk7OtX5GRob++uuvPOtkt1mQ/RZGUfXzWuPGjVO1atXUuXNnW1mbNm304Ycfav369XrvvfeUnJys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7tT58+dVqVIlu3YuXbqkQ4cOFU/QAPKNxAZAodSrV08Wi0UJCQm67777blj/+eef1+DBg+Xj46OqVavaJUS+vr5KTU3Nsc3Zs2clSX5+foWO18PDw27ZYrHkWpaVlSXp7xGeqlWr5npFFpeSA+6HxAZAoVSsWFFdu3bVm2++qeHDh+eYZ3P27Fm7BKBy5cqqW7durm01bNhQx48fV3Jyst0ppfj4eJUqVeq620mSp6enMjMzC9eZXLRo0ULJyckqU6aMatWq5fT2ATgXV0UBKLS33npLmZmZat26tVatWqWDBw8qISFBb7zxhsLDw/PdTpcuXdSoUSP169dPP/74oxITE/X555/rueee05NPPml3CulatWrV0nfffafff/9df/31lzO6JUnq3LmzwsPDdd9992n9+vU6cuSI4uLi9NJLL2nHjh1O2w8A5yCxAVBoISEh+vnnn9WxY0eNGTNGTZo0UWRkpDZu3KhFixblu50yZcpow4YNql27tgYMGKDGjRtr3LhxevTRRzV37tw8t50yZYqOHDmiOnXqqEqVKoXtko3FYtHatWt15513aujQoapfv7769eunI0eOKCAgwGn7AeAcFiN75h8AAEAJx4gNAAAwDRIbAABgGiQ2AADANEhsAACAaZDYAAAA0yCxAQAApkFiAwAATIPEBgAAmAaJDQAAMA0SGwAAYBokNgAAwDRIbAAAgGn8f/cG/LVEYtWgAAAAAElFTkSuQmCC", + "text/plain": [ + "Text(0, 0.5, 'N. occurrences')" + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAj4AAAHFCAYAAADyj/PrAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABHmklEQVR4nO3de3zP9f//8ft7drAx83HYyWE2hxlyyJKRwxKi+qj4UClnJaSGhMj5M4SkA/X5yCrCR0Mnp6WNCmVM+iJJYw5bQjaUse31+6OL9693m8N7e7/33rxu18vlfanX8/18Pd+P53vrtXvP1+v1flsMwzAEAABgAm6uLgAAAKC4EHwAAIBpEHwAAIBpEHwAAIBpEHwAAIBpEHwAAIBpEHwAAIBpEHwAAIBpEHwAAIBpEHyAUqBfv36qVatWofbdtm2bJk+erHPnztm05+bmat68ebr33ntVvXp1+fj4KCIiQmPHjs3X1xni4uJksVh05MgRu/c9efKkJk+erD179jisnj/++EP16tWTxWLRnDlzHDYugJKF4AOUAhMnTtSaNWsKte+2bds0ZcqUfGHmjz/+0OTJkxUSEqL58+dr3bp1Gjx4sN5++221bt1af/zxhwMqv7b77rtP27dvV1BQkN37njx5UlOmTHFo8Jk4caIuXrzosPEAlEzuri4AwI3Vrl3b4WN6e3srNTVVlStXtra1b99eNWvW1L/+9S/Fx8fr8ccfd/jrXlW1alVVrVrVaePb49tvv9Vrr72mZcuW6V//+perywHgRKz4AA42efJkWSwWpaSk6OGHH1aFChXk5+enxx9/XL/++qtN37y8PM2ePVv169eXl5eX/P391adPHx0/ftymX0GnuiwWi4YPH673339fERER8vHxUZMmTfTpp5/a1PL8889LkkJDQ2WxWGSxWJSUlKQyZcrYhJ6rWrRoIUk6duyYtS0pKUkWi0VLly7VyJEjFRgYKG9vb7Vr104pKSn5xvj4448VFRUlHx8f+fr6qmPHjtq+fbtNn4JOdbVv316NGjXSzp071aZNG/n4+CgsLEwzZ85UXl6etZY77rhDktS/f3/rnCZPnlzQj+OGLl++rAEDBmjYsGGKjIy0a9+FCxeqSZMmKl++vHx9fVW/fn2NHz/epk9GRoaeeuopVa9eXZ6engoNDdWUKVOUk5Nj0+/48ePq0aOHfH19VbFiRfXu3Vs7d+6UxWJRXFzcDWs5ceKEnnzySdWoUUOenp4KDg5Wjx499Msvv0iSLl26pFGjRqlp06by8/NTpUqVFBUVpY8++ijfWKtWrdKdd94pPz8/689gwIABNn2ysrI0evRohYaGytPTU9WqVdNzzz3HqhlKPFZ8ACd56KGH1LNnTw0ZMkT79u3TxIkTtX//fn3zzTfy8PCQJD399NN6++23NXz4cN1///06cuSIJk6cqKSkJO3evVtVqlS57mt89tln2rlzp6ZOnary5ctr9uzZeuihh3Tw4EGFhYVp0KBBOnv2rF577TWtXr3aelqpQYMG1xzziy++kCQ1bNgw33Pjx4/X7bffrv/+97/KzMzU5MmT1b59e6WkpCgsLEyS9MEHH6h3797q1KmTli9fruzsbM2ePVvt27fX5s2bddddd113ThkZGerdu7dGjRqlSZMmac2aNRo3bpyCg4PVp08f3X777VqyZIn69++vCRMm6L777pMkVa9e/brjXsvUqVN18eJFTZs2LV8wvZ4VK1Zo6NCheuaZZzRnzhy5ubnpp59+0v79+23m0qJFC7m5uemll15S7dq1tX37dk2fPl1HjhzRkiVLJEkXL15UdHS0zp49q1mzZqlOnTrasGGDevXqdVO1nDhxQnfccYeuXLmi8ePHq3Hjxjpz5ow2btyo3377TQEBAcrOztbZs2c1evRoVatWTZcvX9bnn3+uhx9+WEuWLFGfPn0kSdu3b1evXr3Uq1cvTZ48WWXLltXRo0etvxeS9Pvvv6tdu3Y6fvy49fX27dunl156Sd9//70+//xzWSyWm34vgWJlAHCoSZMmGZKMmJgYm/Zly5YZkoylS5cahmEYBw4cMCQZQ4cOten3zTffGJKM8ePHW9v69u1rhISE2PSTZAQEBBhZWVnWtoyMDMPNzc2IjY21tr388suGJCM1NfWGtR8/ftwICAgwIiMjjdzcXGt7YmKiIcm4/fbbjby8PGv7kSNHDA8PD2PQoEGGYRhGbm6uERwcbNx22202+58/f97w9/c3WrVqZW1bsmRJvrratWtnSDK++eYbm7oaNGhgdO7c2bq9c+dOQ5KxZMmSG87pelJSUgwPDw9jw4YNhmEYRmpqqiHJePnll2+47/Dhw42KFStet89TTz1llC9f3jh69KhN+5w5cwxJxr59+wzDMIw33njDkGSsX78+3/43M88BAwYYHh4exv79+29Y91U5OTnGlStXjIEDBxrNmjXLV9u5c+euuW9sbKzh5uZm7Ny506b9ww8/NCQZ69atu+k6gOLGqS7ASXr37m2z3bNnT7m7uysxMVGSrP/s16+fTb8WLVooIiJCmzdvvuFrREdHy9fX17odEBAgf39/HT161O56z549q65du8owDK1cuVJubvkPD4899pjN/8mHhISoVatW1rkcPHhQJ0+e1BNPPGGzf/ny5dW9e3ft2LFDv//++3XrCAwMtJ5uu6px48aFmtP15OTkaMCAAerVq5c6d+5s9/4tWrTQuXPn9Oijj+qjjz7S6dOn8/X59NNPFR0dreDgYOXk5FgfXbp0kSRt2bLF+k9fX1/de++9Nvs/+uijN1XL+vXrFR0drYiIiOv2W7VqlVq3bq3y5cvL3d1dHh4eWrx4sQ4cOGDtc/U0Ys+ePfW///1PJ06cKHBejRo1UtOmTW3m1blzZ+upVKCkIvgAThIYGGiz7e7ursqVK+vMmTOSZP1nQXc1BQcHW5+/noKu0fHy8rL7jqzffvtNHTt21IkTJ5SQkGA9bfV3f5/T1babnVNeXp5+++2369biqDndyPz58/Xzzz9r0qRJOnfunM6dO6esrCxJf14Pc+7cOeXm5l5z/yeeeELvvPOOjh49qu7du8vf31933nmnEhISrH1++eUXffLJJ/Lw8LB5XD2NeDUsnTlzRgEBAfleo6C2gvz66683PNW3evVq9ezZU9WqVdPSpUu1fft27dy5UwMGDNClS5es/dq2bau1a9cqJydHffr0UfXq1dWoUSMtX77cZl579+7NNy9fX18ZhlFgCARKCq7xAZwkIyND1apVs27n5OTozJkz1j/sV/+Znp6e74/WyZMnb3h9j6P89ttvuueee5SamqrNmzercePG1+ybkZFRYFtBc/q7kydPys3NTf/4xz8cVHnR/N///Z8yMzNVt27dfM9NnDhREydOVEpKipo2bXrNMfr376/+/fvr4sWL2rp1qyZNmqT7779fP/74o0JCQlSlShU1btxYM2bMKHD/4OBgSX++b99++22+5wt6vwtStWrVfBfE/93SpUsVGhqqlStX2qzaZWdn5+vbrVs3devWTdnZ2dqxY4diY2P12GOPqVatWoqKilKVKlXk7e2td955p8DXKq7fXaAwWPEBnGTZsmU22//73/+Uk5Oj9u3bS5LuvvtuSX/+QfqrnTt36sCBA+rQoYND6vDy8pKkAldMroaen3/+WZs2bVKzZs2uO9by5ctlGIZ1++jRo9q2bZt1TuHh4apWrZo++OADm34XL15UfHy89U4vZ87pZo0dO1aJiYk2j6urGkOGDFFiYqLq1KlzU2OVK1dOXbp00YsvvqjLly9r3759kqT7779f//d//6fatWsrMjIy3+Nq8GnXrp3Onz+v9evX24y7YsWKm3r9Ll26KDExUQcPHrxmH4vFIk9PT5vQk5GRUeBdXVd5eXmpXbt2mjVrliRZ7+C7//77dfjwYVWuXLnAeRX2wzaB4sCKD+Akq1evlru7uzp27Gi9q6tJkybq2bOnpD9DwpNPPqnXXntNbm5u6tKli/Wurho1aigmJsYhddx2222SpFdffVV9+/aVh4eHwsPD5e7urs6dOyslJUXz589XTk6OduzYYd2vatWq+T4/6NSpU3rooYc0ePBgZWZmatKkSSpbtqzGjRsnSXJzc9Ps2bPVu3dv3X///XrqqaeUnZ2tl19+WefOndPMmTMdMqfatWvL29tby5YtU0REhMqXL6/g4GAFBwfryJEjCg0NVd++fa97G3j9+vVVv359m7art9bXrl3bGuauZfDgwfL29lbr1q0VFBSkjIwMxcbGys/Pz3qdzNSpU5WQkKBWrVppxIgRCg8P16VLl3TkyBGtW7dOixYtUvXq1dW3b1+98sorevzxxzV9+nTVqVNH69ev18aNGyWpwOut/mrq1Klav3692rZtq/Hjx+u2227TuXPntGHDBo0cOVL169fX/fffr9WrV2vo0KHq0aOHjh07pmnTpikoKEiHDh2yjvXSSy/p+PHj6tChg6pXr65z587p1VdflYeHh9q1aydJeu655xQfH6+2bdsqJiZGjRs3Vl5entLS0rRp0yaNGjVKd95553VrBlzGtddWA7eeq3d17dq1y3jggQeM8uXLG76+vsajjz5q/PLLLzZ9c3NzjVmzZhn16tUzPDw8jCpVqhiPP/64cezYMZt+17qra9iwYflePyQkxOjbt69N27hx44zg4GDDzc3NkGQkJiZa72C61uOvY1y9q+v99983RowYYVStWtXw8vIy2rRpYyQnJ+erYe3atcadd95plC1b1ihXrpzRoUMH4+uvv7bpc627uho2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PrG5o3rKlCnKycmxPm+xWPTf//5XDz30kHx8fFS3bl19/PHHkqQjR44oOjpakvSPf/xDFotF/fr1u+n3wtFcHnz+zjAMZWdnF/hcVFSUEhISbNo2bdqkyMhIeXh4FEd5AABIkt59912VK1dO33zzjWbPnq2pU6cqISFBhmHowQcf1NmzZ7VlyxYlJCTo8OHD6tWr102Nu2zZMs2YMUOzZs3Srl27VLNmTS1cuDBfv82bN+vAgQNKSEjQp59+KunPlZ9p06bpu+++09q1a5WammoTMo4dO6aHH35YXbt21Z49e6yh6no2btyoxx9/XCNGjND+/fv11ltvKS4uTjNmzLDpN2XKFPXs2VN79+5V165d1bt3b509e1Y1atSw3n198OBBpaenX3OBozi49Bqf8ePHq0uXLqpRo4bOnz+vFStWKCkpSRs2bJD052mqEydO6L333pMkDRkyRK+//rpGjhypwYMHa/v27Vq8eLGWL1/uymkAAEyocePGmjRpkiSpbt26ev3117V582ZJ0t69e5WamqoaNWpIkt5//301bNhQO3fu1B133HHdcV977TUNHDhQ/fv3lyS99NJL2rRpky5cuGDTr1y5cvrvf/8rT09Pa9uAAQOs/x4WFqYFCxaoRYsWunDhgsqXL6+FCxcqLCxMr7zyiiwWi8LDw/X9999r1qxZ16xnxowZGjt2rPr27Wsdd9q0aRozZox1/tKfq1CPPvqoJOnf//63XnvtNX377be69957ValSJUmSv7+/ua/x+eWXX/TEE08oPDxcHTp00DfffKMNGzaoY8eOkqT09HSlpaVZ+4eGhmrdunVKSkpS06ZNNW3aNC1YsIBb2QEAxa5x48Y220FBQTp16pQOHDigGjVqWEOPJDVo0EAVK1bUgQMHbjjuwYMH1aJFC5u2v29L0m233WYTeiQpJSVF3bp1U0hIiHx9fdW+fXtJsv4tPXDggFq2bGlzXey17qS+ateuXZo6darKly9vfQwePFjp6en6/fffrf3++n6UK1dOvr6++U6zlQQuXfFZvHjxdZ+Pi4vL19auXTvt3r3bSRUBAHBz/n6JhcViUV5engzDKPCGm2u1F+RaN/L8Vbly5Wy2L168qE6dOqlTp05aunSpqlatqrS0NHXu3Nl68XNB49xIXl6epkyZoocffjjfc2XLlrX++7Xej5LG5bezAwBw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9pb056mqEydOWE+vDRkyRK+//rpGjhypwYMHa/v27Vq8ePFNnSIDAADmZveKz5IlS7Rq1ap87atWrdK7775r11gLFy5UZmam2rdvr6CgIOtj5cqV1j7p6elKS0uzboeGhmrdunVKSkpS06ZNNW3aNC1YsIBb2QEAwA3ZveIzc+bMAj8p2d/fX08++aT69u1702NdvSj5euLi4vK1tWvXTrt3777p1wEAAJAKseJz9OjRAq/FCQkJsVmZAQAAKGnsDj7+/v7au3dvvvbvvvuuwLuqAAAASgq7g88jjzyiESNGKDExUbm5ucrNzdUXX3yhZ599Vo888ogzagQAAHAIu6/xmT59uo4ePaoOHTrI3f3P3fPy8tSnTx/9+9//dniBAAAAjmJ38PH09NTKlSs1bdo0fffdd/L29tZtt92mkJAQZ9QHAADgMIX6HB9JqlevnurVq+fIWgAAAJzK7uCTm5uruLg4bd68WadOnVJeXp7N81988YXDigMAAHAku4PPs88+q7i4ON13331q1KhRgV8MCgAAUBLZHXxWrFih//3vf+ratasz6gEAAHAau29n9/T0VJ06dZxRCwAAgFPZHXxGjRqlV1999aa+bgIAAKAksftU11dffaXExEStX79eDRs2lIeHh83zq1evdlhxAAAAjmR38KlYsaIeeughZ9QCAADgVHYHnyVLljijDgAAAKez+xofScrJydHnn3+ut956S+fPn5cknTx5UhcuXHBocQAAAI5k94rP0aNHde+99yotLU3Z2dnq2LGjfH19NXv2bF26dEmLFi1yRp0AAABFZveKz7PPPqvIyEj99ttv8vb2trY/9NBD2rx5s0OLAwAAcKRC3dX19ddfy9PT06Y9JCREJ06ccFhhAAAAjmb3ik9eXp5yc3PztR8/fly+vr4OKQoAAMAZ7A4+HTt21Pz5863bFotFFy5c0KRJk/gaCwAAUKLZfapr3rx5uvvuu9WgQQNdunRJjz32mA4dOqQqVapo+fLlzqgRAADAIewOPtWqVdOePXu0YsUK7dq1S3l5eRo4cKB69+5tc7EzAABASWNX8Lly5YrCw8P16aefqn///urfv7+z6gIAAHA4u67x8fDwUHZ2tiwWi7PqAQAAcBq7L25+5plnNGvWLOXk5DijHgAAAKex+xqfb775Rps3b9amTZt02223qVy5cjbP8+3s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seIDAABMg+ADAABMg+ADAABMg+ADAABMg+ADAABMg+ADAABMg+ADAABMg+ADAABMg+ADAABMg+ADAABMg+ADAABMg+ADAABMg+ADAABMg+ADAABMg+ADAABMw93VBQCAI72S8KOrS7CbI2pumXbGAZXY5+91O6KGHTnO/fnFdKzn1PFR8rHiAwAATIPgAwAATIPgAwAATIPgAwAATIPgAwAATIPgAwAATIPgAwAATIPgAwAATIPgAwAATIPgAwAATIPgAwAATMPlwefNN99UaGioypYtq+bNm+vLL7+8bv8tW7aoefPmKlu2rMLCwrRo0aJiqhQAAJR2Lg0+K1eu1HPPPacXX3xRKSkpatOmjbp06aK0tLQC+6empqpr165q06aNUlJSNH78eI0YMULx8fHFXDkAACiNXBp85s2bp4EDB2rQoEGKiIjQ/PnzVaNGDS1cuLDA/osWLVLNmjU1f/58RUREaNCgQRowYIDmzJlTzJUDAIDSyGXB5/Lly9q1a5c6depk096pUydt27atwH22b9+er3/nzp2VnJysK1euOK1WAABwa3B31QufPn1aubm5CggIsGkPCAhQRkZGgftkZGQU2D8nJ0enT59WUFBQvn2ys7OVnZ1t3c7MzJQkZWVlFXUKBbp08YIu/pF9446lxKWLF1xdwi31fsKxbpXfT0fMoyTUURJquBFnHftLI2e+1854n6+OaRhGkcZxWfC5ymKx2GwbhpGv7Ub9C2q/KjY2VlOmTMnXXqNGDXtLNanXXV0AcB23yu9nSZlHSajDuTWMd+rouMqZ7/P58+fl5+dX6P1dFnyqVKmiMmXK5FvdOXXqVL5VnasCAwML7O/u7q7KlSsXuM+4ceM0cuRI63ZeXp7Onj2rypUrXzdg3SqysrJUo0YNHTt2TBUqVHB1OcXCjHOWmDfzNgczztuMc5byz9swDJ0/f17BwcFFGtdlwcfT01PNmzdXQkKCHnroIWt7QkKCunXrVuA+UVFR+uSTT2zaNm3apMjISHl4eBS4j5eXl7y8vGzaKlasWLTiS6EKFSqY6j8YyZxzlpi32TBv8zDjnCXbeRdlpecql97VNXLkSP33v//VO++8owMHDigmJkZpaWkaMmSIpD9Xa/r06WPtP2TIEB09elQjR47UgQMH9M4772jx4sUaPXq0q6YAAABKEZde49OrVy+dOXNG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", "text/plain": [ "
" ] @@ -529,8 +455,8 @@ "source": [ "cpu_g = np.array(cpu_g)\n", "cpu_nog = np.array(cpu_nog)\n", - "plt.hist(cpu_g[cpu_g < 0.2], bins=100, label=\"gradient\", density=True, alpha=0.5)\n", - "plt.hist(cpu_nog[cpu_nog < 0.2], bins=100, label=\"no_gradient\", density=True, alpha=0.5)\n", + "plt.hist(cpu_g[cpu_g < 2.2], bins=20, label=\"gradient\", density=True, alpha=0.5)\n", + "plt.hist(cpu_nog[cpu_nog < 1.2], bins=20, label=\"no_gradient\", density=True, alpha=0.5)\n", "# plt.xlim([0,0.15])\n", "plt.legend()\n", "plt.title(\"point2point, 4 seg case\")\n", diff --git a/_sources/notebooks/udp_point2point.ipynb b/_sources/notebooks/udp_point2point.ipynb index 0995ec0..8851b1c 100644 --- a/_sources/notebooks/udp_point2point.ipynb +++ b/_sources/notebooks/udp_point2point.ipynb @@ -22,7 +22,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -38,7 +38,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -91,11 +91,11 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ - "snopt72 = \"/usr/local/lib/libsnopt7_c.so\"\n", + "snopt72 = \"/Users/dario.izzo/opt/libsnopt7_c.dylib\"\n", "uda = ppnf.snopt7(library=snopt72, minor_version=2, screen_output=False)\n", "uda.set_integer_option(\"Major iterations limit\", 2000)\n", "uda.set_integer_option(\"Iterations limit\", 20000)\n", @@ -108,7 +108,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -131,12 +131,12 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 5, "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAi4AAAIvCAYAAABTFlB6AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABoFElEQVR4nO39d3yV9eH//z/OOdmTDLKAhL1lBWUooIAo1FG0rW0tTmitb62jrdX6aav9/bpbq9aqdWIdLW2tdYADlSF7bwgjAUIG2fskZ13fP0KORjYkuc51zvN+u+UGOSPneeUkJ8/zul7X67IZhmEgIiIiYgF2swOIiIiInCkVFxEREbEMFRcRERGxDBUXERERsQwVFxEREbEMFRcRERGxDBUXERERsQwVFxEREbEMFRcRERGxDBUXERERsQwVFxEREbEMFRcRERGxDBUXERERsQwVFxEREbEMFRcRERGxDBUXERERsQwVFxEREbEMFRcRERGxDBUXERERsQwVFxEREbEMFRcRERGxDBUXERERsQwVFxEREbEMFRcRERGxDBUXERERsQwVFxEREbEMFRcRERGxDBUXERERsQwVFxEREbEMFRcRERGxDBUXERERsQwVFxEREbEMFRcRERGxDBUXERERsQwVFxEREbEMFRcRERGxDBUXERERsQwVFxEREbEMFRcRERGxDBUXERERsQwVFxEREbEMFRcRERGxDBUXERERsQwVFxEREbEMFRcRERGxDBUXERERsQwVFxEREbEMFRcRERGxDBUXERERsQwVFxEREbEMFRcRERGxDBUXERERsQwVFxEREbEMFRcRERGxDBUXERERsQwVFxEREbEMFRcRERGxDBUXERERsQwVFxEREbEMFRcRERGxDBUXERERsQwVFxEREbEMFRcRERGxDBUXERERsQwVFxEREbEMFRcRERGxDBUXERERsQwVFxEREbEMFRcRERGxDBUXERERsQwVFxEREbEMFRcRERGxDBUXERGRDvT000/Tp08foqKiyM3N5bPPPjvl7ZctW0Zubi5RUVH07duXZ599tt31O3fu5Prrr6d3797YbDYef/zxDnlcq1JxERER6SALFizg3nvv5eGHH2bz5s1MmjSJmTNncvjw4RPevqCggFmzZjFp0iQ2b97MT3/6U37wgx/w5ptv+m/T1NRE3759+e1vf0tGRkaHPK6V2QzDMMwOISIiEgzGjRvHmDFjeOaZZ/yXDRkyhK9+9av85je/Oe72P/nJT3jnnXfYvXu3/7I77riDrVu3snr16uNu37t3b+69917uvffe83pcK9OIi4iIyHl6+umn6d27N+vWreOjjz5qt5tmxowZrFq1qt3t23YP/eEPf6C4uLjd7qErrriCDRs2sGDBAoYOHUpkZCRDhw7lrbfeavc1HnnkEWw2GzabjXXr1vHss8+2G5E50eMGAxUXERGR89C2m+auu+4CIDc3t91umvT0dEpLS/23/+LuoezsbKZOndpu91B6ejoej4dvf/vbzJkzh61btzJnzhy+8Y1v0NLS0u6xhw0bxubNmwF455132L59u/+6Lz9usFBxEREROUdPP/00N910E16vl1deeQWA++67j169evl32xiGgc1mA1pHWiZMmIDT6eSdd97B6XRy0UUXcdttt/HHP/4RgCVLlgDg8/l49dVX2b17Nw899BDTpk2jrq7O/7iPP/44u3btYs6cOQCkpqbSvXt3f7YvPm4wUXERERE5BwsWLOCee+7B4/Hw+OOPc+mllwKwffv2drtpysrKSE9P94+0OBwObrzxRn76059SXl7OihUr/LuHPvvsM37+858D8KMf/cg/0rJ27VquuOIKWlpa2Lx5M/feey+TJ08mKiqK/Px8AH7wgx/4///Fxw02Ki4iIiLn4LHHHuNb3/oWPp+P3Nxc/vKXvxAVFcWzzz7bbjfN4sWLmThxIs8++yzZ2dnExsYyZMgQ5s6dy4gRI1iyZIl/99Af/vAHevTogc1mY/To0f6Rlscff5z09HS8Xi9Lly7l9ttv5/vf/z6vvvoqa9asISIigt27dzNx4kQqKyvbPW6wCTM7gIiIiNW4XC42btzId7/7XV599VV++ctfsnr1atxuN5s3byYrKwuXy8V9993H4cOHueOOO5gzZw6xsbHs3bsXaJ1cW1BQgNPp5NprrwXgs88+o76+Hrvdjsfj4e6772b58uU4nU7/XJbCwkIGDBjAgAEDmD59OocOHfJnamxsZNasWUycONH/uMFGIy4iIiJnqaKiAq/XS//+/bHZbOzevZsPPviAuXPn4nA4+OCDDzh06BDLly9n0aJF5OTkUFpais/nw263s3DhQh577DF+8pOfAK1rtQDU1NRw0003kZWVxbPPPstbb73FLbfc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zwsvvMBLL73E7t27ue+++zh8+LB/XZaHHnqIm266yX/7O+64g0OHDnH//feze/duXnrpJV588UV+9KMfdWgue0QEUT17AuAsKOjQry0i0lFcpaWkx8YyecoUjbSEGK3jYpIbbriByspKfvnLX1JSUsLw4cNZtGgROTk5AJSUlHD48GH/7fv06cOiRYu47777+Otf/0pWVhZPPvkk119/fYdni+7bl+bDh3Hm55MwdmyHf30RkfPVcmzXeURGhslJpKupuJjozjvv5M477zzhdfPnzz/usilTprBp06ZOTgXRffpQvXSpRlxEJCAZPh+uo0cBiFRxCTnaVSTHie7TB4Dmw4cxjq3+KiISKNxVVRhuN7awMMI78OAEsQYVFzlOeFoajthYDI+H5iNHzI4jItKOq203UVoaNrv+jIUaPeNyHJvNRtSxURdnfr7JaURE2tP8ltCm4iIn1La7SPNcRCTQuFRcQpqKi5xQdN++gIqLiASelmO7sCMzM01OImZQcZETiu7dGwB3eTme+npzw4iIHONzuXAeWyqi7Q2WhBYVFzkhR0wMEcfezTgPHjQ3jIjIMc6DB8HrJaxbNx1RFKJUXOSk2kZdNEFXRAKFc/9+AKL79evQE8yKdai4yEm1DcM25eWZnEREpFXTseISM2CAyUnELCouclJxF1wAtI64eGprTU4jIqHO8PlwHjgAQEz//ianEbOouMhJhSclta7nYhjUb9lidhwRCXEtRUX4mpuxR0URqRMrhiwVFzmlhNGjAajfvNnkJCIS6pq+OL9FK+aGLD3zckrxY8YA0JiXh6ehweQ0IhLKmvbtA7SbKNSpuMgpRXTvTmTPnuDz0bBtm9lxRCREGYbhn98SreIS0lRc5LTi23YXbdpkchIRCVXuyko8NTXgcPiXapDQpOIip5XQtrto9268TqfJaUQkFLUtyxCdnY09IsLkNGImFRc5rYjMTCLS0zE8Hhp27DA7joiEoPqtWwGIHTbM5CRiNhUXOS2bzabdRSJiGl9zM427dgGf77qW0KXiImek7eiihh078LlcJqcRkVDSsHMnhttNePfuWr9FVFzkzERlZxOekoLhcvnf+YiIdIW2BTDjR43S+YlExUXOjM1mI37UKADqtLtIRLqI4fH4l2LQbiIBFRc5C/7dRdu2aXeRiHSJxj178DU340hIILpPH7PjSABQ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ERHLUHERERERy1BxEREREctQcRERERHLUHERERERy1BxEREREctQcRERERHLUHERERERy1BxEREREctQcRERERHLUHERERERy1BxEREREctQcRERERHLUHERERERy1BxEREREctQcRERERHLUHERERERy1BxEREREctQcRERERHLUHERERERy1BxEREREctQcRERERHLUHERERERy1BxEREREctQcRERERHLUHERERERy1BxEREREctQcRERERHLUHERERERy1BxEREREctQcRERERHLUHERERERy1BxEREREctQcRERERHLUHERERERy1BxEREREctQcRERERHLUHERERERy1BxEREREctQcRERERHLUHERERERy1BxEREREctQcRERERHLUHERERERy1BxEREREctQcRERERHLUHERERERy1BxEREREctQcRERERHLUHERERERy1BxEREREctQcRERERHLUHERERERy1BxEREREctQcRERERHLUHERERERy1BxEREREctQcRERERHLUHERERERy1BxEREREctQcRERERHLUHERERERy1BxEREREctQcRERERHLUHERERERy1BxEREREctQcRERERHLUHERERERy1BxEREREctQcRERERHLUHERERERy1BxEREREctQcRERERHLUHERERERy1BxEREREctQcRERERHLUHERERERy1BxEREREctQcRERERHLUHERERERy1BxEREREctQcRERERHLUHERERERy1BxEREREctQcRERERHLUHERERERy1BxEREREctQcRERERHLUHERERERy1BxEREREctQcRERERHLUHERERERy1BxEREREctQcRERERHLUHERERERy1BxEREREcv4/wBrg1n5kzgJsAAAAABJRU5ErkJggg==", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAi4AAAIvCAYAAABTFlB6AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABoF0lEQVR4nO39d3zV9f3//9/OOdmTDLKAhL1lBWUooIAo1FG0rW0tTmitb62jrdX6aav9/bpbq9aqdWIdLW2tdYADlSF7bwgjAUIG2fskZ72+f4QcjWxI8jqvc+7Xy+VcIOe8Ts7jmZOccz/P9bIZhmEgIiIiYgF2swsQEREROVMKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiYhkKLiIiImIZCi4iIiJiGQouIiIiHejpp5+mT58+REVFkZuby2effXbK45ctW0Zubi5RUVH07duXZ599tt3tO3fu5Prrr6d3797YbDYef/zxDnlcq1JwERER6SALFizg3nvv5eGHH2bz5s1MmjSJmTNncvjw4RMeX1BQwKxZs5g0aRKbN2/mpz/9KT/4wQ948803/cc0NTXRt29ffvvb35KRkdEhj2tlNsMwDLOLEBERCQbjxo1jzJgxPPPMM/7rhgwZwle/+lV+85vfHHf8T37yE9555x12797tv+6OO+5g69atrF69+rjje/fuzb333su99957Xo9rZepxEREROU9PP/00vXv3Zt26dXz00UfthmlmzJjBqlWr2h3fNjz0hz/8geLi4nbDQ1dccQUbNmxgwYIFDB06lMjISIYOHcpbb73V7ns88sgj2Gw2bDYb69at49lnn23XI3Oixw0GCi4iIiLnoW2Y5q677gIgNze33TBNeno6paWl/uO/ODyUnZ3N1KlT2w0Ppaen4/F4+Pa3v82cOXPYunUrc+bM4Rvf+AYtLS3tHnvYsGFs3rwZgHfeeYft27f7b/vy4wYLBRcREZFz9PTTT3PTTTfh9Xp55ZVXALjvvvvo1auXf9jGMAxsNhvQ2tMyYcIEnE4n77zzDk6nk4suuojbbruNP/7xjwAsWbIEAJ/Px6uvvsru3bt56KGHmDZtGnV1df7Hffzxx9m1axdz5swBIDU1le7du/tr++LjBhMFFxERkXOwYMEC7rnnHjweD48//jiXXnopANu3b283TFNWVkZ6erq/p8XhcHDjjTfy05/+lPLyclasWOEfHvrss8/4+c9/DsCPfvQjf0/L2rVrueKKK2hpaWHz5s3ce++9TJ48maioKPLz8wH4wQ9+4P//Fx832Ci4iIiInIPHHnuMb33rW/h8PnJzc/nLX/5CVFQUzz77bLthmsWLFzNx4kSeffZZsrOziY2NZciQIcydO5cRI0awZMkS//DQH/7wB3r06IHNZmP06NH+npbHH3+c9PR0vF4vS5cu5fbbb+f73/8+r776KmvWrCEiIoLdu3czceJEKisr2z1usAkzuwARERGrcblcbNy4ke9+97u8+uqr/PKXv2T16tW43W42b95MVlYWLpeL++67j8OHD3PHHXcwZ84cYmNj2bt3L9A6ubagoACn08m1114LwGeffUZ9fT12ux2Px8Pdd9/N8uXLcTqd/rkshYWFDBgwgAEDBjB9+nQOHTrkr6mxsZFZs2YxceJE/+MGG/W4iIiInKWKigq8Xi/9+/fHZrOxe/duPvjgA+bOnYvD4eCDDz7g0KFDLF++nEWLFpGTk0NpaSk+nw+73c7ChQt57LHH+MlPfgK07tUCUFNTw0033URWVhbPPvssb731FrfccgsAeXl5QOvclR/+8IfMnTsXgF/+8pc8+OCDpKamEhkZyYYNG9o9brBRcBERETlHxcXFGIbB2LFjmTBhAr169aJHjx54vV7mzp3Lxo0bmTx5sv/4r3/963z3u99l7dq1PPzww0yZMgWA2bNn43A4cDgcXH755YwdO5Y1a9bwpz/9iYsvvpjIyEguu+wy//dZtWoVS5cuBSA+Pp64uDiSkpJITU3lF7/4xXGPG0y0AZ2IiMhZOnr0KJmZmYSFheF2u7Hb7TzxxBOsXbuWJUuWUFRUxO9//3t+/OMf89BDD1FUVMTBgwdpaWlh//79VFVVkZaWxm233cbvf/97HA4HI0eOZNu2bfTq1YvCwkJcLpe/R+Zvf/sbDQ0NZGdnU1BQwKRJk1izZg0ul4uIiAgMw8Dn8xEWFsb27dsZMGCAyT+hzqMeFxERkbN0yy23EBUVxYABA+jZsyfdu3fnxz/+Ma+//joej4eePXvi8XgAKCkp4fDhw9jtdjZs2MAPf/hDAFpaWvjtb39LWFgYTz75JKNHjyYyMhKHw8Hs2bMB+O9//8vvf/97fD4fCxYsoF+/foSFhbFjxw4mTZpEbGwsLpcLj8dDamoq0dHR/O53vzPt59IVFFxERES+5Iu70p7o8sEHH9CzZ0/27NlDS0sLR48epbm5mejoaNauXUtUVBQffvghN910E7179yYvL49ly5ZhGIZ/V92f/vSnQOt2/f/85z+ZP38+9fX1HDhwgLKyMgC+/e1v43A4iImJ4frrr2fx4sW43W6qqqqIiIhg/fr13HDDDRiGwRtvvMELL7zAiy++6F9ZFIwUXERERL7krrvuYvfu3e0ul1xyCQMGDOC73/0uMTExhIeHk5GRQXl5OQA2m427776bnJwcysvL8Xg8rFixgscee4yf/exnQOuuuh9//DEATzzxBCNGjMDpdHLllVfSv39/AF588UV27NgBwGuvvcaCBQuIjIzkl7/8JZmZmURERPCb3/yGnTt3MmrUKPbt20dsbCyHDh1i/PjxAOzfv7+rf2RdRsFFRETkS1JTUxk8eLD/YhgGK1as4NVXXyUnJ4esrCyefPJJiouL/ffp06cPiYmJrF27ltraWl544QWcTicPP/wwo0aNAuBf//oXMTExJCQkcM899zBu3DiSk5O5//77/acIuPbaa3nppZcAePjhh7nuuuuA1p10S0tLSU1N5cEHH+TQoUO0tLSwceNGsrKyKC0t9S+ZzszM7MKfVtdScJEu86tf/YqJEycSExNDt27dzug+hmHwyCOPkJWVRXR0NJdeeik7d+7s3ELPQ3V1NXPmzCExMZHExETmzJlDTU3NKe9zyy23HNcN3fapKVA8/fTT9OnTh6ioKHJzc9udQO5E2k4gFxUVRd++fdudQC6QnU07ly5desIhhD179nRhxWdn+fLlXH311WRlZWGz2fjf//532vtY9bk8F6caHho6dCgADocDaH1tmj59OgkJCQwZMgSA5uZmCgsLmTdvHldddRURERGUlpYyY8YMvvWtbwEQFRXFpZdeSv/+/fn1r39NQUEBDQ0N/jkzbeLi4gD4f//v//HJJ5/gcrn49a9/DbQuxf7Vr37F8uXL+fOf/8yWLVtwuVxs376d733ve1xzzTVkZ2d32c+tyxkiXeTnP/+58dhjjxn333+/kZiYeEb3+e1vf2vEx8cbb775prF9+3bjhhtuMDIzM426urrOLfYcXXnllcbw4cONVatWGatWrTKGDx9uXHXVVae8z80332xceeWVRklJif9SWVnZRRWf3j//+U8jPDzceP75541du3YZ99xzjxEbG2scOnTohMfn5+cbMTExxj333GPs2rXLeP75543w8HDjP//5TxdXfnbOtp1LliwxACMvL6/dc+fxeLq48jO3aNEi4+GHHzbefPNNAzDeeuutUx5v1efyXJWXlxu7d+8+4eXee+81cnJyDKfTabz44otGQkKCARh9+/Y1fvzjHxuAARhRUVHGjTfeaFRXVxsrV640AKOoqMh/+6ZNm4x58+YZl19+ufGLX/zCiIyMNOx2uzF58mTjpZdeMgCjurra//s1b948Izk52QgPDzcmTJhg3HfffUZ0dLSRmppqXHvttca4ceOMxMREAzAyMjKMX/ziF0ZjY6PZP8pOpeAiXe7ll18+o+Di8/mMjIwM47e//a3/uubmZiMxMdF49tlnO7HCc7Nr1y4DMNasWeO/bvXq1QZg7Nmz56T3u/nmm41rr722Cyo8NxdddJFxxx13tLtu8ODBxoMPPnjC4x944AFj8ODB7a773ve+Z4wfP77TauwIZ9vOtjeW6urqLqiu451JcLHqc3k2fvGLX/hDxcku69evN371q18ZAwcONHw+n7Fu3Tr/bX379jVuuOEG/9e7d+/2f++24FJcXOx/Pfvd735nzJ0717jiiiuMlpaWdq9nX/ydOtnvV9vrzG9+8xsDMCoqKow1a9ac9nUmmGioSAJWQUGBv5u1TWRkJFOmTPGfvCyQrF69msTERMaNG+e/bvz48SQmJp623qVLl5KWlsbAgQOZN2+ef0WB2dq2Nf/icwC0O4Hcl61evfq449tOIOd2uzut1vNxLu1sM3r0aDIzM5k2bZr/rL7BworP5dk60STcL1+GDx9ORkYGR48epb6+nosuush/QsUjR47wn//8B4Bp06YxaNAg//duO2tzaWkpNpuNe++9l1//+tds3bqViIgIbrnlFmJiYvj2t7/drqbt27f7J9du376dLVu2UFVVBcCQIUO48sor+fvf/w7A//73P//Q1BcfO5jpXEUSsNpOUPbls5ump6f7z80RSEpLS0lLSzvu+rS0NH9bTmTmzJl8/etfJycnh4KCAn72s58xdepUNm7cSGRkZGeWfFpt25qf6Dk4WZtKS0tPeLzH46GioiIgJw2eSzszMzN57rnnyM3NpaWlhVdffZVp06axdOnSoNmx1IrP5dlKTU0lNTX1lMcYhsEFF1xAbW0tGzZsAODJJ59kxIgR/g3gvF4vf/rTn9rdLz8/n4SEBBYvXszo0aN54IEHaGho4Fe/+hUOh4OJEyfy0UcfER8f3+5+X/z9afv/yy+/7N/6//XXX+f6669n9+7d3HvvvVx77bU89dRT5/ujsAwFFzkvjzzyCI8++ugpj1m/fj1jx44958ew2WztvjYM47jrOtOZthGOrxVOX+8NN9zg///w4cMZO3YsOTk5LFy40L+awGxn+xyc6PgTXR9ozqadgwYNavcJd8KECRQWFvLHP/4xaIILWPe57EhtvSzTp0/nBz/4AQD/+Mc/ABg5ciRvv/02vXv3JjExkSFDhvCb3/yG2bNnYxgGv/vd7/j1r3/tPynigQMHyMjIIC8vzx9YSktLKS0t9feyLF++nPj4eLKzs0lOTmb16tWsWbOGLVu2kJiYyPr169m7dy/XXHMNb7/9tjk/FBMpuMh5ueuuu/jmN795ymN69+59Tt87IyMDaP2j/uInu7KysuM+BXamM23jtm3bOHr06HG3lZeXn1W9mZmZ5OTksG/fvrOutaOlpqbicDiO63U41XOQkZFxwuPDwsJISUnptFrPx7m080TGjx/Pa6+91tHlmcaKz2Vnev755/nJT37Czp07+c1vfgNw3POdl5dHbW2t/+sHHngAp9PJnXfeSXV1NePGjTuul+XZZ59t9+Hoy70skZGRLFiwgEcffZSWlhZycnKYN28eDzzwQGc2N2ApuMh5OZNu1nPVp08fMjIy/N2s0DoXYdmyZV26pfWZtnHChAnU1taybt06LrroIgD/fg4TJ04848errKyksLAwILrhIyIiyM3NZfHixf4tyAEWL17Mtddee8L7TJgwgXfffbfddR999BFjx44lPDy8U+s9V+fSzhPZvHlzQDxvHcWKz2VHMgyD+vp6fy9TcnIyX/3qV/nXv/7FE088wT333EN8fDzx8fG88cYbxMXF4fP52vVG2Ww2HnnkER555JGTPs7pbh8zZgxr1qzpqGZZn1mzgiX0HDp0yNi8ebPx6KOPGnFxccbmzZuNzZs3G/X19f5jBg0aZPz3v//1f/3b3/7WSExMNP773/8a27dvN771rW8F/HLoESNGGKtXrzZWr15tXHDBBccth/5iG+vr640f/vCHxqpVq4yCggJjyZIlxoQJE4wePXoETBvblgm/+OKLxq5du4x7773XiI2NNQ4ePGgYhmE8+OCDxpw5c/zHty2hve+++4xdu3YZL774oiWW0J5tO//85z8bb731lrF3715jx44dxoMPPmgAxptvvmlWE06rvr7e/3cHGI899pixefNm/5LvYHkuO0ptba0BGIWFhQZgvPHGG0Z0dLQBGNu2bTMA4+DBg0ZVVZXxv//9z6ioqDB8Pp/ZZQc9BRfpMjfffPMJlxouWbLEfwxgvPzyy/6vfT6f8Ytf/MLIyMgwIiMjjcmTJxvbt2/v+uLPUGVlpXHjjTca8fHxRnx8vH8/hy/6YhubmpqMGTNmGN27dzfCw8ON7Oxs4+abbzYOHz7c9cWfwl//+lcjJyfHiIiIMMaMGWMsW7bMf9vNN99sTJkypd3xS5cuNUaPHm1EREQYvXv3Np555pkurvjcnE07f/e73xn9+vUzoqKijKSkJOOSSy4xFi5caELVZ65tie2XLzfffLNhGMH1XJ4rn89n1NbW+v/9YnCJjo42nnvuOQMwtmzZouBiEpthHOsDExERCXF1dXUkJib656kkJibywgsvMHfuXF588UWmTZtG79692b9/P+vWreOKK67AZrOxfPlyLrnkEpKT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FFxERETEMhRcRERExDIUXERERMQyFFxERETEMhRcRERExDIUXERERMQyFFxERETEMhRcRERExDIUXERERMQyFFxERETEMhRcRERExDIUXERERMQyFFxERETEMhRcRERExDIUXERERMQyFFxERETEMhRcRERExDIUXERERMQyFFxERETEMhRcRERExDIUXERERMQyFFxERETEMhRcRERExDIUXERERMQyFFxERETEMhRcRERExDIUXERERMQyFFxERETEMhRcRERExDIUXERERMQyFFxERETEMhRcRERExDIUXERERMQyFFxERETEMhRcRERExDIUXERERMQyFFxERETEMhRcRERExDIUXERERMQyFFxERETEMhRcRERExDIUXERERMQyFFxERETEMhRcRERExDIUXERERMQyFFxERETEMhRcRERExDIUXERERMQyFFxERETEMhRcRERExDIUXERERMQyFFxERETEMhRcRERExDIUXERERMQyFFxERETEMhRcRERExDIUXERERMQyFFxERETEMhRcRERExDIUXERERMQyFFxERETEMhRcRERExDIUXERERMQyFFxERETEMhRcRERExDIUXERERMQyFFxERETEMhRcRERExDIUXERERMQyFFxERETEMhRcRERExDIUXERERMQyFFxERETEMhRcRERExDIUXERERMQyFFxERETEMhRcRERExDIUXERERMQyFFxERETEMhRcRERExDIUXERERMQyFFxERETEMhRcRERExDIUXERERMQyFFxERETEMhRcRERExDIUXERERMQyFFxERETEMhRcRERExDIUXERERMQyFFxERETEMhRcRERExDIUXERERMQyFFxERETEMhRcRERExDIUXERERMQy/j8ozVn7TjExAQAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -152,25 +152,32 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - " 0%| | 0/2000 [00:00 10\u001b[0m pop_nog \u001b[38;5;241m=\u001b[39m \u001b[43mpg\u001b[49m\u001b[38;5;241m.\u001b[39mpopulation(prob_nog, \u001b[38;5;241m1\u001b[39m)\n\u001b[1;32m 12\u001b[0m pop_g \u001b[38;5;241m=\u001b[39m pg\u001b[38;5;241m.\u001b[39mpopulation(prob_g)\n\u001b[1;32m 13\u001b[0m pop_g\u001b[38;5;241m.\u001b[39mpush_back(pop_nog\u001b[38;5;241m.\u001b[39mget_x()[\u001b[38;5;241m0\u001b[39m])\n", - "\u001b[0;31mNameError\u001b[0m: name 'pg' is not defined" + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" ] } ], @@ -212,12 +219,22 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 7, "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjYAAAHFCAYAAADhWLMfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABH60lEQVR4nO3deVxU5f///+eogKAD5gKIC+IuKpqailZiimba1zLfalpu7VauZZqZaO7lUlq2vEuo3DLNlrepZGoLqWiaprzNtyJqSpQLuKLA+f3Rh/k1gsjAwAzHx/12m5uc61znOq9rZg68vM51zrEYhmEIAADABEq5OgAAAABnIbEBAACmQWIDAABMg8QGAACYBokNAAAwDRIbAABgGiQ2AADANEhsAACAaZDYAAAA0yCxAdzM4MGDVatWrQJtGxcXp6ioKJ09e9auPDMzU3PnztXdd9+t6tWry8fHR40aNdK4ceNy1C0K0dHRslgsOnLkiMPbnjhxQlFRUdq9e7fT4rl06ZLq168vi8Wi1157zWntAnA9EhvAzUycOFGfffZZgbaNi4vT5MmTcyQrly5dUlRUlIKDgzV//nytXbtWjz32mN599121b99ely5dckLk19e9e3f99NNPqlq1qsPbnjhxQpMnT3ZqYjNx4kRduHDBae0BcB9lXB0AAHt16tRxepve3t5KTExUpUqVbGURERGqWbOm/vWvf2nVqlV66KGHnL7fbFWqVFGVKlWKrH1HbN++XQsWLNCSJUv0r3/9y9XhAHAyRmyAQoiKipLFYtGuXbvUq1cv+fr6ys/PTw899JD+/PNPu7pZWVmaPXu2GjZsKC8vL/n7+2vgwIE6fvy4Xb3cTkVZLBY988wz+uijj9SoUSP5+PioWbNm+uqrr+xief755yVJISEhslgsslgs2rx5s0qXLm2X1GRr3bq1JOnYsWO2ss2bN8tisejjjz/W6NGjFRgYKG9vb3Xo0EG7du3K0cYXX3yh8PBw+fj4yGq1KjIyUj/99JNdndxORUVERKhJkyaKj4/XHXfcIR8fH9WuXVszZ85UVlaWLZbbbrtNkjRkyBBbn6KionL7OG7oypUrGjp0qJ5++mm1atXKoW0XLVqkZs2aqXz58rJarWrYsKFefPFFuzrJycl64oknVL16dXl6eiokJESTJ09WRkaGXb3jx4+rd+/eslqtqlChggYMGKD4+HhZLBZFR0ffMJbff/9djz/+uGrUqCFPT08FBQWpd+/e+uOPPyRJly9f1pgxY9S8eXP5+fmpYsWKCg8P1+eff56jrZUrV6pNmzby8/OzfQZDhw61q5OWlqbnnntOISEh8vT0VLVq1TRy5EhGveCWGLEBnOD+++9Xnz599OSTT2rfvn2aOHGi9u/fr23btsnDw0OS9NRTT+ndd9/VM888ox49eujIkSOaOHGiNm/erJ9//lmVK1fOcx//+c9/FB8frylTpqh8+fKaPXu27r//fh04cEC1a9fWo48+qtOnT2vBggVavXq17bRPaGjoddv89ttvJUmNGzfOse7FF19UixYt9O9//1upqamKiopSRESEdu3apdq1a0uSli5dqgEDBqhLly5atmyZ0tPTNXv2bEVERGjjxo26/fbb8+xTcnKyBgwYoDFjxmjSpEn67LPPNH78eAUFBWngwIFq0aKFFi9erCFDhuill15S9+7dJUnVq1fPs93rmTJlii5cuKBXXnklR+KZl+XLl2vYsGF69tln9dprr6lUqVL63//+p/3799v1pXXr1ipVqpRefvll1alTRz/99JOmTp2qI0eOaPHixZKkCxcuqGPHjjp9+rRmzZqlunXrat26derbt2++Yvn9999122236erVq3rxxRcVFhamU6dOaf369Tpz5owCAgKUnp6u06dP67nnnlO1atV05coVffPNN+rVq5cWL16sgQMHSpJ++ukn9e3bV3379lVUVJTKli2rpKQk2/dCki5evKgOHTro+PHjtv3t27dPL7/8svbu3atvvvlGFosl3+8lUOQMAAU2adIkQ5IxatQou/IlS5YYkoyPP/7YMAzDSEhIMCQZw4YNs6u3bds2Q5Lx4osv2soGDRpkBAcH29WTZAQEBBhpaWm2suTkZKNUqVLGjBkzbGWvvvqqIclITEy8YezHjx83AgICjFatWhmZmZm28k2bNhmSjBYtWhhZWVm28iNHjhgeHh7Go48+ahiGYWRmZhpBQUFG06ZN7bY/d+6c4e/vb7Rr185Wtnjx4hxxdejQwZBkbNu2zS6u0NBQo2vXrrbl+Ph4Q5KxePHiG/YpL7t27TI8PDyMdevWGYZhGImJiYYk49VXX73hts8884xRoUKFPOs88cQTRvny5Y2kpCS78tdee82QZOzbt88wDMN48803DUnG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yZMnKyMjw7beYrHo3//+t+6//375+PioXr16+uKLLyRJR44cUceOHSVJt9xyiywWiwYPHpzv96KwXJrYPPfcc9qyZYsSExO1bds29e7dW2lpaRo0aJAsFotGjhyp6dOn67PPPtOvv/6qwYMHy8fHR/3793dl2ACAm1BMTIzKlSunbdu2afbs2ZoyZYpiY2NlGIbuu+8+nT59Wlu2bFFsbKwOHTqkvn375qvdJUuWaNq0aZo1a5Z27typmjVratGiRTnqbdy4UQkJCYqNjdVXX30l6e//8L/yyiv65ZdftGbNGiUmJtolEceOHVOvXr10zz33aPfu3bakKS/r16/XQw89pOHDh2v//v165513FB0drWnTptnVmzx5svr06aM9e/bonnvu0YABA3T69GnVqFFDq1atkiQdOHBAJ0+e1Ouvv56v98IZXDrH5vjx43rwwQf1119/qUqVKmrbtq22bt2q4OBgSdLYsWN16dIlDRs2TGfOnFGbNm20YcMGWa1WV4YNALgJhYWFadKkSZKkevXqaeHChdq4caMkac+ePUpMTLTN6fzoo4/UuHFjxcfH67bbbsuz3QULFuiRRx7RkCFDJEkvv/yyNmzYoPPnz9vVK1eunP7973/L09PTVjZ06FDbz7Vr19Ybb7yh1q1b6/z58ypfvrwWLVqk2rVra968ebJYLGrQoIH27t2rWbNmXTeeadOmady4cRo0aJCt3VdeeUVjx4619V/6exTpwQcflCRNnz5dCxYs0Pbt23X33XerYsWKkiR/f/9in2Pj0sRm+fLlea63WCyKioqyG+4DAMAVwsLC7JarVq2qlJQUJSQkqEaNGnYXqoSGhqpChQpKSEi4YWJz4MABDRs2zK6sdevW+vbbb+3KmjZtapfUSNKuXbsUFRWl3bt36/Tp08rKypL096mx0NBQJSQkqG3btnYX3YSHh+cZz86dOxUfH283QpOZmanLly/r4sWL8vHxyfF+lCtXTlarNcdpMFfg6d4AAOSDh4eH3bLFYlFWVtZ1r9a90VW817Z17bbXKleunN3yhQsX1KVLF3Xp0kUff/yxqlSpoqNHj6pr1662ycW5tXMjWVlZmjx5snr16pVjXdmyZW0/X+/9cDUSGwAACiE0NFRHjx7VsWPHbKM2+/fvV2pqqho1anTD7Rs0aKDt27fr4YcftpXt2LHjhtv997//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++WO410TBwAAuXB48vD69esVGhqq7du3KywsTE2aNNG2bdvUuHFjxcbGFkWMAAAA+eLwiM24ceM0atQozZw5M0f5Cy+8wJVRAADAZRwesUlISNAjjzySo3zo0KHcoA8AALiUw4lNlSpVtHv37hzlu3fvlr+/vzNiAgAAKBCHT0U99thjevzxx3X48GG1a9dOFotFP/zwg2bNmqUxY8YURYwAAAD54nBiM3HiRFmtVs2ZM0fjx/99RUxQUJCioqI0fPhwpwcIAACQXw4nNhaLRaNGjdKoUaN07tw5SZLVanV6YAAAAI4q1FMrSWiKT9uj77o6BAAA3J7Dk4cBAADcFYkNAAAwDRIbAABgGiQ2AADANJyW2OzYsUPfffeds5oDAABwWKGuivqnhx9+WL/99psyMzOd1SQAAIBDnJbYbNy4UVevXnVWcwAAAA5zWmITFBTkrKYAAAAKhMnDAADANPI9YlOqVClZLJY861gsFmVkZBQ6KAAAgILId2Lz2WefXXddXFycFixYIMMwnBIUAABAQeT7VFTPnj1zvBo0aKDo6GjNmTNH//rXv3TgwAGHdj5jxgzddtttslqt8vf313333ZejDcMwFBUVpaCgIHl7eysiIkL79u1zaD8AAODmUKA5NidOnNBjjz2msLAwZWRkaPfu3YqJiVHNmjUdamfLli16+umntXXrVsXGxiojI0NdunTRhQsXbHVmz56tuXPnauHChYqPj1dgYKAiIyNtTxYHAADI5tBVUampqZo+fboWLFig5s2ba+PGjbrjjjsKvPN169bZLS9evFj+/v7auXOn7rzzThmGofnz52vChAnq1auXJCkmJkYBAQFaunSpnnjiiQLvGwAAmE++R2xmz56t2rVr66uvvtKyZcsUFxdXqKQmN6mpqZKkihUrSpISExOVnJysLl262Op4eXmpQ4cOiouLc+q+AQBAyZfvEZtx48bJ29tbdevWVUxMjGJiYnKtt3r16gIFYhiGRo8erdtvv11NmjSRJCUnJ0uSAgIC7OoGBAQoKSkp13bS09OVnp5uW05LSytQPAAAoOTJd2IzcODAG17uXRjPPPOM9uzZox9++CHHumv3axjGdWOZMWOGJk+eXCQxAgAA95bvxCY6OrrIgnj22Wf1xRdf6LvvvlP16tVt5YGBgZL+HrmpWrWqrTwlJSXHKE628ePHa/To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f59n/S1btqhly5YqW7asateurbfffjtHnVWrVik0NFReXl4KDQ3VZ599Vuj9Fpaz+/nee+/pjjvu0C233KJbbrlFnTt31vbt2+3qREVFyWKx2L0CAwOd3rdrObuv0dHROfphsVh0+bL9M1VK+mcaERGRaz+7d+9uq1MSPtOTJ0+qf//+atCggUqVKqWRI0fmWq+kH6f56ae7HqfO7qe7HqOO7jM/fXXX49SRfq5evVqRkZGqUqWKfH19FR4ervXr1+eoV2zHaMGe4uSeli9fbnh4eBjvvfeesX//fmPEiBFGuXLljKSkpFzrHz582PDx8TFGjBhh7N+/33jvvfcMDw8P49NPP7XViYuLM0qXLm1Mnz7dSEhIMKZPn26UKVPG2Lp1a4H364797N+/v/Hmm28au3btMhISEowhQ4YYfn5+xvHjx211Jk2aZDRu3Ng4efKk7ZWSklIkfSzKvi5evNjw9fW168fJkycLtV937OepU6fs+vfrr78apUuXNhYvXmyrUxI+08TERGP48OFGTEyM0bx5c2PEiBE56pjhOM1PP93xOC2KfrrjMVqQfeanr+54nDrazxEjRhizZs0ytm/fbvz222/G+PHjDQ8PD+Pnn3+21SnOY9RUiU3r1q2NJ5980q6sYcOGxrhx43KtP3bsWKNhw4Z2ZU888YTRtm1b23KfPn2Mu+++265O165djX79+hV4v4VVFP28VkZGhmG1Wo2YmBhb2aRJk4xmzZoVPPACKIq+Ll682PDz83PqfgurOD7TefPmGVar1Th//rytrCR8pv/UoUOHXP84mOE4/afr9fNa7nCcFkU/3fEYLew+8/uZusNx6oz3NjQ01Jg8ebJtuTiPUdOcirpy5Yp27typLl262JV36dJFcXFxuW7z008/5ajftWtX7dixQ1evXs2zTnabBdlvYRRVP6918eJFXb16VRUrVrQrP3jwoIKCghQSEqJ+/frp8OHDhehN3oqyr+fPn1dwcLCqV6+uHj16aNeuXYXab2EU12f6/vvvq1+/fipXrpxdubt/pvlhhuO0IFx9nBZlP93pGC3Ofbr6OHVGP7OysnTu3Dm772VxHqOmSWz++usvZWZm5njqd0BAQI6ng2dLTk7OtX5GRob++uuvPOtkt1mQ/RZGUfXzWuPGjVO1atXUuXNnW1mbNm304Ycfav369XrvvfeUnJys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7tT58+dVqVIlu3YuXbqkQ4cOFU/QAPKNxAZAodSrV08Wi0UJCQm67777blj/+eef1+DBg+Xj46OqVavaJUS+vr5KTU3Nsc3Zs2clSX5+foWO18PDw27ZYrHkWpaVlSXp7xGeqlWr5npFFpeSA+6HxAZAoVSsWFFdu3bVm2++qeHDh+eYZ3P27Fm7BKBy5cqqW7durm01bNhQx48fV3Jyst0ppfj4eJUqVeq620mSp6enMjMzC9eZXLRo0ULJyckqU6aMatWq5fT2ATgXV0UBKLS33npLmZmZat26tVatWqWDBw8qISFBb7zxhsLDw/PdTpcuXdSoUSP169dPP/74oxITE/X555/rueee05NPPml3CulatWrV0nfffafff/9df/31lzO6JUnq3LmzwsPDdd9992n9+vU6cuSI4uLi9NJLL2nHjh1O2w8A5yCxAVBoISEh+vnnn9WxY0eNGTNGTZo0UWRkpDZu3KhFixblu50yZcpow4YNql27tgYMGKDGjRtr3LhxevTRRzV37tw8t50yZYqOHDmiOnXqqEqVKoXtko3FYtHatWt15513aujQoapfv7769eunI0eOKCAgwGn7AeAcFiN75h8AAEAJx4gNAAAwDRIbAABgGiQ2AADANEhsAACAaZDYAAAA0yCxAQAApkFiAwAATIPEBgAAmAaJDQAAMA0SGwAAYBokNgAAwDRIbAAAgGn8f/cG/LVEYtWgAAAAAElFTkSuQmCC", + "text/plain": [ + "Text(0, 0.5, 'N. occurrences')" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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y5bZLP/nP/9RWlqaWrZsKUl6+OGHJV3/JXSj2NhYHTx4UK1bt3ZIHd7e3pKU7cxIZtA5evSoNm3apAYNGuS4rxUrVsgwDOvy8ePHFRMTYx1T9erVVb58eS1fvtym3+XLl7VmzRrrFVrOHFNujRo1Slu3brV5Zc5evPjii9q6dauqVKmSq30VL15cjz76qMaMGaOUlBTt379fktShQwf973//U+XKldWoUaMsr8yw06JFC128eFFffvmlzX5XrlyZq/d/9NFHtXXrVh06dOiWfSwWi7y8vGyCTnx8fLZXY2Xy9vZWixYtNGPGDEmyXnnXoUMHHTlyRGXKlMl2XHm9ASbgKMzsAAVk7dq18vDwUEREhPVqrPr166tr166SrgeD559/XvPmzVORIkX06KOPWq/GCg0N1bBhwxxSR926dSVJb7/9tnr37i1PT09Vr15dHh4eateunfbu3au5c+cqLS1NO3bssG5Xrly5LPf3SUhI0JNPPqkBAwYoMTFREyZMULFixTR69GhJUpEiRTRz5kz16NFDHTp00AsvvKDk5GTNmjVLFy5c0PTp0x0ypsqVK8vHx0fLli1TzZo1VaJECYWEhCgkJETHjh1TWFiYevfuneMl2zVq1FCNGjVs2jIvg69cubI1wN3KgAED5OPjo+bNmys4OFjx8fGaNm2a/P39ree9TJo0SdHR0WrWrJkGDx6s6tWr69q1azp27Jg2bNig999/X3fffbd69+6tt956Sz179tSUKVNUpUoVffnll9q4caMkZXv+1I0mTZqkL7/8Ug899JDeeOMN1a1bVxcuXNBXX32l4cOHq0aNGurQoYPWrl2rgQMHqkuXLjp58qQmT56s4OBg/fbbb9Z9jR8/XqdOnVLr1q11991368KFC3r77bfl6empFi1aSJKGDh2qNWvW6KGHHtKwYcNUr149ZWRk6MSJE9q0aZNGjBihJk2a5Fgz4FSuPT8aML/Mq7F2795tPP7440aJEiUMPz8/45lnnjH++OMPm77p6enGjBkzjGrVqhmenp5G2bJljZ49exonT5606Xerq7EGDRqU5f0rVqxo9O7d26Zt9OjRRkhIiFGkSBFDkrF161brlUe3et24j8yrsT7++GNj8ODBRrly5Qxvb2/jwQcfNHbt2pWlhnXr1hlNmjQxihUrZhQvXtxo3bq18f3339v0udXVWLVr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Z47mz5+v2NhYBQUFKSIiQhcvXrT2GTp0qD799FOtXLlS3333nS5duqQOHTooPT29oIYBAADcmEtPUH700Uf16KOPZrvOMAzNnTtXY8aMUefOnSVJS5YsUWBgoJYvX64XXnhBiYmJ+uijj/Txxx9bH4a2dOlShYaGavPmzWrXrl2BjQUAALgntz1nJy4uTvHx8Wrbtq21zdvbWy1atFBMTIwkaffu3UpNTbXpExISojp16lj7ZCc5OVlJSUk2LwAAYE5uG3bi4+MlXX/a640CAwOt6+Lj4+Xl5aW77rrrln2yM23aNPn7+1tfoaGhDq4eAAC4C7cNO5luvk24YRi3vXX47fqMHj1aiYmJ1tfJkycdUisAAHA/bht2Mm8NffMMTUJCgnW2JygoSCkpKTp//vwt+2TH29tbJUuWtHkBAABzctuwExYWpqCgIEVHR1vbUlJStH37djVr1kyS1LBhQ3l6etr0OXv2rP73v/9Z+wAAgDubS6/GunTpkn7//XfrclxcnPbt26fSpUurQoUKGjp0qKKiolS1alVVrVpVUVFR8vX1Vffu3SVJ/v7+6t+/v0aMGKEyZcqodOnSevXVV1W3bl3r1VkAAODO5tKws2vXLrVq1cq6PHz4cElS7969tXjxYo0cOVJXr17VwIEDdf78eTVp0kSbNm2Sn5+fdZu33npLHh4e6tq1q65evarWrVtr8eLFPE8FAABIkiyGYRiuLsLVkpKS5O/vr8TERLc4f+et6MM5rh8WUa2AKgEAwH3l9ve3256zAwAA4AiEHQAAYGqEHQAAYGqEHQAAYGqEHQAAYGqEHQAAYGqEHQAAYGqEHQAAYGqEHQAAYGqEHQAAYGqEHQAAYGoufRAorrvds7AAAEDeMbMDAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjZsKFkI334RwWEQ1F1UCAID7Y2YHAACYGmEHAACYGmEHAACYGmEHAACYGmEHAACYGmEHAACYGmEHAACYGmEHAACYGmEHAACYGmEHAACYGmEHAACYGmEHAACYGmEHAACYGmEHAACYGmEHAACYGmEHAACYGmEHAACYGmEHAACYGmEHAACYGmEHAACYGmEHAACYGmEHAACYGmEHAACYGmEHAACYGmEHAACYGmEHAACYGmEHAACYGmEHAACYGmEH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sqQSExOzbHPhwgVJkr+/f77r9fT0tFm2WCzZtmVkZEi6PhMUHByc7ZVgXNYOuB5hB4DTlS5dWu3atdO7776rwYMHZzlv58KFCzahoGzZsqpSpUq2+6pRo4ZOnTql+Ph4m8NRsbGxKlKkyC23kyQvLy+lp6fnbzDZuPfeexUfHy8PDw9VqlTJ4fsHkD9cjQWgQLz33ntKT09X48aNtWbNGv322286ePCg3nnnHTVt2jTX+2nbtq1q1qypp59+Wt9//73i4uL02Wef6dVXX9WLL75oc/jpZpUqVdI333yj06dP66+//nLEsCRJbdq0UdOmTdWpUydt3LhRx44dU0xMjMaOHatdu3Y57H0A5A1hB0CBCAsL0549e9SqVSuNGDFCderUUUREhLZs2aIFCxbkej8eHh7atGmTwsPD1aNHD9WuXVujRo3Sc889pzlz5uS47aRJk3Ts2DFVrlxZ5cqVy++QrCwWizZs2KCHHnpI/fr1U7Vq1fT000/r2LFjCgwMdNj7AMgbi5F55iAAAIAJMbMDAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABM7f8B3oOHJFqUPD8AAAAASUVORK5CYII=", "text/plain": [ "
" ] @@ -240,15 +257,15 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "Number of segments: 4\n", - "Number of fwd segments: 2\n", - "Number of bck segments: 2\n", + "Number of segments: 2\n", + "Number of fwd segments: 1\n", + "Number of bck segments: 1\n", "Maximum thrust: 0.22\n", "Central body gravitational parameter: 1.32712440018e+20\n", "Specific impulse: 3000\n", @@ -258,13 +275,13 @@ "Final mass: 1\n", "State at departure: [[179517444840, 0, -1495978707], [297.8469183169681, 29784.691831696804, -297.8469183169681]]\n", "State at arrival: [[149597870700, 0, -0], [297.8469183169681, 32763.161014866488, -0]]\n", - "Throttles values: [-0.5531180194281187, 0.14971757884060444, 0.7940199350920427, 0.028288032565428445, -0.11046018798817858, -0.800424150704127, -0.6581747271243201, -0.5884590126432687, 0.9303693454363375, -0.7082653660632694, 0.3855806880092745, 0.3899050835184499]\n", + "Throttles values: [0, 0, 0, 0, 0, 0]\n", "\n", - "Mismatch constraints: [29919970440.50476, 38523538.099015325, -1496184052.1450462, -98.7230576541013, -2992.131264375472, -208.49434302739866, 998.99085894998]\n", - "Throttle constraints: [-0.04117744584645111, -0.34631951305277053, 0.6450650999139032, -0.19766173011602817]\n" + "Mismatch constraints: [29919941431.26764, 38529477.27626525, -1496162174.1910896, -6.189427009557562, -2978.469066381742, -297.82577960576987, 999]\n", + "Throttle constraints: [-1, -1]\n" ] }, - "execution_count": 12, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -273,13 +290,6 @@ "udp_g.leg.tof=1232.\n", "udp_g.leg" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/_sources/trajopt.rst b/_sources/trajopt.rst index 20913b5..3a267a8 100644 --- a/_sources/trajopt.rst +++ b/_sources/trajopt.rst @@ -18,5 +18,7 @@ Direct .. autoclass:: direct_point2point :members: pretty, plot +.. autoclass:: direct_pl2pl + :members: pretty, plot diff --git a/genindex.html b/genindex.html index 46b6443..a82041e 100644 --- a/genindex.html +++ b/genindex.html @@ -421,6 +421,8 @@

D

@@ -677,12 +679,20 @@

P

  • planet (class in pykep)
  • +
  • plot() (pykep.trajopt.direct_pl2pl method) + +
  • -
    Returns:

    mpl_toolkits.mplot3d.axes3d.Axes3D: The modified Axes object with the ballistic arc trajectory added.

    +
    Returns:

    mpl_toolkits.mplot3d.axes3d.Axes3D: The modified Axes object with the ballistic arc trajectory added.

    @@ -564,7 +564,7 @@

    Plotting trajectoriespykep.plot.add_sf_leg(ax, sf: _sims_flanagan, units=149597870700.0, N=10, show_midpoints=False, show_gridpoints=False, show_throttles=False, length=0.1, arrow_length_ratio=0.05, **kwargs)#

    Add a trajectory leg of Sims-Flanagan problem to a 3D matplotlib Axes.

    -
    Args:

    ax (mpl_toolkits.mplot3d.axes3d.Axes3D): The 3D Axes object to which the trajectory leg will be added.

    +
    Args:

    ax (mpl_toolkits.mplot3d.axes3d.Axes3D): The 3D Axes object to which the trajectory leg will be added.

    sf (sims_flanagan): The Sims-Flanagan object containing relevant information.

    units (float, optional): The unit conversion factor for plotting. Default is pk.AU.

    N (int, optional): The number of points to generate along each segment of the trajectory. Default is 10.

    @@ -580,7 +580,7 @@

    Plotting trajectories

    Midpoints, gridpoints, and thrust vectors can be optionally shown based on the provided parameters.

    -
    Returns:

    mpl_toolkits.mplot3d.axes3d.Axes3D: The modified Axes object with the Sims-Flanagan leg added.

    +
    Returns:

    mpl_toolkits.mplot3d.axes3d.Axes3D: The modified Axes object with the Sims-Flanagan leg added.

    diff --git a/reports/notebooks/plotting.err.log b/reports/notebooks/plotting.err.log new file mode 100644 index 0000000..10b239a --- /dev/null +++ b/reports/notebooks/plotting.err.log @@ -0,0 +1,51 @@ +Traceback (most recent call last): + File "/home/runner/local/lib/python3.11/site-packages/jupyter_cache/executors/utils.py", line 58, in single_nb_execution + executenb( + File "/home/runner/local/lib/python3.11/site-packages/nbclient/client.py", line 1314, in execute + return NotebookClient(nb=nb, resources=resources, km=km, **kwargs).execute() + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/runner/local/lib/python3.11/site-packages/jupyter_core/utils/__init__.py", line 165, in wrapped + return loop.run_until_complete(inner) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/home/runner/local/lib/python3.11/asyncio/base_events.py", line 654, in run_until_complete + return future.result() + ^^^^^^^^^^^^^^^ + File "/home/runner/local/lib/python3.11/site-packages/nbclient/client.py", line 709, in async_execute + await self.async_execute_cell( + File "/home/runner/local/lib/python3.11/site-packages/nbclient/client.py", line 1062, in async_execute_cell + await self._check_raise_for_error(cell, cell_index, exec_reply) + File "/home/runner/local/lib/python3.11/site-packages/nbclient/client.py", line 918, in _check_raise_for_error + raise CellExecutionError.from_cell_and_msg(cell, exec_reply_content) +nbclient.exceptions.CellExecutionError: An error occurred while executing the following cell: +------------------ +ax = pk.plot.make_3Daxis(figsize = (6,6)) +ep = pk.epoch(0) +pk.plot.add_solar_system(ax, bodies = [1,2,3,4,5], ep = ep) +ax.view_init(90,0) +ax.legend() +ax.axis('off') +ax.set_xlim3d(-4,4) +ax.set_ylim3d(-4,4) +ax.view_init(90,0) +ax.set_title("The solar system up to Jupiter at mjd2000=0."); +------------------ + + +--------------------------------------------------------------------------- +TypeError Traceback (most recent call last) +Cell In[4], line 3 + 1 ax = pk.plot.make_3Daxis(figsize = (6,6)) + 2 ep = pk.epoch(0) +----> 3 pk.plot.add_solar_system(ax, bodies = [1,2,3,4,5], ep = ep) + 4 ax.view_init(90,0) + 5 ax.legend() + +File ~/local/lib/python3.11/site-packages/pykep/plot/_planet.py:117, in add_solar_system(ax, bodies, ep, s) + 115 if 1 in bodies: + 116 udpla = _pk.udpla.jpl_lp(body="Mercury") +--> 117 mercury = _pk.planet_to_keplerian(_pk.planet(udpla), ep=ep) + 118 _pk.plot.add_planet_orbit(ax, mercury, c="tomato", label="") + 119 _pk.plot.add_planet(ax, mercury, when=ep, c="tomato", s=s[1], label = "Mercury") + +TypeError: planet_to_keplerian() got an unexpected keyword argument 'ep' + diff --git a/reports/notebooks/udp_pl2pl.err.log b/reports/notebooks/udp_pl2pl.err.log index f171c3b..e62880a 100644 --- a/reports/notebooks/udp_pl2pl.err.log +++ b/reports/notebooks/udp_pl2pl.err.log @@ -18,61 +18,50 @@ Traceback (most recent call last): raise CellExecutionError.from_cell_and_msg(cell, exec_reply_content) nbclient.exceptions.CellExecutionError: An error occurred while executing the following cell: ------------------ -# Problem data -mu = pk.MU_SUN -max_thrust = 0.12 -isp = 3000 +masses = [] +xs = [] +for i in range(10): + pop_g = pg.population(prob_g, 1) + pop_g = algo.evolve(pop_g) + if(prob_g.feasibility_f(pop_g.champion_f)): + print(".", end="") + masses.append(pop_g.champion_x[1]) + xs.append(pop_g.champion_x) + else: + print("x", end ="") +print("\nBest mass is: ", np.max(masses)) +print("Worst mass is: ", np.min(masses)) +best_idx = np.argmax(masses) +------------------ -# Initial state -ms = 1500.0 -rs = np.array([1.2, 0.0, -0.01]) * pk.AU -vs = np.array([0.01, 1, -0.01]) * pk.EARTH_VELOCITY -# Final state -mf = 1300.0 -rf = np.array([1, 0.0, -0.0]) * pk.AU -vf = np.array([0.01, 1.1, -0.0]) * pk.EARTH_VELOCITY +--------------------------------------------------------------------------- +ValueError Traceback (most recent call last) +Cell In[10], line 5 + 3 for i in range(10): + 4 pop_g = pg.population(prob_g, 1) +----> 5 pop_g = algo.evolve(pop_g) + 6 if(prob_g.feasibility_f(pop_g.champion_f)): + 7 print(".", end="") -# Throttles and tof -nseg = 4 -throttles = np.random.uniform(-1, 1, size=(nseg * 3)) -tof = 2 * np.pi * np.sqrt(pk.AU**3 / pk.MU_SUN) / 4 +ValueError: +function: evolve_version +where: /home/conda/feedstock_root/build_artifacts/pygmo_plugins_nonfree_1712564791372/work/src/snopt7.cpp, 603 +what: +An error occurred while loading the snopt7_c library at run-time. This is typically caused by one of the following +reasons: -udp_nog = pk.trajopt.direct_point2point( - rvs=[rs, vs], - rvf=[rf, vf], - mu=pk.MU_SUN, - max_thrust=0.22, - isp=3000, - tof_bounds=[200, 500], - mf_bounds=[200.0, 1000.0], - nseg=nseg, - cut=0.6, - with_gradient=False, -) +- The file declared to be the snopt7_c library, i.e. /Users/dario.izzo/opt/libsnopt7_c.dylib, is not a shared library containing the necessary C interface symbols (is the file path really pointing to +a valid shared library?) + - The library is found and it does contain the C interface symbols, but it needs linking to some additional libraries that are not found +at run-time. -udp_g = pk.trajopt.direct_point2point( - rvs=[rs, vs], - rvf=[rf, vf], - mu=pk.MU_SUN, - max_thrust=0.22, - isp=3000, - tof_bounds=[200, 500], - mf_bounds=[200.0, 1000.0], - nseg=nseg, - cut=0.6, - with_gradient=True, -) ------------------- +We report the exact text of the original exception thrown: + +function: evolve_version +where: /home/conda/feedstock_root/build_artifacts/pygmo_plugins_nonfree_1712564791372/work/src/snopt7.cpp, 553 +what: The snopt7_c library path was constructed to be: /Users/dario.izzo/opt/libsnopt7_c.dylib and it does not appear to be a file ---------------------------------------------------------------------------- -NameError Traceback (most recent call last) -Cell In[3], line 2 - 1 # Problem data -----> 2 mu = pk.MU_SUN - 3 max_thrust = 0.12 - 4 isp = 3000 -NameError: name 'pk' is not defined diff --git a/searchindex.js b/searchindex.js index e673c89..a448033 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["anomalies", "api", "bibliography", "constants", "elements", "epoch", "index", "lambert", "leg", "notebooks/anomalies", "notebooks/epochs", "notebooks/interface_to_spice", "notebooks/planet", "notebooks/plotting", "notebooks/propagate_lagrangian", "notebooks/sims_flanagan_leg", "notebooks/udp_pl2pl", "notebooks/udp_point2point", "planet", "plot", "propagation", "trajopt", "tut_basic", "tut_trajopt", "udpla"], "filenames": ["anomalies.rst", "api.rst", "bibliography.rst", "constants.rst", "elements.rst", "epoch.rst", "index.md", "lambert.rst", "leg.rst", "notebooks/anomalies.ipynb", "notebooks/epochs.ipynb", "notebooks/interface_to_spice.ipynb", "notebooks/planet.ipynb", "notebooks/plotting.ipynb", "notebooks/propagate_lagrangian.ipynb", "notebooks/sims_flanagan_leg.ipynb", "notebooks/udp_pl2pl.ipynb", "notebooks/udp_point2point.ipynb", "planet.rst", "plot.rst", "propagation.rst", "trajopt.rst", "tut_basic.rst", "tut_trajopt.rst", "udpla.rst"], "titles": ["Anomalies Conversions", "API", "Bibliography", "Global constants", "Orbital Elements", "Epoch class", "Welcome to pykep\u2019s documentation!", "Lambert class", "Interplanetary transfer legs", "The various anomalies in pykep", "Epochs and Julian Dates", "Interfacing to SPICE and JPL DE ephs", "Ephemerides", "Plotting", "Lagrange Propagation", "The Sims-Flanagan trajectory leg", "Planet to planet low-thrust transfer", "Point to point low-thrust transfer", "Planet class", "The plot module", "Numerical Propagation", "Trajectory Optimization", "Basic", "Trajectory Optimization", "List of user implemented planets (UDPLAs)"], "terms": {"In": [0, 3, 4, 5, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 21], "pykep": [0, 1, 4, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24], "we": [0, 5, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20], "adopt": 0, "follow": [0, 8, 10, 11, 12, 14, 18], "name": [0, 3, 9, 11, 12, 16, 17, 18, 24], "variou": [0, 3, 4, 6, 12, 13, 22], "m": [0, 3, 4, 6, 8, 9, 11, 14, 15, 16, 17, 18, 21], "i": [0, 1, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24], "mean": [0, 4, 9, 10, 12, 16, 24], "e": [0, 4, 8, 9, 10, 15, 18, 19, 24], "eccentr": [0, 9, 12, 14], "l": [0, 4, 9, 14], "true": [0, 4, 7, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24], "longitud": [0, 4, 9], "lambda": [0, 9], "h": [0, 2, 4, 9], "hyperbol": [0, 9, 14], "n": [0, 2, 3, 9, 13, 14, 15, 16, 17, 19, 21], "zeta": [0, 9], "gudermannian": [0, 9], "function": [0, 3, 4, 9, 10, 11, 14, 16, 18, 19, 24], "variabl": [0, 7, 9, 16], "symbol": [0, 3, 9], "can": [0, 3, 5, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24], "spell": [0, 14], "out": [0, 14], "like": [0, 7, 8, 10, 20, 24], "made": [0, 7, 11, 12], "lowercas": 0, "below": [0, 13, 14], "list": [0, 1, 6, 8, 11, 16, 18, 19, 20, 21], "allow": [0, 6, 7, 8, 10, 12, 14, 16, 18, 20], "convert": [0, 4, 9, 10, 11], "from": [0, 4, 5, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 24], "one": [0, 3, 5, 10, 11, 13, 14, 16, 18], "anoth": 0, "version": [0, 4, 9, 14, 18, 20, 21], "m2e": [0, 9], "ecc": [0, 9], "requir": [0, 11], "1": [0, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24], "arg": [0, 5, 7, 8, 16, 18, 19, 20, 21, 24], "float": [0, 5, 7, 8, 10, 16, 18, 19, 20, 21, 24], "rad": 0, "return": [0, 5, 8, 12, 16, 18, 19, 20, 21, 24], "pi": [0, 4, 7, 8, 9, 14, 16, 17, 18, 20], "exampl": [0, 5, 7, 8, 9, 10, 14, 16, 17, 18, 19, 20, 24], "import": [0, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 24], "pk": [0, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 24], "2": [0, 2, 3, 4, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 24], "0": [0, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24], "296254963787226": 0, "e2m": 0, "5": [0, 2, 8, 9, 10, 13, 14, 16, 17, 19, 24], "4520574461395797": 0, "m2f": 0, "32": [0, 10], "65": 0, "4497431281728277": 0, "f2m": 0, "f": [0, 4, 9, 11, 14, 16, 17, 24], "34": 0, "67": 0, "05065883735669101": 0, "e2f": 0, "5502639747136633": 0, "f2e": 0, "1082931139529482": 0, "n2h": [0, 9], "10": [0, 3, 10, 11, 13, 15, 16, 17, 19, 21, 24], "12836469743916526": 0, "h2n": 0, "14": [0, 16, 24], "377641187853621": 0, "n2f": 0, "13": [0, 5, 16, 17], "45": [0, 14], "7373697968359353": 0, "f2n": 0, "7": [0, 3, 8, 14, 15, 16, 17], "8": [0, 8, 14, 16, 19], "421335633880908": 0, "h2f": 0, "4": [0, 2, 7, 9, 10, 13, 14, 15, 16, 17, 19], "7948251330114304": 0, "f2h": 0, "30083016696826936": 0, "zeta2f": 0, "see": [0, 10, 13, 14, 18], "battin": [0, 2, 7, 14], "an": [0, 2, 5, 8, 9, 10, 11, 12, 13, 15, 17, 18, 20, 24], "introduct": [0, 2, 10], "mathemat": [0, 2], "method": [0, 2, 8, 12, 16, 18, 19, 21, 24], "astrodynam": [0, 2, 8, 12, 14, 22], "definit": [0, 10], "treatment": 0, "result": [0, 11, 13, 14, 19, 24], "equat": [0, 9, 18, 20, 24], "3290929552114266": 0, "f2zeta": 0, "3": [0, 3, 5, 8, 9, 13, 14, 15, 16, 17, 18, 19, 20, 24], "36923933496389816": 0, "m2e_v": [0, 9], "numpi": [0, 7, 8, 9, 11, 13, 14, 15, 16, 17, 18, 20, 24], "ndarrai": [0, 8, 18, 20, 24], "np": [0, 7, 8, 9, 11, 13, 14, 15, 16, 17, 18, 20], "linspac": [0, 9, 14], "100": [0, 9, 14, 16, 17], "375": 0, "shape": 0, "e2m_v": 0, "86345": 0, "m2f_v": 0, "f2m_v": [0, 9], "e2f_v": 0, "0256": 0, "f2e_v": 0, "23": [0, 10], "n2h_v": 0, "h2n_v": 0, "n2f_v": 0, "f2n_v": 0, "h2f_v": 0, "f2h_v": 0, "zeta2f_v": 0, "f2zeta_v": 0, "design": [1, 2, 6, 8, 13, 16, 21], "maxim": 1, "its": [1, 6, 7, 8, 9, 10, 11, 12, 13, 16, 18, 21, 22, 24], "usabl": 1, "let": [1, 9, 10, 11, 12, 13, 14], "u": [1, 8, 9, 10, 11, 12, 14, 15], "know": [1, 9, 10, 18], "what": [1, 10, 11], "you": [1, 16, 17], "think": 1, "about": [1, 9, 11, 18], "anomali": [1, 4, 6, 14, 22, 24], "convers": [1, 6, 18, 19], "normal": 1, "vector": [1, 7, 8, 9, 12, 14, 16, 17, 18, 19, 20, 21], "global": [1, 2, 6], "constant": [1, 6, 18], "orbit": [1, 2, 6, 9, 10, 12, 13, 14, 15, 19, 24], "element": [1, 2, 6, 12, 18, 24], "el_typ": [1, 4, 18, 24], "ic2par": [1, 4, 18], "par2ic": [1, 4], "ic2eq": [1, 4], "eq2ic": [1, 4], "eq2par": [1, 4], "par2eq": [1, 4], "epoch": [1, 6, 11, 12, 13, 16, 18, 19, 22, 24], "class": [1, 4, 6, 8, 10, 11, 12, 13, 15, 16, 17, 21, 24], "lambert": [1, 2, 6, 19], "lambert_problem": [1, 7, 13, 19], "interplanetari": [1, 2, 6, 13, 16, 21], "transfer": [1, 6, 13, 14, 21, 23], "leg": [1, 6, 16, 17, 19, 21, 22], "sims_flanagan": [1, 8, 13, 15, 16, 19, 21], "planet": [1, 6, 11, 12, 15], "The": [1, 3, 4, 5, 6, 7, 8, 12, 13, 14, 16, 17, 18, 20, 21, 22, 24], "plot": [1, 6, 9, 14, 15, 16, 17, 21, 22], "modul": [1, 5, 6, 10, 11, 12, 13, 14, 21, 24], "common": [1, 3, 11, 12, 14], "util": [1, 11, 24], "trajectori": [1, 6, 8, 12, 14, 16, 17, 22], "numer": [1, 6, 11, 14, 16, 17], "propag": [1, 6, 8, 12, 18, 22, 24], "keplerian": [1, 4, 6, 12, 14, 15, 18, 24], "dynam": [1, 2, 6, 15], "propagate_lagrangian": [1, 14, 20], "propagate_lagrangian_v": [1, 14, 20], "user": [1, 3, 4, 5, 6, 10, 11, 12, 13, 16, 17, 18], "implement": [1, 6, 8, 12, 14, 15, 18, 20], "udpla": [1, 6, 11, 12, 13, 15, 16, 18, 19], "null_udpla": [1, 24], "jpl_lp": [1, 13, 15, 16, 18, 19, 24], "vsop2013": [1, 24], "tle": [1, 18, 24], "spice": [1, 6, 18, 22, 24], "de440": [1, 11, 24], "optim": [1, 2, 6, 8, 16, 17], "direct": [1, 13, 16], "bat99": [2, 14], "richard": [2, 14], "aiaa": [2, 8], "1999": [2, 10], "bi20": [2, 16, 17], "francesco": 2, "biscani": 2, "dario": 2, "izzo": 2, "A": [2, 4, 9, 10, 11, 12, 13, 15, 24], "parallel": [2, 20], "multiobject": 2, "framework": 2, "pagmo": [2, 21], "journal": 2, "open": 2, "sourc": [2, 10], "softwar": [2, 21], "53": 2, "2338": 2, "2020": 2, "bi21": [2, 20], "revisit": 2, "high": [2, 10], "order": [2, 14, 18], "taylor": [2, 6, 20], "celesti": 2, "mechan": [2, 9, 15], "monthli": 2, "notic": 2, "royal": 2, "astronom": [2, 3], "societi": 2, "504": 2, "2614": 2, "2628": 2, "2021": 2, "bi22": 2, "reliabl": 2, "event": [2, 10], "detect": 2, "513": 2, "4833": 2, "4844": 2, "2022": [2, 11], "izz15": 2, "": [2, 3, 7, 9, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24], "problem": [2, 6, 7, 13, 15, 16, 17, 18, 19, 21], "astronomi": 2, "121": 2, "15": [2, 13, 16, 17, 19], "2015": 2, "sf97": [2, 14, 15, 21], "jon": 2, "sim": [2, 6, 8, 14, 16, 19, 21, 22], "steve": 2, "flanagan": [2, 6, 8, 14, 16, 19, 22], "preliminari": [2, 6, 8], "low": [2, 6, 8, 9, 13, 14, 15, 21, 23, 24], "thrust": [2, 6, 8, 13, 14, 15, 19, 21, 23], "mission": [2, 6, 13, 24], "paper": [2, 6], "aa": [2, 8], "99": 2, "338": 2, "specialist": [2, 8], "confer": [2, 8], "girdwood": 2, "alaska": 2, "august": [2, 8], "16": [2, 7], "18": [2, 16], "1997": 2, "wio85": [2, 4], "michael": 2, "jh": 2, "walker": 2, "b": [2, 14], "ireland": 2, "joyc": 2, "owen": 2, "set": [2, 4, 16], "modifi": [2, 4, 5, 10, 18, 19, 24], "equinocti": [2, 4], "36": 2, "409": 2, "419": 2, "1985": 2, "access": [3, 12, 18], "number": [3, 4, 5, 7, 8, 9, 10, 12, 14, 15, 16, 17, 19, 21], "ar": [3, 4, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24], "provid": [3, 4, 6, 11, 12, 13, 18, 19, 20, 21, 22, 23, 24], "conveni": [3, 11, 12, 13, 14], "overwrit": 3, "valu": [3, 8, 16, 17, 18], "need": [3, 7, 8, 10, 11, 12, 16, 17], "These": [3, 4, 10, 12, 14], "us": [3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24], "intern": [3, 16, 18, 21], "thei": [3, 12, 15, 16, 18, 24], "onli": [3, 10, 11, 12, 13, 14, 16], "instanti": [3, 4, 10, 11, 12, 13, 15, 18, 24], "object": [3, 5, 10, 11, 12, 16, 18, 19, 24], "unit": [3, 7, 8, 12, 13, 14, 15, 16, 18, 19, 21, 24], "au": [3, 12, 15, 16, 17, 19, 21], "149597870700": [3, 17, 19, 21], "cavendish": 3, "frac": [3, 4, 7, 8, 14, 15, 18, 20], "kg": [3, 16, 21], "36687e": 3, "sun": [3, 11, 13, 15, 16, 19, 21], "gravit": [3, 7, 8, 16, 17, 18, 19, 20, 21, 24], "paramet": [3, 4, 7, 8, 11, 12, 16, 17, 18, 19, 20, 21, 24], "mu_sun": [3, 13, 15, 16, 17, 21], "sec": [3, 18], "32712440018e": [3, 17, 21], "20": [3, 13, 15, 16, 17, 21], "earth": [3, 10, 11, 13, 15, 16, 19, 21, 24], "mu_earth": 3, "398600441800000": 3, "veloc": [3, 4, 7, 8, 11, 12, 14, 16, 18, 19, 20, 21, 24], "earth_veloc": [3, 15, 16, 17, 21], "29784": [3, 17, 21], "691831696804": [3, 17, 21], "radiu": [3, 11, 12, 18, 24], "earth_radiu": 3, "6378137": 3, "j_2": 3, "earth_j2": 3, "00108262668": 3, "second": [3, 5, 7, 9, 12, 14, 16, 18, 21, 24], "dai": [3, 5, 10, 16, 21], "day2sec": [3, 13, 15, 16], "86400": 3, "degre": 3, "radian": 3, "rad2deg": 3, "57": 3, "29577951308232": 3, "default": [4, 5, 7, 8, 10, 13, 16, 18, 19, 20, 21, 24], "oscul": [4, 18, 24], "classic": 4, "omega": [4, 12], "togeth": [4, 13], "cartesian": [4, 7, 8, 12, 14, 18, 19, 20], "posit": [4, 7, 8, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 24], "mathbf": [4, 8, 14, 15, 16, 17], "r": [4, 8, 10, 11, 12, 14, 15, 16, 17, 18, 20, 24], "v": [4, 8, 11, 12, 13, 14, 15, 16, 17, 18, 20, 24], "support": [4, 6, 10], "given": [4, 13, 16, 19, 21], "also": [4, 5, 9, 10, 14, 18, 20], "well": [4, 6, 8, 11, 12, 14, 16], "defin": [4, 5, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 24], "left": [4, 14], "begin": [4, 14], "arrai": [4, 7, 8, 9, 14, 15, 16, 17, 18, 20, 21, 24], "p": [4, 8], "co": 4, "g": [4, 9, 14, 18], "sin": [4, 9], "tan": [4, 13], "i2": 4, "right": [4, 14], "k": [4, 13, 15, 16], "end": [4, 8, 9, 12, 14, 16, 17, 19], "avoid": [4, 9, 11, 13, 18], "singular": 4, "except": [4, 18, 24], "which": [4, 8, 9, 10, 11, 12, 13, 14, 16, 18, 19, 24], "case": [4, 9, 11, 12, 13, 14, 15, 16, 17, 18, 20], "retrogad": 4, "convent": [4, 22], "hyperbola": 4, "enforc": 4, "thu": [4, 8, 10, 11, 12, 13, 14, 16, 22, 23], "abl": [4, 11, 18], "where": [4, 13, 14, 16, 21], "member": [4, 5, 7, 16], "kep_m": 4, "kep_f": [4, 18, 24], "meq": 4, "meq_r": 4, "retrograd": [4, 7], "posvel": [4, 24], "represent": [5, 10, 12, 16, 18, 21], "specif": [5, 8, 10, 14, 16, 17, 21], "point": [5, 6, 7, 8, 10, 16, 18, 19, 21, 23], "time": [5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 19, 20, 21], "futur": [5, 10], "past": [5, 10], "rather": [5, 10, 11, 13, 14], "confus": [5, 10, 11], "opt": [5, 10], "offer": [5, 10, 11, 12, 20], "dedic": [5, 9, 10, 11, 14], "call": [5, 8, 16, 17, 18, 19, 20, 24], "simpl": [5, 9, 10, 14, 18], "interfac": [5, 6, 10, 12, 15, 20, 22, 24], "under": [5, 10, 11], "hood": [5, 10, 11], "seamlessli": [5, 10, 20], "both": [5, 10, 11, 13, 21], "c": [5, 10, 11, 12, 13, 15, 16, 18, 19], "std": [5, 10], "chrono": [5, 10], "librari": [5, 6, 10, 16, 17], "python": [5, 10, 12, 18, 20, 24], "datetim": 5, "julian": [5, 6, 18, 22, 24], "date": [5, 6, 18, 22, 24], "repres": [5, 8, 10, 11, 13, 16, 18, 21, 24], "sinc": [5, 10, 11, 14, 17, 20], "start": [5, 8, 9, 11, 12, 13, 14, 15, 16, 17, 19, 22], "2000": [5, 10, 12, 16, 17, 19, 24], "doe": [5, 10, 11, 12, 13, 18], "account": [5, 10], "leap": 5, "If": [5, 10, 11, 18, 19], "wish": [5, 10], "exact": [5, 10], "iso": [5, 10], "8601": [5, 10], "some": [5, 8, 10, 11, 13, 14, 15, 16, 18, 21, 22, 23], "includ": [5, 10, 11], "he": [5, 10], "have": [5, 9, 10, 11, 14, 16, 18], "offset": [5, 10], "himself": [5, 10], "As": [5, 8, 10], "2023": [5, 10, 11, 24], "thi": [5, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24], "mai": [5, 9, 10, 11, 13, 18, 20, 22, 23], "maximum": [5, 7, 8, 10, 13, 16, 17, 19, 21], "28": [5, 10], "more": [5, 6, 10, 11, 12, 13, 14, 18, 20], "info": [5, 10, 11, 12, 18, 24], "when": [5, 10, 11, 12, 13, 18, 19, 22], "julian_typ": [5, 10], "mjd2000": [5, 10, 12, 13, 16, 18, 19, 24], "construct": [5, 7, 8, 10, 12, 13, 18, 19, 24], "refer": [5, 10, 11, 12, 13, 14, 18, 24], "jd": [5, 10], "mjd": [5, 10], "12": [5, 10, 12, 15, 16, 17, 21], "01": [5, 10, 11, 12, 14, 16, 17, 19], "13t07": 5, "00": [5, 10, 12, 14, 16, 17, 19], "000000": [5, 10, 12, 19], "altern": [5, 10, 24], "constructor": [5, 13, 18, 24], "__init__": [5, 16, 24], "str": [5, 18, 24], "string_format": 5, "string": [5, 10, 18], "format": [5, 24], "14t00": 5, "000001": 5, "year": [5, 10], "month": [5, 10], "13t00": 5, "properti": [5, 7, 8, 17, 18], "static": [5, 24], "now": [5, 10, 11, 13, 14, 15], "current": [5, 10, 11], "utc": [5, 10, 12], "coolbox": 6, "develop": 6, "european": 6, "space": [6, 8, 9, 11, 15, 17, 18, 21], "agenc": 6, "advanc": [6, 12, 14], "concept": [6, 8], "team": 6, "Its": 6, "purpos": [6, 14, 15, 18], "fast": 6, "prototyp": 6, "research": 6, "idea": [6, 11], "At": [6, 9], "core": 6, "effici": [6, 14, 15, 18, 20], "algorithm": [6, 8, 14, 16, 17], "solv": [6, 7, 9], "multipl": [6, 7, 13, 14], "revolut": [6, 7, 19], "asteroid": [6, 11], "randezv": 6, "jpl": [6, 13, 22, 24], "sgp4": [6, 24], "heyoka": [6, 20], "integr": [6, 11, 19, 20], "suit": [6, 21], "ha": [6, 8, 14, 16, 17, 21], "been": [6, 10], "dure": [6, 18], "differ": [6, 10, 11, 14, 16, 20], "competit": 6, "gtoc": 6, "sever": 6, "scenario": 6, "argo": 6, "cubesat": 6, "phase": 6, "studi": [6, 17], "titan": 6, "enceladu": 6, "tandem": 6, "analysi": 6, "hera": 6, "api": [6, 12, 15], "bibliographi": 6, "basic": [6, 10, 13, 14, 15, 16, 17, 18], "ephemerid": [6, 13, 18, 22, 24], "de": [6, 22], "eph": [6, 13, 18, 22, 24], "lagrang": [6, 22], "r0": [7, 13, 14, 20], "r1": [7, 13, 14, 20], "tof": [7, 8, 13, 14, 15, 16, 17, 19, 20, 21], "mu": [7, 8, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "cw": 7, "fals": [7, 14, 16, 17, 18, 19, 20, 21], "max_rev": 7, "1d": [7, 8, 20], "compon": [7, 8, 12, 14, 20], "first": [7, 11, 12, 13, 14, 16, 18, 24], "x": [7, 8, 16, 17, 21], "y": [7, 8], "z": [7, 8, 16, 21], "xf": [7, 8], "yf": [7, 8], "zf": [7, 8], "tot": 7, "flight": [7, 8, 9, 13, 15, 16, 17, 19, 20, 21], "bool": [7, 16, 18, 19, 20, 21], "motion": [7, 11, 12, 14], "clockwis": 7, "comput": [7, 8, 9, 11, 12, 13, 16, 18, 19, 20, 22, 24], "consist": [7, 8, 9, 12], "multirev": 7, "upon": [7, 24], "solut": [7, 13, 19], "store": [7, 14, 18], "data": [7, 11, 15, 16, 17], "lp": [7, 13, 19], "v0": [7, 13, 14, 20], "1028493158958256e": 7, "0000000000000002": 7, "nmax": [7, 19], "iter": [7, 16, 17], "attract": [7, 18, 24], "bodi": [7, 8, 11, 12, 13, 15, 16, 17, 18, 19, 24], "between": [7, 8, 9, 10, 14, 16, 18, 21], "two": [7, 8, 10, 12, 16, 17, 21], "v1": [7, 13, 14, 20], "along": [7, 8, 14, 19], "curv": 7, "rv": [8, 14, 15, 16, 17, 20, 21], "throttl": [8, 13, 15, 16, 17, 21], "rvf": [8, 15, 16, 17, 21], "mf": [8, 15, 16, 17, 21], "max_thrust": [8, 15, 16, 17, 21], "isp": [8, 15, 16, 17, 21], "cut": [8, 15, 16, 17, 21], "final": [8, 9, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21], "augment": 8, "state": [8, 12, 14, 15, 16, 17, 20], "describ": [8, 12, 15, 18, 24], "sequenc": [8, 13, 15], "equal": [8, 15], "impuls": [8, 13, 15, 16, 17, 21], "j": [8, 16], "finlayson": 8, "rinderl": 8, "vavrina": 8, "kowalkowski": 8, "t": [8, 10, 14, 15, 16, 18, 21], "2006": 8, "exhibit": 8, "6746": 8, "feasibl": [8, 13, 16, 17], "mismatch": [8, 16, 17, 18], "constraint": [8, 16, 17, 21], "inequ": 8, "satisfi": 8, "2d": [8, 20], "initi": [8, 13, 14, 15, 16, 17, 19, 20, 21], "vx": 8, "vy": 8, "vz": 8, "mass": [8, 16, 17, 21], "cartesan": 8, "histori": [8, 13], "ux1": 8, "uy1": 8, "uz1": 8, "ux2": 8, "uy2": 8, "uz2": 8, "ballist": [8, 13, 14, 19], "segment": [8, 14, 15, 16, 17, 19, 21], "profil": [8, 14, 16, 21], "vxf": 8, "vyf": 8, "vzf": 8, "level": 8, "spacecraft": [8, 11, 13, 15, 16, 21, 24], "propulas": 8, "system": [8, 10, 11, 13, 15, 16, 17, 19, 24], "It": [8, 10, 16, 21], "determin": 8, "forward": [8, 19], "backward": 8, "sf": [8, 13, 15, 16, 19], "compute_mc_grad": [8, 16], "gradient": [8, 14, 16, 17, 21], "indic": [8, 9, 10, 14, 16, 21], "x_": [8, 15], "r_": [8, 14, 15], "v_": [8, 14, 15, 16], "m_": [8, 14, 15], "x_f": [8, 14, 15], "r_f": [8, 14, 15], "v_f": [8, 14, 15], "m_f": [8, 15, 16, 17], "total": [8, 19], "introduc": [8, 10, 14], "u_": [8, 15, 16, 17], "x0": [8, 15, 16, 17, 20], "y0": [8, 15, 16, 17, 20], "z0": [8, 15, 16, 17, 20], "x1": [8, 15, 16, 17], "y1": [8, 15, 16, 17], "z1": [8, 15, 16, 17], "note": [8, 9, 10, 11, 19, 20], "partial": [8, 14], "mc": 8, "tupl": [8, 20], "three": [8, 14], "size": [8, 15, 16, 17, 19], "nseg": [8, 13, 15, 16, 17, 21], "compute_mismatch_constraint": [8, 16], "model": [8, 13, 14, 24], "perform": [8, 11, 14, 16, 21], "match": [8, 10], "middl": [8, 15], "control": [8, 16, 21], "typic": [8, 9], "impos": 8, "independ": 8, "seven": 8, "same": [8, 9, 11, 12, 18], "compute_tc_grad": [8, 16], "tc": 8, "compute_throttle_constraint": [8, 16], "each": [8, 9, 19, 20, 22, 23], "u_x": 8, "u_i": 8, "u_z": 8, "certain": 8, "reach": 8, "fraction": 8, "consequ": 8, "appli": [8, 14, 15], "met": 8, "thruet": 8, "central": [8, 11, 12, 17, 18, 19], "nseg_bck": 8, "nseg_fwd": 8, "them": [9, 11, 13, 16], "throughout": 9, "code": [9, 11, 12, 13, 14, 18, 20, 24], "document": [9, 18], "mostli": 9, "To": [9, 13, 14], "keep": 9, "our": [9, 10, 11, 14], "scheme": 9, "do": [9, 11, 13, 14], "capit": 9, "letter": 9, "so": [9, 12, 13, 16, 17], "transform": [9, 10, 11], "must": [9, 10, 11, 12, 18, 24], "singl": [9, 16], "write": [9, 10], "necessari": [9, 14, 24], "all": [9, 10, 12, 13, 14, 16, 19, 20], "link": [9, 16, 21], "other": [9, 12, 13, 18, 20], "through": [9, 11], "algebra": 9, "explicit": 9, "implicit": 9, "most": [9, 10, 11, 12, 13, 14, 16, 17, 21, 22, 23], "famou": 9, "kepler": [9, 20], "here": [9, 10, 11, 13, 16, 20], "briefli": [9, 10], "showcas": [9, 11], "matplotlib": [9, 13, 14, 15, 16, 17, 19], "pyplot": [9, 14, 15, 16, 17], "plt": [9, 14, 15, 16, 17], "consid": [9, 10, 11, 14, 17, 18], "satellit": [9, 11, 12, 24], "ellipt": 9, "relat": [9, 14, 15], "rel": [9, 11, 16], "print": [9, 10, 11, 12, 14, 16, 17, 21], "39017524962497735": 9, "subscript": 9, "fig": [9, 14], "figur": [9, 14, 19], "figsiz": [9, 13, 15, 16], "xlabel": [9, 16, 17], "ylabel": [9, 16, 17], "want": [9, 10, 11, 13], "comut": 9, "speed": [9, 14], "100000": [9, 14], "1e7": 9, "perf_count": [9, 14], "rang": [9, 14, 16, 17], "0f": 9, "5941204": 9, "take": 10, "care": [10, 12], "show": [10, 13, 14, 15, 16, 17, 21], "creat": [10, 11, 13], "four": [10, 14], "wai": [10, 14], "pass": [10, 18, 19], "histor": [10, 11], "directli": [10, 11], "request": [10, 20], "specifi": [10, 11, 19], "othewis": 10, "context": 10, "arithmet": 10, "alwai": [10, 11, 12], "01t00": [10, 12, 19], "durat": 10, "calendar": 10, "prolept": 10, "befor": [10, 24], "1580": 10, "gregorain": 10, "aris": 10, "try": [10, 14], "ep": [10, 13, 18, 19, 24], "screen": [10, 12], "explicitli": 10, "mention": 10, "type": [10, 12, 16, 18, 21, 24], "than": [10, 19, 20], "2460676": 10, "5000000": 10, "2025": [10, 11, 24], "correspond": [10, 11, 18], "2024": 10, "06": 10, "28t11": 10, "09": 10, "56": 10, "527705": 10, "28t00": 10, "02": [10, 11, 14, 16], "120000": 10, "builtin": 10, "dt": [10, 14], "2033": 10, "11": [10, 11, 21], "hour": 10, "minut": 10, "22": [10, 13, 16, 17, 24], "microsecond": 10, "14532": 10, "12t12": 10, "014532": 10, "63913": 10, "51541683486": 10, "addit": [10, 16, 19, 21], "subtract": 10, "timedelta": 10, "assum": [10, 14, 15, 18, 24], "21": 10, "2353525": 10, "interpret": 10, "22t05": 10, "38": 10, "54": 10, "456000": 10, "comparison": 10, "oper": 10, "turn": 10, "handi": 10, "everlast": 10, "whenev": 10, "post": 10, "1972": 10, "pre": [10, 11, 24], "variat": [10, 13, 14, 20], "attempt": 10, "establish": 10, "make": [10, 12, 13, 14, 15, 16, 17], "sens": [10, 12], "clearli": [10, 11], "imposs": 10, "yet": [10, 22, 23], "commend": 10, "effort": [10, 17], "period": [10, 14, 18, 19], "rotat": [10, 11], "commensur": 10, "For": [10, 12, 14, 20, 24], "peac": 10, "mind": 10, "ignor": 10, "up": [10, 13], "correct": [10, 11, 24], "read": 10, "few": [10, 13, 14], "sai": [10, 13], "01t10": 10, "would": [10, 11, 13, 14], "obvious": 10, "output": [10, 18], "confirm": 10, "successful": 10, "instead": [10, 12, 18], "actual": [10, 11, 14, 18], "peopl": 10, "should": [10, 16, 18, 21], "add": [10, 13, 14, 16, 19], "http": [10, 24], "en": [10, 24], "wikipedia": [10, 24], "org": [10, 24], "wiki": [10, 24], "leap_second": 10, "particular": [10, 11], "ad": [10, 13, 15, 19], "henc": [10, 11, 12], "ep_with_leap": 10, "44": [10, 15], "small": [10, 12], "error": [10, 18], "ep_with_leap2": 10, "sec2dai": 10, "43": 10, "999999": 10, "accuraci": 10, "attent": 10, "prior": 10, "wa": [10, 13], "valid": [10, 11, 16, 17], "off": [10, 13, 15], "w": [10, 14, 16, 24], "those": 10, "calndar": 10, "activ": 10, "4713": 10, "24t12": 10, "least": [10, 18], "distinct": 10, "1st": 10, "januari": 10, "per": [10, 16, 21], "bc": 10, "anno": 10, "domini": 10, "minu": 10, "exist": 10, "24th": 10, "novemb": 10, "4714bc": 10, "noon": 10, "NOT": 10, "uniqu": 11, "move": [11, 12, 16, 18], "comet": [11, 12], "whose": [11, 18], "fit": [11, 16], "observ": [11, 24], "simul": 11, "encapsul": 11, "naif": [11, 24], "kernel": [11, 24], "avail": [11, 14, 16, 17, 20, 22, 23], "relev": [11, 19], "barycent": [11, 24], "jupit": [11, 13], "respect": [11, 14], "solar": [11, 13, 19, 24], "releas": [11, 22, 23], "accur": 11, "ones": 11, "download": 11, "binari": 11, "bsp": [11, 24], "file": [11, 24], "contain": [11, 16, 18, 19, 21, 24], "distribut": 11, "skip": 11, "step": 11, "get": [11, 13, 14, 22], "path": [11, 24], "de440s_kernel": 11, "kernel_fil": [11, 24], "home": 11, "runner": 11, "local": [11, 16, 17], "lib": [11, 16, 17], "python3": 11, "site": 11, "packag": [11, 20, 24], "id": [11, 19], "naifid": 11, "inspect_spice_kernel": 11, "readibl": 11, "naifid2nam": 11, "item": 11, "mercuri": [11, 24], "venu": [11, 24], "mar": [11, 13, 16], "saturn": 11, "uranu": 11, "neptun": 11, "pluto": 11, "moon": 11, "nice": 11, "inspect": [11, 13], "realiz": 11, "non": [11, 12, 13, 14, 24], "barycentr": 11, "proce": 11, "task": 11, "jupyt": 11, "thing": 11, "usag": 11, "load": [11, 24], "memori": [11, 24], "load_spice_kernel": [11, 24], "done": 11, "onc": [11, 12, 13, 18, 20], "forget": 11, "unless": 11, "issu": 11, "unload": 11, "unload_spice_kernel": 11, "form": 11, "eclipj2000": [11, 24], "ssb": [11, 24], "nveloc": 11, "722180808588": 11, "1804": 11, "157535374702": 11, "5074": 11, "16810696007": 11, "16372": 11, "2933": 11, "2858571285688": 11, "13378": 11, "581606366935": 11, "115066760074676": 11, "And": [11, 12, 13], "python_udpla": [11, 12], "safe": [11, 12, 18, 24], "extra": [11, 12, 18, 24], "frame": [11, 18, 24], "how": [11, 12, 13, 14, 18, 22], "mani": [11, 18, 20], "physic": [11, 12], "interpol": [11, 12], "tabl": 11, "ani": [11, 12, 13, 15, 18], "present": [11, 14], "abov": [11, 14, 18], "gener": [11, 13, 18, 19], "work": [11, 13, 16, 21, 22], "rover": 11, "backdraw": 11, "anywai": 11, "pattern": [11, 16], "queri": [11, 24], "automat": 11, "ship": [11, 24], "156005590351": 11, "0843": 11, "743270596831": 11, "1477": 11, "6573233296": 11, "777874": 11, "12935": 11, "993235030832": 11, "3306": 11, "5234815642566": 11, "275": 11, "73217606979927": 11, "either": [11, 18], "ourselv": 11, "matrix": [11, 14, 20], "rotation_matrix": 11, "j2000": [11, 24], "inerti": 11, "orient": 11, "depend": [11, 16, 18], "r_j2000": 11, "dot": 11, "56005590e": 11, "6": [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24], "84552122e": 11, "89625240e": 11, "obtain": 11, "jupiter_j2000": 11, "684552121902": 11, "1022": 11, "289625240455": 11, "7204": 11, "regardless": 12, "whether": [12, 16, 18, 21], "underli": [12, 13, 18], "simpli": 12, "base": [12, 14, 18, 19, 20, 21], "predict": 12, "unifi": 12, "eras": [12, 18], "hi": [12, 18], "own": [12, 18], "mandatori": [12, 18, 24], "treat": 12, "uniformli": 12, "upla": 12, "heterogen": 12, "techniqu": [12, 21], "third": [12, 24], "parti": [12, 24], "appear": 12, "alreadi": 12, "spacecarft": [12, 24], "without": [12, 18], "mu_central_bodi": [12, 24], "circular": 12, "pla": [12, 18, 19, 24], "dimension": [12, 13, 14], "often": 12, "Of": 12, "cours": 12, "everyth": 12, "check": [12, 18], "anyth": [12, 18], "si": [12, 18, 24], "mix": 12, "kep3": 12, "semi": 12, "major": [12, 16, 17], "axi": [12, 13, 15, 16, 19, 21], "684587122268445e": 12, "inclin": 12, "deg": 12, "big": [12, 13], "anomli": 12, "ref": 12, "textual": 12, "part": [12, 15], "report": 12, "eaul": 12, "origin": 12, "essenti": 12, "whatev": 12, "option": [12, 16, 18, 19, 21, 24], "extra_info": 12, "expos": [12, 18], "tutori": [13, 14, 15, 16, 17, 22, 23], "explor": 13, "tool": 13, "via": [13, 15, 20, 24], "built": 13, "facilit": 13, "increment": 13, "quantiti": 13, "interest": [13, 24], "plan": 13, "inlin": [13, 14, 15], "empti": [13, 18], "canva": 13, "detail": [13, 14, 16, 18, 21], "interact": [13, 22, 23], "backend": 13, "make_3daxi": [13, 15, 16, 19], "factori": 13, "ax": [13, 14, 15, 16, 17, 19, 21], "easili": [13, 14], "precis": [13, 24], "add_sun": [13, 15, 19], "add_planet_orbit": [13, 15, 19], "plot_rang": [13, 19], "365": [13, 19], "25": [13, 19], "royalblu": [13, 19], "label": [13, 16, 17, 19], "add_planet": [13, 19], "indianr": 13, "legend": [13, 16, 17], "set_xlim3d": 13, "set_ylim3d": 13, "view_init": [13, 14, 15, 16, 17], "90": [13, 15, 16, 17], "add_solar_system": [13, 19], "just": [13, 14, 18], "set_titl": 13, "fix": [13, 16, 17, 18, 21], "geometri": 13, "t0": [13, 16], "4340": 13, "tof_dai": 13, "280": 13, "assembl": 13, "40": [13, 15], "get_nam": [13, 18, 24], "add_lambert": [13, 19], "60": [13, 19], "sol": [13, 19], "alpha": [13, 16, 17], "cosmet": 13, "custom": 13, "2140": 13, "1230": 13, "120": 13, "delta": [13, 14, 15], "visual": [13, 19], "discret": 13, "clarli": 13, "close": 13, "strategi": 13, "immedi": 13, "random": [13, 15, 16, 17], "produc": 13, "randomli": 13, "cool": 13, "black": 13, "add_sf_leg": [13, 15, 16, 19], "show_throttl": [13, 15, 16, 19, 21], "length": [13, 14, 15, 16, 19, 21], "arrow_length_ratio": [13, 15, 16, 19, 21], "270": 13, "One": 14, "coeffici": [14, 20, 24], "scalar": 14, "f_t": 14, "g_t": 14, "r_0": 14, "v_0": 14, "gt": 14, "analyt": [14, 24], "express": 14, "term": 14, "univers": 14, "deriv": 14, "found": [14, 24], "semin": 14, "book": 14, "fundament": 14, "transit": [14, 20], "fail": [14, 16, 17, 18, 22, 23, 24], "perfectli": 14, "parabol": 14, "notebook": [14, 16, 17, 22, 23], "mpl_toolkit": [14, 15, 16, 19, 21], "mplot3d": [14, 15, 16, 19, 21], "bit": 14, "cpu": [14, 16, 17], "t1": 14, "re": [14, 20], "t2": 14, "spicep": 14, "real": 14, "5f": 14, "07442": 14, "23353": 14, "circulr": 14, "necessarili": [14, 20], "faster": 14, "sure": 14, "t_grid": 14, "orbit1": 14, "orbit2": 14, "orbit3": 14, "pos1": 14, "pos2": 14, "pos3": 14, "project": 14, "3d": [14, 16, 19, 21], "plot3d": 14, "grai": 14, "scatter3d": 14, "ok": 14, "admittedli": 14, "underwhelm": 14, "veri": 14, "someth": 14, "ipython": 14, "displai": 14, "imag": 14, "filenam": 14, "sf_diagram": 14, "png": 14, "With": 14, "diagram": 14, "block": 14, "arc": [14, 19], "v_i": 14, "That": 14, "shall": 14, "inform": [14, 16, 18, 19, 21], "bi": 14, "straightforward": 14, "after": [14, 18, 20], "convinc": 14, "node": 14, "x_0": 14, "x_1": 14, "x_2": 14, "trivial": 14, "seek": 14, "v_1": 14, "i_v": 14, "select": [14, 19, 24], "iv": 14, "llllll": 14, "shown": [14, 19], "complex": [14, 18], "linear": 14, "matric": 14, "byth": 14, "condit": 14, "dv1": 14, "dv2": 14, "rv1": 14, "m1": 14, "zip": 14, "rv2": 14, "m2": 14, "r2": 14, "v2": 14, "rv3": 14, "m3": 14, "readi": [14, 15], "34626570e": 14, "9": [14, 17], "18636660e": 14, "53491478e": 14, "03": [14, 24], "62743322e": 14, "67251795e": 14, "31214685e": 14, "01442012e": 14, "53986122e": 14, "22422462e": 14, "76624971e": 14, "74892799e": 14, "87677130e": 14, "04": 14, "20563364e": 14, "27842618e": 14, "28241661e": 14, "38362020e": 14, "94369911e": 14, "65801880e": 14, "10523246e": 14, "16229111e": 14, "86507297e": 14, "28398676e": 14, "63479977e": 14, "06363208e": 14, "91482558e": 14, "85525026e": 14, "56526220e": 14, "72411072e": 14, "06888007e": 14, "48374847e": 14, "30386029e": 14, "82337379e": 14, "43593389e": 14, "53366895e": 14, "49028595e": 14, "36023185e": 14, "diag": 14, "78070423e": 14, "08732311e": 14, "65602612e": 14, "26449980e": 14, "37560753e": 14, "10519096e": 14, "80792351e": 14, "12326674e": 14, "35231810e": 14, "17808758e": 14, "68304105e": 14, "15034626e": 14, "91248018e": 14, "27967105e": 14, "45214336e": 14, "37037657e": 14, "47952071e": 14, "03307087e": 14, "v_2": 14, "50686834e": 14, "20177166e": 14, "83470131e": 14, "05": [14, 16, 19, 21], "20388630e": 14, "49820146e": 14, "45873151e": 14, "83271278e": 14, "45719332e": 14, "49496071e": 14, "01292574e": 14, "25392660e": 14, "80275429e": 14, "25474976e": 14, "97050307e": 14, "60311875e": 14, "79501356e": 14, "59713106e": 14, "90123105e": 14, "fidel": 15, "approxim": 15, "continu": 15, "manouvr": [15, 18], "arriv": [15, 16, 17], "x2": 15, "y2": 15, "z2": 15, "tempor": 15, "tn": 15, "propuls": 15, "chosen": [15, 18], "arbitrarili": 15, "clearlyshow": 15, "3000": [15, 16, 17, 21], "1500": [15, 16, 17], "1300": [15, 16, 17], "rf": [15, 16, 17], "vf": [15, 16, 17], "023": 15, "uniform": [15, 16, 17], "324": 15, "boundari": 15, "scatter": [15, 16, 19], "trajctori": [15, 16], "show_midpoint": [15, 16, 19, 21], "nicer": 15, "d": 15, "set_xlim": 15, "set_ylim": 15, "trajopt": [16, 17, 21], "direct_pl2pl": 16, "find": [16, 17], "connect": [16, 17], "decis": [16, 17, 21], "compat": [16, 17, 21], "udp": [16, 17, 18], "t_0": 16, "sx": 16, "infti": 16, "infty_": 16, "sy": 16, "sz": 16, "fx": 16, "fy": 16, "fz": 16, "t_": [16, 17], "commerci": [16, 17], "solver": [16, 17], "snopt": [16, 17], "run": [16, 17], "snopt_7_c": [16, 17], "instal": [16, 17], "snopt7": [16, 17], "still": [16, 17], "uda": [16, 17], "pg": [16, 17], "nlopt": [16, 17], "slsqp": [16, 17], "minor": [16, 17], "modif": [16, 17], "_pk": [16, 19, 21], "_np": 16, "pygmo": [16, 17], "pygmo_plugins_nonfre": [16, 17], "ppnf": [16, 17], "manipul": [16, 21], "better": [16, 21], "understand": [16, 21], "approach": [16, 21], "limit": [16, 17, 21], "vsx": 16, "vsy": 16, "vsz": 16, "vfx": 16, "vfy": 16, "vfz": 16, "structur": [16, 21], "u0x": [16, 21], "u0i": [16, 21], "u0z": [16, 21], "def": [16, 18], "self": [16, 18], "pl": 16, "plf": 16, "1000": [16, 17, 21], "t0_bound": 16, "4000": 16, "5000": 16, "tof_bound": [16, 17, 21], "80": [16, 21], "400": [16, 21], "mf_bound": [16, 17, 21], "200": [16, 17, 21], "vinf_dep": 16, "1e": [16, 17, 24], "vinf_arr": 16, "mass_scal": [16, 21], "r_scale": [16, 21], "v_scale": [16, 21], "with_gradi": [16, 17, 21], "instanc": [16, 18, 21], "scale": [16, 21], "newton": [16, 21], "bound": [16, 21], "departur": [16, 17], "magnitud": 16, "km": 16, "int": [16, 19, 21, 24], "factor": [16, 19, 21], "distanc": [16, 21], "temporari": 16, "unus": 16, "irrelelv": 16, "optimz": 16, "get_bound": 16, "lb": 16, "ub": 16, "_set_leg_from_x": 16, "obj": 16, "violat": 16, "ceq": 16, "cineq": 16, "retval": 16, "sum": 16, "nd": 16, "sensit": 16, "has_gradi": 16, "_": 16, "mcg_xf": 16, "mcg_th_tof": 16, "tcg_th": 16, "contraint": 16, "mcg": 16, "divid": 16, "po": 16, "vel": 16, "append": [16, 17], "Then": 16, "extend": 16, "gradient_spars": 16, "dim": 16, "chromosom": 16, "sparsiti": 16, "get_nec": 16, "get_nic": 16, "pretti": [16, 21], "none": [16, 18, 19, 21], "show_gridpoint": [16, 17, 19, 21], "kwarg": [16, 19, 21], "axes3d": [16, 19, 21], "midpoint": [16, 19, 21], "grid": [16, 19, 21], "arrow": [16, 19, 21], "ratio": [16, 19, 21], "keyword": [16, 19, 21], "argument": [16, 19, 21], "sqrt": [16, 17, 18], "udp_nog": [16, 17], "direct_point2point": [16, 17, 21], "500": [16, 17], "udp_g": [16, 17], "nameerror": [16, 17], "traceback": [16, 17], "recent": [16, 17], "last": [16, 17], "cell": [16, 17], "line": [16, 17, 24], "snopt72": [16, 17], "usr": [16, 17], "libsnopt7_c": [16, 17], "minor_vers": [16, 17], "screen_output": [16, 17], "set_integer_opt": [16, 17], "20000": [16, 17], "set_numeric_opt": [16, 17], "toler": [16, 17], "algo": [16, 17], "prob_nog": [16, 17], "c_tol": [16, 17], "prob_g": [16, 17], "pop_g": [16, 17], "popul": [16, 17], "evolv": [16, 17], "feasibility_f": [16, 17], "champion_f": [16, 17], "get_x": [16, 17], "57696078e": 16, "61709535e": 16, "75156764e": 16, "126786734559573e": 16, "08": 16, "tqdm": [16, 17], "cpu_nog": [16, 17], "cpu_g": [16, 17], "fail_g": [16, 17], "fail_nog": [16, 17], "pop_nog": [16, 17], "push_back": [16, 17], "median": [16, 17], "4e": [16, 17], "No": [16, 17], "ngradient": [16, 17], "45it": 16, "8443e": 16, "0552e": 16, "192": 16, "188": 16, "hist": [16, 17], "bin": [16, 17], "densiti": [16, 17], "no_gradi": [16, 17], "xlim": [16, 17], "titl": [16, 17], "point2point": [16, 17], "seg": [16, 17], "occurr": [16, 17], "mainli": [17, 18], "academ": 17, "infomr": 17, "pipelin": 17, "1232": 17, "fwd": 17, "bck": 17, "179517444840": 17, "1495978707": 17, "297": 17, "8469183169681": 17, "32763": 17, "161014866488": 17, "5531180194281187": 17, "14971757884060444": 17, "7940199350920427": 17, "028288032565428445": 17, "11046018798817858": 17, "800424150704127": 17, "6581747271243201": 17, "5884590126432687": 17, "9303693454363375": 17, "7082653660632694": 17, "3855806880092745": 17, "3899050835184499": 17, "29919970440": 17, "50476": 17, "38523538": 17, "099015325": 17, "1496184052": 17, "1450462": 17, "98": 17, "7230576541013": 17, "2992": 17, "131264375472": 17, "208": 17, "49434302739866": 17, "998": 17, "99085894998": 17, "04117744584645111": 17, "34631951305277053": 17, "6450650999139032": 17, "19766173011602817": 17, "possibli": 18, "etc": 18, "short": 18, "everi": 18, "expect": 18, "minim": 18, "could": 18, "zero": 18, "eph_v": [18, 24], "get_mu_central_bodi": [18, 24], "get_mu_self": 18, "get_radiu": 18, "get_safe_radiu": 18, "elements_typ": 18, "get_extra_info": [18, 24], "rais": [18, 19], "notimplementederror": 18, "unspecifi": 18, "thrown": 18, "invok": 18, "deep": 18, "copi": 18, "failur": 18, "intersect": 18, "signatur": 18, "otherwis": 18, "demand": 18, "over": 18, "companion": 18, "loop": [18, 20], "behaviour": 18, "chang": 18, "who": 18, "len": 18, "extract": 18, "within": 18, "oppos": 18, "typeerror": 18, "_keplerian": 18, "my_udpla": 18, "pla2": 18, "p2": 18, "__main__": 18, "0x7ff68b63d210": 18, "0x7f8f7241c350": 18, "main": [18, 20, 24], "averag": 18, "planetari": [18, 24], "fly": 18, "atmospher": 18, "circumv": 18, "radiat": 18, "environ": 18, "is_": 18, "compar": 18, "els": [18, 24], "one_orbital_period": 19, "index": 19, "valueerror": 19, "greater": 19, "twice": 19, "angl": 19, "add_ballistic_arc": 19, "rv0": 19, "coordin": 19, "_sims_flanagan": 19, "gridpoint": 19, "backbon": 20, "lagrangian": 20, "routin": 20, "stm": 20, "assign": 20, "vy0": 20, "vz0": 20, "nor": 20, "simd": 20, "magic": 20, "atm": 20, "nevertheless": 20, "cenveni": 20, "compact": 20, "flatten": 20, "4pi": 20, "indirect": 21, "transcript": 21, "while": 21, "pontryagin": 21, "principl": 21, "nlp": 21, "49597871e": 21, "5956": 21, "93836634": 21, "6918317": 21, "79517445e": 21, "30469": 21, "73974383": 21, "13105": 21, "26440595": 21, "launch": [22, 23], "onlin": [22, 23], "thank": [22, 23], "infrastructur": [22, 23], "binder": [22, 23], "look": [22, 23], "rocket": [22, 23], "icon": [22, 23], "top": [22, 23], "page": [22, 23], "featur": [22, 23], "latest": [22, 23], "stabl": [22, 23, 24], "might": [22, 23], "execut": [22, 23], "correctli": [22, 23], "gist": 22, "deal": 22, "notat": 22, "moot": 24, "elem": 24, "unkown": 24, "added_param": 24, "elem_typ": 24, "deafulet": 24, "keplrian": 24, "my_pla": 24, "velocti": 24, "ssd": 24, "nasa": 24, "gov": 24, "approx_po": 24, "html": 24, "thresh": 24, "theori": 24, "vsop_model": 24, "truncat": 24, "threshold": 24, "line1": 24, "line2": 24, "equinox": 24, "teme": 24, "33773u": 24, "97051l": 24, "23290": 24, "57931959": 24, "00002095": 24, "00000": 24, "65841": 24, "9991": 24, "33773": 24, "86": 24, "4068": 24, "33": 24, "1145": 24, "0009956": 24, "224": 24, "5064": 24, "135": 24, "5336": 24, "40043565770064": 24, "31": 24, "dimens": 24, "graviat": 24, "ref_fram": 24, "ob": 24, "spiceypi": 24, "readthedoc": 24, "io": 24, "eclipt": 24, "data_archiv": 24, "ftp": 24, "www": 24, "cosmo": 24, "esa": 24, "web": 24, "rise": 24, "440": 24, "preload": 24, "body_list": 24, "possibl": 24, "full": 24}, "objects": {"pykep": [[0, 0, 1, "", "e2f"], [0, 0, 1, "", "e2f_v"], [0, 0, 1, "", "e2m"], [0, 0, 1, "", "e2m_v"], [4, 1, 1, "", "el_type"], [5, 1, 1, "", "epoch"], [4, 0, 1, "", "eq2ic"], [4, 0, 1, "", "eq2par"], [0, 0, 1, "", "f2e"], [0, 0, 1, "", "f2e_v"], [0, 0, 1, "", "f2h"], [0, 0, 1, "", "f2h_v"], [0, 0, 1, "", "f2m"], [0, 0, 1, "", "f2m_v"], [0, 0, 1, "", "f2n"], [0, 0, 1, "", "f2n_v"], [0, 0, 1, "", "f2zeta"], [0, 0, 1, "", "f2zeta_v"], [0, 0, 1, "", "h2f"], [0, 0, 1, "", "h2f_v"], [0, 0, 1, "", "h2n"], [0, 0, 1, "", "h2n_v"], [4, 0, 1, "", "ic2eq"], [4, 0, 1, "", "ic2par"], [7, 1, 1, "", "lambert_problem"], [0, 0, 1, "", "m2e"], [0, 0, 1, "", "m2e_v"], [0, 0, 1, "", "m2f"], [0, 0, 1, "", "m2f_v"], [0, 0, 1, "", "n2f"], [0, 0, 1, "", "n2f_v"], [0, 0, 1, "", "n2h"], [0, 0, 1, "", "n2h_v"], [4, 0, 1, "", "par2eq"], [4, 0, 1, "", "par2ic"], [18, 1, 1, "", "planet"], [20, 0, 1, "", "propagate_lagrangian"], [20, 0, 1, "", "propagate_lagrangian_v"], [0, 0, 1, "", "zeta2f"], [0, 0, 1, "", "zeta2f_v"]], "pykep.epoch": [[5, 2, 1, "", "jd"], [5, 1, 1, "", "julian_type"], [5, 2, 1, "", "mjd"], [5, 2, 1, "", "mjd2000"], [5, 3, 1, "", "now"], [5, 1, 1, "", "string_format"]], "pykep.lambert_problem": [[7, 2, 1, "", "Nmax"], [7, 2, 1, "", "iters"], [7, 2, 1, "", "mu"], [7, 2, 1, "", "r0"], [7, 2, 1, "", "r1"], [7, 2, 1, "", "tof"], [7, 2, 1, "", "v0"], [7, 2, 1, "", "v1"], [7, 2, 1, "", "x"]], "pykep.leg": [[8, 1, 1, "", "sims_flanagan"]], "pykep.leg.sims_flanagan": [[8, 3, 1, "", "compute_mc_grad"], [8, 3, 1, "", "compute_mismatch_constraints"], [8, 3, 1, "", "compute_tc_grad"], [8, 3, 1, "", "compute_throttle_constraints"], [8, 2, 1, "", "cut"], [8, 2, 1, "", "isp"], [8, 2, 1, "", "max_thrust"], [8, 2, 1, "", "mf"], [8, 2, 1, "", "ms"], [8, 2, 1, "", "mu"], [8, 2, 1, "", "nseg"], [8, 2, 1, "", "nseg_bck"], [8, 2, 1, "", "nseg_fwd"], [8, 2, 1, "", "rvf"], [8, 2, 1, "", "rvs"], [8, 2, 1, "", "throttles"], [8, 2, 1, "", "tof"]], "pykep.planet": [[18, 3, 1, "", "elements"], [18, 3, 1, "", "eph"], [18, 3, 1, "", "eph_v"], [18, 3, 1, "", "extract"], [18, 3, 1, "", "get_extra_info"], [18, 3, 1, "", "get_mu_central_body"], [18, 3, 1, "", "get_mu_self"], [18, 3, 1, "", "get_name"], [18, 3, 1, "", "get_radius"], [18, 3, 1, "", "get_safe_radius"], [18, 3, 1, "", "is_"], [18, 3, 1, "", "period"]], "pykep.plot": [[19, 0, 1, "", "add_ballistic_arc"], [19, 0, 1, "", "add_lambert"], [19, 0, 1, "", "add_planet"], [19, 0, 1, "", "add_planet_orbit"], [19, 0, 1, "", "add_sf_leg"], [19, 0, 1, "", "add_solar_system"], [19, 0, 1, "", "add_sun"], [19, 0, 1, "", "make_3Daxis"]], "pykep.trajopt": [[21, 1, 1, "", "direct_point2point"]], "pykep.trajopt.direct_point2point": [[21, 3, 1, "", "plot"], [21, 3, 1, "", "pretty"]], "pykep.udpla": [[24, 1, 1, "", "de440s"], [24, 1, 1, "", "jpl_lp"], [24, 1, 1, "", "keplerian"], [24, 1, 1, "", "null_udpla"], [24, 1, 1, "", "spice"], [24, 1, 1, "", "tle"], [24, 1, 1, "", "vsop2013"]], "pykep.udpla.de440s": [[24, 3, 1, "", "body_list"], [24, 3, 1, "", "get_name"], [24, 3, 1, "", "kernel_file"]], "pykep.udpla.spice": [[24, 3, 1, "", "eph"], [24, 3, 1, "", "get_extra_info"], [24, 3, 1, "", "get_name"]], "pykep.udpla.tle": [[24, 3, 1, "", "eph"], [24, 3, 1, "", "eph_v"], [24, 3, 1, "", "get_extra_info"], [24, 3, 1, "", "get_mu_central_body"], [24, 3, 1, "", "get_name"]]}, "objtypes": {"0": "py:function", "1": "py:class", "2": "py:property", "3": "py:method"}, "objnames": {"0": ["py", "function", "Python function"], "1": ["py", "class", "Python class"], "2": ["py", "property", "Python property"], "3": ["py", "method", "Python method"]}, "titleterms": {"anomali": [0, 9], "convers": 0, "normal": 0, "vector": 0, "api": 1, "content": 1, "bibliographi": 2, "global": 3, "constant": 3, "pykep": [3, 6, 9], "orbit": 4, "element": 4, "epoch": [5, 10], "class": [5, 7, 18], "welcom": 6, "": 6, "document": 6, "main": 6, "tutori": 6, "lambert": [7, 13], "interplanetari": 8, "transfer": [8, 16, 17], "leg": [8, 13, 14, 15], "The": [9, 10, 11, 15, 19], "variou": 9, "julian": 10, "date": 10, "datetim": 10, "interoper": 10, "math": 10, "leap": 10, "second": 10, "gregorian": 10, "interfac": 11, "spice": 11, "jpl": 11, "de": 11, "eph": 11, "440": 11, "ephemerid": [11, 12], "plot": [13, 19], "3d": 13, "planet": [13, 16, 18, 19, 24], "arc": 13, "sim": [13, 15], "flanagan": [13, 15], "trajectori": [13, 15, 19, 21, 23], "lagrang": 14, "propag": [14, 20], "comput": 14, "overal": 14, "stm": 14, "multi": 14, "impuls": 14, "low": [16, 17], "thrust": [16, 17], "point": 17, "modul": 19, "common": 19, "util": 19, "numer": 20, "keplerian": 20, "dynam": 20, "optim": [21, 23], "direct": 21, "basic": 22, "list": 24, "user": 24, "implement": 24, "udpla": 24}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinxcontrib.bibtex": 9, "sphinx": 57}, "alltitles": {"Anomalies Conversions": [[0, "anomalies-conversions"]], "Normal": [[0, "normal"]], "Vectorized": [[0, "vectorized"]], "API": [[1, "api"]], "Contents": [[1, null]], "Bibliography": [[2, "bibliography"]], "Global constants": [[3, "global-constants"]], "Pykep global constants": [[3, "id1"]], "Orbital Elements": [[4, "orbital-elements"]], "Epoch class": [[5, "epoch-class"]], "Welcome to pykep\u2019s documentation!": [[6, "welcome-to-pykep-s-documentation"]], "Main": [[6, null]], "Tutorials": [[6, null]], "Lambert class": [[7, "lambert-class"]], "Interplanetary transfer legs": [[8, "interplanetary-transfer-legs"]], "The various anomalies in pykep": [[9, "the-various-anomalies-in-pykep"]], "Epochs and Julian Dates": [[10, "epochs-and-julian-dates"]], "Julian dates": [[10, "julian-dates"]], "Datetime interoperability": [[10, "datetime-interoperability"]], "The epoch math": [[10, "the-epoch-math"]], "Leap seconds and Gregorian dates.": [[10, "leap-seconds-and-gregorian-dates"]], "Interfacing to SPICE and JPL DE ephs": [[11, "interfacing-to-spice-and-jpl-de-ephs"]], "": [[11, "id1"]], "The DE 440 JPL Ephemerides": [[11, "the-de-440-jpl-ephemerides"]], "Ephemerides": [[12, "ephemerides"]], "Plotting": [[13, "plotting"]], "3D Plots": [[13, "d-plots"]], "Plot planets": [[13, "plot-planets"]], "Plot a Lambert arc": [[13, "plot-a-lambert-arc"]], "Plot a Sims-Flanagan trajectory leg.": [[13, "plot-a-sims-flanagan-trajectory-leg"]], "Lagrange Propagation": [[14, "lagrange-propagation"]], "Computing the overall STM for multi-impulsive legs": [[14, "computing-the-overall-stm-for-multi-impulsive-legs"]], "The Sims-Flanagan trajectory leg": [[15, "the-sims-flanagan-trajectory-leg"]], "Planet to planet low-thrust transfer": [[16, "planet-to-planet-low-thrust-transfer"]], "Point to point low-thrust transfer": [[17, "point-to-point-low-thrust-transfer"]], "Planet class": [[18, "planet-class"]], "The plot module": [[19, "the-plot-module"]], "Common utils": [[19, "common-utils"]], "Plotting planets": [[19, "plotting-planets"]], "Plotting trajectories": [[19, "plotting-trajectories"]], "Numerical Propagation": [[20, "numerical-propagation"]], "Keplerian dynamics": [[20, "keplerian-dynamics"]], "Trajectory Optimization": [[21, "trajectory-optimization"], [23, "trajectory-optimization"]], "Direct": [[21, "direct"]], "Basic": [[22, "basic"]], "List of user implemented planets (UDPLAs)": [[24, "list-of-user-implemented-planets-udplas"]]}, "indexentries": {"e2f() (in module pykep)": [[0, "pykep.e2f"]], "e2f_v() (in module pykep)": [[0, "pykep.e2f_v"]], "e2m() (in module pykep)": [[0, "pykep.e2m"]], "e2m_v() (in module pykep)": [[0, "pykep.e2m_v"]], "f2e() (in module pykep)": [[0, "pykep.f2e"]], "f2e_v() (in module pykep)": [[0, "pykep.f2e_v"]], "f2h() (in module pykep)": [[0, "pykep.f2h"]], "f2h_v() (in module pykep)": [[0, "pykep.f2h_v"]], "f2m() (in module pykep)": [[0, "pykep.f2m"]], "f2m_v() (in module pykep)": [[0, "pykep.f2m_v"]], "f2n() (in module pykep)": [[0, "pykep.f2n"]], "f2n_v() (in module pykep)": [[0, "pykep.f2n_v"]], "f2zeta() (in module pykep)": [[0, "pykep.f2zeta"]], "f2zeta_v() (in module pykep)": [[0, "pykep.f2zeta_v"]], "h2f() (in module pykep)": [[0, "pykep.h2f"]], "h2f_v() (in module pykep)": [[0, "pykep.h2f_v"]], "h2n() (in module pykep)": [[0, "pykep.h2n"]], "h2n_v() (in module pykep)": [[0, "pykep.h2n_v"]], "m2e() (in module pykep)": [[0, "pykep.m2e"]], "m2e_v() (in module pykep)": [[0, "pykep.m2e_v"]], "m2f() (in module pykep)": [[0, "pykep.m2f"]], "m2f_v() (in module pykep)": [[0, "pykep.m2f_v"]], "n2f() (in module pykep)": [[0, "pykep.n2f"]], "n2f_v() (in module pykep)": [[0, "pykep.n2f_v"]], "n2h() (in module pykep)": [[0, "pykep.n2h"]], "n2h_v() (in module pykep)": [[0, "pykep.n2h_v"]], "zeta2f() (in module pykep)": [[0, "pykep.zeta2f"]], "zeta2f_v() (in module pykep)": [[0, "pykep.zeta2f_v"]], "el_type (class in pykep)": [[4, "pykep.el_type"]], "eq2ic() (in module pykep)": [[4, "pykep.eq2ic"]], "eq2par() (in module pykep)": [[4, "pykep.eq2par"]], "ic2eq() (in module pykep)": [[4, "pykep.ic2eq"]], "ic2par() (in module pykep)": [[4, "pykep.ic2par"]], "par2eq() (in module pykep)": [[4, "pykep.par2eq"]], "par2ic() (in module pykep)": [[4, "pykep.par2ic"]], "epoch (class in pykep)": [[5, "pykep.epoch"]], "epoch.julian_type (class in pykep)": [[5, "pykep.epoch.julian_type"]], "epoch.string_format (class in pykep)": [[5, "pykep.epoch.string_format"]], "jd (pykep.epoch property)": [[5, "pykep.epoch.jd"]], "mjd (pykep.epoch property)": [[5, "pykep.epoch.mjd"]], "mjd2000 (pykep.epoch property)": [[5, "pykep.epoch.mjd2000"]], "now() (pykep.epoch static method)": [[5, "pykep.epoch.now"]], "nmax (pykep.lambert_problem property)": [[7, "pykep.lambert_problem.Nmax"]], "iters (pykep.lambert_problem property)": [[7, "pykep.lambert_problem.iters"]], "lambert_problem (class in pykep)": [[7, "pykep.lambert_problem"]], "mu (pykep.lambert_problem property)": [[7, "pykep.lambert_problem.mu"]], "r0 (pykep.lambert_problem property)": [[7, "pykep.lambert_problem.r0"]], "r1 (pykep.lambert_problem property)": [[7, "pykep.lambert_problem.r1"]], "tof (pykep.lambert_problem property)": [[7, "pykep.lambert_problem.tof"]], "v0 (pykep.lambert_problem property)": [[7, "pykep.lambert_problem.v0"]], "v1 (pykep.lambert_problem property)": [[7, "pykep.lambert_problem.v1"]], "x (pykep.lambert_problem property)": [[7, "pykep.lambert_problem.x"]], "compute_mc_grad() (pykep.leg.sims_flanagan method)": [[8, "pykep.leg.sims_flanagan.compute_mc_grad"]], "compute_mismatch_constraints() (pykep.leg.sims_flanagan method)": [[8, "pykep.leg.sims_flanagan.compute_mismatch_constraints"]], "compute_tc_grad() (pykep.leg.sims_flanagan method)": [[8, "pykep.leg.sims_flanagan.compute_tc_grad"]], "compute_throttle_constraints() (pykep.leg.sims_flanagan method)": [[8, "pykep.leg.sims_flanagan.compute_throttle_constraints"]], "cut (pykep.leg.sims_flanagan property)": [[8, "pykep.leg.sims_flanagan.cut"]], "isp (pykep.leg.sims_flanagan property)": [[8, "pykep.leg.sims_flanagan.isp"]], "max_thrust (pykep.leg.sims_flanagan property)": [[8, "pykep.leg.sims_flanagan.max_thrust"]], "mf (pykep.leg.sims_flanagan property)": [[8, "pykep.leg.sims_flanagan.mf"]], "ms (pykep.leg.sims_flanagan property)": [[8, "pykep.leg.sims_flanagan.ms"]], "mu (pykep.leg.sims_flanagan property)": [[8, "pykep.leg.sims_flanagan.mu"]], "nseg (pykep.leg.sims_flanagan property)": [[8, "pykep.leg.sims_flanagan.nseg"]], "nseg_bck (pykep.leg.sims_flanagan property)": [[8, "pykep.leg.sims_flanagan.nseg_bck"]], "nseg_fwd (pykep.leg.sims_flanagan property)": [[8, "pykep.leg.sims_flanagan.nseg_fwd"]], "rvf (pykep.leg.sims_flanagan property)": [[8, "pykep.leg.sims_flanagan.rvf"]], "rvs (pykep.leg.sims_flanagan property)": [[8, "pykep.leg.sims_flanagan.rvs"]], "sims_flanagan (class in pykep.leg)": [[8, "pykep.leg.sims_flanagan"]], "throttles (pykep.leg.sims_flanagan property)": [[8, "pykep.leg.sims_flanagan.throttles"]], "tof (pykep.leg.sims_flanagan property)": [[8, "pykep.leg.sims_flanagan.tof"]], "elements() (pykep.planet method)": [[18, "pykep.planet.elements"]], "eph() (pykep.planet method)": [[18, "pykep.planet.eph"]], "eph_v() (pykep.planet method)": [[18, "pykep.planet.eph_v"]], "extract() (pykep.planet method)": [[18, "pykep.planet.extract"]], "get_extra_info() (pykep.planet method)": [[18, "pykep.planet.get_extra_info"]], "get_mu_central_body() (pykep.planet method)": [[18, "pykep.planet.get_mu_central_body"]], "get_mu_self() (pykep.planet method)": [[18, "pykep.planet.get_mu_self"]], "get_name() (pykep.planet method)": [[18, "pykep.planet.get_name"]], "get_radius() (pykep.planet method)": [[18, "pykep.planet.get_radius"]], "get_safe_radius() (pykep.planet method)": [[18, "pykep.planet.get_safe_radius"]], "is_() (pykep.planet method)": [[18, "pykep.planet.is_"]], "period() (pykep.planet method)": [[18, "pykep.planet.period"]], "planet (class in pykep)": [[18, "pykep.planet"]], "add_ballistic_arc() (in module pykep.plot)": [[19, "pykep.plot.add_ballistic_arc"]], "add_lambert() (in module pykep.plot)": [[19, "pykep.plot.add_lambert"]], "add_planet() (in module pykep.plot)": [[19, "pykep.plot.add_planet"]], "add_planet_orbit() (in module pykep.plot)": [[19, "pykep.plot.add_planet_orbit"]], "add_sf_leg() (in module pykep.plot)": [[19, "pykep.plot.add_sf_leg"]], "add_solar_system() (in module pykep.plot)": [[19, "pykep.plot.add_solar_system"]], "add_sun() (in module pykep.plot)": [[19, "pykep.plot.add_sun"]], "make_3daxis() (in module pykep.plot)": [[19, "pykep.plot.make_3Daxis"]], "propagate_lagrangian() (in module pykep)": [[20, "pykep.propagate_lagrangian"]], "propagate_lagrangian_v() (in module pykep)": [[20, "pykep.propagate_lagrangian_v"]], "direct_point2point (class in pykep.trajopt)": [[21, "pykep.trajopt.direct_point2point"]], "plot() (pykep.trajopt.direct_point2point method)": [[21, "pykep.trajopt.direct_point2point.plot"]], "pretty() (pykep.trajopt.direct_point2point method)": [[21, "pykep.trajopt.direct_point2point.pretty"]], "body_list() (pykep.udpla.de440s method)": [[24, "pykep.udpla.de440s.body_list"]], "de440s (class in pykep.udpla)": [[24, "pykep.udpla.de440s"]], "eph() (pykep.udpla.spice method)": [[24, "pykep.udpla.spice.eph"]], "eph() (pykep.udpla.tle method)": [[24, "pykep.udpla.tle.eph"]], "eph_v() (pykep.udpla.tle method)": [[24, "pykep.udpla.tle.eph_v"]], "get_extra_info() (pykep.udpla.spice method)": [[24, "pykep.udpla.spice.get_extra_info"]], "get_extra_info() (pykep.udpla.tle method)": [[24, "pykep.udpla.tle.get_extra_info"]], "get_mu_central_body() (pykep.udpla.tle method)": [[24, "pykep.udpla.tle.get_mu_central_body"]], "get_name() (pykep.udpla.de440s method)": [[24, "pykep.udpla.de440s.get_name"]], "get_name() (pykep.udpla.spice method)": [[24, "pykep.udpla.spice.get_name"]], "get_name() (pykep.udpla.tle method)": [[24, "pykep.udpla.tle.get_name"]], "jpl_lp (class in pykep.udpla)": [[24, "pykep.udpla.jpl_lp"]], "keplerian (class in pykep.udpla)": [[24, "pykep.udpla.keplerian"]], "kernel_file() (pykep.udpla.de440s method)": [[24, "pykep.udpla.de440s.kernel_file"]], "null_udpla (class in pykep.udpla)": [[24, "pykep.udpla.null_udpla"]], "spice (class in pykep.udpla)": [[24, "pykep.udpla.spice"]], "tle (class in pykep.udpla)": [[24, "pykep.udpla.tle"]], "vsop2013 (class in pykep.udpla)": [[24, "pykep.udpla.vsop2013"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["anomalies", "api", "bibliography", "constants", "elements", "epoch", "index", "lambert", "leg", "notebooks/anomalies", "notebooks/epochs", "notebooks/interface_to_spice", "notebooks/planet", "notebooks/plotting", "notebooks/propagate_lagrangian", "notebooks/sims_flanagan_leg", "notebooks/udp_pl2pl", "notebooks/udp_point2point", "planet", "plot", "propagation", "trajopt", "tut_basic", "tut_trajopt", "udpla"], "filenames": ["anomalies.rst", "api.rst", "bibliography.rst", "constants.rst", "elements.rst", "epoch.rst", "index.md", "lambert.rst", "leg.rst", "notebooks/anomalies.ipynb", "notebooks/epochs.ipynb", "notebooks/interface_to_spice.ipynb", "notebooks/planet.ipynb", "notebooks/plotting.ipynb", "notebooks/propagate_lagrangian.ipynb", "notebooks/sims_flanagan_leg.ipynb", "notebooks/udp_pl2pl.ipynb", "notebooks/udp_point2point.ipynb", "planet.rst", "plot.rst", "propagation.rst", "trajopt.rst", "tut_basic.rst", "tut_trajopt.rst", "udpla.rst"], "titles": ["Anomalies Conversions", "API", "Bibliography", "Global constants", "Orbital Elements", "Epoch class", "Welcome to pykep\u2019s documentation!", "Lambert class", "Interplanetary transfer legs", "The various anomalies in pykep", "Epochs and Julian Dates", "Interfacing to SPICE and JPL DE ephs", "Ephemerides", "Plotting", "Lagrange Propagation", "The Sims-Flanagan trajectory leg", "Planet to planet low-thrust transfer", "Point to point low-thrust transfer", "Planet class", "The plot module", "Numerical Propagation", "Trajectory Optimization", "Basic", "Trajectory Optimization", "List of user implemented planets (UDPLAs)"], "terms": {"In": [0, 3, 4, 5, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 21], "pykep": [0, 1, 4, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24], "we": [0, 5, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21], "adopt": 0, "follow": [0, 8, 10, 11, 12, 14, 16, 18], "name": [0, 3, 9, 11, 12, 18, 21, 24], "variou": [0, 3, 4, 6, 12, 13, 22], "m": [0, 3, 4, 6, 8, 9, 11, 14, 15, 16, 17, 18, 21], "i": [0, 1, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24], "mean": [0, 4, 9, 10, 12, 16, 21, 24], "e": [0, 4, 8, 9, 10, 15, 16, 18, 19, 24], "eccentr": [0, 9, 12, 14, 21], "l": [0, 4, 9, 14], "true": [0, 4, 7, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24], "longitud": [0, 4, 9], "lambda": [0, 9], "h": [0, 2, 4, 9], "hyperbol": [0, 9, 14], "n": [0, 2, 3, 9, 13, 14, 15, 16, 17, 19, 21], "zeta": [0, 9], "gudermannian": [0, 9], "function": [0, 3, 4, 9, 10, 11, 14, 16, 18, 19, 24], "variabl": [0, 7, 9], "symbol": [0, 3, 9, 16], "can": [0, 3, 5, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24], "spell": [0, 14], "out": [0, 14], "like": [0, 7, 8, 10, 16, 20, 24], "made": [0, 7, 11, 12], "lowercas": 0, "below": [0, 13, 14], "list": [0, 1, 6, 8, 11, 18, 19, 20, 21], "allow": [0, 6, 7, 8, 10, 12, 14, 18, 20, 21], "convert": [0, 4, 9, 10, 11], "from": [0, 4, 5, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 24], "one": [0, 3, 5, 10, 11, 13, 14, 16, 18], "anoth": 0, "version": [0, 4, 9, 14, 16, 18, 20, 21], "m2e": [0, 9], "ecc": [0, 9], "requir": [0, 11], "1": [0, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24], "arg": [0, 5, 7, 8, 18, 19, 20, 21, 24], "float": [0, 5, 7, 8, 10, 18, 19, 20, 21, 24], "rad": 0, "return": [0, 5, 8, 12, 18, 19, 20, 21, 24], "pi": [0, 4, 7, 8, 9, 14, 17, 18, 20], "exampl": [0, 5, 7, 8, 9, 10, 14, 16, 17, 18, 19, 20, 24], "import": [0, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 24], "pk": [0, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 24], "2": [0, 2, 3, 4, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24], "0": [0, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24], "296254963787226": 0, "e2m": 0, "5": [0, 2, 8, 9, 10, 13, 14, 16, 17, 19, 24], "4520574461395797": 0, "m2f": 0, "32": [0, 10], "65": 0, "4497431281728277": 0, "f2m": 0, "f": [0, 4, 9, 11, 14, 16, 17, 24], "34": [0, 10], "67": 0, "05065883735669101": 0, "e2f": 0, "5502639747136633": 0, "f2e": 0, "1082931139529482": 0, "n2h": [0, 9], "10": [0, 3, 10, 11, 13, 15, 16, 19, 21, 24], "12836469743916526": 0, "h2n": 0, "14": [0, 24], "377641187853621": 0, "n2f": 0, "13": [0, 5], "45": [0, 14], "7373697968359353": 0, "f2n": 0, "7": [0, 3, 8, 14, 15, 16, 17], "8": [0, 8, 14, 17, 19], "421335633880908": 0, "h2f": 0, "4": [0, 2, 7, 9, 10, 13, 14, 15, 16, 17, 19], "7948251330114304": 0, "f2h": 0, "30083016696826936": 0, "zeta2f": 0, "see": [0, 10, 13, 14, 18], "battin": [0, 2, 7, 14], "an": [0, 2, 5, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 20, 24], "introduct": [0, 2, 10], "mathemat": [0, 2], "method": [0, 2, 8, 12, 18, 19, 21, 24], "astrodynam": [0, 2, 8, 12, 14, 22], "definit": [0, 10], "treatment": 0, "result": [0, 11, 13, 14, 16, 19, 24], "equat": [0, 9, 18, 20, 24], "3290929552114266": 0, "f2zeta": 0, "3": [0, 3, 5, 8, 9, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24], "36923933496389816": 0, "m2e_v": [0, 9], "numpi": [0, 7, 8, 9, 11, 13, 14, 15, 16, 17, 18, 20, 24], "ndarrai": [0, 8, 18, 20, 24], "np": [0, 7, 8, 9, 11, 13, 14, 15, 16, 17, 18, 20], "linspac": [0, 9, 14], "100": [0, 9, 14, 16, 17], "375": 0, "shape": 0, "e2m_v": 0, "86345": 0, "m2f_v": 0, "f2m_v": [0, 9], "e2f_v": 0, "0256": 0, "f2e_v": 0, "23": [0, 10, 21], "n2h_v": 0, "h2n_v": 0, "n2f_v": 0, "f2n_v": 0, "h2f_v": 0, "f2h_v": 0, "zeta2f_v": 0, "f2zeta_v": 0, "design": [1, 2, 6, 8, 13, 21], "maxim": 1, "its": [1, 6, 7, 8, 9, 10, 11, 12, 13, 16, 18, 21, 22, 24], "usabl": 1, "let": [1, 9, 10, 11, 12, 13, 14], "u": [1, 8, 9, 10, 11, 12, 14, 15], "know": [1, 9, 10, 18], "what": [1, 10, 11, 16], "you": [1, 16, 17], "think": 1, "about": [1, 9, 11, 18], "anomali": [1, 4, 6, 14, 22, 24], "convers": [1, 6, 18, 19], "normal": 1, "vector": [1, 7, 8, 9, 12, 14, 16, 17, 18, 19, 20, 21], "global": [1, 2, 6], "constant": [1, 6, 18], "orbit": [1, 2, 6, 9, 10, 12, 13, 14, 15, 19, 24], "element": [1, 2, 6, 12, 18, 21, 24], "el_typ": [1, 4, 18, 24], "ic2par": [1, 4, 18], "par2ic": [1, 4], "ic2eq": [1, 4], "eq2ic": [1, 4], "eq2par": [1, 4], "par2eq": [1, 4], "epoch": [1, 6, 11, 12, 13, 16, 18, 19, 21, 22, 24], "class": [1, 4, 6, 8, 10, 11, 12, 13, 15, 16, 17, 21, 24], "lambert": [1, 2, 6, 19], "lambert_problem": [1, 7, 13, 19], "interplanetari": [1, 2, 6, 13, 21], "transfer": [1, 6, 13, 14, 21, 23], "leg": [1, 6, 17, 19, 21, 22], "sims_flanagan": [1, 8, 13, 15, 19, 21], "planet": [1, 6, 11, 12, 15, 21], "The": [1, 3, 4, 5, 6, 7, 8, 12, 13, 14, 16, 17, 18, 20, 21, 22, 24], "plot": [1, 6, 9, 14, 15, 16, 17, 21, 22], "modul": [1, 5, 6, 10, 11, 12, 13, 14, 21, 24], "common": [1, 3, 11, 12, 14], "util": [1, 11, 24], "trajectori": [1, 6, 8, 12, 14, 16, 17, 22], "numer": [1, 6, 11, 14, 16, 17], "propag": [1, 6, 8, 12, 18, 22, 24], "keplerian": [1, 4, 6, 12, 14, 15, 18, 24], "dynam": [1, 2, 6, 15], "propagate_lagrangian": [1, 14, 20], "propagate_lagrangian_v": [1, 14, 20], "user": [1, 3, 4, 5, 6, 10, 11, 12, 13, 16, 17, 18], "implement": [1, 6, 8, 12, 14, 15, 18, 20], "udpla": [1, 6, 11, 12, 13, 15, 16, 18, 19, 21], "null_udpla": [1, 24], "jpl_lp": [1, 13, 15, 16, 18, 19, 21, 24], "vsop2013": [1, 24], "tle": [1, 18, 24], "spice": [1, 6, 18, 22, 24], "de440": [1, 11, 24], "optim": [1, 2, 6, 8, 16, 17], "direct": [1, 13], "bat99": [2, 14], "richard": [2, 14], "aiaa": [2, 8], "1999": [2, 10], "bi20": [2, 16, 17], "francesco": 2, "biscani": 2, "dario": [2, 16, 17], "izzo": [2, 16, 17], "A": [2, 4, 9, 10, 11, 12, 13, 15, 24], "parallel": [2, 20], "multiobject": 2, "framework": 2, "pagmo": [2, 16, 21], "journal": 2, "open": 2, "sourc": [2, 10, 16], "softwar": [2, 21], "53": 2, "2338": 2, "2020": 2, "bi21": [2, 20], "revisit": 2, "high": [2, 10], "order": [2, 14, 16, 18], "taylor": [2, 6, 20], "celesti": 2, "mechan": [2, 9, 15], "monthli": 2, "notic": 2, "royal": 2, "astronom": [2, 3], "societi": 2, "504": 2, "2614": 2, "2628": 2, "2021": 2, "bi22": 2, "reliabl": 2, "event": [2, 10], "detect": 2, "513": 2, "4833": 2, "4844": 2, "2022": [2, 11], "izz15": 2, "": [2, 3, 7, 9, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24], "problem": [2, 6, 7, 13, 15, 16, 17, 18, 19, 21], "astronomi": 2, "121": 2, "15": [2, 13, 16, 17, 19], "2015": 2, "sf97": [2, 14, 15, 21], "jon": 2, "sim": [2, 6, 8, 14, 19, 21, 22], "steve": 2, "flanagan": [2, 6, 8, 14, 19, 22], "preliminari": [2, 6, 8], "low": [2, 6, 8, 9, 13, 14, 15, 21, 23, 24], "thrust": [2, 6, 8, 13, 14, 15, 19, 21, 23], "mission": [2, 6, 13, 24], "paper": [2, 6], "aa": [2, 8], "99": 2, "338": 2, "specialist": [2, 8], "confer": [2, 8], "girdwood": 2, "alaska": 2, "august": [2, 8], "16": [2, 7], "18": 2, "1997": 2, "wio85": [2, 4], "michael": 2, "jh": 2, "walker": 2, "b": [2, 14], "ireland": 2, "joyc": 2, "owen": 2, "set": [2, 4, 16], "modifi": [2, 4, 5, 10, 18, 19, 24], "equinocti": [2, 4], "36": 2, "409": 2, "419": 2, "1985": 2, "access": [3, 12, 18], "number": [3, 4, 5, 7, 8, 9, 10, 12, 14, 15, 16, 17, 19, 21], "ar": [3, 4, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24], "provid": [3, 4, 6, 11, 12, 13, 18, 19, 20, 21, 22, 23, 24], "conveni": [3, 11, 12, 13, 14], "overwrit": 3, "valu": [3, 8, 16, 17, 18], "need": [3, 7, 8, 10, 11, 12, 16, 17], "These": [3, 4, 10, 12, 14], "us": [3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24], "intern": [3, 18, 21], "thei": [3, 12, 15, 18, 24], "onli": [3, 10, 11, 12, 13, 14, 16, 21], "instanti": [3, 4, 10, 11, 12, 13, 15, 16, 18, 24], "object": [3, 5, 10, 11, 12, 18, 19, 24], "unit": [3, 7, 8, 12, 13, 14, 15, 18, 19, 21, 24], "au": [3, 12, 15, 16, 17, 19, 21], "149597870700": [3, 17, 19, 21], "cavendish": 3, "frac": [3, 4, 7, 8, 14, 15, 18, 20], "kg": [3, 21], "36687e": 3, "sun": [3, 11, 13, 15, 19, 21], "gravit": [3, 7, 8, 17, 18, 19, 20, 21, 24], "paramet": [3, 4, 7, 8, 11, 12, 17, 18, 19, 20, 21, 24], "mu_sun": [3, 13, 15, 16, 17, 21], "sec": [3, 18], "32712440018e": [3, 17, 21], "20": [3, 10, 13, 15, 16, 17, 21], "earth": [3, 10, 11, 13, 15, 16, 19, 21, 24], "mu_earth": 3, "398600441800000": [3, 21], "veloc": [3, 4, 7, 8, 11, 12, 14, 18, 19, 20, 21, 24], "earth_veloc": [3, 15, 16, 17, 21], "29784": [3, 17, 21], "691831696804": [3, 17, 21], "radiu": [3, 11, 12, 18, 21, 24], "earth_radiu": 3, "6378137": 3, "j_2": 3, "earth_j2": 3, "00108262668": 3, "second": [3, 5, 7, 9, 12, 14, 18, 21, 24], "dai": [3, 5, 10, 21], "day2sec": [3, 13, 15], "86400": 3, "degre": 3, "radian": 3, "rad2deg": 3, "57": 3, "29577951308232": 3, "default": [4, 5, 7, 8, 10, 13, 18, 19, 20, 21, 24], "oscul": [4, 18, 24], "classic": 4, "omega": [4, 12, 21], "togeth": [4, 13], "cartesian": [4, 7, 8, 12, 14, 18, 19, 20], "posit": [4, 7, 8, 11, 12, 13, 14, 15, 18, 19, 20, 21, 24], "mathbf": [4, 8, 14, 15, 16, 17], "r": [4, 8, 10, 11, 12, 14, 15, 17, 18, 20, 21, 24], "v": [4, 8, 11, 12, 13, 14, 15, 17, 18, 20, 21, 24], "support": [4, 6, 10], "given": [4, 13, 19, 21], "also": [4, 5, 9, 10, 14, 18, 20], "well": [4, 6, 8, 11, 12, 14, 16, 21], "defin": [4, 5, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 24], "left": [4, 14], "begin": [4, 14], "arrai": [4, 7, 8, 9, 14, 15, 16, 17, 18, 20, 21, 24], "p": [4, 8], "co": 4, "g": [4, 9, 14, 18], "sin": [4, 9], "tan": [4, 13], "i2": 4, "right": [4, 14], "k": [4, 13, 15], "end": [4, 8, 9, 12, 14, 16, 17, 19], "avoid": [4, 9, 11, 13, 18], "singular": 4, "except": [4, 16, 18, 21, 24], "which": [4, 8, 9, 10, 11, 12, 13, 14, 18, 19, 21, 24], "case": [4, 9, 11, 12, 13, 14, 15, 16, 17, 18, 20], "retrogad": 4, "convent": [4, 22], "hyperbola": 4, "enforc": 4, "thu": [4, 8, 10, 11, 12, 13, 14, 22, 23], "abl": [4, 11, 16, 18], "where": [4, 13, 14, 16, 21], "member": [4, 5, 7], "kep_m": 4, "kep_f": [4, 18, 24], "meq": 4, "meq_r": 4, "retrograd": [4, 7], "posvel": [4, 24], "represent": [5, 10, 12, 18, 21], "specif": [5, 8, 10, 14, 17, 21], "point": [5, 6, 7, 8, 10, 16, 18, 19, 21, 23], "time": [5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 19, 20, 21], "futur": [5, 10], "past": [5, 10], "rather": [5, 10, 11, 13, 14], "confus": [5, 10, 11], "opt": [5, 10, 16, 17], "offer": [5, 10, 11, 12, 20], "dedic": [5, 9, 10, 11, 14], "call": [5, 8, 13, 16, 18, 19, 20, 24], "simpl": [5, 9, 10, 14, 16, 18], "interfac": [5, 6, 10, 12, 15, 16, 20, 22, 24], "under": [5, 10, 11], "hood": [5, 10, 11], "seamlessli": [5, 10, 20], "both": [5, 10, 11, 13, 16, 21], "c": [5, 10, 11, 12, 13, 15, 16, 18, 19, 21], "std": [5, 10, 16], "chrono": [5, 10], "librari": [5, 6, 10, 16, 17], "python": [5, 10, 12, 18, 20, 24], "datetim": 5, "julian": [5, 6, 18, 22, 24], "date": [5, 6, 18, 21, 22, 24], "repres": [5, 8, 10, 11, 13, 18, 21, 24], "sinc": [5, 10, 11, 14, 17, 20], "start": [5, 8, 9, 11, 12, 13, 14, 15, 16, 17, 19, 21, 22], "2000": [5, 10, 12, 16, 17, 19, 21, 24], "doe": [5, 10, 11, 12, 13, 16, 18], "account": [5, 10], "leap": 5, "If": [5, 10, 11, 18, 19], "wish": [5, 10], "exact": [5, 10, 16], "iso": [5, 10], "8601": [5, 10], "some": [5, 8, 10, 11, 13, 14, 15, 16, 18, 21, 22, 23], "includ": [5, 10, 11], "he": [5, 10], "have": [5, 9, 10, 11, 14, 18], "offset": [5, 10], "himself": [5, 10], "As": [5, 8, 10], "2023": [5, 10, 11, 24], "thi": [5, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24], "mai": [5, 9, 10, 11, 13, 18, 20, 22, 23], "maximum": [5, 7, 8, 10, 13, 17, 19, 21], "28": [5, 10], "more": [5, 6, 10, 11, 12, 13, 14, 18, 20], "info": [5, 10, 11, 12, 18, 21, 24], "when": [5, 10, 11, 12, 13, 16, 18, 19, 22], "julian_typ": [5, 10], "mjd2000": [5, 10, 12, 13, 16, 18, 19, 21, 24], "construct": [5, 7, 8, 10, 12, 13, 16, 18, 19, 24], "refer": [5, 10, 11, 12, 13, 14, 18, 21, 24], "jd": [5, 10], "mjd": [5, 10], "12": [5, 10, 12, 15, 17, 21], "01": [5, 10, 11, 12, 14, 16, 17, 19, 21], "13t07": 5, "00": [5, 10, 12, 14, 16, 17, 19, 21], "000000": [5, 10, 12, 19, 21], "altern": [5, 10, 24], "constructor": [5, 13, 18, 24], "__init__": [5, 24], "str": [5, 18, 24], "string_format": 5, "string": [5, 10, 18], "format": [5, 24], "14t00": 5, "000001": 5, "year": [5, 10], "month": [5, 10], "13t00": 5, "properti": [5, 7, 8, 17, 18], "static": [5, 24], "now": [5, 10, 11, 13, 14, 15], "current": [5, 10, 11], "utc": [5, 10, 12], "coolbox": 6, "develop": 6, "european": 6, "space": [6, 8, 9, 11, 15, 17, 18, 21], "agenc": 6, "advanc": [6, 12, 14], "concept": [6, 8], "team": 6, "Its": 6, "purpos": [6, 14, 15, 16, 18], "fast": 6, "prototyp": 6, "research": 6, "idea": [6, 11], "At": [6, 9], "core": 6, "effici": [6, 14, 15, 18, 20], "algorithm": [6, 8, 14, 16, 17], "solv": [6, 7, 9], "multipl": [6, 7, 13, 14], "revolut": [6, 7, 19, 21], "asteroid": [6, 11], "randezv": 6, "jpl": [6, 13, 22, 24], "sgp4": [6, 24], "heyoka": [6, 20], "integr": [6, 11, 19, 20], "suit": [6, 21], "ha": [6, 8, 14, 16, 17, 21], "been": [6, 10], "dure": [6, 18], "differ": [6, 10, 11, 14, 16, 20], "competit": 6, "gtoc": 6, "sever": 6, "scenario": 6, "argo": 6, "cubesat": 6, "phase": 6, "studi": [6, 17], "titan": 6, "enceladu": 6, "tandem": 6, "analysi": 6, "hera": 6, "api": [6, 12, 15], "bibliographi": 6, "basic": [6, 10, 13, 14, 15, 16, 17, 18], "ephemerid": [6, 13, 18, 22, 24], "de": [6, 22], "eph": [6, 13, 18, 22, 24], "lagrang": [6, 22], "r0": [7, 13, 14, 20], "r1": [7, 13, 14, 20], "tof": [7, 8, 13, 14, 15, 16, 17, 19, 20, 21], "mu": [7, 8, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "cw": 7, "fals": [7, 14, 16, 17, 18, 19, 20, 21], "max_rev": 7, "1d": [7, 8, 20], "compon": [7, 8, 12, 14, 20], "first": [7, 11, 12, 13, 14, 16, 18, 24], "x": [7, 8, 16, 17, 21], "y": [7, 8], "z": [7, 8, 21], "xf": [7, 8], "yf": [7, 8], "zf": [7, 8], "tot": 7, "flight": [7, 8, 9, 13, 15, 16, 17, 19, 20, 21], "bool": [7, 18, 19, 20, 21], "motion": [7, 11, 12, 14], "clockwis": 7, "comput": [7, 8, 9, 11, 12, 13, 16, 18, 19, 20, 22, 24], "consist": [7, 8, 9, 12], "multirev": 7, "upon": [7, 24], "solut": [7, 13, 16, 19], "store": [7, 14, 18], "data": [7, 11, 15, 16, 17], "lp": [7, 13, 19], "v0": [7, 13, 14, 20], "1028493158958256e": 7, "0000000000000002": 7, "nmax": [7, 19], "iter": [7, 16, 17], "attract": [7, 18, 24], "bodi": [7, 8, 11, 12, 13, 15, 16, 17, 18, 19, 21, 24], "between": [7, 8, 9, 10, 14, 18, 21], "two": [7, 8, 10, 12, 16, 17, 21], "v1": [7, 13, 14, 20], "along": [7, 8, 14, 19], "curv": 7, "rv": [8, 14, 15, 17, 20, 21], "throttl": [8, 13, 15, 16, 17, 21], "rvf": [8, 15, 17, 21], "mf": [8, 15, 17, 21], "max_thrust": [8, 15, 16, 17, 21], "isp": [8, 15, 16, 17, 21], "cut": [8, 15, 16, 17, 21], "final": [8, 9, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21], "augment": 8, "state": [8, 12, 14, 15, 16, 17, 20, 21], "describ": [8, 12, 15, 18, 24], "sequenc": [8, 13, 15], "equal": [8, 15], "impuls": [8, 13, 15, 17, 21], "j": 8, "finlayson": 8, "rinderl": 8, "vavrina": 8, "kowalkowski": 8, "t": [8, 10, 14, 15, 18, 21], "2006": 8, "exhibit": 8, "6746": 8, "feasibl": [8, 13, 16, 17], "mismatch": [8, 17, 18], "constraint": [8, 17, 21], "inequ": 8, "satisfi": 8, "2d": [8, 20], "initi": [8, 13, 14, 15, 16, 17, 19, 20, 21], "vx": 8, "vy": 8, "vz": 8, "mass": [8, 16, 17, 21], "cartesan": 8, "histori": [8, 13], "ux1": 8, "uy1": 8, "uz1": 8, "ux2": 8, "uy2": 8, "uz2": 8, "ballist": [8, 13, 14, 19], "segment": [8, 14, 15, 16, 17, 19, 21], "profil": [8, 14, 21], "vxf": 8, "vyf": 8, "vzf": 8, "level": [8, 21], "spacecraft": [8, 11, 13, 15, 21, 24], "propulas": 8, "system": [8, 10, 11, 13, 15, 16, 17, 19, 24], "It": [8, 10, 21], "determin": 8, "forward": [8, 19], "backward": 8, "sf": [8, 13, 15, 19], "compute_mc_grad": 8, "gradient": [8, 14, 17, 21], "indic": [8, 9, 10, 14, 21], "x_": [8, 15], "r_": [8, 14, 15], "v_": [8, 14, 15, 16], "m_": [8, 14, 15], "x_f": [8, 14, 15], "r_f": [8, 14, 15], "v_f": [8, 14, 15], "m_f": [8, 15, 16, 17], "total": [8, 19], "introduc": [8, 10, 14], "u_": [8, 15, 16, 17], "x0": [8, 15, 16, 17, 20], "y0": [8, 15, 16, 17, 20], "z0": [8, 15, 16, 17, 20], "x1": [8, 15, 16, 17], "y1": [8, 15, 16, 17], "z1": [8, 15, 16, 17], "note": [8, 9, 10, 11, 19, 20], "partial": [8, 14], "mc": 8, "tupl": [8, 20], "three": [8, 14], "size": [8, 15, 17, 19], "nseg": [8, 13, 15, 16, 17, 21], "compute_mismatch_constraint": 8, "model": [8, 13, 14, 24], "perform": [8, 11, 14, 21], "match": [8, 10], "middl": [8, 15], "control": [8, 21], "typic": [8, 9, 16], "impos": 8, "independ": 8, "seven": 8, "same": [8, 9, 11, 12, 16, 18], "compute_tc_grad": 8, "tc": 8, "compute_throttle_constraint": 8, "each": [8, 9, 16, 19, 20, 22, 23], "u_x": 8, "u_i": 8, "u_z": 8, "certain": 8, "reach": 8, "fraction": 8, "consequ": 8, "appli": [8, 14, 15], "met": 8, "thruet": 8, "central": [8, 11, 12, 17, 18, 19, 21], "nseg_bck": 8, "nseg_fwd": 8, "them": [9, 11, 13], "throughout": 9, "code": [9, 11, 12, 13, 14, 18, 20, 24], "document": [9, 18], "mostli": 9, "To": [9, 13, 14, 16], "keep": 9, "our": [9, 10, 11, 14], "scheme": 9, "do": [9, 11, 13, 14, 16], "capit": 9, "letter": 9, "so": [9, 12, 13, 16], "transform": [9, 10, 11], "must": [9, 10, 11, 12, 18, 24], "singl": 9, "write": [9, 10], "necessari": [9, 14, 16, 24], "all": [9, 10, 12, 13, 14, 19, 20, 21], "link": [9, 16, 21], "other": [9, 12, 13, 18, 20], "through": [9, 11], "algebra": 9, "explicit": 9, "implicit": 9, "most": [9, 10, 11, 12, 13, 14, 16, 21, 22, 23], "famou": 9, "kepler": [9, 20], "here": [9, 10, 11, 13, 16, 20], "briefli": [9, 10], "showcas": [9, 11], "matplotlib": [9, 13, 14, 15, 16, 17, 19], "pyplot": [9, 14, 15, 16, 17], "plt": [9, 14, 15, 16, 17], "consid": [9, 10, 11, 14, 17, 18], "satellit": [9, 11, 12, 24], "ellipt": 9, "relat": [9, 14, 15], "rel": [9, 11, 16, 21], "print": [9, 10, 11, 12, 14, 16, 17, 21], "39017524962497735": 9, "subscript": 9, "fig": [9, 14], "figur": [9, 14, 19], "figsiz": [9, 13, 15], "xlabel": [9, 16, 17], "ylabel": [9, 16, 17], "want": [9, 10, 11, 13], "comut": 9, "speed": [9, 14], "100000": [9, 14], "1e7": 9, "perf_count": [9, 14], "rang": [9, 14, 16, 17], "0f": 9, "5935065": 9, "take": [10, 16], "care": [10, 12], "show": [10, 13, 14, 15, 16, 17, 21], "creat": [10, 11, 13], "four": [10, 14], "wai": [10, 14], "pass": [10, 18, 19], "histor": [10, 11], "directli": [10, 11], "request": [10, 20], "specifi": [10, 11, 19], "othewis": 10, "context": 10, "arithmet": 10, "alwai": [10, 11, 12], "01t00": [10, 12, 19, 21], "durat": 10, "calendar": 10, "prolept": 10, "befor": [10, 24], "1580": 10, "gregorain": 10, "aris": 10, "try": [10, 14], "ep": [10, 13, 18, 19, 24], "screen": [10, 12], "explicitli": 10, "mention": 10, "type": [10, 12, 18, 21, 24], "than": [10, 16, 19, 20], "2460676": 10, "5000000": 10, "2025": [10, 11, 24], "correspond": [10, 11, 18], "2024": 10, "07": 10, "08t09": 10, "048868": 10, "28t00": 10, "02": [10, 11, 14, 16, 17], "120000": 10, "builtin": 10, "dt": [10, 14], "2033": 10, "11": [10, 11, 13, 16, 21], "hour": 10, "minut": 10, "22": [10, 13, 17, 24], "microsecond": 10, "14532": 10, "12t12": 10, "014532": 10, "63913": 10, "51541683486": 10, "addit": [10, 16, 19, 21], "subtract": 10, "timedelta": 10, "assum": [10, 14, 15, 18, 24], "21": 10, "2353525": 10, "interpret": 10, "22t05": 10, "38": 10, "54": 10, "456000": 10, "comparison": 10, "oper": 10, "turn": 10, "handi": 10, "everlast": 10, "whenev": 10, "post": 10, "1972": 10, "pre": [10, 11, 24], "variat": [10, 13, 14, 20], "attempt": [10, 16], "establish": 10, "make": [10, 12, 13, 14, 15, 16, 17], "sens": [10, 12], "clearli": [10, 11], "imposs": 10, "yet": [10, 22, 23], "commend": 10, "effort": [10, 17], "period": [10, 14, 18, 19], "rotat": [10, 11], "commensur": 10, "For": [10, 12, 14, 16, 20, 24], "peac": 10, "mind": 10, "ignor": 10, "up": [10, 13], "correct": [10, 11, 24], "read": 10, "few": [10, 13, 14, 21], "sai": [10, 13], "01t10": 10, "would": [10, 11, 13, 14], "obvious": 10, "output": [10, 18], "confirm": 10, "successful": [10, 16], "instead": [10, 12, 18], "actual": [10, 11, 14, 18], "peopl": 10, "should": [10, 18, 21], "add": [10, 13, 14, 19], "http": [10, 24], "en": [10, 24], "wikipedia": [10, 24], "org": [10, 24], "wiki": [10, 24], "leap_second": 10, "particular": [10, 11, 16, 21], "ad": [10, 13, 15, 19], "henc": [10, 11, 12], "ep_with_leap": 10, "44": [10, 15], "small": [10, 12, 21], "error": [10, 16, 18], "ep_with_leap2": 10, "sec2dai": 10, "43": 10, "999999": 10, "accuraci": 10, "attent": 10, "prior": 10, "wa": [10, 13, 16], "valid": [10, 11, 16, 17], "off": [10, 13, 15], "w": [10, 14, 24], "those": 10, "calndar": 10, "activ": 10, "4713": 10, "24t12": 10, "least": [10, 18], "distinct": 10, "1st": 10, "januari": 10, "per": [10, 16, 21], "bc": 10, "anno": 10, "domini": 10, "minu": 10, "exist": 10, "24th": 10, "novemb": 10, "4714bc": 10, "noon": 10, "NOT": 10, "uniqu": 11, "move": [11, 12, 16, 18], "comet": [11, 12], "whose": [11, 18], "fit": [11, 16], "observ": [11, 24], "simul": 11, "encapsul": 11, "naif": [11, 24], "kernel": [11, 24], "avail": [11, 14, 16, 17, 20, 22, 23], "relev": [11, 19], "barycent": [11, 24], "jupit": [11, 13], "respect": [11, 14, 16], "solar": [11, 13, 19, 24], "releas": [11, 22, 23], "accur": 11, "ones": 11, "download": 11, "binari": 11, "bsp": [11, 24], "file": [11, 13, 16, 24], "contain": [11, 16, 18, 19, 21, 24], "distribut": 11, "skip": 11, "step": 11, "get": [11, 13, 14, 22], "path": [11, 16, 24], "de440s_kernel": 11, "kernel_fil": [11, 24], "home": [11, 16], "runner": 11, "local": [11, 13], "lib": [11, 13], "python3": [11, 13], "site": [11, 13], "packag": [11, 13, 20, 24], "id": [11, 19], "naifid": 11, "inspect_spice_kernel": 11, "readibl": 11, "naifid2nam": 11, "item": 11, "mercuri": [11, 13, 24], "venu": [11, 24], "mar": [11, 13, 16, 21], "saturn": 11, "uranu": 11, "neptun": 11, "pluto": 11, "moon": 11, "nice": 11, "inspect": [11, 13], "realiz": 11, "non": [11, 12, 13, 14, 21, 24], "barycentr": 11, "proce": 11, "task": 11, "jupyt": 11, "thing": 11, "usag": 11, "load": [11, 16, 24], "memori": [11, 24], "load_spice_kernel": [11, 24], "done": 11, "onc": [11, 12, 13, 18, 20], "forget": 11, "unless": 11, "issu": 11, "unload": 11, "unload_spice_kernel": 11, "form": 11, "eclipj2000": [11, 24], "ssb": [11, 24], "nveloc": 11, "722180808588": 11, "1804": 11, "157535374702": 11, "5074": 11, "16810696007": 11, "16372": 11, "2933": 11, "2858571285688": 11, "13378": 11, "581606366935": 11, "115066760074676": 11, "And": [11, 12, 13, 16], "python_udpla": [11, 12], "safe": [11, 12, 18, 21, 24], "extra": [11, 12, 18, 21, 24], "frame": [11, 18, 24], "how": [11, 12, 13, 14, 18, 22], "mani": [11, 18, 20], "physic": [11, 12], "interpol": [11, 12], "tabl": 11, "ani": [11, 12, 13, 15, 18], "present": [11, 14], "abov": [11, 14, 16, 18], "gener": [11, 13, 18, 19], "work": [11, 13, 16, 21, 22], "rover": 11, "backdraw": 11, "anywai": 11, "pattern": 11, "queri": [11, 24], "automat": 11, "ship": [11, 24], "156005590351": 11, "0843": 11, "743270596831": 11, "1477": 11, "6573233296": 11, "777874": 11, "12935": 11, "993235030832": 11, "3306": 11, "5234815642566": 11, "275": 11, "73217606979927": 11, "either": [11, 18], "ourselv": 11, "matrix": [11, 14, 20], "rotation_matrix": 11, "j2000": [11, 24], "inerti": 11, "orient": 11, "depend": [11, 18], "r_j2000": 11, "dot": 11, "56005590e": 11, "6": [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24], "84552122e": 11, "89625240e": 11, "obtain": 11, "jupiter_j2000": 11, "684552121902": 11, "1022": 11, "289625240455": 11, "7204": 11, "regardless": 12, "whether": [12, 16, 18, 21], "underli": [12, 13, 18], "simpli": 12, "base": [12, 14, 16, 18, 19, 20, 21], "predict": 12, "unifi": 12, "eras": [12, 18], "hi": [12, 18], "own": [12, 18], "mandatori": [12, 18, 24], "treat": 12, "uniformli": 12, "upla": 12, "heterogen": 12, "techniqu": [12, 16, 21], "third": [12, 24], "parti": [12, 24], "appear": [12, 16], "alreadi": 12, "spacecarft": [12, 24], "without": [12, 16, 18], "mu_central_bodi": [12, 24], "circular": 12, "pla": [12, 18, 19, 24], "dimension": [12, 13, 14], "often": 12, "Of": 12, "cours": 12, "everyth": 12, "check": [12, 18], "anyth": [12, 18], "si": [12, 18, 24], "mix": 12, "kep3": [12, 21], "semi": [12, 21], "major": [12, 16, 17, 21], "axi": [12, 13, 15, 19, 21], "684587122268445e": 12, "inclin": [12, 21], "deg": [12, 21], "big": [12, 13, 21], "anomli": [12, 21], "ref": [12, 21], "textual": 12, "part": [12, 15], "report": [12, 16], "eaul": 12, "origin": [12, 16], "essenti": 12, "whatev": 12, "option": [12, 16, 18, 19, 21, 24], "extra_info": 12, "expos": [12, 18], "tutori": [13, 14, 15, 16, 17, 22, 23], "explor": 13, "tool": 13, "via": [13, 15, 20, 24], "built": 13, "facilit": 13, "increment": 13, "quantiti": 13, "interest": [13, 16, 24], "plan": 13, "inlin": [13, 14, 15], "empti": [13, 18], "canva": 13, "detail": [13, 14, 18, 21], "interact": [13, 22, 23], "backend": 13, "make_3daxi": [13, 15, 19], "factori": 13, "ax": [13, 14, 15, 16, 17, 19, 21], "easili": [13, 14], "precis": [13, 21, 24], "add_sun": [13, 15, 19], "add_planet_orbit": [13, 15, 19], "plot_rang": [13, 19], "365": [13, 19], "25": [13, 19], "royalblu": [13, 19], "label": [13, 16, 17, 19], "add_planet": [13, 19], "indianr": 13, "legend": [13, 16, 17], "set_xlim3d": 13, "set_ylim3d": 13, "view_init": [13, 14, 15, 16, 17], "90": [13, 15, 16, 17], "add_solar_system": [13, 19], "just": [13, 14, 18], "set_titl": 13, "typeerror": [13, 18], "traceback": [13, 16], "recent": [13, 16], "last": [13, 16], "cell": [13, 16], "line": [13, 16, 24], "_planet": 13, "py": 13, "117": 13, "115": 13, "116": 13, "_pk": [13, 19, 21], "planet_to_keplerian": [13, 16], "118": 13, "tomato": 13, "119": 13, "got": 13, "unexpect": 13, "keyword": [13, 19, 21], "argument": [13, 19, 21], "fix": [13, 17, 18, 21], "geometri": 13, "t0": [13, 21], "4340": 13, "tof_dai": 13, "280": 13, "assembl": 13, "40": [13, 15], "get_nam": [13, 18, 24], "add_lambert": [13, 19], "60": [13, 19], "sol": [13, 19], "alpha": [13, 16, 17], "cosmet": 13, "custom": 13, "2140": 13, "1230": 13, "120": 13, "delta": [13, 14, 15], "visual": [13, 19], "discret": 13, "clarli": 13, "close": 13, "strategi": 13, "immedi": 13, "random": [13, 15, 16, 17], "produc": 13, "randomli": 13, "cool": 13, "black": 13, "add_sf_leg": [13, 15, 19], "show_throttl": [13, 15, 19, 21], "length": [13, 14, 15, 19, 21], "arrow_length_ratio": [13, 15, 19, 21], "270": 13, "One": 14, "coeffici": [14, 20, 24], "scalar": 14, "f_t": 14, "g_t": 14, "r_0": 14, "v_0": 14, "gt": 14, "analyt": [14, 24], "express": 14, "term": 14, "univers": 14, "deriv": 14, "found": [14, 16, 24], "semin": 14, "book": 14, "fundament": 14, "transit": [14, 20], "fail": [14, 16, 17, 18, 22, 23, 24], "perfectli": 14, "parabol": 14, "notebook": [14, 16, 17, 22, 23], "mpl_toolkit": [14, 15, 19, 21], "mplot3d": [14, 15, 19, 21], "bit": 14, "cpu": [14, 16, 17], "t1": 14, "re": [14, 20], "t2": 14, "spicep": 14, "real": 14, "5f": 14, "08034": 14, "23731": 14, "circulr": 14, "necessarili": [14, 20], "faster": [14, 16], "sure": 14, "t_grid": 14, "orbit1": 14, "orbit2": 14, "orbit3": 14, "pos1": 14, "pos2": 14, "pos3": 14, "project": 14, "3d": [14, 19, 21], "plot3d": 14, "grai": 14, "scatter3d": 14, "ok": 14, "admittedli": 14, "underwhelm": 14, "veri": 14, "someth": 14, "ipython": 14, "displai": 14, "imag": 14, "filenam": 14, "sf_diagram": 14, "png": 14, "With": 14, "diagram": 14, "block": 14, "arc": [14, 19], "v_i": 14, "That": 14, "shall": 14, "inform": [14, 18, 19, 21], "bi": 14, "straightforward": [14, 16], "after": [14, 18, 20, 21], "convinc": 14, "node": 14, "x_0": 14, "x_1": 14, "x_2": 14, "trivial": 14, "seek": 14, "v_1": 14, "i_v": 14, "select": [14, 19, 24], "iv": 14, "llllll": 14, "shown": [14, 19], "complex": [14, 18], "linear": 14, "matric": 14, "byth": 14, "condit": 14, "dv1": 14, "dv2": 14, "rv1": 14, "m1": 14, "zip": 14, "rv2": 14, "m2": 14, "r2": 14, "v2": 14, "rv3": 14, "m3": 14, "readi": [14, 15], "34626570e": 14, "9": 14, "18636660e": 14, "53491478e": 14, "03": [14, 24], "62743322e": 14, "67251795e": 14, "31214685e": 14, "01442012e": 14, "53986122e": 14, "22422462e": 14, "76624971e": 14, "74892799e": 14, "87677130e": 14, "04": [14, 17], "20563364e": 14, "27842618e": 14, "28241661e": 14, "38362020e": 14, "94369911e": 14, "65801880e": 14, "10523246e": 14, "16229111e": 14, "86507297e": 14, "28398676e": 14, "63479977e": 14, "06363208e": 14, "91482558e": 14, "85525026e": 14, "56526220e": 14, "72411072e": 14, "06888007e": 14, "48374847e": 14, "30386029e": 14, "82337379e": 14, "43593389e": 14, "53366895e": 14, "49028595e": 14, "36023185e": 14, "diag": 14, "78070423e": 14, "08732311e": 14, "65602612e": 14, "26449980e": 14, "37560753e": 14, "10519096e": 14, "80792351e": 14, "12326674e": 14, "35231810e": 14, "17808758e": 14, "68304105e": 14, "15034626e": 14, "91248018e": 14, "27967105e": 14, "45214336e": 14, "37037657e": 14, "47952071e": 14, "03307087e": 14, "v_2": 14, "50686834e": 14, "20177166e": 14, "83470131e": 14, "05": [14, 19, 21], "20388630e": 14, "49820146e": 14, "45873151e": 14, "83271278e": 14, "45719332e": 14, "49496071e": 14, "01292574e": 14, "25392660e": 14, "80275429e": 14, "25474976e": 14, "97050307e": 14, "60311875e": 14, "79501356e": 14, "59713106e": 14, "90123105e": 14, "fidel": 15, "approxim": 15, "continu": 15, "manouvr": [15, 18], "arriv": [15, 17, 21], "x2": 15, "y2": 15, "z2": 15, "tempor": 15, "tn": 15, "propuls": 15, "chosen": [15, 16, 18], "arbitrarili": 15, "clearlyshow": 15, "3000": [15, 16, 17, 21], "1500": [15, 16, 17, 21], "1300": [15, 16, 17, 21], "rf": [15, 17], "vf": [15, 17], "023": 15, "uniform": [15, 17], "324": 15, "boundari": 15, "scatter": [15, 19], "trajctori": 15, "show_midpoint": [15, 19, 21], "nicer": 15, "d": 15, "set_xlim": 15, "set_ylim": 15, "trajopt": [16, 17, 21], "direct_pl2pl": [16, 21], "find": [16, 17], "connect": [16, 17], "decis": [16, 17, 21], "compat": [16, 17, 21], "udp": [16, 17, 18], "t_0": 16, "sx": 16, "infti": 16, "infty_": 16, "sy": 16, "sz": 16, "fx": 16, "fy": 16, "fz": 16, "t_": [16, 17], "commerci": [16, 17], "solver": [16, 17], "snopt": [16, 17], "run": [16, 17], "snopt_7_c": [16, 17], "instal": [16, 17], "snopt7": [16, 17], "still": [16, 17], "uda": [16, 17], "pg": [16, 17], "nlopt": [16, 17], "slsqp": [16, 17], "minor": [16, 17], "modif": [16, 17], "pygmo": [16, 17], "pygmo_plugins_nonfre": [16, 17], "ppnf": [16, 17], "destin": 16, "5000": 16, "choos": 16, "km": [16, 21], "udp_nog": [16, 17], "pl": [16, 21], "plf": [16, 21], "t0_bound": [16, 21], "6700": [16, 21], "6800": [16, 21], "tof_bound": [16, 17, 21], "200": [16, 17, 21], "300": [16, 21], "mf_bound": [16, 17, 21], "vinf": [16, 21], "vinff": [16, 21], "mass_scal": [16, 21], "r_scale": [16, 21], "v_scale": [16, 21], "with_gradi": [16, 17, 21], "udp_g": [16, 17], "quick": 16, "look": [16, 22, 23], "generst": 16, "chromosom": 16, "test": 16, "prob_g": [16, 17], "pop_g": [16, 17], "popul": [16, 17], "timeit": 16, "champion_x": 16, "268": 16, "\u03bc": 16, "843": 16, "loop": [16, 18, 20], "dev": 16, "000": 16, "Then": 16, "finit": 16, "estimate_gradi": 16, "66": 16, "283": 16, "higher": 16, "estimate_gradient_h": 16, "48": 16, "374": 16, "seem": 16, "brainer": 16, "realiti": 16, "effect": 16, "albeit": 16, "rare": 16, "again": 16, "toler": [16, 17], "judg": 16, "individu": 16, "role": 16, "machineri": 16, "decid": 16, "outsid": 16, "new": 16, "propos": 16, "indivdu": 16, "better": [16, 21], "previou": 16, "champion": 16, "c_tol": [16, 17], "1e": [16, 17, 24], "snopt72": [16, 17], "libsnopt7_c": [16, 17], "dylib": [16, 17], "minor_vers": [16, 17], "screen_output": [16, 17], "set_integer_opt": [16, 17], "limit": [16, 17, 21], "20000": [16, 17], "set_numeric_opt": [16, 17], "algo": [16, 17], "guess": 16, "ten": 16, "save": 16, "criteria": 16, "evolv": [16, 17], "feasibility_f": [16, 17], "champion_f": [16, 17], "append": [16, 17], "els": [16, 18, 24], "nbest": 16, "max": 16, "worst": 16, "min": 16, "best_idx": 16, "argmax": 16, "valueerror": [16, 19], "evolve_vers": 16, "conda": 16, "feedstock_root": 16, "build_artifact": 16, "pygmo_plugins_nonfree_1712564791372": 16, "src": 16, "cpp": 16, "603": 16, "occur": 16, "while": [16, 21], "snopt7_c": 16, "caus": 16, "reason": 16, "declar": 16, "share": 16, "realli": 16, "text": [16, 17], "thrown": [16, 18], "553": 16, "show_gridpoint": [16, 17, 19, 21], "compar": [16, 18], "tqdm": [16, 17], "cpu_nog": [16, 17], "cpu_g": [16, 17], "fail_g": [16, 17], "fail_nog": [16, 17], "prob_nog": [16, 17], "pop_nog": [16, 17], "push_back": [16, 17], "record": 16, "median": [16, 17], "4e": [16, 17], "No": [16, 17], "ngradient": [16, 17], "09": 16, "29": 16, "8809e": 16, "5510e": 16, "64": 16, "hist": [16, 17], "bin": [16, 17], "densiti": [16, 17], "no_gradi": [16, 17], "xlim": [16, 17], "titl": [16, 17], "point2point": [16, 17], "seg": [16, 17], "occurr": [16, 17], "direct_point2point": [17, 21], "mainli": [17, 18], "academ": 17, "infomr": 17, "pipelin": 17, "sqrt": [17, 18], "500": 17, "1000": [17, 21], "get_x": 17, "06": 17, "13it": 17, "6576e": 17, "9454e": 17, "208": 17, "206": 17, "1232": 17, "fwd": 17, "bck": 17, "departur": [17, 21], "179517444840": 17, "1495978707": 17, "297": 17, "8469183169681": 17, "32763": 17, "161014866488": 17, "29919941431": 17, "26764": 17, "38529477": 17, "27626525": 17, "1496162174": 17, "1910896": 17, "189427009557562": 17, "2978": 17, "469066381742": 17, "82577960576987": 17, "999": 17, "possibli": 18, "etc": 18, "short": 18, "instanc": [18, 21], "everi": 18, "def": 18, "self": 18, "expect": 18, "minim": 18, "could": 18, "zero": 18, "eph_v": [18, 24], "get_mu_central_bodi": [18, 24], "get_mu_self": 18, "get_radiu": 18, "get_safe_radiu": 18, "elements_typ": 18, "get_extra_info": [18, 24], "rais": [18, 19], "notimplementederror": 18, "unspecifi": 18, "invok": 18, "deep": 18, "copi": 18, "failur": 18, "intersect": 18, "signatur": 18, "otherwis": 18, "demand": 18, "over": 18, "companion": 18, "behaviour": 18, "chang": 18, "who": 18, "len": 18, "extract": 18, "within": 18, "oppos": 18, "none": [18, 19, 21], "_keplerian": 18, "my_udpla": 18, "pla2": 18, "p2": 18, "__main__": 18, "0x7ff68b63d210": 18, "0x7f8f7241c350": 18, "main": [18, 20, 24], "averag": 18, "planetari": [18, 24], "fly": 18, "atmospher": 18, "circumv": 18, "radiat": 18, "environ": 18, "is_": 18, "kwarg": [19, 21], "axes3d": [19, 21], "one_orbital_period": 19, "int": [19, 21, 24], "index": 19, "factor": [19, 21], "greater": 19, "twice": 19, "grid": [19, 21], "angl": 19, "add_ballistic_arc": 19, "rv0": 19, "coordin": 19, "_sims_flanagan": 19, "midpoint": [19, 21], "gridpoint": 19, "ratio": [19, 21], "arrow": [19, 21], "backbon": 20, "lagrangian": 20, "routin": 20, "stm": 20, "assign": 20, "vy0": 20, "vz0": 20, "nor": 20, "simd": 20, "magic": 20, "atm": 20, "nevertheless": 20, "cenveni": 20, "compact": 20, "flatten": 20, "4pi": 20, "indirect": 21, "transcript": 21, "pontryagin": 21, "principl": 21, "nlp": 21, "49597871e": 21, "5956": 21, "93836634": 21, "6918317": 21, "79517445e": 21, "30469": 21, "73974383": 21, "13105": 21, "26440595": 21, "80": 21, "400": 21, "manipul": 21, "understand": 21, "approach": 21, "structur": 21, "u0x": 21, "u0i": 21, "u0z": 21, "By": 21, "intend": 21, "dimensiona": 21, "scale": 21, "newton": 21, "bound": 21, "distanc": 21, "pretti": 21, "6378000": 21, "7015800": 21, "000000001": 21, "00000261": 21, "01671123": 21, "531e": 21, "102": 21, "93768193": 21, "557501705361543": 21, "4731102699999923": 21, "26504441615": 21, "311214": 21, "144693227461": 21, "25247": 21, "38663": 21, "464067646026": 21, "29786": 21, "455213089437": 21, "5478": 21, "770160337178": 21, "0014639816731285052": 21, "42828000000000": 21, "3397000": 21, "3736700": 21, "0000000005": 21, "52371034": 21, "0933941": 21, "84969142": 21, "49": 21, "55953891": 21, "73": 21, "5031685": 21, "37723882345258": 21, "19": 21, "390197540000006": 21, "208040933903": 21, "7969": 21, "2003274684": 21, "4934082": 21, "5155331001": 21, "447283": 21, "1164": 21, "5634872088867": 21, "26297": 21, "05176199464": 21, "522": 21, "2478123931581": 21, "suitabl": 21, "converg": 21, "problemat": 21, "vsx": 21, "vsy": 21, "vsz": 21, "vfx": 21, "vfy": 21, "vfz": 21, "magnitud": 21, "humar": 21, "readabl": 21, "launch": [22, 23], "onlin": [22, 23], "thank": [22, 23], "infrastructur": [22, 23], "binder": [22, 23], "rocket": [22, 23], "icon": [22, 23], "top": [22, 23], "page": [22, 23], "featur": [22, 23], "latest": [22, 23], "stabl": [22, 23, 24], "might": [22, 23], "execut": [22, 23], "correctli": [22, 23], "gist": 22, "deal": 22, "notat": 22, "moot": 24, "elem": 24, "unkown": 24, "added_param": 24, "elem_typ": 24, "deafulet": 24, "keplrian": 24, "my_pla": 24, "velocti": 24, "ssd": 24, "nasa": 24, "gov": 24, "approx_po": 24, "html": 24, "thresh": 24, "theori": 24, "vsop_model": 24, "truncat": 24, "threshold": 24, "line1": 24, "line2": 24, "equinox": 24, "teme": 24, "33773u": 24, "97051l": 24, "23290": 24, "57931959": 24, "00002095": 24, "00000": 24, "65841": 24, "9991": 24, "33773": 24, "86": 24, "4068": 24, "33": 24, "1145": 24, "0009956": 24, "224": 24, "5064": 24, "135": 24, "5336": 24, "40043565770064": 24, "31": 24, "dimens": 24, "graviat": 24, "ref_fram": 24, "ob": 24, "spiceypi": 24, "readthedoc": 24, "io": 24, "eclipt": 24, "data_archiv": 24, "ftp": 24, "www": 24, "cosmo": 24, "esa": 24, "web": 24, "rise": 24, "440": 24, "preload": 24, "body_list": 24, "possibl": 24, "full": 24}, "objects": {"pykep": [[0, 0, 1, "", "e2f"], [0, 0, 1, "", "e2f_v"], [0, 0, 1, "", "e2m"], [0, 0, 1, "", "e2m_v"], [4, 1, 1, "", "el_type"], [5, 1, 1, "", "epoch"], [4, 0, 1, "", "eq2ic"], [4, 0, 1, "", "eq2par"], [0, 0, 1, "", "f2e"], [0, 0, 1, "", "f2e_v"], [0, 0, 1, "", "f2h"], [0, 0, 1, "", "f2h_v"], [0, 0, 1, "", "f2m"], [0, 0, 1, "", "f2m_v"], [0, 0, 1, "", "f2n"], [0, 0, 1, "", "f2n_v"], [0, 0, 1, "", "f2zeta"], [0, 0, 1, "", "f2zeta_v"], [0, 0, 1, "", "h2f"], [0, 0, 1, "", "h2f_v"], [0, 0, 1, "", "h2n"], [0, 0, 1, "", "h2n_v"], [4, 0, 1, "", "ic2eq"], [4, 0, 1, "", "ic2par"], [7, 1, 1, "", "lambert_problem"], [0, 0, 1, "", "m2e"], [0, 0, 1, "", "m2e_v"], [0, 0, 1, "", "m2f"], [0, 0, 1, "", "m2f_v"], [0, 0, 1, "", "n2f"], [0, 0, 1, "", "n2f_v"], [0, 0, 1, "", "n2h"], [0, 0, 1, "", "n2h_v"], [4, 0, 1, "", "par2eq"], [4, 0, 1, "", "par2ic"], [18, 1, 1, "", "planet"], [20, 0, 1, "", "propagate_lagrangian"], [20, 0, 1, "", "propagate_lagrangian_v"], [0, 0, 1, "", "zeta2f"], [0, 0, 1, "", "zeta2f_v"]], "pykep.epoch": [[5, 2, 1, "", "jd"], [5, 1, 1, "", "julian_type"], [5, 2, 1, "", "mjd"], [5, 2, 1, "", "mjd2000"], [5, 3, 1, "", "now"], [5, 1, 1, "", "string_format"]], "pykep.lambert_problem": [[7, 2, 1, "", "Nmax"], [7, 2, 1, "", "iters"], [7, 2, 1, "", "mu"], [7, 2, 1, "", "r0"], [7, 2, 1, "", "r1"], [7, 2, 1, "", "tof"], [7, 2, 1, "", "v0"], [7, 2, 1, "", "v1"], [7, 2, 1, "", "x"]], "pykep.leg": [[8, 1, 1, "", "sims_flanagan"]], "pykep.leg.sims_flanagan": [[8, 3, 1, "", "compute_mc_grad"], [8, 3, 1, "", "compute_mismatch_constraints"], [8, 3, 1, "", "compute_tc_grad"], [8, 3, 1, "", "compute_throttle_constraints"], [8, 2, 1, "", "cut"], [8, 2, 1, "", "isp"], [8, 2, 1, "", "max_thrust"], [8, 2, 1, "", "mf"], [8, 2, 1, "", "ms"], [8, 2, 1, "", "mu"], [8, 2, 1, "", "nseg"], [8, 2, 1, "", "nseg_bck"], [8, 2, 1, "", "nseg_fwd"], [8, 2, 1, "", "rvf"], [8, 2, 1, "", "rvs"], [8, 2, 1, "", "throttles"], [8, 2, 1, "", "tof"]], "pykep.planet": [[18, 3, 1, "", "elements"], [18, 3, 1, "", "eph"], [18, 3, 1, "", "eph_v"], [18, 3, 1, "", "extract"], [18, 3, 1, "", "get_extra_info"], [18, 3, 1, "", "get_mu_central_body"], [18, 3, 1, "", "get_mu_self"], [18, 3, 1, "", "get_name"], [18, 3, 1, "", "get_radius"], [18, 3, 1, "", "get_safe_radius"], [18, 3, 1, "", "is_"], [18, 3, 1, "", "period"]], "pykep.plot": [[19, 0, 1, "", "add_ballistic_arc"], [19, 0, 1, "", "add_lambert"], [19, 0, 1, "", "add_planet"], [19, 0, 1, "", "add_planet_orbit"], [19, 0, 1, "", "add_sf_leg"], [19, 0, 1, "", "add_solar_system"], [19, 0, 1, "", "add_sun"], [19, 0, 1, "", "make_3Daxis"]], "pykep.trajopt": [[21, 1, 1, "", "direct_pl2pl"], [21, 1, 1, "", "direct_point2point"]], "pykep.trajopt.direct_pl2pl": [[21, 3, 1, "", "plot"], [21, 3, 1, "", "pretty"]], "pykep.trajopt.direct_point2point": [[21, 3, 1, "", "plot"], [21, 3, 1, "", "pretty"]], "pykep.udpla": [[24, 1, 1, "", "de440s"], [24, 1, 1, "", "jpl_lp"], [24, 1, 1, "", "keplerian"], [24, 1, 1, "", "null_udpla"], [24, 1, 1, "", "spice"], [24, 1, 1, "", "tle"], [24, 1, 1, "", "vsop2013"]], "pykep.udpla.de440s": [[24, 3, 1, "", "body_list"], [24, 3, 1, "", "get_name"], [24, 3, 1, "", "kernel_file"]], "pykep.udpla.spice": [[24, 3, 1, "", "eph"], [24, 3, 1, "", "get_extra_info"], [24, 3, 1, "", "get_name"]], "pykep.udpla.tle": [[24, 3, 1, "", "eph"], [24, 3, 1, "", "eph_v"], [24, 3, 1, "", "get_extra_info"], [24, 3, 1, "", "get_mu_central_body"], [24, 3, 1, "", "get_name"]]}, "objtypes": {"0": "py:function", "1": "py:class", "2": "py:property", "3": "py:method"}, "objnames": {"0": ["py", "function", "Python function"], "1": ["py", "class", "Python class"], "2": ["py", "property", "Python property"], "3": ["py", "method", "Python method"]}, "titleterms": {"anomali": [0, 9], "convers": 0, "normal": 0, "vector": 0, "api": 1, "content": 1, "bibliographi": 2, "global": 3, "constant": 3, "pykep": [3, 6, 9], "orbit": 4, "element": 4, "epoch": [5, 10], "class": [5, 7, 18], "welcom": 6, "": 6, "document": 6, "main": 6, "tutori": 6, "lambert": [7, 13], "interplanetari": 8, "transfer": [8, 16, 17], "leg": [8, 13, 14, 15], "The": [9, 10, 11, 15, 19], "variou": 9, "julian": 10, "date": 10, "datetim": 10, "interoper": 10, "math": 10, "leap": 10, "second": 10, "gregorian": 10, "interfac": 11, "spice": 11, "jpl": 11, "de": 11, "eph": 11, "440": 11, "ephemerid": [11, 12], "plot": [13, 19], "3d": 13, "planet": [13, 16, 18, 19, 24], "arc": 13, "sim": [13, 15], "flanagan": [13, 15], "trajectori": [13, 15, 19, 21, 23], "lagrang": 14, "propag": [14, 20], "comput": 14, "overal": 14, "stm": 14, "multi": 14, "impuls": 14, "low": [16, 17], "thrust": [16, 17], "analyt": 16, "perform": 16, "gradient": 16, "solv": 16, "graident": 16, "v": 16, "point": 17, "modul": 19, "common": 19, "util": 19, "numer": 20, "keplerian": 20, "dynam": 20, "optim": [21, 23], "direct": 21, "basic": 22, "list": 24, "user": 24, "implement": 24, "udpla": 24}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinxcontrib.bibtex": 9, "sphinx": 57}, "alltitles": {"Anomalies Conversions": [[0, "anomalies-conversions"]], "Normal": [[0, "normal"]], "Vectorized": [[0, "vectorized"]], "API": [[1, "api"]], "Contents": [[1, null]], "Bibliography": [[2, "bibliography"]], "Global constants": [[3, "global-constants"]], "Pykep global constants": [[3, "id1"]], "Orbital Elements": [[4, "orbital-elements"]], "Epoch class": [[5, "epoch-class"]], "Welcome to pykep\u2019s documentation!": [[6, "welcome-to-pykep-s-documentation"]], "Main": [[6, null]], "Tutorials": [[6, null]], "Lambert class": [[7, "lambert-class"]], "Interplanetary transfer legs": [[8, "interplanetary-transfer-legs"]], "The various anomalies in pykep": [[9, "the-various-anomalies-in-pykep"]], "Epochs and Julian Dates": [[10, "epochs-and-julian-dates"]], "Julian dates": [[10, "julian-dates"]], "Datetime interoperability": [[10, "datetime-interoperability"]], "The epoch math": [[10, "the-epoch-math"]], "Leap seconds and Gregorian dates.": [[10, "leap-seconds-and-gregorian-dates"]], "Interfacing to SPICE and JPL DE ephs": [[11, "interfacing-to-spice-and-jpl-de-ephs"]], "": [[11, "id1"]], "The DE 440 JPL Ephemerides": [[11, "the-de-440-jpl-ephemerides"]], "Ephemerides": [[12, "ephemerides"]], "Plotting": [[13, "plotting"]], "3D Plots": [[13, "d-plots"]], "Plot planets": [[13, "plot-planets"]], "Plot a Lambert arc": [[13, "plot-a-lambert-arc"]], "Plot a Sims-Flanagan trajectory leg.": [[13, "plot-a-sims-flanagan-trajectory-leg"]], "Lagrange Propagation": [[14, "lagrange-propagation"]], "Computing the overall STM for multi-impulsive legs": [[14, "computing-the-overall-stm-for-multi-impulsive-legs"]], "The Sims-Flanagan trajectory leg": [[15, "the-sims-flanagan-trajectory-leg"]], "Planet to planet low-thrust transfer": [[16, "planet-to-planet-low-thrust-transfer"]], "Analytical performances of the analytical gradient": [[16, "analytical-performances-of-the-analytical-gradient"]], "Solving the low-thrust transfer": [[16, "solving-the-low-thrust-transfer"]], "Graident vs no gradient": [[16, "graident-vs-no-gradient"]], "Point to point low-thrust transfer": [[17, "point-to-point-low-thrust-transfer"]], "Planet class": [[18, "planet-class"]], "The plot module": [[19, "the-plot-module"]], "Common utils": [[19, "common-utils"]], "Plotting planets": [[19, "plotting-planets"]], "Plotting trajectories": [[19, "plotting-trajectories"]], "Numerical Propagation": [[20, "numerical-propagation"]], "Keplerian dynamics": [[20, "keplerian-dynamics"]], "Trajectory Optimization": [[21, "trajectory-optimization"], [23, "trajectory-optimization"]], "Direct": [[21, "direct"]], "Basic": [[22, "basic"]], "List of user implemented planets (UDPLAs)": [[24, "list-of-user-implemented-planets-udplas"]]}, "indexentries": {"e2f() (in module pykep)": [[0, "pykep.e2f"]], "e2f_v() (in module pykep)": [[0, "pykep.e2f_v"]], "e2m() (in module pykep)": [[0, "pykep.e2m"]], "e2m_v() (in module pykep)": [[0, "pykep.e2m_v"]], "f2e() (in module pykep)": [[0, "pykep.f2e"]], "f2e_v() (in module pykep)": [[0, "pykep.f2e_v"]], "f2h() (in module pykep)": [[0, "pykep.f2h"]], "f2h_v() (in module pykep)": [[0, "pykep.f2h_v"]], "f2m() (in module pykep)": [[0, "pykep.f2m"]], "f2m_v() (in module pykep)": [[0, "pykep.f2m_v"]], "f2n() (in module pykep)": [[0, "pykep.f2n"]], "f2n_v() (in module pykep)": [[0, "pykep.f2n_v"]], "f2zeta() (in module pykep)": [[0, "pykep.f2zeta"]], "f2zeta_v() (in module pykep)": [[0, "pykep.f2zeta_v"]], "h2f() (in module pykep)": [[0, "pykep.h2f"]], "h2f_v() (in module pykep)": [[0, "pykep.h2f_v"]], "h2n() (in module pykep)": [[0, "pykep.h2n"]], "h2n_v() (in module pykep)": [[0, "pykep.h2n_v"]], "m2e() (in module pykep)": [[0, "pykep.m2e"]], "m2e_v() (in module pykep)": [[0, "pykep.m2e_v"]], "m2f() (in module pykep)": [[0, "pykep.m2f"]], "m2f_v() (in module pykep)": [[0, "pykep.m2f_v"]], "n2f() (in module pykep)": [[0, "pykep.n2f"]], "n2f_v() (in module pykep)": [[0, "pykep.n2f_v"]], "n2h() (in module pykep)": [[0, "pykep.n2h"]], "n2h_v() (in module pykep)": [[0, "pykep.n2h_v"]], "zeta2f() (in module pykep)": [[0, "pykep.zeta2f"]], "zeta2f_v() (in module pykep)": [[0, "pykep.zeta2f_v"]], "el_type (class in pykep)": [[4, "pykep.el_type"]], "eq2ic() (in module pykep)": [[4, "pykep.eq2ic"]], "eq2par() (in module pykep)": [[4, "pykep.eq2par"]], "ic2eq() (in module pykep)": [[4, "pykep.ic2eq"]], "ic2par() (in module pykep)": [[4, "pykep.ic2par"]], "par2eq() (in module pykep)": [[4, "pykep.par2eq"]], "par2ic() (in module pykep)": [[4, "pykep.par2ic"]], "epoch (class in pykep)": [[5, "pykep.epoch"]], "epoch.julian_type (class in pykep)": [[5, "pykep.epoch.julian_type"]], "epoch.string_format (class in pykep)": [[5, "pykep.epoch.string_format"]], "jd (pykep.epoch property)": [[5, "pykep.epoch.jd"]], "mjd (pykep.epoch property)": [[5, "pykep.epoch.mjd"]], "mjd2000 (pykep.epoch property)": [[5, "pykep.epoch.mjd2000"]], "now() (pykep.epoch static method)": [[5, "pykep.epoch.now"]], "nmax (pykep.lambert_problem property)": [[7, "pykep.lambert_problem.Nmax"]], "iters (pykep.lambert_problem property)": [[7, "pykep.lambert_problem.iters"]], "lambert_problem (class in pykep)": [[7, "pykep.lambert_problem"]], "mu (pykep.lambert_problem property)": [[7, "pykep.lambert_problem.mu"]], "r0 (pykep.lambert_problem property)": [[7, "pykep.lambert_problem.r0"]], "r1 (pykep.lambert_problem property)": [[7, "pykep.lambert_problem.r1"]], "tof (pykep.lambert_problem property)": [[7, "pykep.lambert_problem.tof"]], "v0 (pykep.lambert_problem property)": [[7, "pykep.lambert_problem.v0"]], "v1 (pykep.lambert_problem property)": [[7, "pykep.lambert_problem.v1"]], "x (pykep.lambert_problem property)": [[7, "pykep.lambert_problem.x"]], "compute_mc_grad() (pykep.leg.sims_flanagan method)": [[8, "pykep.leg.sims_flanagan.compute_mc_grad"]], "compute_mismatch_constraints() (pykep.leg.sims_flanagan method)": [[8, "pykep.leg.sims_flanagan.compute_mismatch_constraints"]], "compute_tc_grad() (pykep.leg.sims_flanagan method)": [[8, "pykep.leg.sims_flanagan.compute_tc_grad"]], "compute_throttle_constraints() (pykep.leg.sims_flanagan method)": [[8, "pykep.leg.sims_flanagan.compute_throttle_constraints"]], "cut (pykep.leg.sims_flanagan property)": [[8, "pykep.leg.sims_flanagan.cut"]], "isp (pykep.leg.sims_flanagan property)": [[8, "pykep.leg.sims_flanagan.isp"]], "max_thrust (pykep.leg.sims_flanagan property)": [[8, "pykep.leg.sims_flanagan.max_thrust"]], "mf (pykep.leg.sims_flanagan property)": [[8, "pykep.leg.sims_flanagan.mf"]], "ms (pykep.leg.sims_flanagan property)": [[8, "pykep.leg.sims_flanagan.ms"]], "mu (pykep.leg.sims_flanagan property)": [[8, "pykep.leg.sims_flanagan.mu"]], "nseg (pykep.leg.sims_flanagan property)": [[8, "pykep.leg.sims_flanagan.nseg"]], "nseg_bck (pykep.leg.sims_flanagan property)": [[8, "pykep.leg.sims_flanagan.nseg_bck"]], "nseg_fwd (pykep.leg.sims_flanagan property)": [[8, "pykep.leg.sims_flanagan.nseg_fwd"]], "rvf (pykep.leg.sims_flanagan property)": [[8, "pykep.leg.sims_flanagan.rvf"]], "rvs (pykep.leg.sims_flanagan property)": [[8, "pykep.leg.sims_flanagan.rvs"]], "sims_flanagan (class in pykep.leg)": [[8, "pykep.leg.sims_flanagan"]], "throttles (pykep.leg.sims_flanagan property)": [[8, "pykep.leg.sims_flanagan.throttles"]], "tof (pykep.leg.sims_flanagan property)": [[8, "pykep.leg.sims_flanagan.tof"]], "elements() (pykep.planet method)": [[18, "pykep.planet.elements"]], "eph() (pykep.planet method)": [[18, "pykep.planet.eph"]], "eph_v() (pykep.planet method)": [[18, "pykep.planet.eph_v"]], "extract() (pykep.planet method)": [[18, "pykep.planet.extract"]], "get_extra_info() (pykep.planet method)": [[18, "pykep.planet.get_extra_info"]], "get_mu_central_body() (pykep.planet method)": [[18, "pykep.planet.get_mu_central_body"]], "get_mu_self() (pykep.planet method)": [[18, "pykep.planet.get_mu_self"]], "get_name() (pykep.planet method)": [[18, "pykep.planet.get_name"]], "get_radius() (pykep.planet method)": [[18, "pykep.planet.get_radius"]], "get_safe_radius() (pykep.planet method)": [[18, "pykep.planet.get_safe_radius"]], "is_() (pykep.planet method)": [[18, "pykep.planet.is_"]], "period() (pykep.planet method)": [[18, "pykep.planet.period"]], "planet (class in pykep)": [[18, "pykep.planet"]], "add_ballistic_arc() (in module pykep.plot)": [[19, "pykep.plot.add_ballistic_arc"]], "add_lambert() (in module pykep.plot)": [[19, "pykep.plot.add_lambert"]], "add_planet() (in module pykep.plot)": [[19, "pykep.plot.add_planet"]], "add_planet_orbit() (in module pykep.plot)": [[19, "pykep.plot.add_planet_orbit"]], "add_sf_leg() (in module pykep.plot)": [[19, "pykep.plot.add_sf_leg"]], "add_solar_system() (in module pykep.plot)": [[19, "pykep.plot.add_solar_system"]], "add_sun() (in module pykep.plot)": [[19, "pykep.plot.add_sun"]], "make_3daxis() (in module pykep.plot)": [[19, "pykep.plot.make_3Daxis"]], "propagate_lagrangian() (in module pykep)": [[20, "pykep.propagate_lagrangian"]], "propagate_lagrangian_v() (in module pykep)": [[20, "pykep.propagate_lagrangian_v"]], "direct_pl2pl (class in pykep.trajopt)": [[21, "pykep.trajopt.direct_pl2pl"]], "direct_point2point (class in pykep.trajopt)": [[21, "pykep.trajopt.direct_point2point"]], "plot() (pykep.trajopt.direct_pl2pl method)": [[21, "pykep.trajopt.direct_pl2pl.plot"]], "plot() (pykep.trajopt.direct_point2point method)": [[21, "pykep.trajopt.direct_point2point.plot"]], "pretty() (pykep.trajopt.direct_pl2pl method)": [[21, "pykep.trajopt.direct_pl2pl.pretty"]], "pretty() (pykep.trajopt.direct_point2point method)": [[21, "pykep.trajopt.direct_point2point.pretty"]], "body_list() (pykep.udpla.de440s method)": [[24, "pykep.udpla.de440s.body_list"]], "de440s (class in pykep.udpla)": [[24, "pykep.udpla.de440s"]], "eph() (pykep.udpla.spice method)": [[24, "pykep.udpla.spice.eph"]], "eph() (pykep.udpla.tle method)": [[24, "pykep.udpla.tle.eph"]], "eph_v() (pykep.udpla.tle method)": [[24, "pykep.udpla.tle.eph_v"]], "get_extra_info() (pykep.udpla.spice method)": [[24, "pykep.udpla.spice.get_extra_info"]], "get_extra_info() (pykep.udpla.tle method)": [[24, "pykep.udpla.tle.get_extra_info"]], "get_mu_central_body() (pykep.udpla.tle method)": [[24, "pykep.udpla.tle.get_mu_central_body"]], "get_name() (pykep.udpla.de440s method)": [[24, "pykep.udpla.de440s.get_name"]], "get_name() (pykep.udpla.spice method)": [[24, "pykep.udpla.spice.get_name"]], "get_name() (pykep.udpla.tle method)": [[24, "pykep.udpla.tle.get_name"]], "jpl_lp (class in pykep.udpla)": [[24, "pykep.udpla.jpl_lp"]], "keplerian (class in pykep.udpla)": [[24, "pykep.udpla.keplerian"]], "kernel_file() (pykep.udpla.de440s method)": [[24, "pykep.udpla.de440s.kernel_file"]], "null_udpla (class in pykep.udpla)": [[24, "pykep.udpla.null_udpla"]], "spice (class in pykep.udpla)": [[24, "pykep.udpla.spice"]], "tle (class in pykep.udpla)": [[24, "pykep.udpla.tle"]], "vsop2013 (class in pykep.udpla)": [[24, "pykep.udpla.vsop2013"]]}}) \ No newline at end of file diff --git a/trajopt.html b/trajopt.html index 3d2aeae..074c609 100644 --- a/trajopt.html +++ b/trajopt.html @@ -392,6 +392,11 @@

    Contents

  • direct_point2point.pretty()
  • +
  • direct_pl2pl +
  • @@ -427,7 +432,7 @@

    Direct
    z = [mf, throttles, tof]
     
    -

    where throttles is a vector of throttles structures as [u0x, u0y,u0z, …]

    +

    where throttles is a vector of throttles structures as [u0x, u0y,u0z, …]. By throttles we intend non dimensiona thrust levels in [0,1].

    Initializes the direct_point2point instance with given parameters.

    Args:

    rvs (list): Initial position and velocity vectors. Defaults to two vectors scaled by AU and Earth’s velocity.

    @@ -452,7 +457,7 @@

    Direct

    Plots the trajectory leg 3D axes.

    Args:

    x (list): The decision vector containing final mass, thrust direction, and time of flight.

    -

    ax (mpl_toolkits.mplot3d.axes3d.Axes3D, optional): The 3D axis to plot on. Defaults to None.

    +

    ax (mpl_toolkits.mplot3d.axes3d.Axes3D, optional): The 3D axis to plot on. Defaults to None.

    units (float, optional): The unit scale for the plot. Defaults to _pk.AU.

    show_midpoints (bool, optional): Whether to show midpoints on the trajectory. Defaults to False.

    show_gridpoints (bool, optional): Whether to show grid points on the trajectory. Defaults to False.

    @@ -461,7 +466,7 @@

    Directarrow_length_ratio (float, optional): Arrow length ratio for the throttle vectors. Defaults to 0.05.

    **kwargs: Additional keyword arguments for the plot.

    -
    Returns:

    mpl_toolkits.mplot3d.axes3d.Axes3D: The 3D axis with the plotted trajectory.

    +
    Returns:

    mpl_toolkits.mplot3d.axes3d.Axes3D: The 3D axis with the plotted trajectory.

    @@ -478,6 +483,73 @@

    Direct +
    +
    +class pykep.trajopt.direct_pl2pl(pls=Planet name: earth - jpl_lp C++ class name: kep3::udpla::jpl_lp  mu central body (-1 if not defined): 1.32712440018e+20 mu body (-1 if not defined): 398600441800000 radius body (-1 if not defined): 6378000 safe body radius (-1 if not defined): 7015800.000000001  Extra info:  Low-precision planet elements:  Semi major axis (AU): 1.00000261 Eccentricity: 0.01671123 Inclination (deg.): -1.531e-05 Big Omega (deg.): 0 Small omega (deg.): 102.93768193 True anomly (deg.): -2.557501705361543 Mean anomly (deg.): -2.4731102699999923 Elements reference epoch (MJD2000): 0 Elements reference epoch (date): 2000-01-01T00:00:00.000000 r at ref. = [-26504441615.311214, 144693227461.25247, -38663.464067646026] v at ref. = [-29786.455213089437, -5478.770160337178, 0.0014639816731285052] , plf=Planet name: mars - jpl_lp C++ class name: kep3::udpla::jpl_lp  mu central body (-1 if not defined): 1.32712440018e+20 mu body (-1 if not defined): 42828000000000 radius body (-1 if not defined): 3397000 safe body radius (-1 if not defined): 3736700.0000000005  Extra info:  Low-precision planet elements:  Semi major axis (AU): 1.52371034 Eccentricity: 0.0933941 Inclination (deg.): 1.84969142 Big Omega (deg.): 49.55953891 Small omega (deg.): -73.5031685 True anomly (deg.): 23.37723882345258 Mean anomly (deg.): 19.390197540000006 Elements reference epoch (MJD2000): 0 Elements reference epoch (date): 2000-01-01T00:00:00.000000 r at ref. = [208040933903.7969, -2003274684.4934082, -5155331001.447283] v at ref. = [1164.5634872088867, 26297.05176199464, 522.2478123931581] , ms=1500, mu=1.32712440018e+20, max_thrust=0.12, isp=3000, t0_bounds=[6700.0, 6800.0], tof_bounds=[200.0, 300.0], mf_bounds=[1300.0, 1500.0], vinfs=3.0, vinff=0.0, nseg=10, cut=0.6, mass_scaling=1500, r_scaling=149597870700.0, v_scaling=29784.691831696804, with_gradient=True)#
    +

    Represents the optimal low-thrust transfer between two planet using a direct method.

    +

    This problem works internally using the sims_flanagan and manipulates its initial and final states, as well as its transfer time T, final mass mf +and the controls as to link the two planets with a low-thrust trajectory.

    +

    The particular transcription used is suitable only for few revolutions, after which convergence will start to be problematic.

    +

    The decision vector is:

    +
    z = [t0, mf, Vsx, Vsy, Vsz, Vfx, Vfy, Vfz, throttles, tof] - all in S.I. units except t0 and tof in days
    +
    +
    +

    where throttles is a vector of throttles structured as [u0x, u0y,u0z, …]. By throttles we intend non dimensiona thrust levels in [0,1].

    +

    Initializes the direct_pl2pl instance with given parameters.

    +
    +
    Args:

    pls (planet): Initial planet. Defaults to jpl_lp Earth.

    +

    plf (planet): Final planet. Defaults to jpl_lp Mars.

    +

    ms (float): Initial spacecraft mass in kg. Defaults to 1000 kg.

    +

    mu (float): Gravitational parameter, default is for the Sun (MU_SUN).

    +

    max_thrust (float): Maximum thrust in Newtons. Defaults to 0.12 N.

    +

    isp (float): Specific impulse in seconds. Defaults to 3000 s.

    +

    t0_bounds (list): Bounds for departure epoch in MJD2000. Defaults to [6700.0, 6800.0].

    +

    tof_bounds (list): Bounds for time of flight in days. Defaults to [200, 300] days.

    +

    mf_bounds (list): Bounds for final mass in kg. Defaults to [1300.0, 1500.0] kg.

    +

    vinfs (float): Allowed magnitude for the departure’s relative velocity in km/s. Defaults to 3.

    +

    vinff (float): Allowed magnitude for the arrival’s relative velocity in km/s. Defaults to 0.

    +

    nseg (int): Number of segments for the trajectory. Defaults to 10.

    +

    cut (float): Cut parameter for the sims_flanagan. Defaults to 0.6.

    +

    mass_scaling (float): Scaling factor for mass (used to scale constraints). Defaults to 1500.

    +

    r_scaling (float): Scaling factor for distance, (used to scale constraints). Defaults AU (AU).

    +

    v_scaling (float): Scaling factor for velocity (used to scale constraints). Defaults the Earth’s velocity (EARTH_VELOCITY).

    +

    with_gradient (bool): Indicates if gradient information should be used. Defaults True.

    +
    +
    +
    +
    +plot(x, ax=None, units=149597870700.0, show_midpoints=False, show_gridpoints=False, show_throttles=False, length=0.1, arrow_length_ratio=0.05, **kwargs)#
    +

    Plots the trajectory leg 3D axes. +Args:

    +
    +

    x (list): The decision vector containing final mass, thrust direction, and time of flight. +ax (mpl_toolkits.mplot3d.axes3d.Axes3D, optional): The 3D axis to plot on. Defaults to None. +units (float, optional): The unit scale for the plot. Defaults to _pk.AU. +show_midpoints (bool, optional): Whether to show midpoints on the trajectory. Defaults to False. +show_gridpoints (bool, optional): Whether to show grid points on the trajectory. Defaults to False. +show_throttles (bool, optional): Whether to show throttle vectors. Defaults to False. +length (float, optional): Length of the throttle vectors. Defaults to 0.1. +arrow_length_ratio (float, optional): Arrow length ratio for the throttle vectors. Defaults to 0.05. +**kwargs: Additional keyword arguments for the plot.

    +
    +
    +
    Returns:

    mpl_toolkits.mplot3d.axes3d.Axes3D: The 3D axis with the plotted trajectory.

    +
    +
    +
    + +
    +
    +pretty(x)#
    +

    Prints a humar readable representation of the transfer.

    +
    +
    Args:

    x (list): The decision vector containing final mass, thrust direction, and time of flight.

    +
    +
    +
    + +
    + @@ -532,6 +604,11 @@

    Directdirect_point2point.pretty() +
  • direct_pl2pl +