1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| import choco.Choco;
import choco.cp.model.CPModel;
import choco.cp.solver.CPSolver;
import choco.kernel.model.constraints.Constraint;
import choco.kernel.model.variables.integer.IntegerVariable;
public class Snippet {
public static void main(String args[])
{
//1- Create the problem
CPModel mod = new CPModel();
int nbr_points = 6;
//2- Variable qui vont recevoir les positions.
IntegerVariable[] pos = new IntegerVariable[nbr_points];
for (int i = 0; i < pos.length; i++)
pos[i]=Choco.makeIntVar("POS", -333, 333);
//3- Contraintes
// Pour placer le premier point (par exemple)
mod.addConstraint(Choco.eq(pos[0],5));
// Les distance de la table donnée
mod.addConstraint(Choco.distanceEQ(pos[0], pos[1], 2));
mod.addConstraint(Choco.distanceEQ(pos[1], pos[2], 1));
mod.addConstraint(Choco.distanceEQ(pos[2], pos[3], 1));
mod.addConstraint(Choco.distanceEQ(pos[3], pos[4], 2));
mod.addConstraint(Choco.distanceEQ(pos[4], pos[5], 3));
// qlq verification en plus
mod.addConstraint(Choco.distanceEQ(pos[0], pos[5], 9));
mod.addConstraint(Choco.distanceEQ(pos[0], pos[3], 4));
// Ne pas avoir 2 point au même endroit
for (int i = 0; i < pos.length; i++) {
for (int j = 0; j < pos.length; j++) {
if (i!=j)
mod.addConstraint(Choco.distanceNEQ(pos[i], pos[j], 0));
}
}
//4- Search
CPSolver s = new CPSolver();
s.read(mod);
if (s.solve()==true)
{
int cpt=0;
do
{
System.err.println("Sol "+(cpt++));
//
//5- Print
for (int i = 0; i < pos.length; i++) {
System.err.println(s.getVar(pos[i]).pretty());
}
}
while(s.nextSolution()==Boolean.TRUE);
}
else
System.err.println("No solutions");
}
} |
Partager