pykoop
pykoop is a Koopman operator identification library written in Python. It
allows the user to specify Koopman lifting functions and regressors in order to
learn a linear model of a given system in the lifted space.
To learn more about Koopman operator theory, check out this talk or this review article.
pykoop places heavy emphasis on modular lifting function construction and
scikit-learn compatibility. The library aims to make it easy to
automatically find good lifting functions and regressor hyperparameters by
leveraging scikit-learn’s existing cross-validation infrastructure.
pykoop also gracefully handles control inputs and multi-episode datasets
at every stage of the pipeline.
pykoop also includes several experimental regressors that use linear matrix
inequalities to constraint the asymptotic stability of the Koopman system, or
regularize the regression using its H-infinity norm. Check out
arXiv:2110.09658 [eess.SY] and
arXiv:2102.03613 [eess.SY] for details.
Example
Consider Tikhonov-regularized EDMD with polynomial lifting functions applied to
mass-spring-damper data. Using pykoop, this can be implemented as:
import pykoop
from sklearn.preprocessing import MaxAbsScaler, StandardScaler
# Get example mass-spring-damper data
eg = pykoop.example_data_msd()
# Create pipeline
kp = pykoop.KoopmanPipeline(
lifting_functions=[
('ma', pykoop.SkLearnLiftingFn(MaxAbsScaler())),
('pl', pykoop.PolynomialLiftingFn(order=2)),
('ss', pykoop.SkLearnLiftingFn(StandardScaler())),
],
regressor=pykoop.Edmd(alpha=1),
)
# Fit the pipeline
kp.fit(
eg['X_train'],
n_inputs=eg['n_inputs'],
episode_feature=eg['episode_feature'],
)
# Predict using the pipeline
X_pred = kp.predict_trajectory(eg['x0_valid'], eg['u_valid'])
# Score using the pipeline
score = kp.score(eg['X_valid'])
# Plot results
kp.plot_predicted_trajectory(eg['X_valid'], plot_input=True)
More examples are available in examples/, in notebooks/, or on
binder.
Library layout
Most of the required classes and functions have been imported into the
pykoop namespace. The most important object is the
pykoop.KoopmanPipeline, which requires a list of lifting functions and
a regressor.
Some example lifting functions are
scikit-learn preprocessors can be wrapped into lifting functions using
pykoop.SkLearnLiftingFn. States and inputs can be lifted independently
using pykoop.SplitPipeline. This is useful to avoid lifting inputs.
Some basic regressors included are
pykoop.Edmd(includes Tikhonov regularization),pykoop.Dmdc, and
More advanced (and experimental) LMI-based regressors are included in the
pykoop.lmi_regressors namespace. They allow for different kinds of
regularization as well as hard constraints on the Koopman operator.
You can roll your own lifting functions and regressors by inheriting from
pykoop.KoopmanLiftingFn, pykoop.EpisodeIndependentLiftingFn,
pykoop.EpisodeDependentLiftingFn, and
pykoop.KoopmanRegressor.
Some sample dynamic models are also included in the pykoop.dynamic_models
namespace.
Installation and testing
pykoop can be installed from PyPI using
$ pip install pykoop
Additional LMI solvers can be installed using
$ pip install mosek
$ pip install cvxopt
$ pip install smcp
Mosek is recommended, but is nonfree and requires a license.
The library can be tested using
$ pip install -r requirements-dev.txt
$ pytest
Note that pytest must be run from the repository’s root directory.
To skip unit tests that require a MOSEK license, including all doctests and examples, run
$ pytest ./tests -k "not mosek"
The documentation can be compiled using
$ cd doc
$ make html
If you want a hook to check source code formatting before allowing a commit, you can use
$ cd .git/hooks/
$ ln -s ../../.githooks/pre-commit .
$ chmod +x ./pre-commit
You will need yapf installed for this.
Citation
If you use this software in your research, please cite it as below or see
CITATION.cff.
@software{dahdah_pykoop_2024,
title={{decargroup/pykoop}},
doi={10.5281/zenodo.5576490},
url={https://github.com/decargroup/pykoop},
publisher={Zenodo},
author={Steven Dahdah and James Richard Forbes},
version = {{v2.0.1}},
year={2024},
}
License
This project is distributed under the MIT License, except the contents of
pykoop/_sklearn_metaestimators/, which are from the scikit-learn
project, and are distributed under the BSD-3-Clause License.
Contents
- Introduction
- Koopman pipeline
- pykoop.KoopmanPipeline
KoopmanPipelineKoopmanPipeline.liting_functions_KoopmanPipeline.regressor_KoopmanPipeline.transformers_fit_KoopmanPipeline.regressor_fit_KoopmanPipeline.n_features_in_KoopmanPipeline.n_states_in_KoopmanPipeline.n_inputs_in_KoopmanPipeline.n_features_out_KoopmanPipeline.n_states_out_KoopmanPipeline.n_inputs_out_KoopmanPipeline.min_samples_KoopmanPipeline.episode_feature_KoopmanPipeline.feature_names_in_KoopmanPipeline.__init__()KoopmanPipeline.fit()KoopmanPipeline.fit_transform()KoopmanPipeline.fit_transformers()KoopmanPipeline.frequency_response()KoopmanPipeline.get_feature_names_in()KoopmanPipeline.get_feature_names_out()KoopmanPipeline.get_metadata_routing()KoopmanPipeline.get_params()KoopmanPipeline.inverse_transform()KoopmanPipeline.lift()KoopmanPipeline.lift_input()KoopmanPipeline.lift_state()KoopmanPipeline.make_scorer()KoopmanPipeline.n_samples_in()KoopmanPipeline.plot_bode()KoopmanPipeline.plot_eigenvalues()KoopmanPipeline.plot_koopman_matrix()KoopmanPipeline.plot_lifted_trajectory()KoopmanPipeline.plot_predicted_trajectory()KoopmanPipeline.plot_svd()KoopmanPipeline.predict()KoopmanPipeline.predict_trajectory()KoopmanPipeline.retract()KoopmanPipeline.retract_input()KoopmanPipeline.retract_state()KoopmanPipeline.score()KoopmanPipeline.set_fit_request()KoopmanPipeline.set_output()KoopmanPipeline.set_params()KoopmanPipeline.transform()
- pykoop.SplitPipeline
SplitPipelineSplitPipeline.lifting_functions_state_SplitPipeline.lifting_functions_input_SplitPipeline.n_features_in_SplitPipeline.n_states_in_SplitPipeline.n_inputs_in_SplitPipeline.n_features_out_SplitPipeline.n_states_out_SplitPipeline.n_inputs_out_SplitPipeline.min_samples_SplitPipeline.episode_feature_SplitPipeline.feature_names_in_SplitPipeline.__init__()SplitPipeline.fit()SplitPipeline.fit_transform()SplitPipeline.get_feature_names_in()SplitPipeline.get_feature_names_out()SplitPipeline.get_metadata_routing()SplitPipeline.get_params()SplitPipeline.inverse_transform()SplitPipeline.lift()SplitPipeline.lift_input()SplitPipeline.lift_state()SplitPipeline.n_samples_in()SplitPipeline.plot_lifted_trajectory()SplitPipeline.retract()SplitPipeline.retract_input()SplitPipeline.retract_state()SplitPipeline.set_fit_request()SplitPipeline.set_output()SplitPipeline.set_params()SplitPipeline.transform()
- pykoop.combine_episodes
- pykoop.extract_initial_conditions
- pykoop.extract_input
- pykoop.score_trajectory
- pykoop.shift_episodes
- pykoop.split_episodes
- pykoop.strip_initial_conditions
- pykoop.KoopmanPipeline
- Lifting functions
- pykoop.BilinearInputLiftingFn
BilinearInputLiftingFnBilinearInputLiftingFn.n_features_in_BilinearInputLiftingFn.n_states_in_BilinearInputLiftingFn.n_inputs_in_BilinearInputLiftingFn.n_features_out_BilinearInputLiftingFn.n_states_out_BilinearInputLiftingFn.n_inputs_out_BilinearInputLiftingFn.min_samples_BilinearInputLiftingFn.episode_feature_BilinearInputLiftingFn.feature_names_in_BilinearInputLiftingFn.__init__()BilinearInputLiftingFn.fit()BilinearInputLiftingFn.fit_transform()BilinearInputLiftingFn.get_feature_names_in()BilinearInputLiftingFn.get_feature_names_out()BilinearInputLiftingFn.get_metadata_routing()BilinearInputLiftingFn.get_params()BilinearInputLiftingFn.inverse_transform()BilinearInputLiftingFn.lift()BilinearInputLiftingFn.lift_input()BilinearInputLiftingFn.lift_state()BilinearInputLiftingFn.n_samples_in()BilinearInputLiftingFn.plot_lifted_trajectory()BilinearInputLiftingFn.retract()BilinearInputLiftingFn.retract_input()BilinearInputLiftingFn.retract_state()BilinearInputLiftingFn.set_fit_request()BilinearInputLiftingFn.set_output()BilinearInputLiftingFn.set_params()BilinearInputLiftingFn.transform()
- pykoop.ConstantLiftingFn
ConstantLiftingFnConstantLiftingFn.n_features_in_ConstantLiftingFn.n_states_in_ConstantLiftingFn.n_inputs_in_ConstantLiftingFn.n_features_out_ConstantLiftingFn.n_states_out_ConstantLiftingFn.n_inputs_out_ConstantLiftingFn.min_samples_ConstantLiftingFn.episode_feature_ConstantLiftingFn.feature_names_in_ConstantLiftingFn.__init__()ConstantLiftingFn.fit()ConstantLiftingFn.fit_transform()ConstantLiftingFn.get_feature_names_in()ConstantLiftingFn.get_feature_names_out()ConstantLiftingFn.get_metadata_routing()ConstantLiftingFn.get_params()ConstantLiftingFn.inverse_transform()ConstantLiftingFn.lift()ConstantLiftingFn.lift_input()ConstantLiftingFn.lift_state()ConstantLiftingFn.n_samples_in()ConstantLiftingFn.plot_lifted_trajectory()ConstantLiftingFn.retract()ConstantLiftingFn.retract_input()ConstantLiftingFn.retract_state()ConstantLiftingFn.set_fit_request()ConstantLiftingFn.set_output()ConstantLiftingFn.set_params()ConstantLiftingFn.transform()
- pykoop.DelayLiftingFn
DelayLiftingFnDelayLiftingFn.n_features_in_DelayLiftingFn.n_states_in_DelayLiftingFn.n_inputs_in_DelayLiftingFn.n_features_out_DelayLiftingFn.n_states_out_DelayLiftingFn.n_inputs_out_DelayLiftingFn.min_samples_DelayLiftingFn.episode_feature_DelayLiftingFn.feature_names_in_DelayLiftingFn.__init__()DelayLiftingFn.fit()DelayLiftingFn.fit_transform()DelayLiftingFn.get_feature_names_in()DelayLiftingFn.get_feature_names_out()DelayLiftingFn.get_metadata_routing()DelayLiftingFn.get_params()DelayLiftingFn.inverse_transform()DelayLiftingFn.lift()DelayLiftingFn.lift_input()DelayLiftingFn.lift_state()DelayLiftingFn.n_samples_in()DelayLiftingFn.plot_lifted_trajectory()DelayLiftingFn.retract()DelayLiftingFn.retract_input()DelayLiftingFn.retract_state()DelayLiftingFn.set_fit_request()DelayLiftingFn.set_output()DelayLiftingFn.set_params()DelayLiftingFn.transform()
- pykoop.KernelApproxLiftingFn
KernelApproxLiftingFnKernelApproxLiftingFn.n_features_in_KernelApproxLiftingFn.n_states_in_KernelApproxLiftingFn.n_inputs_in_KernelApproxLiftingFn.n_features_out_KernelApproxLiftingFn.n_states_out_KernelApproxLiftingFn.n_inputs_out_KernelApproxLiftingFn.min_samples_KernelApproxLiftingFn.episode_feature_KernelApproxLiftingFn.feature_names_in_KernelApproxLiftingFn.kernel_approx_KernelApproxLiftingFn.n_features_kernel_KernelApproxLiftingFn.__init__()KernelApproxLiftingFn.fit()KernelApproxLiftingFn.fit_transform()KernelApproxLiftingFn.get_feature_names_in()KernelApproxLiftingFn.get_feature_names_out()KernelApproxLiftingFn.get_metadata_routing()KernelApproxLiftingFn.get_params()KernelApproxLiftingFn.inverse_transform()KernelApproxLiftingFn.lift()KernelApproxLiftingFn.lift_input()KernelApproxLiftingFn.lift_state()KernelApproxLiftingFn.n_samples_in()KernelApproxLiftingFn.plot_lifted_trajectory()KernelApproxLiftingFn.retract()KernelApproxLiftingFn.retract_input()KernelApproxLiftingFn.retract_state()KernelApproxLiftingFn.set_fit_request()KernelApproxLiftingFn.set_output()KernelApproxLiftingFn.set_params()KernelApproxLiftingFn.transform()
- pykoop.PolynomialLiftingFn
PolynomialLiftingFnPolynomialLiftingFn.transformer_PolynomialLiftingFn.transform_order_PolynomialLiftingFn.inverse_transform_order_PolynomialLiftingFn.n_features_in_PolynomialLiftingFn.n_states_in_PolynomialLiftingFn.n_inputs_in_PolynomialLiftingFn.n_features_out_PolynomialLiftingFn.n_states_out_PolynomialLiftingFn.n_inputs_out_PolynomialLiftingFn.min_samples_PolynomialLiftingFn.episode_feature_PolynomialLiftingFn.feature_names_in_PolynomialLiftingFn.__init__()PolynomialLiftingFn.fit()PolynomialLiftingFn.fit_transform()PolynomialLiftingFn.get_feature_names_in()PolynomialLiftingFn.get_feature_names_out()PolynomialLiftingFn.get_metadata_routing()PolynomialLiftingFn.get_params()PolynomialLiftingFn.inverse_transform()PolynomialLiftingFn.lift()PolynomialLiftingFn.lift_input()PolynomialLiftingFn.lift_state()PolynomialLiftingFn.n_samples_in()PolynomialLiftingFn.plot_lifted_trajectory()PolynomialLiftingFn.retract()PolynomialLiftingFn.retract_input()PolynomialLiftingFn.retract_state()PolynomialLiftingFn.set_fit_request()PolynomialLiftingFn.set_output()PolynomialLiftingFn.set_params()PolynomialLiftingFn.transform()
- pykoop.RbfLiftingFn
RbfLiftingFnRbfLiftingFn.n_features_in_RbfLiftingFn.n_states_in_RbfLiftingFn.n_inputs_in_RbfLiftingFn.n_features_out_RbfLiftingFn.n_states_out_RbfLiftingFn.n_inputs_out_RbfLiftingFn.min_samples_RbfLiftingFn.episode_feature_RbfLiftingFn.feature_names_in_RbfLiftingFn.rbf_RbfLiftingFn.centers_RbfLiftingFn.offset_RbfLiftingFn.__init__()RbfLiftingFn.fit()RbfLiftingFn.fit_transform()RbfLiftingFn.get_feature_names_in()RbfLiftingFn.get_feature_names_out()RbfLiftingFn.get_metadata_routing()RbfLiftingFn.get_params()RbfLiftingFn.inverse_transform()RbfLiftingFn.lift()RbfLiftingFn.lift_input()RbfLiftingFn.lift_state()RbfLiftingFn.n_samples_in()RbfLiftingFn.plot_lifted_trajectory()RbfLiftingFn.retract()RbfLiftingFn.retract_input()RbfLiftingFn.retract_state()RbfLiftingFn.set_fit_request()RbfLiftingFn.set_output()RbfLiftingFn.set_params()RbfLiftingFn.transform()
- pykoop.SkLearnLiftingFn
SkLearnLiftingFnSkLearnLiftingFn.transformer_SkLearnLiftingFn.n_features_in_SkLearnLiftingFn.n_states_in_SkLearnLiftingFn.n_inputs_in_SkLearnLiftingFn.n_features_out_SkLearnLiftingFn.n_states_out_SkLearnLiftingFn.n_inputs_out_SkLearnLiftingFn.min_samples_SkLearnLiftingFn.episode_feature_SkLearnLiftingFn.feature_names_in_SkLearnLiftingFn.__init__()SkLearnLiftingFn.fit()SkLearnLiftingFn.fit_transform()SkLearnLiftingFn.get_feature_names_in()SkLearnLiftingFn.get_feature_names_out()SkLearnLiftingFn.get_metadata_routing()SkLearnLiftingFn.get_params()SkLearnLiftingFn.inverse_transform()SkLearnLiftingFn.lift()SkLearnLiftingFn.lift_input()SkLearnLiftingFn.lift_state()SkLearnLiftingFn.n_samples_in()SkLearnLiftingFn.plot_lifted_trajectory()SkLearnLiftingFn.retract()SkLearnLiftingFn.retract_input()SkLearnLiftingFn.retract_state()SkLearnLiftingFn.set_fit_request()SkLearnLiftingFn.set_output()SkLearnLiftingFn.set_params()SkLearnLiftingFn.transform()
- pykoop.BilinearInputLiftingFn
- Regressors
- pykoop.Dmd
DmdDmd.eigenvalues_Dmd.modes_Dmd.tsvd_Dmd.n_features_in_Dmd.n_states_in_Dmd.n_inputs_in_Dmd.episode_feature_Dmd.feature_names_in_Dmd.coef_Dmd.__init__()Dmd.fit()Dmd.frequency_response()Dmd.get_metadata_routing()Dmd.get_params()Dmd.plot_bode()Dmd.plot_eigenvalues()Dmd.plot_koopman_matrix()Dmd.plot_svd()Dmd.predict()Dmd.score()Dmd.set_fit_request()Dmd.set_params()Dmd.set_score_request()
- pykoop.Dmdc
DmdcDmdc.eigenvalues_Dmdc.modes_Dmdc.B_tilde_Dmdc.tsvd_unshifted_Dmdc.tsvd_shifted_Dmdc.n_features_in_Dmdc.n_states_in_Dmdc.n_inputs_in_Dmdc.episode_feature_Dmdc.feature_names_in_Dmdc.coef_Dmdc.__init__()Dmdc.fit()Dmdc.frequency_response()Dmdc.get_metadata_routing()Dmdc.get_params()Dmdc.plot_bode()Dmdc.plot_eigenvalues()Dmdc.plot_koopman_matrix()Dmdc.plot_svd()Dmdc.predict()Dmdc.score()Dmdc.set_fit_request()Dmdc.set_params()Dmdc.set_score_request()
- pykoop.Edmd
EdmdEdmd.n_features_in_Edmd.n_states_in_Edmd.n_inputs_in_Edmd.episode_feature_Edmd.feature_names_in_Edmd.coef_Edmd.__init__()Edmd.fit()Edmd.frequency_response()Edmd.get_metadata_routing()Edmd.get_params()Edmd.plot_bode()Edmd.plot_eigenvalues()Edmd.plot_koopman_matrix()Edmd.plot_svd()Edmd.predict()Edmd.score()Edmd.set_fit_request()Edmd.set_params()Edmd.set_score_request()
- pykoop.EdmdMeta
EdmdMetaEdmdMeta.n_features_in_EdmdMeta.n_states_in_EdmdMeta.n_inputs_in_EdmdMeta.episode_feature_EdmdMeta.feature_names_in_EdmdMeta.regressor_EdmdMeta.coef_EdmdMeta.__init__()EdmdMeta.fit()EdmdMeta.frequency_response()EdmdMeta.get_metadata_routing()EdmdMeta.get_params()EdmdMeta.plot_bode()EdmdMeta.plot_eigenvalues()EdmdMeta.plot_koopman_matrix()EdmdMeta.plot_svd()EdmdMeta.predict()EdmdMeta.score()EdmdMeta.set_fit_request()EdmdMeta.set_params()EdmdMeta.set_score_request()
- pykoop.DataRegressor
DataRegressorDataRegressor.n_features_in_DataRegressor.n_states_in_DataRegressor.n_inputs_in_DataRegressor.episode_feature_DataRegressor.feature_names_in_DataRegressor.coef_DataRegressor.__init__()DataRegressor.fit()DataRegressor.frequency_response()DataRegressor.get_metadata_routing()DataRegressor.get_params()DataRegressor.plot_bode()DataRegressor.plot_eigenvalues()DataRegressor.plot_koopman_matrix()DataRegressor.plot_svd()DataRegressor.predict()DataRegressor.score()DataRegressor.set_fit_request()DataRegressor.set_params()DataRegressor.set_score_request()
- pykoop.Dmd
- Kernel approximation methods
- pykoop.RandomBinningKernelApprox
RandomBinningKernelApproxRandomBinningKernelApprox.n_features_in_RandomBinningKernelApprox.n_features_out_RandomBinningKernelApprox.ddot_RandomBinningKernelApprox.pitches_RandomBinningKernelApprox.shifts_RandomBinningKernelApprox.encoder_RandomBinningKernelApprox.__init__()RandomBinningKernelApprox.fit()RandomBinningKernelApprox.fit_transform()RandomBinningKernelApprox.get_metadata_routing()RandomBinningKernelApprox.get_params()RandomBinningKernelApprox.set_output()RandomBinningKernelApprox.set_params()RandomBinningKernelApprox.transform()
- pykoop.RandomFourierKernelApprox
RandomFourierKernelApproxRandomFourierKernelApprox.n_features_in_RandomFourierKernelApprox.n_features_out_RandomFourierKernelApprox.ft_RandomFourierKernelApprox.random_weights_RandomFourierKernelApprox.random_offsets_RandomFourierKernelApprox.__init__()RandomFourierKernelApprox.fit()RandomFourierKernelApprox.fit_transform()RandomFourierKernelApprox.get_metadata_routing()RandomFourierKernelApprox.get_params()RandomFourierKernelApprox.set_output()RandomFourierKernelApprox.set_params()RandomFourierKernelApprox.transform()
- pykoop.RandomBinningKernelApprox
- Radial basis function centers
- pykoop.ClusterCenters
- pykoop.DataCenters
- pykoop.GaussianRandomCenters
GaussianRandomCentersGaussianRandomCenters.centers_GaussianRandomCenters.n_centers_GaussianRandomCenters.n_features_in_GaussianRandomCenters.mean_GaussianRandomCenters.cov_GaussianRandomCenters.__init__()GaussianRandomCenters.fit()GaussianRandomCenters.get_metadata_routing()GaussianRandomCenters.get_params()GaussianRandomCenters.set_params()
- pykoop.GaussianMixtureRandomCenters
GaussianMixtureRandomCentersGaussianMixtureRandomCenters.centers_GaussianMixtureRandomCenters.n_centers_GaussianMixtureRandomCenters.n_features_in_GaussianMixtureRandomCenters.estimator_GaussianMixtureRandomCenters.__init__()GaussianMixtureRandomCenters.fit()GaussianMixtureRandomCenters.get_metadata_routing()GaussianMixtureRandomCenters.get_params()GaussianMixtureRandomCenters.set_params()
- pykoop.GridCenters
- pykoop.QmcCenters
- pykoop.UniformRandomCenters
UniformRandomCentersUniformRandomCenters.centers_UniformRandomCenters.n_centers_UniformRandomCenters.n_features_in_UniformRandomCenters.range_max_UniformRandomCenters.range_min_UniformRandomCenters.__init__()UniformRandomCenters.fit()UniformRandomCenters.get_metadata_routing()UniformRandomCenters.get_params()UniformRandomCenters.set_params()
- Truncated SVD
- Utilities
- pykoop.AnglePreprocessor
AnglePreprocessorAnglePreprocessor.angles_in_AnglePreprocessor.lin_out_AnglePreprocessor.cos_out_AnglePreprocessor.sin_out_AnglePreprocessor.n_features_in_AnglePreprocessor.n_states_in_AnglePreprocessor.n_inputs_in_AnglePreprocessor.n_features_out_AnglePreprocessor.n_states_out_AnglePreprocessor.n_inputs_out_AnglePreprocessor.min_samples_AnglePreprocessor.episode_feature_AnglePreprocessor.feature_names_in_AnglePreprocessor.__init__()AnglePreprocessor.fit()AnglePreprocessor.fit_transform()AnglePreprocessor.get_feature_names_in()AnglePreprocessor.get_feature_names_out()AnglePreprocessor.get_metadata_routing()AnglePreprocessor.get_params()AnglePreprocessor.inverse_transform()AnglePreprocessor.lift()AnglePreprocessor.lift_input()AnglePreprocessor.lift_state()AnglePreprocessor.n_samples_in()AnglePreprocessor.plot_lifted_trajectory()AnglePreprocessor.retract()AnglePreprocessor.retract_input()AnglePreprocessor.retract_state()AnglePreprocessor.set_fit_request()AnglePreprocessor.set_output()AnglePreprocessor.set_params()AnglePreprocessor.transform()
- pykoop.example_data_duffing
- pykoop.example_data_msd
- pykoop.example_data_pendulum
- pykoop.example_data_vdp
- pykoop.random_input
- pykoop.random_state
- pykoop.AnglePreprocessor
- LMI regressors
- pykoop.lmi_regressors.LmiEdmd
LmiEdmdLmiEdmd.alpha_tikhonov_LmiEdmd.alpha_other_LmiEdmd.tsvd_LmiEdmd.solver_params_LmiEdmd.n_features_in_LmiEdmd.n_states_in_LmiEdmd.n_inputs_in_LmiEdmd.episode_feature_LmiEdmd.feature_names_in_LmiEdmd.coef_LmiEdmd.__init__()LmiEdmd.fit()LmiEdmd.frequency_response()LmiEdmd.get_metadata_routing()LmiEdmd.get_params()LmiEdmd.plot_bode()LmiEdmd.plot_eigenvalues()LmiEdmd.plot_koopman_matrix()LmiEdmd.plot_svd()LmiEdmd.predict()LmiEdmd.score()LmiEdmd.set_fit_request()LmiEdmd.set_params()LmiEdmd.set_score_request()
- pykoop.lmi_regressors.LmiEdmdDissipativityConstr
LmiEdmdDissipativityConstrLmiEdmdDissipativityConstr.tsvd_LmiEdmdDissipativityConstr.objective_log_LmiEdmdDissipativityConstr.stop_reason_LmiEdmdDissipativityConstr.n_iter_LmiEdmdDissipativityConstr.solver_params_LmiEdmdDissipativityConstr.n_features_in_LmiEdmdDissipativityConstr.n_states_in_LmiEdmdDissipativityConstr.n_inputs_in_LmiEdmdDissipativityConstr.episode_feature_LmiEdmdDissipativityConstr.feature_names_in_LmiEdmdDissipativityConstr.coef_LmiEdmdDissipativityConstr.__init__()LmiEdmdDissipativityConstr.fit()LmiEdmdDissipativityConstr.frequency_response()LmiEdmdDissipativityConstr.get_metadata_routing()LmiEdmdDissipativityConstr.get_params()LmiEdmdDissipativityConstr.plot_bode()LmiEdmdDissipativityConstr.plot_eigenvalues()LmiEdmdDissipativityConstr.plot_koopman_matrix()LmiEdmdDissipativityConstr.plot_svd()LmiEdmdDissipativityConstr.predict()LmiEdmdDissipativityConstr.score()LmiEdmdDissipativityConstr.set_fit_request()LmiEdmdDissipativityConstr.set_params()LmiEdmdDissipativityConstr.set_score_request()
- pykoop.lmi_regressors.LmiEdmdHinfReg
LmiEdmdHinfRegLmiEdmdHinfReg.tsvd_LmiEdmdHinfReg.P_LmiEdmdHinfReg.gamma_LmiEdmdHinfReg.objective_log_LmiEdmdHinfReg.stop_reason_LmiEdmdHinfReg.n_iter_LmiEdmdHinfReg.solver_params_LmiEdmdHinfReg.n_features_in_LmiEdmdHinfReg.n_states_in_LmiEdmdHinfReg.n_inputs_in_LmiEdmdHinfReg.episode_feature_LmiEdmdHinfReg.feature_names_in_LmiEdmdHinfReg.coef_LmiEdmdHinfReg.__init__()LmiEdmdHinfReg.fit()LmiEdmdHinfReg.frequency_response()LmiEdmdHinfReg.get_metadata_routing()LmiEdmdHinfReg.get_params()LmiEdmdHinfReg.plot_bode()LmiEdmdHinfReg.plot_eigenvalues()LmiEdmdHinfReg.plot_koopman_matrix()LmiEdmdHinfReg.plot_svd()LmiEdmdHinfReg.predict()LmiEdmdHinfReg.score()LmiEdmdHinfReg.set_fit_request()LmiEdmdHinfReg.set_params()LmiEdmdHinfReg.set_score_request()
- pykoop.lmi_regressors.LmiEdmdSpectralRadiusConstr
LmiEdmdSpectralRadiusConstrLmiEdmdSpectralRadiusConstr.tsvd_LmiEdmdSpectralRadiusConstr.P_LmiEdmdSpectralRadiusConstr.objective_log_LmiEdmdSpectralRadiusConstr.stop_reason_LmiEdmdSpectralRadiusConstr.n_iter_LmiEdmdSpectralRadiusConstr.solver_params_LmiEdmdSpectralRadiusConstr.n_features_in_LmiEdmdSpectralRadiusConstr.n_states_in_LmiEdmdSpectralRadiusConstr.n_inputs_in_LmiEdmdSpectralRadiusConstr.episode_feature_LmiEdmdSpectralRadiusConstr.feature_names_in_LmiEdmdSpectralRadiusConstr.coef_LmiEdmdSpectralRadiusConstr.__init__()LmiEdmdSpectralRadiusConstr.fit()LmiEdmdSpectralRadiusConstr.frequency_response()LmiEdmdSpectralRadiusConstr.get_metadata_routing()LmiEdmdSpectralRadiusConstr.get_params()LmiEdmdSpectralRadiusConstr.plot_bode()LmiEdmdSpectralRadiusConstr.plot_eigenvalues()LmiEdmdSpectralRadiusConstr.plot_koopman_matrix()LmiEdmdSpectralRadiusConstr.plot_svd()LmiEdmdSpectralRadiusConstr.predict()LmiEdmdSpectralRadiusConstr.score()LmiEdmdSpectralRadiusConstr.set_fit_request()LmiEdmdSpectralRadiusConstr.set_params()LmiEdmdSpectralRadiusConstr.set_score_request()
- pykoop.lmi_regressors.LmiDmdc
LmiDmdcLmiDmdc.alpha_tikhonov_LmiDmdc.alpha_other_LmiDmdc.tsvd_unshifted_LmiDmdc.tsvd_shifted_LmiDmdc.U_hat_LmiDmdc.solver_params_LmiDmdc.n_features_in_LmiDmdc.n_states_in_LmiDmdc.n_inputs_in_LmiDmdc.episode_feature_LmiDmdc.feature_names_in_LmiDmdc.coef_LmiDmdc.__init__()LmiDmdc.fit()LmiDmdc.frequency_response()LmiDmdc.get_metadata_routing()LmiDmdc.get_params()LmiDmdc.plot_bode()LmiDmdc.plot_eigenvalues()LmiDmdc.plot_koopman_matrix()LmiDmdc.plot_svd()LmiDmdc.predict()LmiDmdc.score()LmiDmdc.set_fit_request()LmiDmdc.set_params()LmiDmdc.set_score_request()
- pykoop.lmi_regressors.LmiDmdcHinfReg
LmiDmdcHinfRegLmiDmdcHinfReg.tsvd_unshifted_LmiDmdcHinfReg.tsvd_shifted_LmiDmdcHinfReg.U_hat_LmiDmdcHinfReg.P_LmiDmdcHinfReg.gamma_LmiDmdcHinfReg.objective_log_LmiDmdcHinfReg.stop_reason_LmiDmdcHinfReg.n_iter_LmiDmdcHinfReg.solver_params_LmiDmdcHinfReg.n_features_in_LmiDmdcHinfReg.n_states_in_LmiDmdcHinfReg.n_inputs_in_LmiDmdcHinfReg.episode_feature_LmiDmdcHinfReg.feature_names_in_LmiDmdcHinfReg.coef_LmiDmdcHinfReg.__init__()LmiDmdcHinfReg.fit()LmiDmdcHinfReg.frequency_response()LmiDmdcHinfReg.get_metadata_routing()LmiDmdcHinfReg.get_params()LmiDmdcHinfReg.plot_bode()LmiDmdcHinfReg.plot_eigenvalues()LmiDmdcHinfReg.plot_koopman_matrix()LmiDmdcHinfReg.plot_svd()LmiDmdcHinfReg.predict()LmiDmdcHinfReg.score()LmiDmdcHinfReg.set_fit_request()LmiDmdcHinfReg.set_params()LmiDmdcHinfReg.set_score_request()
- pykoop.lmi_regressors.LmiDmdcSpectralRadiusConstr
LmiDmdcSpectralRadiusConstrLmiDmdcSpectralRadiusConstr.tsvd_unshifted_LmiDmdcSpectralRadiusConstr.tsvd_shifted_LmiDmdcSpectralRadiusConstr.U_hat_LmiDmdcSpectralRadiusConstr.P_LmiDmdcSpectralRadiusConstr.objective_log_LmiDmdcSpectralRadiusConstr.stop_reason_LmiDmdcSpectralRadiusConstr.n_iter_LmiDmdcSpectralRadiusConstr.solver_params_LmiDmdcSpectralRadiusConstr.n_features_in_LmiDmdcSpectralRadiusConstr.n_states_in_LmiDmdcSpectralRadiusConstr.n_inputs_in_LmiDmdcSpectralRadiusConstr.episode_feature_LmiDmdcSpectralRadiusConstr.feature_names_in_LmiDmdcSpectralRadiusConstr.coef_LmiDmdcSpectralRadiusConstr.__init__()LmiDmdcSpectralRadiusConstr.fit()LmiDmdcSpectralRadiusConstr.frequency_response()LmiDmdcSpectralRadiusConstr.get_metadata_routing()LmiDmdcSpectralRadiusConstr.get_params()LmiDmdcSpectralRadiusConstr.plot_bode()LmiDmdcSpectralRadiusConstr.plot_eigenvalues()LmiDmdcSpectralRadiusConstr.plot_koopman_matrix()LmiDmdcSpectralRadiusConstr.plot_svd()LmiDmdcSpectralRadiusConstr.predict()LmiDmdcSpectralRadiusConstr.score()LmiDmdcSpectralRadiusConstr.set_fit_request()LmiDmdcSpectralRadiusConstr.set_params()LmiDmdcSpectralRadiusConstr.set_score_request()
- pykoop.lmi_regressors.LmiHinfZpkMeta
LmiHinfZpkMetaLmiHinfZpkMeta.hinf_regressor_LmiHinfZpkMeta.ss_ct_LmiHinfZpkMeta.ss_dt_LmiHinfZpkMeta.n_features_in_LmiHinfZpkMeta.n_states_in_LmiHinfZpkMeta.n_inputs_in_LmiHinfZpkMeta.episode_feature_LmiHinfZpkMeta.feature_names_in_LmiHinfZpkMeta.coef_LmiHinfZpkMeta.__init__()LmiHinfZpkMeta.fit()LmiHinfZpkMeta.get_metadata_routing()LmiHinfZpkMeta.get_params()LmiHinfZpkMeta.predict()LmiHinfZpkMeta.score()LmiHinfZpkMeta.set_fit_request()LmiHinfZpkMeta.set_params()LmiHinfZpkMeta.set_score_request()
- pykoop.lmi_regressors.LmiEdmd
- Dynamic models
- Configuration
- Extending
pykoop- pykoop.Centers
- pykoop.EpisodeDependentLiftingFn
EpisodeDependentLiftingFnEpisodeDependentLiftingFn.n_features_in_EpisodeDependentLiftingFn.n_states_in_EpisodeDependentLiftingFn.n_inputs_in_EpisodeDependentLiftingFn.n_features_out_EpisodeDependentLiftingFn.n_states_out_EpisodeDependentLiftingFn.n_inputs_out_EpisodeDependentLiftingFn.min_samples_EpisodeDependentLiftingFn.episode_feature_EpisodeDependentLiftingFn.feature_names_in_EpisodeDependentLiftingFn.__init__()EpisodeDependentLiftingFn.fit()EpisodeDependentLiftingFn.fit_transform()EpisodeDependentLiftingFn.get_feature_names_in()EpisodeDependentLiftingFn.get_feature_names_out()EpisodeDependentLiftingFn.get_metadata_routing()EpisodeDependentLiftingFn.get_params()EpisodeDependentLiftingFn.inverse_transform()EpisodeDependentLiftingFn.lift()EpisodeDependentLiftingFn.lift_input()EpisodeDependentLiftingFn.lift_state()EpisodeDependentLiftingFn.n_samples_in()EpisodeDependentLiftingFn.plot_lifted_trajectory()EpisodeDependentLiftingFn.retract()EpisodeDependentLiftingFn.retract_input()EpisodeDependentLiftingFn.retract_state()EpisodeDependentLiftingFn.set_fit_request()EpisodeDependentLiftingFn.set_output()EpisodeDependentLiftingFn.set_params()EpisodeDependentLiftingFn.transform()
- pykoop.EpisodeIndependentLiftingFn
EpisodeIndependentLiftingFnEpisodeIndependentLiftingFn.n_features_in_EpisodeIndependentLiftingFn.n_states_in_EpisodeIndependentLiftingFn.n_inputs_in_EpisodeIndependentLiftingFn.n_features_out_EpisodeIndependentLiftingFn.n_states_out_EpisodeIndependentLiftingFn.n_inputs_out_EpisodeIndependentLiftingFn.min_samples_EpisodeIndependentLiftingFn.episode_feature_EpisodeIndependentLiftingFn.feature_names_in_EpisodeIndependentLiftingFn.__init__()EpisodeIndependentLiftingFn.fit()EpisodeIndependentLiftingFn.fit_transform()EpisodeIndependentLiftingFn.get_feature_names_in()EpisodeIndependentLiftingFn.get_feature_names_out()EpisodeIndependentLiftingFn.get_metadata_routing()EpisodeIndependentLiftingFn.get_params()EpisodeIndependentLiftingFn.inverse_transform()EpisodeIndependentLiftingFn.lift()EpisodeIndependentLiftingFn.lift_input()EpisodeIndependentLiftingFn.lift_state()EpisodeIndependentLiftingFn.n_samples_in()EpisodeIndependentLiftingFn.plot_lifted_trajectory()EpisodeIndependentLiftingFn.retract()EpisodeIndependentLiftingFn.retract_input()EpisodeIndependentLiftingFn.retract_state()EpisodeIndependentLiftingFn.set_fit_request()EpisodeIndependentLiftingFn.set_output()EpisodeIndependentLiftingFn.set_params()EpisodeIndependentLiftingFn.transform()
- pykoop.KernelApproximation
KernelApproximationKernelApproximation.n_features_in_KernelApproximation.n_features_out_KernelApproximation.__init__()KernelApproximation.fit()KernelApproximation.fit_transform()KernelApproximation.get_metadata_routing()KernelApproximation.get_params()KernelApproximation.set_output()KernelApproximation.set_params()KernelApproximation.transform()
- pykoop.KoopmanLiftingFn
KoopmanLiftingFnKoopmanLiftingFn.n_features_in_KoopmanLiftingFn.n_states_in_KoopmanLiftingFn.n_inputs_in_KoopmanLiftingFn.n_features_out_KoopmanLiftingFn.n_states_out_KoopmanLiftingFn.n_inputs_out_KoopmanLiftingFn.min_samples_KoopmanLiftingFn.episode_feature_KoopmanLiftingFn.feature_names_in_KoopmanLiftingFn.__init__()KoopmanLiftingFn.fit()KoopmanLiftingFn.fit_transform()KoopmanLiftingFn.get_feature_names_in()KoopmanLiftingFn.get_feature_names_out()KoopmanLiftingFn.get_metadata_routing()KoopmanLiftingFn.get_params()KoopmanLiftingFn.inverse_transform()KoopmanLiftingFn.lift()KoopmanLiftingFn.lift_input()KoopmanLiftingFn.lift_state()KoopmanLiftingFn.n_samples_in()KoopmanLiftingFn.plot_lifted_trajectory()KoopmanLiftingFn.retract()KoopmanLiftingFn.retract_input()KoopmanLiftingFn.retract_state()KoopmanLiftingFn.set_fit_request()KoopmanLiftingFn.set_output()KoopmanLiftingFn.set_params()KoopmanLiftingFn.transform()
- pykoop.KoopmanRegressor
KoopmanRegressorKoopmanRegressor.n_features_in_KoopmanRegressor.n_states_in_KoopmanRegressor.n_inputs_in_KoopmanRegressor.episode_feature_KoopmanRegressor.coef_KoopmanRegressor.feature_names_in_KoopmanRegressor.__init__()KoopmanRegressor.fit()KoopmanRegressor.frequency_response()KoopmanRegressor.get_metadata_routing()KoopmanRegressor.get_params()KoopmanRegressor.plot_bode()KoopmanRegressor.plot_eigenvalues()KoopmanRegressor.plot_koopman_matrix()KoopmanRegressor.plot_svd()KoopmanRegressor.predict()KoopmanRegressor.score()KoopmanRegressor.set_fit_request()KoopmanRegressor.set_params()KoopmanRegressor.set_score_request()
- pykoop.dynamic_models.ContinuousDynamicModel
- pykoop.dynamic_models.DiscreteDynamicModel
- pykoop.lmi_regressors.LmiRegressor
LmiRegressorLmiRegressor.n_features_in_LmiRegressor.n_states_in_LmiRegressor.n_inputs_in_LmiRegressor.episode_feature_LmiRegressor.feature_names_in_LmiRegressor.coef_LmiRegressor.__init__()LmiRegressor.fit()LmiRegressor.frequency_response()LmiRegressor.get_metadata_routing()LmiRegressor.get_params()LmiRegressor.plot_bode()LmiRegressor.plot_eigenvalues()LmiRegressor.plot_koopman_matrix()LmiRegressor.plot_svd()LmiRegressor.predict()LmiRegressor.score()LmiRegressor.set_fit_request()LmiRegressor.set_params()LmiRegressor.set_score_request()
- Examples
- References