// ---------------------------------------------------------------------------------------------
// ------------   PREMIER EXEMPLE CPLEX CALLABLE LIBRARY ------------------
// --
// -- Date : 20 mai 2011
// --
// -- Auteurs : Ch. Duhamel, H. Toussaint, Ph. Lacomme
// --     
// ---------------------------------------------------------------------------------------------
// --     
// --     Minimize
// --        obj: x1 + x2 + x3 + id6
// --     Subject To
// --        id8:  x1 + x2 >= 2
// --        id10: x2 + x3 >= 3
// --     Bounds
// --        0 <= x1 <= 101
// --        0 <= x2 <= 102
// --        0 <= x3 <= 103
// --     
// ---------------------------------------------------------------------------------------------

#include <ilcplex/ilocplex.h>

#include <string>

ILOSTLBEGIN

int main(int, char**) {
    IloEnv env;
    try {
        cout << "Starting..." << endl;

      // creation du modèle
      IloModel       mod(env);	
	    
      // creation de l'environneemnt	        
      IloCplex cplex(mod); 

      IloNumVar x1(env, 0, 101, ILOINT,"x1");
      mod.add(x1);
       
      IloNumVar x2(env, 0, 102, ILOINT,"x2");
      mod.add(x2);
       
      IloNumVar x3(env, 0, 103, ILOINT, "x3");
      mod.add(x3);
        

      mod.add(IloMinimize(env, x1+x2+x3));
   
      mod.add(x1+x2 >= 2);   
	    
      mod.add(x2+x3 >= 3);   	    

       // Solve model
       
       cplex.exportModel("essai.lp");

       cplex.solve();
       cplex.out() << "solution status = " << cplex.getStatus() << endl;
	
       cplex.out() << endl;
       cplex.out() << "cost   = " << cplex.getObjValue() << endl;
	
       
       cplex.out() << "  x_1" <<  " = " << cplex.getValue(x1) << endl;
       cplex.out() << "  x_2"  << " = " << cplex.getValue(x2) << endl;
       cplex.out() << "  x_3" << " = " << cplex.getValue(x3) << endl;	       
   
       
    } catch (...) 
       {
        cerr << "Error" << endl;
         }

   env.end();
    
    return 0;
}
