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

Expression tree API like CVXPY #558

Open
carlosgmartin opened this issue Nov 28, 2023 · 3 comments
Open

Expression tree API like CVXPY #558

carlosgmartin opened this issue Nov 28, 2023 · 3 comments

Comments

@carlosgmartin
Copy link

carlosgmartin commented Nov 28, 2023

Does jaxopt have an expression tree API like CVXPY does?

If not, would it be possible to create one? This would make it easier to build up problems.

@vroulet
Copy link
Collaborator

vroulet commented Nov 28, 2023

Hello @carlosgmartin,
Wouldn't jaxprs be what you are looking for? JAX traces the whole computational graph so that you could directly work on it. I may not have got what you are looking for. Feel free to detail more your objective.

@carlosgmartin
Copy link
Author

carlosgmartin commented Nov 29, 2023

@vroulet I meant something like the example shown in the second link (more examples here). Here's another example:

def find_nash_equilibrium(u):
    """Find the Nash equilibrium of a two-player zero-sum normal-form game.
    u is the payoff matrix for the row player."""
    x = cp.Variable(u.shape[0])
    v = cp.Variable()
    objective = cp.Maximize(v)
    constraints = [
        v <= x @ u,
        x >= 0,
        x.sum() == 1,
    ]
    problem = cp.Problem(objective, constraints)
    result = problem.solve()
    return {"v": v.value, "x": x.value, "y": constraints[0].dual_value}

That is, letting users create variables and build up expressions from them to create objectives and constraints for a desired problem. This makes it easier for users to write linear/quadratic programs than manually fiddling with the A, b, G, h, Q, c arrays.

@vroulet
Copy link
Collaborator

vroulet commented Dec 4, 2023

So no, we haven't that now and we were not planning on adding it.
Wouldn't a package like https://github.com/cvxgrp/cvxpylayers be a good starting point?

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