• Aucun résultat trouvé

Contributions en programmation par contraintes sur intervalles

3.2 R´ ehabilitation de l’algorithme 3B

(Travail en collaboration avec Gilles Chabert, et plus r´ecemment aussi avec Ignacio Araya et Bertrand Neveu ; article repris au chapitre B.)

Nous avons apport´e plusieurs am´eliorations `a l’algorithme 3B d´ecrit `a la section 2.4.4 (cf. algo-rithme 2 page 33). Celles d´ecrites `a la section 3.2.4 rel`event de d´etails d’impl´ementation qui ont une incidence sur les performances ; les autres sont plus importantes. Ces am´eliorations seront

`

a la base des trois algorithmes CID, 3BCID et ACID dont les deux derniers (voire le dernier) remplaceront l’actuel 3B disponible dans la biblioth`eque Ibex. Les principales am´eliorations sont d´ecrites dans l’article [283] quoique plusieurs exp´erimentations n’y figurent pas. Le travail de contraction permet aussi `a 3BCID, par effet de bord, de s´electionner une prochaine variable pertinente `a bissecter dans l’arbre de recherche (cf. section 3.2.3), et le crit`ere retenu dans l’implantation courante a l´eg`erement ´evolu´e depuis sa publication. L’am´elioration d´ecrite `a la section 3.2.2 rel`eve en partie d’une perspective `a moyen terme qui produira l’algorithme ACID (Adaptive CID).

3.2.1 Disjonction constructive sur intervalles (CID)

La premi`ere id´ee qui nous a motiv´es `a nous int´eresser `a l’algorithme3Best bas´ee sur ladisjonction constructive, initialement introduite par Pascal Van Hentenryck et al. dans les ann´ees 1990 [294]

pour traiter l’extension du mod`ele des CSP aux disjonctions de contraintes. Cette id´ee s’applique

´

egalement `a un domaine fini dans un CSP classique, o`u chaque domaine peut se voir comme une disjonction de contraintes unaires imposant une valeur parmi les diff´erentes valeurs possibles : x=v1∨...∨x=vi∨...∨x=vs, o`uxd´esigne une variable discr`ete etv1, ..., vssont les diff´erentes valeurs du domaine. Le principe de cette disjonction constructive de domaine a des similarit´es avec celui du rognage utilis´e dans la3B :

1. Chaque valeur vi est assign´ee `a x `a tour de rˆole, les autres ´etant temporairement sup-prim´ees. On applique un algorithme de filtrage au sous-probl`eme Px=vi correspondant.

2. Une fois cette boucle termin´ee, pour ne pas provoquer d’explosion combinatoire, l’espace de recherche est remplac´e par l’uniondes diff´erents espaces de recherche obtenus pour chaque sous-probl`eme. Autrement dit, une valeurvi est d´efinitivement supprim´ee du domaine de x si elle est enlev´ee par sous-filtrage dans chacun des sous-probl`emes.

