2 termes d’une expression 3 public class ProblemMaxStable { 63 modele.addLe(expr, 1.0); // ajouter chaque contrainte au 4 private IloCplex modele; // IloCplex est la classe utilisée pour créer et modèle résoudre une grande variété de 64 } 5 // modèles de programmation mathématique. 65 } 6 66 } catch (IloException e) { 7 private int n; // nombre de ligne de la matrice 67 System.err.println("Concert exception caught: " + e); 8 68 } 9 private int m; // nombre de colonnes 69 } 10 70 public void createFonctionObj() { 11 private short[][] C; // matrice des contraintes 71 try { 12 72 IloLinearNumExpr fonction = modele.linearNumExpr(); // représenter la 13 private IloNumVar[] x; /* x est un vecteur des variables du problème fonction objective en termes d’une d’affectation. représente une variable numérique dans un modèle. Les ariables 73 // expression sont représentées par un objet de type IloNumVar(variables quelconques) ou 74 for (int i = 0; i < n; i++) // parcourir les lignes IloIntVar(variables entières) */ 75 fonction.addTerm(1, x[i]); 14 76 modele.addMaximize(fonction); // ajouter la fonction au modèle 15 public static void main(String[] args) { 77 } catch (IloException e) { 16 short[][] C = { // initializer la matrice des contraintes 78 System.err.println("Concert exception caught: " + e); 17 { 0, 1, 1, 0, 0, 0, 0, 0 }, 79 } 18 { 1, 0, 0, 0, 0, 1, 0, 0 }, 80 } 19 { 1, 0, 0, 0, 0, 0, 1, 0 }, 81 // fonction pour resoudre le probeleme et renvoie true en cas de success 20 { 0, 0, 0, 0, 1, 0, 0, 1 }, 82 public boolean solve() { 21 { 0, 0, 0, 1, 0, 1, 0, 0 }, 83 boolean hasSolved = false; // variable to check if solved 22 { 0, 1, 0, 0, 1, 0, 1, 0 }, 84 try { 23 { 0, 0, 1, 0, 0, 1, 0, 1 }, 85 hasSolved = modele.solve(); // solve fonction pour la résolution du 24 { 0, 0, 0, 1, 0, 0, 1, 0 } probléme 25 }; 86 } catch (IloException e) { 26 ProblemMaxStable ex = new ProblemMaxStable(C); // intancier la classe 87 System.err.println("Concert exception caught : " + e); 27 ex.getsolutionStableMax(); //afficher les resultat de probleme 88 } 28 } 89 return hasSolved; 29 // constucteur de la class ProblemMaxStable 90 } 30 public ProblemMaxStable(short[][] C) { 91 // renovoie les solutions du modele 31 this.C = C; 92 public double[] getSolution() { 32 n = C.length; 93 double[] s = new double[n * m]; // variable pour stocker les solutions 33 try { 94 try { 34 modele = new IloCplex(); /* Créer un objet (une instance) de type 95 s = modele.getValues(x); // recuperer les solutions du modele IloCplex (qui implemente l’interface IloMPModeler, et donc l’interface 96 } catch (IloException ex) { IloModeler) */ 97 System.err.println("Concert exception caught: " + ex); 35 createModele(); // appeler la function createModele() 98 } 36 System.out.println(modele.toString()); 99 return s; 37 } catch (IloException e) { // le model n'est pas créer 100 } 38 System.err.println("Concert exception caught: " + e); 101 // afficher les solutions 39 } 102 public void getsolutionStableMax() { 40 } 103 if (solve()) { // si le probelem est résolu afficher les resultats 41 public void createModele() { 104 double[] d = getSolution(); // appeler la function getSolution() 42 createVariables(); // appeler la function createVariables() 105 System.out.println("La solution du problème du stable maximum est:"); 43 createConstraints(); // appeler la function createConstraints() 106 System.out.print("S={\t"); 44 createFonctionObj(); // appeler la function createFonctionObj() 107 for (int i = 0; i < n; i++) 45 } 108 if (d[i] == 1) 46 // créer les variables du model 109 System.out.print("v" + (i + 1) + "\t"); 47 public void createVariables() { 110 System.out.println("}"); 48 try { 111 } 49 x = modele.boolVarArray(n); // boolVarArray Crée et renvoie un tableau 112 } de (n) nouvelles variables booléennes domaine 0,1). 113 } 50 } catch (IloException e) { // echec de creation 114 51 System.err.println("Concert exception caught: " + e); 52 } 53 } 54 public void createConstraints() { 55 try { 56 for (int l = 0; l < C.length; l++) // parcourir les lignes 57 for (int k = l + 1; k < C[0].length; k++) { // parcourir les colonnes 58 IloLinearNumExpr expr = modele.linearNumExpr(); /*Les contraintes sont repŕesentées par des expressions. Une expression est un objet de type IloNumExpr ou IloLinearNumExpr pour une expression linéaire.*/ 59 60 if (C[l][k] != 0) { // si la contrainte de la linge l et colonne k different de zero 61 expr.addTerm(1.0, x[l]); // représenter chaque contrainte en termes d’une expression