Closed ChrisRackauckas closed 4 years ago
If you're planning on implementing this, I would love to help. I have a crude implementation of the DMD , EDMD and DMDc algorithms, which I can put up in a repo on the weekend.
The EDMD implementation could in general use some advanced stuff ( like function signatures etc. ) for the lifting onto the space of koopman observeables, but other than that its a more or less straightforward linear algebra problem. Also, there is other work by Rowley, Kutz, Proctor, Brunton et.al. on this e.g. multiresolution decomposition and how to efficiently implement rank 1 updates.
Maybe this can be used as a DiffEqOperator?
I won't have time to implement it over the next few months, so I was planning to at least make a JuliaDiffEq repo for it with some basics, and maybe make a GSoC project around it. Any contributions are more than welcome. I'd hope that we could formalize some kind of automatic equation discovery interface that could get integrated into the main docs as a standard feature of DiffEq.
Applied Mathematics Instructor, Massachusetts Institute of Technology Senior Research Analyst, University of Maryland, Baltimore, School of Pharmacy, Center for Translational Medicine On 10/22/2019 2:40:57 PM, JuliusMartensen notifications@github.com wrote: If you're planning on implementing this, I would love to help. I have a crude implementation of the DMD [http://cwrowley.princeton.edu/papers/Tu-DMD.pdf] , EDMD [https://arxiv.org/pdf/1408.4408.pdf] and DMDc [https://arxiv.org/abs/1409.6358] algorithms, which I can put up in a repo on the weekend. The EDMD implementation could in general use some advanced stuff ( like function signatures etc. ) for the lifting onto the space of koopman observeables, but other than that its a more or less straightforward linear algebra problem. Also, there is other work by Rowley, Kutz, Proctor, Brunton et.al. on this e.g. multiresolution decomposition and how to efficiently implement rank 1 updates. Maybe this can be used as a DiffEqOperator? — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub [https://github.com/JuliaDiffEq/DifferentialEquations.jl/issues/517?email_source=notifications&email_token=AAN25HQQKGETS446GWIXVILQP5CLRA5CNFSM4JBDJK42YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEB6YUBA#issuecomment-545098244], or unsubscribe [https://github.com/notifications/unsubscribe-auth/AAN25HX7WSYVQOMHIRSVKODQP5CLRANCNFSM4JBDJK4Q].
The early prototypes can be found here with simple examples.
Also, if you want to other methods for generating "readable" ( non neural network ) equations you should check out SInDy and symbolic regression. The SInDy algorithm works fine within "simple" models and measured tangent states. Here "simple" refers to no double pendulum since the dynamics are not traceable given the complexity of the acting constraints.
yeah SInDY is another one I was looking at. That example repo looks pretty awesome! The ModelingToolkit version makes it look surprisingly easy to use.
After a few more modifications (I assume you want to finish up the ModelingToolkit branch), I'd be willing to migrate it into DiffEq to setup a bunch of maintenance features, and then make a doc page in the main documentation for this feature.
Thanks that would be awesome! Glad you like it. I probably will have another run by friday. Most likely - depends on how well the Modeling Toolkit integration goes - I can also implement SInDy.
I am also thinking about possible uses of DiffEqFlux in this domain, since this would really add a nice take on real world problems with uncertain or unknown measurements and is connected to my current research as well.
I am also thinking about possible uses of DiffEqFlux in this domain, since this would really add a nice take on real world problems with uncertain or unknown measurements and is connected to my current research as well.
Hehe, I'm publishing on this quite soon
@ChrisRackauckas you can have another look.
I wrapped ModelingToolkit inside the basis for further use and implemented DMD, EDMD and SInDy with some tests ( all passing currently ). I still have to think about a continuous version of EDMD, but this is stuff for another branch.
There are still some things to do, e.g. provide NLOpt interfaces for SInDy , add some other DMD flavors and Implicit SInDy. And design discussion about interfaces :smile: .
Wow, looks like it's coming along quite well! The only other thing I was looking for was https://ieeexplore.ieee.org/document/7809160 , and that is what I was going to release as a DiffEq package. If you would like, we could pull this into the DiffEq domain and I will start adding the necessary stuff to get this registered and start generating the documentation pages. I'll message you privately about the research project.
I started working on the ADMinitvary of the original repo and the related paper but this will probably take a few days to complete. I somehow think that this could be done via NLopt a little more reliable than my current implementation. But this has to be tested.
I would be happy if this work gets part of the DiffEq family! Looking forward to your message.
Hi! I'm also interested in implementing SINDy on Julia. Specifically, I was thinking of trying to implement its SR3 version since it seems to be more robust and flexible to add features or variations. Afterward, I'd like to implement its autoencoder version. for jointly discovering a proper coordinate system.
I would be happy to collaborate on this, just let me know :)
Hey! That would be awesome 😊. The Repo has moved here. The SInDy implementation should be easy to tweak. I did not have time to look into the SR3 paper on details. Also, the autoencoder option extends the loosely defined plan for a neural basis. If you have any questions, feel free to write me an email or on slack.
Great! Thanks!! I didn't realized you already converted it in a JuliaDiffEq package 😃 I'll keep in touch via slack or email.
By the way, I've just noticed that the documentation link is broken.
It's not up right now, but the examples should give you a good overview.
Implemented by DataDrivenDiffEq
Has anyone implemented the Sindy Autoencoder version in Julia? I would prefer to keep my work in Julia and not Python/Tensorflow 1.X :)
The autoencoder version? No, that would be a good thing to add. @Vaibhavdixit02 make note (open an issue?)
Not entirely sure where to put this one, so I'm just storing some links here.
https://arxiv.org/pdf/1905.09266.pdf