This repository contains scripts and notebooks to reproduce the data and figures from Deep Learning of Conjugate Mappings by Jason J. Bramburger, Steven L. Brunton, and J. Nathan Kutz (2021).
A companion video abstract for this work is available here.
Despite many of the most common chaotic dynamical systems being continuous in time, it is through discrete time mappings that much of the understanding of chaos is formed. Henri Poincare first made this connection by tracking consecutive iterations of the continuous flow with a lower-dimensional, transverse subspace. The mapping that iterates the dynamics through consecutive intersections of the flow with the subspace is now referred to as a Poincare map, and it is the primary method available for interpreting and classifying chaotic dynamics. Unfortunately, in all but the simplest systems, an explicit form for such a mapping remains outstanding. This work proposes a method for obtaining explicit Poincare mappings by using deep learning to construct an invertible coordinate transformation into a conjugate representation where the dynamics are governed by a relatively simple chaotic mapping. The invertible change of variable is based on an autoencoder, which allows for dimensionality reduction, and has the advantage of classifying chaotic systems using the equivalence relation of topological conjugacies. Indeed, the enforcement of topological conjugacies is the critical neural network regularization for learning the coordinate and dynamics pairing. We provide expository applications of the method to low-dimensional systems such as the Rossler and Lorenz systems, while also demonstrating the utility of the method on infinite-dimensional systems, such as the Kuramoto-Sivashinsky equation.
Our goal with this project is to find an explicit Poincare mapping which fits data gathered in a suitable Poincare section from a continuous-time dynamical system. We employ a feed-forward neural network architecture to circumvent discovering the Poincare mapping directly. Precisely, the network exploits the concept of a topological conjugacy and discovers an invertible change of variables along with a latent mapping that governs iterates of the transformed variables. The network is equivalent to the structure of the Poincare map in that it takes a current intersection of the flow with the section and maps it to the next intersection. Entering an observation into the network results in it being first transformed by the change of variable, then fed into the latent mapping, and then the advanced latent variable is transformed back to physical space using the inverse of the change of variable. The goal of this process is to have the latent mapping be a simple as possible to best understand the system on hand. The network performs the difficult task of obtaining the nonlinear change of vairable.
This repository contains three folders. They are organized as follows:
-
networks: This folder contains jupyter notebooks to reproduce the results from Sections 4 and 5 of the manuscript. There are notebooks to discover the 1D conjugate mappings for the Rossler system, Gissinger systems and the Mackey-Glass equation using the general network architecture found in architecture_1D.py. Furthermore, there are notebooks for the discovery of 1D and 2D conjugate maps associated to the Lorenz and Kuramoto-Sivashinsky equations, as described in Section 4.2 and 5.1, respectively. The Python script utils.py contains the right-hand-sides of the differential equations that are used.
-
saved_models: All models that are presented in the manuscript have been saved in this fold. Use the jupyter notebook load_saved.ipynb to load and view these saved models. This notebook also provides the location of unstable periodic orbits in the Poincare section using the inverse of the change of variable. This data is used for the MATLAB scripts in the UPOs folder.
-
UPOs: This folder contains MATLAB scripts to implement the methods of discovery and control of unstable periodic orbits (UPOs) summarized in Sections 2.3 and 2.4, respectively. All UPO data is obtained using the saved models in the saved_models folder. The scripts RosslerControl.m and GissingerControl.m can be used to control the Rossler and Gissinger systems, respectively. The control algorithm comes from the work of Bramburger, Kutz, and Brunton (IEEE Access, 2021). LorenzUPO.m and KS_UPO.m are functions whose inputs are sequences of L's and R's and output are UPOs in the continuous-time flow that follow these itineraries. Acceptable sequences are given in Table 2 for the Lorenz system and Table 3 for the Kuramoto-Sivashinsky partial differential equation.
Nearly all scripts and notebooks use Numpy and Tensorflow 2. odeint from SciPy is used to perform integration of ordinary differential equations while ddeint is used to integrate the Mackey-Glass delay-differential equation. MatPlotLib is used to plot data and results. Computations were performed using python version 3.8.3.