Heuristiques de branchement basées sur le dénombrement pour la résolution de problèmes d'arbres de recouvrement contraints

Resume Ce memoire se concentre sur la programmation par contraintes (CP), une approche puissante pour resoudre des problemes combinatoires. Notre travail tourne autour de l'un des concepts cles de la CP : les heuristiques de branchement. Cette composante definit comment l'espace de recherche doit etre explore, quelles regions devraient etre visitees en premier pour trouver une solution rapidement. Le progres sur ce sujet est important, etant donne que la CP n'admet toujours pas d'approche generique efficace pour la recherche. Les heuristiques de branchement basees sur le denombrement comme maxSD se sont montrees efficaces pour une variete de problemes de satisfaction de contraintes. Ces heuristiques ont besoin d'un algorithme dedie qui calcule la densite de solution locale pour chaque paire de variable-valeur, pour chaque contrainte, de facon semblable a ce qui a ete fait pour les algorithmes de filtrage, pour appliquer l'inference locale. Cependant, plusieurs contraintes n'ont toujours pas de tel algorithme. Dans notre travail, nous derivons un algorithme exact qui, en temps polynomial, calcule la densite de solution pour la contrainte d'arbre de recouvrement, a partir d'un resultat connu sur le nombre d'arbres de recouvrement dans un graphe non oriente. Nous etendons ensuite cet algorithme pour les graphes orientes, ce qui nous permet de calculer la densite de solution pour une contrainte d'anti-arborescence, egalement en temps polynomial. Ensuite, nous comparons empiriquement les heuristiques de branchement basees sur ces resultats avec d'autres approches generiques. Tout d'abord, nous utilisons le probleme d'arbres de recouvrement de degre contraint, sur des graphes non orientes pour demontrer l'efficacite de notre approche. Ensuite, pour les graphes orientes, nous utilisons le probleme de la k-arborescence.Les heuristiques de branchement basees sur le denombrement se montrent comme des approches tres efficaces, autant pour le cas non oriente que pour le cas oriente, trouvant rapidement des solutions avec un minimum de retours en arriere. ----------Abstract This Master's thesis focuses on Constraint Programming (CP), a powerful approach to solve combinational problems. Our work revolves around one of the main components of CP : branching heuristics. This component defines how the search space must be explored, which areas should be visited first in order to quickly find a solution to the problem. Advances on this topic are critical, since CP lacks a generic effective search approach. Counting-based branching heuristics such as maxSD were shown to be effective on a variety of constraint satisfaction problems. These heuristics require that we equip each family of constraints with a dedicated algorithm to compute the local solution density of variable assignments, much as what has been done with filtering algorithms to apply local inference. However, many constraints still lack such an algorithm. In our work, we derive an exact polytime algorithm to compute solution densities for a spanning tree constraint, starting from a known result about the number of spanning trees in an undirected graph. We then extend the algorithm for directed graphs, which allows us to compute solution densities for a reverse arborescence constraint, also in polytime. We then empirically compare branching heuristics based on those results with other generic heuristics. First, we use the degree contrained spanning tree, on undirected graphs, to demonstrate the effectiveness of our approach. Then, for the directed graphs, we use the k-arborescence problem. Counting-based branching heuristics prove to be very effective for both the undirected and directed case, finding solutions quickly and without many backtracks.