dysii 1.4.0 released

Version 1.4.0 of the dysii Dynamic Systems Library has been released. This is a major new release with a number of additional features and performance enhancements, as well as representing a consolidation of code and maturation of much of the API.

Particular new features include:

  • The kernel forward-backward and two-filter smoothers, suitable for fast, large-scale approximate inference in continuous-time stochastic models, as documented in my recent PhD thesis.
  • Overhauled kd tree implementation, featuring distributed partitioning, dual-tree and self-tree evaluations, particularly useful for the new smoothers above.
  • Improved stochastic Runge-Kutta and new Euler-Maruyama method for integrating stochastic differential equations.
  • Performance improvements resulting from continued profiling, including more aggressive inlining and less dependence on virtuals.
  • A new installation guide, available in the INSTALL.txt file of the distribution. Also note that with Boost 1.35 now released, dysii no longer requires the latest CVS of Boost, making it much simpler to install.

Full details are included in the VERSION.txt file of the distribution.

A couple of examples of applications using dysii are expected to be released within a matter of days also. These should provide an excellent starting point for those wishing to use the library for their own work.

5 responses to “dysii 1.4.0 released”

  1. Micah Chambers

    The software seems pretty well thought out, I have been using your libraries for about 2 weeks and haven’t come upon any big kludges yet, which is especially impressive considering the size of the codebase. Do you have a CVS repository with a bleeding edge version, the DiracMixturePdf seems to be missing the AddComponent function, which is required for the AdditiveNoiseParticleResampler. Thanks

  2. Lawrence

    Thanks for the report Micah, must have missed this one in regression tests. addComponent() became the less verbose add() in 1.4.0, if you update the reference to it in AdditiveNoiseParticleResampler it should become usable. Will fix this for future releases.

    There is a Subversion repository, but it is not publicly available. There’d be a few logistical issues to sort out to make that happen unfortunately, given that most of the development on this happens as part of my employment. Might be something I can sort out in future though.

  3. Micah Chambers

    Cool thanks for the info. I have been having one other problem. When I use StratifiedParticleResampler and then the RegularisedParticleResampler, the regularized particle filter dies in getStandardDeviation. It would appear that in DiracMixturePdf.cpp:
    00171 err = lapack::pptrf(sigma);
    00172 assert (err == 0);
    is a failed assert. Just the stratifies particle filter works (of course because it never calculates sigma) and just the regularized particle filter works. I am thinking that the first resampling is causing a huge drop in the variance, but not the covariance which makes the covariance matrix non-positive-definite. Have you had this problem at all?

  4. Lawrence

    Yes, it’s probably that the covariance is not positive-definite. Might be worth checking your effective sample size — DiracMixturePdf::calculateEss() — to see if the filter has degenerated (almost all weight on a single particle). If it has, you may need to increase the number of particles that you’re using, or perhaps use another resampling strategy, such as AuxiliaryParticleResampler.

    Also, you could try AdditiveNoiseParticleResampler. This will add some fixed Gaussian noise rather than the relative (to standard deviation) kernel noise added by RegularisedParticleResampler, such that the standard deviation never needs to be used. This might just sweep degeneration issues under the carpet though, so I’d recommend checking that effective sample size too.

    Hope that helps you.

  5. Micah Chambers

    Something that would help and would be a rather easy fix is changing private to protected for any class that has virtual functions. For instance, RegularisedParticleResampler has resample listed as virtual, but you can’t really do any resampling without the ability to access the kernel and norm classes.

Leave a comment

(not published)
*
* required

Post feeds