Cette id´ee peut s’appliquer presque directement `a un domaine continu en divisant un intervalle en stranches, comme l’illustre la figure 3.2.1. L’exemple en deux dimensions montre un d´ecoupage ens= 4 tranches sur [x]. A chaque tranchei, une contraction sur le sous-probl`eme, par exemple avec HC4, conduit `a la boˆıte contract´ee [Bi]. La contraction finale obtenue par construction disjonctive sur intervalles (en anglais : CID) est l’enveloppe de {[B1], ...,[B4]} (le rectangle en pointill´es).

Cette proc´edure appliqu´ee `a un intervalle est appel´ee VarCID et peut remplacer VarShaving dans l’algorithme 2, page 33.VarCIDest param´etr´e par un nombre de tranchesscid trait´ees pour chaque variable. Elle a le mˆeme coˆut dans le pire cas que VarShaving (le coˆut de l’enveloppe

3.2. R´ehabilitation de l’algorithme 3B 49

B

1

B

3

B

4

B

2

x

´

etant n´egligeable devant les appels au sous-contracteur), mais peut apporter une contraction potentiellement dans toutes les dimensions. Notons que le nombre d’it´erations dans VarCID peut ˆetre strictement inf´erieur `ascid si l’enveloppe courante des boˆıtes [Bi] (calcul´ee donc au fur et `a mesure) est ´egale `a la boˆıte initiale sur toutes les autres variables que x.

Cette derni`ere remarque m’a conduit `a la variante3BCIDqui est le contracteur g´en´eraliste utilis´e par d´efaut par Ignacio Araya, Bertrand Neveu et moi depuis plusieurs ann´ees pour son efficacit´e.

L’algorithme 3BCID utilise une proc´edure Var3BCID qui est une hybridation de VarShaving et de VarCID. Elle est param´etr´ee par une pr´ecision relative inner (pour la partie rognage) et par un nombre de tranchesscid (pour la partie CID). Le principe est d´ecrit ci-dessous et illustr´e par la figure 3.3 :

1. L’intervalle [x] est d’abord rogn´e `a gauche et `a droite par un processus de rognage pa-ram´etr´e par inner. La seule diff´erence est que nous conservons les deux premi`eres boˆıtes [Bg] (`a gauche) et [Bd] (`a droite) qui ne sont pas exclues par le sous-contracteur.

2. L’intervalle restant [x]0est alors d´ecoup´e en au plusscidtranches de diam`etre ´egal, qui sont trait´ees par le sous-contracteur (voir plus haut). La proc´edure VarCIDrenvoie l’enveloppe [Bhull] desscid boˆıtes contract´ees.

3. On retourne finalement l’enveloppe de [Bg], [Bhull] et [Bd].

3BCID est le fruit de l’exp´erimentation de quelques dizaines de variantes de CID, dont deux seulement s’av`erent ˆetre aussi efficaces que3BCID.3BCIDa ´et´e retenu pour sa simplicit´e.

3B:

[x]’

CID:

Fig. 3.3 – Travail de 3BCIDsur une variable (Var3BCID).inner vaut 10% etscid vaut 1.

Le param´etrage par d´efaut de3BCIDsouligne une petite d´eception : inner est fix´e `a 10%, mais scidest fix´e `a 1, ce qui conduit `a un seul appel suppl´ementaire li´e `a la partie CID et `a l’enveloppe de 3 boˆıtes seulement. Choisir scid = 1 a certes un impact significatif sur les performances par rapport `a l’algorithme3B(scid = 0), mais augmenter encorescidest tr`es souvent contre-productif, sauf pour quelques instances avec un grand nombre de variables commeMechanism [222]. Cette observation empirique souligne que CID ne contracte pas beaucoup plus que 3B, mais atteint un point quasi-fixe plus vite, `a cause de la contraction en plusieurs dimensions de VarCID.

Autrement dit, s’il est certain que CID contracte mieux que 3B en th´eorie, le gain en pratique semble ˆetre souvent marginal.

3.2.2 Quelles variables rogner

L’obtention de la propri´et´e th´eorique (3B-consistance) justifie l’utilisation de la boucle ext´erieure repeat (cf. algorithme 2, page 33) et du param`etre outer contrˆolant l’arrˆet de cette boucle pour atteindre un point quasi-fixe. Apr`es maintes exp´erimentations cherchant `a trouver un crit`ere adaptatif de relance de l’it´eration suivante, je me suis rendu compte que les performances optimales ´etaient souvent atteintes en une seule it´eration, voire moins ! C’est-`a-dire qu’il ne faut pas raisonner en nombre d’it´erations sur toutes les variables, mais en nombre n0 de variables

`

a rogner au total, ce nombre ´etant souvent inf´erieur ou ´egal au nombre n de variables dans le syst`eme.

Une premi`ere am´elioration revient donc `a supprimer cette boucle ext´erieure, ainsi que le pa-ram`etre correspondant outer, et `a lancer la boucle int´erieure sur n0 variables (`a tour de rˆole si n0 > n),n0 ´etant un param`etre utilisateur fix´e par d´efaut `a n.

