// fichier charpentier1.mod
// Données
int N = 5;
int dureeJournee = 8;
int planchesJournee = 40;
range objets = 1 .. N;
int planches[objets] =  [ 4, 5, 8, 3, 7 ];
float duree[objets];
execute { // on peut faire des calculs sur les donn´ees
	for(var i=1; i<=N; i++) duree[i] = planches[i] / 3.4;
}

float profit[objets] = [ 12.6, 45.0, 8.0, 76.0, 7.5 ];

// Variables de d´ecision
// dvar aFabriquer[objets];
dvar int aFabriquer[objets];

// objectif

maximize sum(o in objets) profit[o]*aFabriquer[o];

subject to {
	cstTemps: sum(o in objets) duree[o]*aFabriquer[o] <= dureeJournee;
	cstPlanches: sum(o in objets) planches[o]*aFabriquer[o] <= planchesJournee;
	// une contrainte en plus: chaque objet est au moins fabriqu´e en 1 exemplaire
	auMoins1:
	forall(o in objets) aFabriquer[o] >= 1;
}
execute {
	writeln("Il faut fabriquer :");
	for(var i=1; i<=N; i++)
		writeln(aFabriquer[i], " objet(s) ", i);
	writeln("gain: ", cplex.getObjValue());
}
