Anda di halaman 1dari 1

1 package cplex; 62 expr.addTerm(1.

0, x[k]); // représenter chaque contrainte en


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