Une am´elioration plus ambitieuse consiste `a r´egler de mani`ere adaptative le param`etre n0

c’est-`

a-dire automatiquement et dynamiquement pendant la recherche combinatoire. Si les crit`eres pr´esent´es `a la section suivante ne sont pas pertinents pour d´eterminern0, les heuristiques de choix de bissection “intelligentes” semblent prometteuses, en particulier la tr`es reconnue heuristique utilisant la fonction smear [167] bas´ee sur le diam`etre des intervalles courants et la valeur des d´eriv´ees partielles (refl´etant l’impact d’une variable dans une fonction). Cela s’explique intuiti-vement par le fait que le rognage peut se voir comme une bissection polynomiale et repose aussi sur la diminution artificielle de la taille des intervalles pour limiter le probl`eme des occurrences multiples et pour accroˆıtre le nombre de fonctions continues dans la boˆıte courante.

Pour r´esumer l’algorithme ACID (AdaptiveCID), il s’agit de l’algorithme3BCID o`u le nombren0 d’appels `a Var3BCID n’est pas connu `a l’avance : apr`es chaque appel `a Var3BCID, on estime si on a atteint un point quasi-fixe en termes de gain en contraction (p´erim`etre des boˆıtes) sur les derniers appels. Dans le cas contraire, la fonction smearpermet de s´electionner la prochaine variable `a rogner. Ainsi, en plus des param`etres de son sous-contracteur (notamment HC4 ou Mohc), ACID ne g`ere que deux param`etres utilisateur : le ratio inner et le nombre de tranches scid. De plus, la valeur par d´efautinner = 10% est robuste (les espoirs de gain d’un r´eglage fin sont faibles) et la valeurscid= 1 est tr`es robuste (espoirs tr`es faibles).

3.2. R´ehabilitation de l’algorithme 3B 51 3.2.3 Heuristique de choix de variable `a bissecter bas´ee sur CID

En plus de sa vitesse ´elev´ee de convergence vers une boˆıte quasi-fixe, la disjonction construc-tive sur intervalles permet de fournir une heuristique efficace de choix de prochaine variable `a bissecter.

Le principe consiste `a calculer un ratioratioCID[i]pour chaque variable rogn´ee et `a s´electionner la variable xi qui poss`ede le ratio le plus petit. Le crit`ere simple retenu actuellement pour 3BCIDest quelque peu diff´erent de celui d´ecrit dans [283]. Il semble pertinent mˆeme quand scid

vaut 1. Pour la variable xi, soit [Bgi], [Bid] les boˆıtes renvoy´ees par le processus de rognage et [B1i], ...,[Bsicid] les boˆıtes contract´ees par la construction disjonctive sur intervalles. On calcule :

ratioBis[i] = Perim([Bgi]) +Perim([Bdi]) +Pscid

j=1Perim([Bji]) (scid+ 2)×Perim(Hull([Bgi],[Bdi],[B1i], ...,[Bsicid]))

Ce ratio quantifie en quelque sorte la perte en “taille” de boˆıte caus´ee par l’enveloppe effectu´ee parVar3BCIDpour ´eviter l’explosion combinatoire. Si le ratio est tr`es petit, cela signifie qu’une grande partie du travail de contraction obtenu dans chaque boˆıte [Bgi], [Bdi], [B1i], ...,[Biscid] est perdue par l’op´erateur d’enveloppe et qu’il vaudrait mieux `a la place effectuer un “vrai”

point de choix sur ces boˆıtes. Le fait qu’une bissection s’effectue en coupant l’intervalle en deux sous-intervalles, et non pas scid+ 2, ne semble rien enlever en pratique `a la pertinence du crit`ere donn´e ci-dessus. Les exp´erimentations montrent que cette heuristique de choix de variable (`a bissecter) est un peu meilleure que les heuristiques `a tour de rˆole et plus large domaine d’abord. L’heuristique semble de plus ˆetre relativement robuste, c’est-`a-dire qu’elle provoque moins souvent d’explosion combinatoire que ses concurrentes. Elle est en revanche probablement un peu moins efficace que la fonction smearquoique nous n’ayons pas effectu´e de comparaisons syst´ematiques entre les deux heuristiques.

3.2.4 Gestion des tranches dans la proc´edure VarShaving

L’algorithme 3B d´ecrit dans la litt´erature [186] utilise un param`etre inner qui est un nombre fixe de flottants. Le param`etre implant´e dans les outils existants est un diam`etre d’intervalle absolu (taille fixe). Nous proposons un param`etre inner qui est un pourcentage de la taille des intervalles, autrement dit, dont l’inverse est un nombre fix´e de tranches pour chaque intervalle trait´e par VarShaving. Ce d´etail d’impl´ementation permet de bien mieux contrˆoler l’effort de rognage ind´ependamment du diam`etre de l’intervalle trait´e, et on a observ´e que le rognage d’un petit intervalle peut parfois entraˆıner la contraction de domaines plus larges. Si l’on veut continuer `a sp´ecifier une r´ef´erence absolue, mieux vaut ajouter un autre param`etre permettant de ne pas d´eclencher le processus de rognage quand l’intervalle exc`ede le diam`etre sp´ecifi´e (par d´efaut sous la pr´ecision des solutions).

Un autre aspect est la mani`ere de d´ecouper les tranches dans la proc´edure de rognage. La litt´erature utilise un processus dichotomique, g´en´eralement par tranches de taille d´ecroissante, et parfois par tranches de taille croissante, c’est-`a-dire en partant de la borne avec une petite tranche de diam`etre Diam([x])

inner , comme dans l’outil ALIAS [201]. Nous proposons en fait une technique de

d´ecoupage hybride d´ependant de la valeur du param`etre inner. Un simple d´ecoupage lin´eaire en tranches de taille Diam([x])

inner est effectu´e quand la pr´ecision demand´ee (inner) n’est pas trop grande, le processus dichotomique ´etant r´eserv´e aux pr´ecisions fines demandant la cr´eation de nombreuses tranches.

3.2.5 3B : l’algorithme sous-estim´e

Autant HC4 (ou l’algorithme 2B) a r´eussi `a faire consensus dans les communaut´es d’optimisa-tion globale et d’analyse par intervalles, autant l’algorithme3B reste m´econnu. Pire encore, 3B ne fait mˆeme pas consensus au sein de la mini-communaut´e de programmation par contraintes sur intervalles. En fait, seuls deux sous-groupes de l’´equipe COPRIN de mani`ere relativement ind´ependante rapportent des r´esultats exp´erimentaux montrant la sup´eriorit´e de l’algorithme 3B : les roboticiens (Jean-Pierre Merlet, David Daney) avec ALIAS et les informaticiens (Igna-cio Araya, Gilles Chabert, Bertrand Neveu et moi) avec Ibex. Le sentiment des informati-ciens de COPRIN repose sur de nombreuses exp´erimentations sur la plupart des instances z´ ero-dimensionnelles de la page Web de COPRIN [204]. Pour r´esumer,Box, en tout cas l’algorithme BC4 implant´e dans Ibex ou l’algorithme Polybox pr´esent´e plus loin, ne semble pas concur-rentiel par rapport `a 3BCID(HC4). Pour confirmer nos premi`eres exp´erimentations, il faudrait comparer 3BCID(HC4) `a des versions avanc´ees de Box, d´evelopp´ees notamment `a Nantes [104].

Nous sommes aussi relativement confiants pour affirmer qu’un sch´ema de r´esolution bas´e sur HC4 (+ Newton) n’est g´en´eralement pas concurrentiel par rapport au mˆeme sch´ema utilisant 3BCID(HC4), comme le sugg`ere l’annexe C.

Mˆeme si nos r´esultats ´etaient trop optimistes ou biais´es par un jeu de tests insuffisant, le mi-nimum serait de doter de 3BCID tous les outils de r´esolution disposant de HC4 (ou d’un autre algorithme de 2B) ou deMohc d´ecrit ci-apr`es.

3.3 Mohc : un algorithme de propagation de contraintes