package launcher;
import model.Module;
import model.PlageCreneaux;
import model.Precedence;
import model.Prof;
import model.Type;
import model.TypeEnseignement;
import model.UV;
import choco.Choco;
import choco.cp.model.CPModel;
import choco.cp.solver.CPSolver;
import choco.kernel.model.Model;
import choco.kernel.model.constraints.Constraint;
import choco.kernel.model.variables.integer.IntegerVariable;
import choco.kernel.solver.Solver;
public class Planning {
public static void main(String[] args) {
// constant of the model
// our model
Model m = new CPModel();
// variables creee pour le test
// creation de l'UV
UV RechercheOperationnelle = new UV("Recherche Operetionnelle", 0, 14);
// ------------------------------------------------------------------
// construction des modules
int nbModules = 2;
Module complexite = new Module("Complexite");
Module graphes = new Module("Graphes");
// --------------------------------------- on a 2 module differents
// construction des creneaux libres
IntegerVariable cls1 = new IntegerVariable("debut 1", 0, 0);
IntegerVariable clf1 = new IntegerVariable("fin 1", 3, 3);
IntegerVariable cld1 = new IntegerVariable("duree 1", 3, 3);
PlageCreneaux cl1 = new PlageCreneaux("premiere plage libre", cls1, clf1, cld1);
//
IntegerVariable cls2 = new IntegerVariable("debut 2", 4, 4);
IntegerVariable clf2 = new IntegerVariable("fin 2", 6, 6);
IntegerVariable cld2 = new IntegerVariable("duree 2", 2, 2);
PlageCreneaux cl2 = new PlageCreneaux("deuxieme plage libre", cls2, clf2, cld2);
//
IntegerVariable cls3 = new IntegerVariable("debut 3", 7, 7);
IntegerVariable clf3 = new IntegerVariable("fin 3", 10, 10);
IntegerVariable cld3 = new IntegerVariable("duree 3", 3, 3);
PlageCreneaux cl3 = new PlageCreneaux("troisieme plage libre", cls3, clf3, cld3);
PlageCreneaux[] creneauxLibres = {cl1, cl2, cl3};
// -------------------------------------- on a cree 12 creneaux en tout
// construction des types d'enseigenement pour chaque module
Prof profCMComplexite = new Prof("Chams");
int nbCreneauxCMCOmplexite = 3;
TypeEnseignement CMComplexite = new TypeEnseignement("CM Complexite", Type.CM, 1, 2, profCMComplexite);
//
Prof profCMGraphes = new Prof("Gueret Jussien");
int nbCreneauxCMGraphes = 4;
TypeEnseignement CMGraphes = new TypeEnseignement("CM graphes", Type.CM, 1, 2, profCMGraphes);
//
Prof profTDGrpahes = new Prof("Gueret Jussien");
Prof profTDGraphes2 = new Prof("Prof 2");
int nbCreneauxTDGraphes = 5;
TypeEnseignement TDGraphes = new TypeEnseignement("TD graphes", Type.TD, 2, 2, profTDGrpahes);
TDGraphes.addProf(profTDGraphes2);
// -------------------------------------------------------
// creation des creneaux a placer
// constraints
// repartition sur les plages horaires
// les creneaux a placer ne doivent pas l'etre en meme temps
Constraint c1 = Choco.disjunctive(creneauxAPlacer);
m.addConstraint(c1);
// precedences
Constraint[] c2 = new Constraint[preced.length];
for(int i = 0; i < c2.length; i++) {
c2[i] = Choco.startsAfterBegin(preced[i].getCours2(), preced[i].getCours2(), preced[i].getDureeMinEntre());
}
m.addConstraint(c2);
// indisponibilite des encadrants
// TODO
// blocs minimaux et maximaux pour les types de cours
// TODO
// preference dans les horaires
// TODO
// cours le plus tot possible dans le semestre
// TODO
// solver
Solver s = new CPSolver();
// read the model
s.read(m);
// solve the problem
s.solve();
// print the value
}
}