Skip to content

[FEATURE REQUEST]: Create a "best-practice" method for optimizing mixture weights, including optimizing over a simplex search space #3867

@kurt-essential

Description

@kurt-essential

Motivation

A common problem in many domains is to optimize the weights for a mixture of K components. In this case the search space is a simplex. I didn't see this covered in the tutorials/docs (apologies if it is and I missed it) - it would be nice to have a standard recommendation on how to do this in Ax.

  1. The simplest approach is to define the parameters as (K-1) weights in (0,1) and set the constraint that their sum <= 1. However, the fraction of the (hypercube) search space that satisfies this constraint decreases exponentially(?) wrt K. It seems like Ax uses rejection sampling to satisfy constraints, which becomes impractical for large K. (I got SearchSpaceExhausted: Rejection sampling error (specified maximum draws (10000) exhausted, without finding sufficiently many (1) candidates). This likely means that there are no new points left in the search space. when I tried this with just 7 parameters. For more parameters I suspect max_draws would need to be prohibitively large.)

  2. An alternative approach is to use a mapping (preferably a 1:1 bijection with minimal distortion) between the hypercube and the simplex, as an interface between BO and the objective function. Stick-breaking is one way to do this, but may distort distances near the boundary which could be a problem if the optimum involves setting weights of some components to zero, or if user already has data from such points (which is not uncommon). Other methods like softmax are many:1, meaning that the simplex maps to multiple redundant regions of the search space, which seems like it would make optimization inefficient.

Describe the solution you'd like to see implemented in Ax.

Stick-breaking seems like a good first approach, but there may be better alternatives.

Describe any alternatives you've considered to the above solution.

No response

Is this related to an existing issue in Ax or another repository? If so please include links to those Issues here.

No response

Code of Conduct

  • I agree to follow Ax's Code of Conduct

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions