Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Volume cooling ellipsoids #171

Closed
wants to merge 34 commits into from

Conversation

vaithak
Copy link
Collaborator

@vaithak vaithak commented Aug 4, 2021

  • Improve ellipsoid/gaussian samplers to take an Ellipsoid object as an argument instead of cholesky matrix or eigenvalues/eigenvectors.
  • Added a function for generating an initial point inside the unnormalised order polytope by topological sorting the poset's DAG.
  • Implemented the Gaussian Accelerated Billiard Walk which relies on generating random Gaussian Direction.
  • Implemented the volume_cooling_ellipsoids algorithm
  • Create a new header math_helpers.h to shift math utility functions used in volume algorithms to a common place.
  • Added example for computing volume of order polytope

TODO:

  • Add test for verifying correctness of the algorithm
  • Optimise boundary oracle for ellipsoid from O(d2) to O(d).
    • @TolisChal the theory we discussed won't work in the ellipsoid case, so need guidance on how to optimise this.
    • Reason for this is that, the equation for the reflection is:
     v` = v - (2*dot_prod)*s         // s is the normal vector
    => v`= v - (2*dot_prod)*Ar        // r is the point on ellipsoid, A is the matrix in x'Ax <= 1
    => Av` = Av - (2*dot_prod)*A^2 r
    
    This implies that to update Av, we need to have A^2 r precomputed which won't be possible.
    I also tried of maintaining only Ut*v and Ut*r, where Ut is the transpose of the matrix of Eigen vectors. In this also, the problem was of computing the normal vector Ar, which won't be possible to compute from Ut*r in O(d) time.
  • Metropolis filter for maintaining symmetry
    • The normalised direction vector will not follow a multivariate Gaussian distribution so not sure how to implement this.

vaithak added 30 commits July 28, 2021 16:57
@vaithak
Copy link
Collaborator Author

vaithak commented Aug 24, 2021

The algorithms gives correct results now. Now, the only thing left is to improve its runtime using some optimisation heuristics in the ellipsoid class.

@vaithak
Copy link
Collaborator Author

vaithak commented Feb 25, 2022

closing this and opening a discussion here: #211

@vaithak vaithak closed this Feb 25, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants