cette version donne une solution correcte avec la contrainte du nombre minimal d'employés
This commit is contained in:
parent
9798a6f3b8
commit
9a71341993
1 changed files with 43 additions and 4 deletions
|
@ -2,10 +2,15 @@ import java.nio.file.*;
|
|||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
import org.chocosolver.solver.Model;
|
||||
|
||||
import org.chocosolver.solver.variables.IntVar;
|
||||
import org.chocosolver.solver.variables.BoolVar;
|
||||
import org.chocosolver.solver.Solver;
|
||||
import org.chocosolver.solver.search.limits.FailCounter;
|
||||
|
||||
public class ProductionHoraire {
|
||||
public static final int N_PERIODE = 16;
|
||||
public static void main(String[] args) {
|
||||
|
||||
String instancePath = args[0];
|
||||
|
||||
// lecture des lignes du fichier d'instance
|
||||
|
@ -41,7 +46,7 @@ public class ProductionHoraire {
|
|||
List<Integer> nbEmployesSouhaite = new ArrayList<>();
|
||||
for (String s: strLigne3) {
|
||||
Integer i = Integer.valueOf(s);
|
||||
nbEmployesRequis.add(i);
|
||||
nbEmployesSouhaite.add(i);
|
||||
}
|
||||
|
||||
// Vérification du fichier d'instance
|
||||
|
@ -51,12 +56,46 @@ public class ProductionHoraire {
|
|||
System.out.println("MAX_H="+MAX_H.toString());
|
||||
System.out.println("MIN_PERIODE="+MIN_PERIODE.toString());
|
||||
System.out.println("nbEmployesRequis="+nbEmployesRequis.toString());
|
||||
System.out.println("nbEmployesSouhaite="+nbEmployesRequis.toString());
|
||||
System.out.println("nbEmployesSouhaite="+nbEmployesSouhaite.toString());
|
||||
System.out.println("### Fin Validation Lecture Instance ###");
|
||||
|
||||
Model model = new Model("Production Horaire");
|
||||
|
||||
// Création d'une matrice de dimensions N x N_PERIODE de variables E(i,j) dont les domaines sont des variables binaires.
|
||||
// E(i,j)=0 signifie que l'employé i est au repos à la période j.
|
||||
// E(i,j)=1 signifie que l'employé i travaille à la période j.
|
||||
|
||||
BoolVar[][] LignesE = model.boolVarMatrix("E",N,N_PERIODE);
|
||||
|
||||
BoolVar[][] ColonnesE = new BoolVar[N_PERIODE][N];
|
||||
for (int i = 0; i < N_PERIODE; i++) {
|
||||
for (int j = 0; j < N; j++) {
|
||||
ColonnesE[i][j] = LignesE[j][i];
|
||||
}
|
||||
}
|
||||
|
||||
// Contrainte du nombre requis d'employés
|
||||
|
||||
IntVar[] IVnbEmployesRequis = new IntVar[N_PERIODE];
|
||||
for (int i=0; i < N_PERIODE; i++) {
|
||||
IVnbEmployesRequis[i] = model.intVar(nbEmployesRequis.get(i));
|
||||
model.sum(ColonnesE[i], ">=", IVnbEmployesRequis[i]).post();
|
||||
}
|
||||
|
||||
// Contrainte du motif d'horaire
|
||||
|
||||
// Creation du solveur
|
||||
Solver solver = model.getSolver();
|
||||
|
||||
|
||||
// Résolution du modèle
|
||||
solver.findSolution();
|
||||
for (int i = 0; i < N; i++) {
|
||||
for (int j = 0; j < N_PERIODE; j++) {
|
||||
System.out.print(LignesE[i][j].getValue());
|
||||
System.out.print(" ");
|
||||
}
|
||||
System.out.println("");
|
||||
}
|
||||
solver.printStatistics();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue