chocoteam / choco-solver

An open-source Java library for Constraint Programming
http://choco-solver.org/
BSD 4-Clause "Original" or "Old" License
690 stars 143 forks source link

Do not define unnecessary auxiliary variables #979

Open arnaud-m opened 2 years ago

arnaud-m commented 2 years ago

Is your feature request related to a problem? Please describe. Some auxiliary variables are introduced when building arithmetic and relational expressions. This are very useful allowing to easily define complex expressions. However, they are defined when not required.

Model m = new Model();
IntVar[] x = m.intVarArray("x", 3, 0, 1000);
model.times(x[0], x[1], x[2]).post(); 
x[1].mul(x[1]).eq(x[2]).post(); // Introduce an unnecessary auxiliary variable.
System.out.println(m);

Describe the solution you'd like Not creating the auxiliary variable mul_exp_1.

Describe alternatives you've considered The user can post a times constraint instead of defining an expression.