#include "..\Modelib.h"

using namespace std;

int main( int argc, char ** argv)
{
  /*-----------------------------------------------------------------------*/
  /*  Exemple d'un restaurateur:                                           */
	/*    Un restaurateur constate que sa clientèle préfère                  */
  /*    les assortiments de coquillages et qu’il peut offrir               */
  /*    indifféremment :                                                   */
  /*    - des assiettes à 8 €, contenant 5 oursins, 2 bulots et 1 huître;  */
  /*    - des assiettes à 6 €, contenant 3 oursins, 3 bulots et 3 huîtres. */
  /*	  Il dispose de 30 oursins, 24 bulots et 18 huîtres.                 */
  /*                                                                       */
  /*-----------------------------------------------------------------------*/


  //---------------------------------------------------------
  //  Déclaration des variables
  //---------------------------------------------------------

  // déclaration de la classe Model qui va représenté le programme linéaire
  Model modele;

  //déclaration des variable dans le programme linéaire
  IntVar x1(modele,"x1"); // nombre d'assiettes à 8 euros
  IntVar x2(modele,"x2"); // nombre d'assiettes à 6 euros

  modele.SetProblemName("Probleme du restaurateur");
  modele.Maximize( 8*x1 +  6*x2, "z" );

  modele.AddComment("Nombre d'oursins");
  modele.Add( 5*x1 + 3*x2 <= 30, "c1");
  modele.AddComment("Nombre de bulots");
  modele.Add( 2*x1 + 3*x2 <= 24, "c2");
  modele.AddComment("Nombre d'huitres");
  modele.Add(   x1 + 3*x2 <= 30, "c3");
  
  cout << modele << endl;

  modele.InitSolver(GLPK);
  float solution = modele.Solve();

  cout << endl << "Valeur de la solution: " << solution << endl;


  modele.ShowMe();

  #ifdef USE_HTML_FORMAT
    modele.SortieHTML("Restaurateur.html");
  #endif
  #ifdef USE_LATEX_FORMAT
    modele.SortieLATEX("Restaurateur.tex");
  #endif
}
