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

con2vert() interior point check #2

Open
d-ming opened this issue Feb 2, 2016 · 3 comments
Open

con2vert() interior point check #2

d-ming opened this issue Feb 2, 2016 · 3 comments

Comments

@d-ming
Copy link
Owner

d-ming commented Feb 2, 2016

The con2vert() starts by first finding an interior point of the feasible region. This is done by solving a least squares problem and storing the point in a temporary variable, which we call c. However, it's currently assumed that the solution of the least squares problem is successful and there is no check to see if c is in fact in the region.

A check needs to be added, which could be easily done using in_region(), and then if c is not in the region either:

  • try again to find an interior point;
  • terminate gracefully
@d-ming d-ming changed the title con2vert() interior point check con2vert() interior point check Feb 2, 2016
@d-ming
Copy link
Owner Author

d-ming commented Feb 23, 2016

Possible options for finding an interior point:

  1. Use the current implementation. Not really tested and so I'm unsure how effective it actually is.
  2. Randomly find a point that's scaled between Cf and 0.0. Since the region is defined by stoich_mat*e <= Cf0, generating a random point in extent space scaled between zero and the limits of the feed point might work. I'm not sure how this will actually work in practice, but it might be really easy and efficient. Since it's based on a random guess, it's also difficult to debug and replicate.
  3. Find the Chebyshev centre. See [MathExchange post](http://math.stackexchange.com/questions/1377209/analytic-center-of-convex-polytope a) and slide 19 of Convex optimisation slides. We could probably solve this efficiently for most polytopes (since it's based on a linear program) and the algorithm is predictable. Might be a bit of overkill though.

@deanzimucha
Copy link
Collaborator

The 2nd option looks really interesting, if the random point is generated
in a clearly defined feasible region in extent space
On 23 Feb 2016 20:32, "d-ming" notifications@github.com wrote:

Possible options for finding an interior point:

  1. Use the current implementation. Not really tested and so I'm unsure
    how effective it actually is.
  2. Randomly find a point that's scaled between Cf and 0.0. Since the
    region is defined by stoich_mat*e <= Cf0, generating a random point in
    extent space scaled between zero and the limits of the feed point might
    work. I'm not sure how this will actually work in practice, but it might be
    really easy and efficient. Since it's based on a random guess, it's also
    difficult to debug and replicate.
  3. Find the Chebyshev centre. See MathExchange post
    http://math.stackexchange.com/questions/1377209/analytic-center-of-convex-polytope%20a
    and slide 19 of Convex optimisation slides
    http://stanford.edu/class/ee364a/lectures/problems.pdf. We could
    probably solve this efficiently for most polytopes (since it's based on a
    linear program) and the algorithm is predictable. Might be a bit of
    overkill though.


Reply to this email directly or view it on GitHub
#2 (comment).

@d-ming
Copy link
Owner Author

d-ming commented Feb 24, 2016

Trouble is we don't know what the bounds of the region are because the region resides in extent space and not concentration space. The zero vector -- where all extents are equal to zero -- is a possible point, but this point could lie on the boundary of the polytope which isn't good enough. Also, now that I think about it, using Cf0 to scale is not good enough because the bounds will be in extent space and not concentration space: extents will be negative for reactants but the values in Cf0 are always positive for instance. And if we knew the vertices of the polytope already so that we could find the bounds, then we wouldn't need con2vert() to begin with.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants