-
-
Notifications
You must be signed in to change notification settings - Fork 411
Closed
Labels
Milestone
Description
I'm making this new issue to track the progress on CP support in JuMP. (Brief reminder: started with #2014; then, a few changes in #2051 to make more constraints parse.) I'm opening this issue to discuss the progress on this side (maybe this should be marked as 1.0?).
For now, these things have been implemented:
- Several CP sets, an extension to MOI: ConstraintProgrammingExtensions.jl
- New constraints in JuMP to create CP constraints easily: JuCP.jl; this absolutely requires Add extension points for more generic
@constraintsyntax #2051 to be merged - A first solver is partially wrapped: CPLEXCP.jl
There are many more details about all this in JuCP, including design considerations and next steps. Some of these steps could be made into GSoC projects (dealing with tests, writing new wrappers, mostly), if it's not too late for inclusion.
More complete list of things:
- On MOI's side:
- Discuss the best way to deal with functions: Next-generation nonlinear MathOptInterface.jl#846 (comment)
- On JuMP's side:
- Strict inequality: already possible. https://github.com/dourouc05/JuCP.jl/blob/0c2d0f359e882baf4ff06d404e47d9ee542b05e0/src/sets.jl#L51-L53
- New syntax (functions as constraints):
@constraint(m, constraint(x, y)). PR Add extension points for more generic@constraintsyntax #2051. - New syntax (reification):
@constraint(m, x := { constraint(x, y) }),@constraint(m, x := { x < y }). PR Add parse_constraint_expr and parse_constraint_head #2228 (split from Add extension points for more generic@constraintsyntax #2051). - New syntax (new expressions in very limited cases):
@constraint(m, x == count(y .== 1)). PR Addrewrite_call_expression. #2229 or PR Addrewrite_call_expressionthrough_rewrite_expr. #2241 (split from Add extension points for more generic@constraintsyntax #2051). - New syntax (new expressions in less limited cases):
@constraint(m, x == y[z])with eitheryorzvariables. No PR for now. Is an overload ofgetindexenough? - New syntax (Boolean algebra):
@constraint(m, x \land y),@constraint(m, x & y). PR Addrewrite_call_expressionthrough_rewrite_expr. #2241. - New syntax (Boolean expressions as constraints):
@constraint(m, x)to be understood as@constraint(m, x == true). PR Add extension points for more generic@constraintsyntax #2051? - Documentation for these new PRs on JuMP's side.
- Bug fixes:
parse_one_operator_constraint: clash withparse_ternary_constraintwhen there are four arguments #2246 (hack in JuCP).
- On CPE's side to extend MOI:
- Many new sets implemented, review process started: https://github.com/dourouc05/ConstraintProgrammingExtensions.jl
- Discussion about
Element: [RFC] Element: limit to two elements? JuliaConstraints/ConstraintProgrammingExtensions.jl#3 - Discussion about
BinPacking: [RFC] BinPacking: what about forced fixed sizes? JuliaConstraints/ConstraintProgrammingExtensions.jl#4 - Discussion about constraint mixing: Constraints that are "simple" compositions of other constraints JuliaConstraints/ConstraintProgrammingExtensions.jl#6
- FlatZinc:
- Output format
- Standard sets
- Nonlinear functions
- Input format
- Standard sets
- Nonlinear functions
- Optimizer interface
- Output format
- XCSP3:
- On JuCP's side to extend JuMP:
- Provide basic, nice syntax for the wrapped constraints:
- Provide more natural syntax for constraints that could benefit from it, like
element
- On solvers' side:
- Write generic tests for solvers, specifically for constraint engines (bad support for purely continuous problems).
- Wrap CPLEX CP Optimizer in CPLEXCP.jl
- Base wrapper around Java API
- CP sets
- Support for intervals and interval sequences
- Wrap Choco
- Wrap Chuffed
- Wrap Gecode
- Wrap JaCoP
- Wrap LocalSolver (without the usual limitations of CP solver)
blegat, rschwarz, hdavid16, bhalonen, Wikunia and 1 moreyordiak and gdalle