-
Notifications
You must be signed in to change notification settings - Fork 19
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
[RFC] Dominance Relations #669
Comments
Thanks for the write up @gskorokhod, it captures the project well. Don't let this be a blocker for you but I'd like to explore the concrete syntax a bit with at some point. Changes will likely be cosmetic, so any work you do now will still mostly apply, I am sure. |
Actually, I just thought of this while walking to labs and I think I've misunderstood the process yet again :)
This is actually wrong. If we generate new constraints by just plugging values into the dominance relation definition, then we end up with one non-dominated solution (the last one) and then stop. We won't get the other Pareto-efficient solutions, as they would require making at least one of the variables "worse". |
You do get all solutions on the efficient front. Since they do not dominate each other. Does that make sense? Each new dominance blocking constraint removes all solutions that are dominated by the one we just found. You are also likely to get some solutions-that-will-later-be-dominated during the process, so you'll still have to post filter for those. |
Ok, so my understanding at the moment (which is probably wrong) is: Say we have 2 variables we're considering. Where am I making the mistake? |
Assuming this a maximisation problem in both axes:
We are excluding dominated solutions every time we find a solution. So you red shaded parts were never excluded. |
Ah, so the dominance breaking constraint is actually the negation of the dominance relation with the current solution's values plugged in I.e "only consider solutions that are not dominated by the current one" That's what I was missing I think! |
I've updated the writeup, thank you! |
Background
Terms
Satisfaction Problems
A classic Constraints Satisfaction Problem (CSP) consists of:
A solution is any assignment of values to decision variables that satisfies all constraints
Optimisation Problems
A Constraints Optimisation Problem (COP) consists of:
(NB: there is only one objective function)
A solution is an assignment of values to variables where all constraints are satisfied and the value of the function is optimised
For a COP, there is a single value being optimised, so it's relatively simple for the solver to search the solution space as efficiently as possible (e.g. using branch-and-bound or a similar algorithm, plus some heuristics)
Dominance (and why it's necessary)
However, sometimes it is necessary to evaluate the best-case "trade-off" between multiple functions of the solution.
That is, we want to limit our search only to such solutions where at least one of the variables being considered can't be optimised further without "hurting" the others.
Formally, we usually define dominance as follows (assuming maximising):$A(x_a, y_a)$ dominates solution $B(x_b, y_b)$ if $(x_a\geq x_b) \land (y_a \geq y_b) \land ((x_a \gt x_b) \lor (y_a \gt y_b))$
Solution
(I.e. both values are at least as good and at least one is strictly better)
That is, we want to limit our search only to the Pareto front.
Note that:
Dominance is separate from that, and simply restricts our search to the set of Pareto-efficient solutions for a given definition of which solutions are to be preferred.
Domination Problems
Formally, a Constraints Dominance Problem (CDP) consists of a CSP or COP, plus a dominance relation.
The dominance relation is a boolean function in terms of some decision variables that defines when one solution dominates another.
Implementation
Dominance problems are handled by generating and adding new constraints during a solver's runtime to gradually restrict the search space.
The new constraint is essentially a negation of our definition of dominance, with the current solution's values plugged in.
I.e, "only consider solutions that are not dominated by the ones we've found so far".
Notes:
These will need to be pruned by a later post-processing step.
Solutions that are incomparable to the current one (i.e. neither dominating nor dominated by it) will still be considered, we're only pruning away ones that are "strictly worse" than it!
Essence Syntax
Consider this example Essence model representing a dominance problem:
The dominance relation is expressed here in terms of two variables (which are computed based on the solution's decision variables).
It is essentially a plain definition of the new constraint to be added, where
fromSolution()
calls must be replaced with the value of the corresponding decision variable in the current solution.Solver Adaptor
Solvers have different implementations. Some provide built-in methods for incremental solving (i.e. enumerating solutions one by one and potentially adding new constraints at each step). In this case, our task is simply to:
However, for solvers that do not support incremental solving, we would have to emulate this behaviour by:
Model
with the added constraintsThis is less efficient, but may be necessary for some solvers.
Minion should have most of the required functionality out of the box, but patches to the C++ code may be needed.
Rewriting
For efficiency, we want to rewrite the dominance relation definition itself and generate new constraints directly from its solver-specific representation, rather than running a new rewrite on every iteration. In general this should not be hard, but there may be some edge cases with regards to handling
fromSolution
correctly.See Also
Improving General Purpose Constraint-Based Mining
Plan
dominanceRelaion
into new top-level constraints (Expression
) at runtimefromSolution
variables)SolverAdaptor
code to handle the generated constraints using the solver-specific AST typesThe focus will be on Minion first, and implementing a nice generic interface for all of this in other solver adaptors later.
Work on this project will be tracked in sub-issues of this one!
The text was updated successfully, but these errors were encountered: