2.1 Génération aléatoire
En repartant de la méthode de génération aléatoire donnée, proposer une
nouvelle méthode aléatoire plus performante. L’idée consiste à disposer du plus
grand nombre possible d’items dans la solution finale (à l’inverse, la méthode
actuelle peut s’arrêter même s’il reste de la place).
Insérer le nouvel algorithme dans la fonction main de la classe Evaluator
et relancer le programme.
2.2 Heuristique gloutonne
Réaliser une heuristique gloutonne (construction itérative en réalisant le
meilleur choix à chaque étape).
2.3 Recherche exhaustive
Réaliser une exploration exhaustive des solutions (par récursion).
Comment de comporte cette méthode vis-à-vis des méthodes précédentes sur
l’ensemble de tests ?
2.4 Méthode de branch and bound
Repartir de la méthode précédente en y ajoutant des méthodes bornant
supérieurement et inférieurement les solutions afin d’éliminer les branches de
l’arbre de recherche qu’il est inutile d’explorer. Les bornes peuvent être obtenues
grâce à l’heuristique gloutonne.
Le gain est-il significatif dans sur l’ensemble de tests ?
2.5 Programmation dynamique
Réaliser l’algorithme de programmation dynamique proposé en cours. L’ar-
ticle de Wikipedia http://en.wikipedia.org/wiki/Knapsack_problem four-
nit un complément d’informations.
Quelle méthode se comporte le mieux sur l’ensemble de tests ?
3 Programmation linéaire
On utilisera dans cette partie le solveur GLPK (GNU Linear Programming
Kit) qui est libre, multiplateforme, dispose de méthodes pour la programmation
en variables mixtes et d’une interface Java.
La documentation de GLPK est disponible ici http://bjoern.dapnet.de/
glpk/refman48.pdf, et celle de l’interface Java, ici http://bjoern.dapnet.
de/glpk/javadoc/index.html.
2