{ "cells": [ { "cell_type": "markdown", "id": "eef5d8cd", "metadata": {}, "source": [ "# Cassini 1 (MGA transfer) optimization with PyGMO" ] }, { "cell_type": "markdown", "id": "ea323ff5", "metadata": {}, "source": [ "Copyright (c) 2010-2022, Delft University of Technology. All rights reserved. This file is part of the Tudat. Redistribution and use in source and binary forms, with or without modification, are permitted exclusively under the terms of the Modified BSD license. You should have received a copy of the license with this file. If not, please or visit: http://tudat.tudelft.nl/LICENSE." ] }, { "cell_type": "markdown", "id": "8fc5e938", "metadata": { "tags": [] }, "source": [ "## Objectives \n", "\n", "This example illustrates the usage of PyGMO to optimize an interplanetary transfer trajectory simulated using the multiple gravity assist (MGA) module of Tudat. The trajectory optimization of the Cassini 1 problem, which corresponds to a simplified version of the real Cassini mission, is here solved. The Cassini 1 problem departs from the edge of Earth's SOI, executes gravity assists at Venus, Venus, Earth, and Jupiter, and finally is inserted into an orbit around Saturn with eccentricity $e = 0.98$ and semi-major axis $a = 1.0895e8 / 0.02$ km. Each transfer leg (i.e. between each two planets) is considered to be unpowered, with $\\Delta V$ s applied only during the gravity assists. Hence, the transfer is modeled as an [MGA with unpowered unperturbed legs](https://py.api.tudat.space/en/latest/transfer_trajectory.html#tudatpy.trajectory_design.transfer_trajectory.mga_settings_unpowered_unperturbed_legs).\n", "\n", "The 6 design variables are:\n", "\n", "* Departure time\n", "* Time of flight between consecutive planets (5 variables)\n", "\n", "The only objective function is the $\\Delta V$, which is minimized.\n", "\n", "The Cassini 1 problem (among others) has been proposed and solved by ESA Advanced Concepts Team [(Vinkó et al, 2007)](https://www.esa.int/gsp/ACT/doc/MAD/pub/ACT-RPR-MAD-2007-BenchmarkingDifferentGlobalOptimisationTechniques.pdf). In this and other papers, various global optimisation problems related to spacecraft trajectory design are described and solved.\n", "\n", "PyGMO is used in this example. It is assumed that the reader of this tutorial is already familiar with the content of [this basic PyGMO tutorial](https://docs.tudat.space/en/latest/_src_advanced_topics/optimization_pygmo.html#about-pygmo)." ] }, { "cell_type": "markdown", "id": "5c58fdd3", "metadata": {}, "source": [ "## Import statements\n", "\n", "The required import statements are made here, at the very beginning. Some standard modules are first loaded (numpy, matplotlib and typing). Then, the different modules of tudatpy that will be used are imported. Finally, in this example, we also need to import the pygmo library." ] }, { "cell_type": "code", "execution_count": 1, "id": "c1436998ae0802b3", "metadata": { "execution": { "iopub.execute_input": "2025-09-16T09:13:13.680264Z", "iopub.status.busy": "2025-09-16T09:13:13.680078Z", "iopub.status.idle": "2025-09-16T09:13:14.457006Z", "shell.execute_reply": "2025-09-16T09:13:14.456112Z" } }, "outputs": [], "source": [ "# General imports\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from typing import List, Tuple\n", "\n", "# Tudat imports\n", "import tudatpy\n", "from tudatpy.trajectory_design import transfer_trajectory\n", "from tudatpy import constants\n", "from tudatpy.dynamics import environment_setup\n", "from tudatpy.util import result2array\n", "from tudatpy.astro.time_representation import DateTime\n", "\n", "# Pygmo imports\n", "import pygmo as pg" ] }, { "cell_type": "markdown", "id": "5e8479f7", "metadata": {}, "source": [ "## Helpers" ] }, { "cell_type": "markdown", "id": "1ae06952", "metadata": {}, "source": [ "First of all, let us define a helper function which is used throughout this example." ] }, { "cell_type": "markdown", "id": "9693fb04", "metadata": {}, "source": [ "The design variables in the current optimization problem are the departure time and the time of flight between transfer nodes. However, to evaluate an MGA trajectory in Tudat it is necessary to specify a different set of parameters: node times, node free parameters, leg free parameters. This function converts a vector of design variables to the parameters which are used as input to the MGA trajectory object.\n", "\n", "The node times are easily computed based on the departure time and the time of flight between nodes. Since an MGA transfer with unpowered legs is used, no node and leg free parameters are required; thus, these are defined as empty lists." ] }, { "cell_type": "code", "execution_count": 2, "id": "ce689221", "metadata": { "execution": { "iopub.execute_input": "2025-09-16T09:13:14.459070Z", "iopub.status.busy": "2025-09-16T09:13:14.458819Z", "iopub.status.idle": "2025-09-16T09:13:14.465417Z", "shell.execute_reply": "2025-09-16T09:13:14.464290Z" }, "tags": [] }, "outputs": [], "source": [ "def convert_trajectory_parameters(\n", " transfer_trajectory_object: tudatpy.trajectory_design.transfer_trajectory.TransferTrajectory,\n", " trajectory_parameters: List[float],\n", ") -> Tuple[List[float], List[List[float]], List[List[float]]]:\n", "\n", " # Declare lists of transfer parameters\n", " node_times = list()\n", " leg_free_parameters = list()\n", " node_free_parameters = list()\n", "\n", " # Extract from trajectory parameters the lists with each type of parameters\n", " departure_time = trajectory_parameters[0]\n", " times_of_flight_per_leg = trajectory_parameters[1:]\n", "\n", " # Get node times\n", " # Node time for the initial node: departure time\n", " node_times.append(departure_time)\n", " # None times for other nodes: node time of the previous node plus time of flight\n", " accumulated_time = departure_time\n", " for i in range(0, transfer_trajectory_object.number_of_nodes - 1):\n", " accumulated_time += times_of_flight_per_leg[i]\n", " node_times.append(accumulated_time)\n", "\n", " # Get leg free parameters and node free parameters: one empty list per leg\n", " for i in range(transfer_trajectory_object.number_of_legs):\n", " leg_free_parameters.append([])\n", " # One empty array for each node\n", " for i in range(transfer_trajectory_object.number_of_nodes):\n", " node_free_parameters.append([])\n", "\n", " return node_times, leg_free_parameters, node_free_parameters" ] }, { "cell_type": "markdown", "id": "c7dfabde", "metadata": {}, "source": [ "## Optimisation problem" ] }, { "cell_type": "markdown", "id": "becba83c", "metadata": {}, "source": [ "The core of the optimization process is realized by PyGMO, which requires the definition of a problem class.\n", "This definition has to be done in a class that is compatible with what the PyGMO library expects from a User Defined Problem (UDP). See [this page](https://esa.github.io/pygmo2/tutorials/coding_udp_simple.html) from the PyGMO's documentation as a reference. In this example, this class is called `TransferTrajectoryProblem`.\n", "\n", "There are four mandatory methods that must be implemented in the class:\n", "\n", "* `__init__()`: This is the constructor for the PyGMO problem class. It is used to save all the variables required to setup the evaluation of the transfer trajectory.\n", "* `get_number_of_parameters(self)`: Returns the number of optimized parameters. In this case, that is the same as the number of flyby bodies (i.e. 6).\n", "* `get_bounds(self)`: Returns the bounds for each optimized parameter. These are provided as an input to `__init__()`. Their values are defined later in this example.\n", "* `fitness(self, x)`: Returns the cost associated with a vector of design parameters. Here, the fitness is the $\\Delta V$ required to execute the transfer." ] }, { "cell_type": "code", "execution_count": 3, "id": "dcbb0f1a", "metadata": { "execution": { "iopub.execute_input": "2025-09-16T09:13:14.467895Z", "iopub.status.busy": "2025-09-16T09:13:14.467707Z", "iopub.status.idle": "2025-09-16T09:13:14.475231Z", "shell.execute_reply": "2025-09-16T09:13:14.474784Z" } }, "outputs": [], "source": [ "###########################################################################\n", "# CREATE PROBLEM CLASS ####################################################\n", "###########################################################################\n", "\n", "\n", "class TransferTrajectoryProblem:\n", "\n", " def __init__(\n", " self,\n", " transfer_trajectory_object: tudatpy.trajectory_design.transfer_trajectory.TransferTrajectory,\n", " departure_date_lb: float, # Lower bound on departure date\n", " departure_date_ub: float, # Upper bound on departure date\n", " legs_tof_lb: np.ndarray, # Lower bounds of each leg's time of flight\n", " legs_tof_ub: np.ndarray,\n", " ): # Upper bounds of each leg's time of flight\n", " \"\"\"\n", " Class constructor.\n", " \"\"\"\n", "\n", " self.departure_date_lb = departure_date_lb\n", " self.departure_date_ub = departure_date_ub\n", " self.legs_tof_lb = legs_tof_lb\n", " self.legs_tof_ub = legs_tof_ub\n", "\n", " # Save the transfer trajectory object as a lambda function\n", " # PyGMO internally pickles its user defined objects and some objects cannot be pickled properly without using lambda functions.\n", " self.transfer_trajectory_function = lambda: transfer_trajectory_object\n", "\n", " def get_bounds(self) -> tuple:\n", " \"\"\"\n", " Returns the boundaries of the decision variables.\n", " \"\"\"\n", "\n", " # Retrieve transfer trajectory object\n", " transfer_trajectory_obj = self.transfer_trajectory_function()\n", "\n", " number_of_parameters = self.get_number_of_parameters()\n", "\n", " # Define lists to save lower and upper bounds of design parameters\n", " lower_bound = list(np.empty(number_of_parameters))\n", " upper_bound = list(np.empty(number_of_parameters))\n", "\n", " # Define boundaries on departure date\n", " lower_bound[0] = self.departure_date_lb\n", " upper_bound[0] = self.departure_date_ub\n", "\n", " # Define boundaries on time of flight between bodies ['Earth', 'Venus', 'Venus', 'Earth', 'Jupiter', 'Saturn']\n", " for i in range(0, transfer_trajectory_obj.number_of_legs):\n", " lower_bound[i + 1] = self.legs_tof_lb[i]\n", " upper_bound[i + 1] = self.legs_tof_ub[i]\n", "\n", " bounds = (lower_bound, upper_bound)\n", " return bounds\n", "\n", " def get_number_of_parameters(self):\n", " \"\"\"\n", " Returns number of parameters that will be optimized\n", " \"\"\"\n", "\n", " # Retrieve transfer trajectory object\n", " transfer_trajectory_obj = self.transfer_trajectory_function()\n", "\n", " # Get number of parameters: it's the number of nodes (time at the first node, and time of flight to reach each subsequent node)\n", " number_of_parameters = transfer_trajectory_obj.number_of_nodes\n", "\n", " return number_of_parameters\n", "\n", " def fitness(self, trajectory_parameters: List[float]) -> list:\n", " \"\"\"\n", " Returns delta V of the transfer trajectory object with the given set of trajectory parameters\n", " \"\"\"\n", "\n", " # Retrieve transfer trajectory object\n", " transfer_trajectory = self.transfer_trajectory_function()\n", "\n", " # Convert list of trajectory parameters to appropriate format\n", " node_times, leg_free_parameters, node_free_parameters = (\n", " convert_trajectory_parameters(transfer_trajectory, trajectory_parameters)\n", " )\n", "\n", " # Evaluate trajectory\n", " try:\n", " transfer_trajectory.evaluate(\n", " node_times, leg_free_parameters, node_free_parameters\n", " )\n", " delta_v = transfer_trajectory.delta_v\n", "\n", " # If there was some error in the evaluation of the trajectory, use a very large deltaV as penalty\n", " except:\n", " delta_v = 1e10\n", "\n", " return [delta_v]" ] }, { "cell_type": "markdown", "id": "803afd53", "metadata": {}, "source": [ "## Simulation Setup " ] }, { "cell_type": "markdown", "id": "de4f38b2", "metadata": {}, "source": [ "Before running the optimisation, it is first necessary to setup the simulation. In this case, this consists of creating an MGA object. This object is created according to the procedure described in the [MGA trajectory example](mga_trajectories.ipynb). The object is created using the central body, transfer bodies order, departure orbit, and arrival orbit specified in the Cassini 1 problem statement (presented above)." ] }, { "cell_type": "code", "execution_count": 4, "id": "e3c6fa5e", "metadata": { "execution": { "iopub.execute_input": "2025-09-16T09:13:14.476676Z", "iopub.status.busy": "2025-09-16T09:13:14.476519Z", "iopub.status.idle": "2025-09-16T09:13:14.480457Z", "shell.execute_reply": "2025-09-16T09:13:14.479980Z" } }, "outputs": [], "source": [ "###########################################################################\n", "# Define transfer trajectory properties\n", "###########################################################################\n", "\n", "# Define the central body\n", "central_body = \"Sun\"\n", "\n", "# Define order of bodies (nodes)\n", "transfer_body_order = [\"Earth\", \"Venus\", \"Venus\", \"Earth\", \"Jupiter\", \"Saturn\"]\n", "\n", "# Define departure orbit\n", "departure_semi_major_axis = np.inf\n", "departure_eccentricity = 0\n", "\n", "# Define insertion orbit\n", "arrival_semi_major_axis = 1.0895e8 / 0.02\n", "arrival_eccentricity = 0.98\n", "\n", "# Create simplified system of bodies\n", "bodies = environment_setup.create_simplified_system_of_bodies()\n", "\n", "# Define the trajectory settings for both the legs and at the nodes\n", "transfer_leg_settings, transfer_node_settings = (\n", " transfer_trajectory.mga_settings_unpowered_unperturbed_legs(\n", " transfer_body_order,\n", " departure_orbit=(departure_semi_major_axis, departure_eccentricity),\n", " arrival_orbit=(arrival_semi_major_axis, arrival_eccentricity),\n", " )\n", ")\n", "\n", "# Create the transfer calculation object\n", "transfer_trajectory_object = transfer_trajectory.create_transfer_trajectory(\n", " bodies,\n", " transfer_leg_settings,\n", " transfer_node_settings,\n", " transfer_body_order,\n", " central_body,\n", ")" ] }, { "cell_type": "markdown", "id": "f6174500-ab3d-43cc-ab0a-c1fdfa1030df", "metadata": {}, "source": [ "## Optimization" ] }, { "cell_type": "markdown", "id": "5ba8838a", "metadata": { "tags": [] }, "source": [ "### Optimization Setup " ] }, { "cell_type": "markdown", "id": "11ccb5ef-4843-4a97-834b-678fa133f92d", "metadata": {}, "source": [ "Before executing the optimization, it is necessary to select the bounds for the optimized parameters (departure date and time of flight per transfer leg). These are selected according to the values in the Cassini 1 problem statement [(Vinkó et al, 2007)](https://www.esa.int/gsp/ACT/doc/MAD/pub/ACT-RPR-MAD-2007-BenchmarkingDifferentGlobalOptimisationTechniques.pdf)." ] }, { "cell_type": "code", "execution_count": 5, "id": "f89b3b58-51dc-4287-9f68-00fc594ac9d4", "metadata": { "execution": { "iopub.execute_input": "2025-09-16T09:13:14.482180Z", "iopub.status.busy": "2025-09-16T09:13:14.481999Z", "iopub.status.idle": "2025-09-16T09:13:14.485850Z", "shell.execute_reply": "2025-09-16T09:13:14.485431Z" } }, "outputs": [], "source": [ "# Lower and upper bound on departure date\n", "departure_date_lb = DateTime(1997, 4, 6).epoch()\n", "departure_date_ub = DateTime(1999, 12, 31).epoch()\n", "\n", "# List of lower and upper on time of flight for each leg\n", "legs_tof_lb = np.zeros(5)\n", "legs_tof_ub = np.zeros(5)\n", "# Venus first fly-by\n", "legs_tof_lb[0] = 30 * constants.JULIAN_DAY\n", "legs_tof_ub[0] = 400 * constants.JULIAN_DAY\n", "# Venus second fly-by\n", "legs_tof_lb[1] = 100 * constants.JULIAN_DAY\n", "legs_tof_ub[1] = 470 * constants.JULIAN_DAY\n", "# Earth fly-by\n", "legs_tof_lb[2] = 30 * constants.JULIAN_DAY\n", "legs_tof_ub[2] = 400 * constants.JULIAN_DAY\n", "# Jupiter fly-by\n", "legs_tof_lb[3] = 400 * constants.JULIAN_DAY\n", "legs_tof_ub[3] = 2000 * constants.JULIAN_DAY\n", "# Saturn fly-by\n", "legs_tof_lb[4] = 1000 * constants.JULIAN_DAY\n", "legs_tof_ub[4] = 6000 * constants.JULIAN_DAY" ] }, { "cell_type": "markdown", "id": "03cd6596", "metadata": {}, "source": [ "To setup the optimization, it is first necessary to initialize the optimization problem. This problem, defined through the class `TransferTrajectoryProblem`, is given to PyGMO trough the `pg.problem()` method.\n", "\n", "The optimiser is selected to be the Differential Evolution (DE) algorithm (its documentation can be found [here](https://esa.github.io/pygmo2/algorithms.html#pygmo.de)). When selecting the algorithm, here the coefficient F is selected to have the value 0.5, instead of the default 0.8. Additionally, a fixed seed is selected; since PyGMO uses a random number generator, this ensures that PyGMO's results are reproducible.\n", "\n", "Finally, the initial population is created, with a size of 20 individuals." ] }, { "cell_type": "code", "execution_count": 6, "id": "360eed58", "metadata": { "execution": { "iopub.execute_input": "2025-09-16T09:13:14.487381Z", "iopub.status.busy": "2025-09-16T09:13:14.487221Z", "iopub.status.idle": "2025-09-16T09:13:14.491998Z", "shell.execute_reply": "2025-09-16T09:13:14.491601Z" } }, "outputs": [], "source": [ "###########################################################################\n", "# Setup optimization\n", "###########################################################################\n", "# Initialize optimization class\n", "optimizer = TransferTrajectoryProblem(\n", " transfer_trajectory_object,\n", " departure_date_lb,\n", " departure_date_ub,\n", " legs_tof_lb,\n", " legs_tof_ub,\n", ")\n", "\n", "# Creation of the pygmo problem object\n", "prob = pg.problem(optimizer)\n", "\n", "# To print the problem's information: uncomment the next line\n", "# print(prob)\n", "\n", "# Define number of generations per evolution\n", "number_of_generations = 1\n", "\n", "# Fix seed\n", "optimization_seed = 4444\n", "\n", "# Create pygmo algorithm object\n", "algo = pg.algorithm(pg.de(gen=number_of_generations, seed=optimization_seed, F=0.5))\n", "\n", "# To print the algorithm's information: uncomment the next line\n", "# print(algo)\n", "\n", "# Set population size\n", "population_size = 20\n", "\n", "# Create population\n", "pop = pg.population(prob, size=population_size, seed=optimization_seed)" ] }, { "cell_type": "markdown", "id": "28b67fef", "metadata": {}, "source": [ "### Run Optimization " ] }, { "cell_type": "markdown", "id": "0edb9f89", "metadata": {}, "source": [ "Finally, the optimization can be executed by successively evolving the defined population.\n", "\n", "A total number of evolutions of 800 is selected. Thus, the method `algo.evolve()` is called 800 times inside a loop. After each evolution, the best fitness and the list with the best design variables are saved." ] }, { "cell_type": "code", "execution_count": 7, "id": "bd566c01", "metadata": { "execution": { "iopub.execute_input": "2025-09-16T09:13:14.493454Z", "iopub.status.busy": "2025-09-16T09:13:14.493300Z", "iopub.status.idle": "2025-09-16T09:13:15.291339Z", "shell.execute_reply": "2025-09-16T09:13:15.290864Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The optimization has finished\n" ] } ], "source": [ "###########################################################################\n", "# Run optimization\n", "###########################################################################\n", "\n", "# Set number of evolutions\n", "number_of_evolutions = 800\n", "\n", "# Initialize empty containers\n", "individuals_list = []\n", "fitness_list = []\n", "\n", "for i in range(number_of_evolutions):\n", "\n", " pop = algo.evolve(pop)\n", "\n", " # individuals save\n", " individuals_list.append(pop.champion_x)\n", " fitness_list.append(pop.champion_f)\n", "\n", "print(\"The optimization has finished\")" ] }, { "cell_type": "markdown", "id": "a5090def", "metadata": {}, "source": [ "## Results Analysis" ] }, { "cell_type": "markdown", "id": "a1522bb9", "metadata": {}, "source": [ "Having finished the optimisation, it is now possible to analyse the results.\n", "\n", "According to [Vinkó et al (2007)](https://www.esa.int/gsp/ACT/doc/MAD/pub/ACT-RPR-MAD-2007-BenchmarkingDifferentGlobalOptimisationTechniques.pdf), the best known solution for the Cassini 1 problem has a final objective function value of 4.93 km/s.\n", "\n", "The executed optimization process results in a final objective function value of 4933.17 m/s, with a slightly different decision vector from the one presented by Vinkó et al. (2017). This marginal difference can be explained by an inperfect convergence of the used optimizer, which is expected, considering that DE is a global optimizer. \n", "\n", "The evolution of the minimum $\\Delta V$ throughout the optimization process can be plotted." ] }, { "cell_type": "code", "execution_count": 8, "id": "05c3804e", "metadata": { "execution": { "iopub.execute_input": "2025-09-16T09:13:15.293197Z", "iopub.status.busy": "2025-09-16T09:13:15.293026Z", "iopub.status.idle": "2025-09-16T09:13:15.726379Z", "shell.execute_reply": "2025-09-16T09:13:15.725734Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "########### CHAMPION INDIVIDUAL ###########\n", "\n", "Total Delta V [m/s]: 5689.227740982542\n", "Departure time w.r.t J2000 [days]: -784.5080976760612\n", "Earth-Venus time of flight [days]: 176.01728454864363\n", "Venus-Venus time of flight [days]: 416.8502293466768\n", "Venus-Earth time of flight [days]: 60.51040922500553\n", "Earth-Jupiter time of flight [days]: 951.8527234337222\n", "Jupiter-Saturn time of flight [days]: 4418.416971184073\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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YWFRiRzUhYWFgYUFEREREdUwLCwqkVrFGQsiIiIiqplYWFQi4+JtvcFg50iIiIiIiGyr3Iu3N2zYUOHBIyMj4eLiUuH9airOWBARERFRTVXuwmLYsGEVGliSJJw9exaNGzeuaEw11t0ZCxYWRERERFSzVOhSqLS0NBgMhnJ9ubq6KhVztaXijAURERER1VDlLiyioqIqdFnTU089BU9PT4uCqqk4Y0FERERENVW5L4WKi4ur0MDLli2rcDA1nVpVWMexsCAiIiKimsaiu0JFRUWZFBqXLl3CL7/8gszMTJsFVhNxxoKIiIiIaiqLCotff/0VLVq0AADcvHkTHTt2xPDhw9GqVSskJSXZNMCa5O5doXi7WSIiIiKqWSwqLDIzMxEUFAQA+N///ofAwEBkZmZi9OjRmD17tk0DrEk4Y0FERERENZVFhUVwcDCSk5MBAGvXrkVUVBScnJzw7LPPYs+ePTYNsCbhcyyIiIiIqKYq9+LtosaPH48pU6bgoYcewu+//46lS5cCAPR6PXJycmwaYE2i5owFEREREdVQFhUWs2fPhhACW7duxaJFi9C0aVMAwKFDh9CwYUObBliTsLAgIiIioprKosJCkiS8/vrreP31103ar1+/jtGjR9sksJrIgbebJSIiIqIaqkKFxZw5czBs2DB07drV7PZXXnnFJkHVVFxjQUREREQ1VYUWb6empuLhhx9GQEAAJk2ahE2bNkGr1SoVW43joOalUERERERUM1WosIiLi8P169fxv//9D97e3pgxYwbq1auH4cOHY/ny5UhPT1cqzhqBz7EgIiIiopqqwreblSQJ999/P959912cOXMGBw8eRPfu3fH555+jQYMG6N27N9577z1cvXpViXirNbX074yFnjMWRERERFSzWPQci6JatmyJWbNmYc+ePbh8+TKioqKwa9cufP/997aIr0bhGgsiIiIiqqksuivUrVu38OWXXyItLQ2NGjVChw4d0LZtW/j6+mLixImYOHGireOsEYxrLAyChQURERER1SwWzVgMHz4cixYtwsmTJ/Hpp5+iT58+8PLyQrNmzTBy5MgKj7dz504MGTIEgYGBkCQJ69evN9k+fvx4SJJk8tW9e/cyx12zZg1atWoFjUaDVq1aYd26dRWOzZYcOGNBRERERDWURTMWBw4cwI4dO9C5c2cAgFarxcmTJ3Hs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EVF1wrtCERFVorfffrvY5S4tW7bEp59+iqVLl6Jdu3Y4ePBgiXdMssSiRYuwePFitGvXDrt27cJPP/2EevXqAQACAwOxZ88e6PV6DBgwAG3atMHUqVPh5eVlsp6jPF566SXMmDEDM2bMQHh4OLZs2YINGzYgLCysQuN88MEH6NGjBx5++GH069cPvXr1km8JaxQXF4dx48ZhxowZaN68OR555BEcOHDA7N2XSvLMM8/giy++wPLlyxEeHo4+ffpg+fLlaNSoUan7zZ07Fx07dsSAAQMQEREBf39/DBs2zKTPzJkzoVar0apVK9SvXx8pKSnFxunYsSP+97//YdWqVWjTpg3efPNNvPXWW8UulSMiqi4kYe6CTiIioiri9u3baNCgAd5//31MnDjR3uEQEVEJeCkUERFVKUePHsWZM2fQtWtXZGZm4q233gKAYndQIiKiqoWFBRERVTnvvfcekpKS4OTkhE6dOmHXrl3y5VtERFQ18VIoIiIiIiKyGhdvExERERGR1VhYEBERERGR1VhYEBERERGR1VhYEBERERGR1VhYEBERERGR1VhYEBERERGR1VhYEBERERGR1VhYEBERERGR1VhYEBERERGR1f4/L05N+dK5FCIAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "###########################################################################\n", "# Results post-processing\n", "###########################################################################\n", "\n", "# Extract the best individual\n", "print(\"\\n########### CHAMPION INDIVIDUAL ###########\\n\")\n", "print(\"Total Delta V [m/s]: \", pop.champion_f[0])\n", "best_decision_variables = pop.champion_x / constants.JULIAN_DAY\n", "print(\"Departure time w.r.t J2000 [days]: \", best_decision_variables[0])\n", "print(\"Earth-Venus time of flight [days]: \", best_decision_variables[1])\n", "print(\"Venus-Venus time of flight [days]: \", best_decision_variables[2])\n", "print(\"Venus-Earth time of flight [days]: \", best_decision_variables[3])\n", "print(\"Earth-Jupiter time of flight [days]: \", best_decision_variables[4])\n", "print(\"Jupiter-Saturn time of flight [days]: \", best_decision_variables[5])\n", "\n", "# Plot fitness over generations\n", "fig, ax = plt.subplots(figsize=(8, 4))\n", "ax.plot(\n", " np.arange(0, number_of_evolutions),\n", " np.float_(fitness_list) / 1000,\n", " label=\"Function value: Feval\",\n", ")\n", "# Plot champion\n", "champion_n = np.argmin(np.array(fitness_list))\n", "ax.scatter(\n", " champion_n,\n", " np.min(fitness_list) / 1000,\n", " marker=\"x\",\n", " color=\"r\",\n", " label=\"All-time champion\",\n", " zorder=10,\n", ")\n", "\n", "# Prettify\n", "ax.set_xlim((0, number_of_evolutions))\n", "ax.set_ylim([4, 25])\n", "ax.grid(\"major\")\n", "ax.set_title(\"Best individual over generations\", fontweight=\"bold\")\n", "ax.set_xlabel(\"Number of generation\")\n", "ax.set_ylabel(r\"$\\Delta V [km/s]$\")\n", "ax.legend(loc=\"upper right\")\n", "plt.tight_layout()\n", "plt.legend()" ] }, { "cell_type": "markdown", "id": "6b6eddd8-d2ed-4433-9425-28384c8c8902", "metadata": {}, "source": [ "### Plot the transfer\n", "Finally, the position history throughout the transfer can be retrieved from the transfer trajectory object and plotted." ] }, { "cell_type": "code", "execution_count": 9, "id": "512d3fee-ddc6-4b93-9cf3-2c7359cf9e44", "metadata": { "execution": { "iopub.execute_input": "2025-09-16T09:13:15.728586Z", "iopub.status.busy": "2025-09-16T09:13:15.728414Z", "iopub.status.idle": "2025-09-16T09:13:15.922217Z", "shell.execute_reply": "2025-09-16T09:13:15.921650Z" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Reevaluate the transfer trajectory using the champion design variables\n", "node_times, leg_free_parameters, node_free_parameters = convert_trajectory_parameters(\n", " transfer_trajectory_object, pop.champion_x\n", ")\n", "transfer_trajectory_object.evaluate(\n", " node_times, leg_free_parameters, node_free_parameters\n", ")\n", "\n", "# Extract the state history\n", "state_history = transfer_trajectory_object.states_along_trajectory(500)\n", "fly_by_states = np.array([state_history[node_times[i]] for i in range(len(node_times))])\n", "state_history = result2array(state_history)\n", "au = 1.5e11\n", "\n", "# Plot the state history\n", "fig = plt.figure(figsize=(8, 5))\n", "ax = fig.add_subplot(111)\n", "ax.plot(state_history[:, 1] / au, state_history[:, 2] / au)\n", "ax.scatter(\n", " fly_by_states[0, 0] / au,\n", " fly_by_states[0, 1] / au,\n", " color=\"blue\",\n", " label=\"Earth departure\",\n", ")\n", "ax.scatter(\n", " fly_by_states[1, 0] / au,\n", " fly_by_states[1, 1] / au,\n", " color=\"green\",\n", " label=\"Venus fly-by\",\n", ")\n", "ax.scatter(fly_by_states[2, 0] / au, fly_by_states[2, 1] / au, color=\"green\")\n", "ax.scatter(\n", " fly_by_states[3, 0] / au,\n", " fly_by_states[3, 1] / au,\n", " color=\"brown\",\n", " label=\"Earth fly-by\",\n", ")\n", "ax.scatter(\n", " fly_by_states[4, 0] / au,\n", " fly_by_states[4, 1] / au,\n", " color=\"red\",\n", " label=\"Jupiter fly-by\",\n", ")\n", "ax.scatter(\n", " fly_by_states[5, 0] / au,\n", " fly_by_states[5, 1] / au,\n", " color=\"grey\",\n", " label=\"Saturn arrival\",\n", ")\n", "ax.scatter([0], [0], color=\"orange\", label=\"Sun\")\n", "ax.set_xlabel(\"x wrt Sun [AU]\")\n", "ax.set_ylabel(\"y wrt Sun [AU]\")\n", "ax.set_aspect(\"equal\")\n", "ax.legend(bbox_to_anchor=[1, 1])\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.13" } }, "nbformat": 4, "nbformat_minor": 5 }