• Aucun résultat trouvé

5.4 Algorithmes de résolution des DisCSP

6.1.2 Principe de l'approche PC

Étant donné un groupe de p agents avec ses données (variables, contraintes, domaines), tous devront collaborer an d'élaborer une solution globale du problème puisque chacun d'eux ne détient qu'une partie du problème. La recherche d'une solution nécessite la mise en place d'un ordre total entre les agents. En eet, cet ordre est important pour réduire le temps de repos des agents, et pour éviter ainsi les déséquilibres de charge et la surcharge de certains agents. Toutefois, dans notre approche, nous utilisons un ordre statique déni dans une phase de pré-traitement. Nous notons que deux notions peuvent inuencer l'intérêt de cette topologie :

1. les heuristiques d'ordre d'instanciation des variables : dans les DisCSP comme dans les CSP, l'ordre d'instanciation des variables a une grande inuence sur la taille de l'arbre de recherche. Il existe deux types d'heuristiques pour le choix de l'ordre d'instanciation des variables : les heuristiques statiques (Max-deg [50], MW [38]) et les heuristiques dynamiques (par exemple MC [50], MRV [69]). Toutefois, l'inuence de ces heuristiques reste marginale dans notre approche, car chacun des p processus de recherche lancés aura son propre ordre d'instanciation de variables. Les diérents ordres d'instanciation mis en ÷uvre découlent automatiquement de la topologie de communication en anneau.

Chapitre VI Approche parallèle et coopérative 2. la topologie physique du réseau peut aussi inuencer l'ecacité de cette

approche.

Après la phase de pré-traitement, chaque agent est capable de déterminer lo-calement son prédécesseur et son successeur. Un identiant est associé à chaque agent. Ce même identiant est également attribué au processus de recherche lancé par l'agent. Classiquement, la stratégie de parcours de l'arbre de recherche d'un processus de recherche au sein d'un agent est cruciale puisque l'ecacité de l'exploration de l'arbre de recherche en dépend. An de mieux guider cette orientation, on introduit des indicateurs au niveau de chaque agent. Un indi-cateur est associé à chaque valeur qui peut être attribuée à une variable. Ces indicateurs représentent un mécanisme d'orientation des processus de recherche. Chaque processus de recherche choisit à chaque étape la valeur consistante la moins utilisée par d'autre processus de recherche, puis incrémente l'indicateur associé à la valeur sélectionnée. Les agents s'échangent la valeur de l'instancia-tion courante via des messages, et poursuivent leur exécul'instancia-tion en foncl'instancia-tion des types de messages reçus. Nous décrivons ici tout d'abord cette approche avec un algorithme de Backtraking, que nous avons nommé PC_BT (Parallel and Cooperative BackTracking). On distingue quatre types de messages :

 Fail : il n'y a pas de solution et les destinataires arrêtent la recherche.  Success : une solution a été trouvée et les destinataires arrêtent la

re-cherche.

 Info : le message contient une instanciation partielle (CPA : Current Par-tial Assignment), et est adressé à l'agent suivant selon l'ordre prédéni. Ainsi, à chaque réception d'un message de type Info qui contient une ins-tanciation partielle CPA, l'agent tente d'étendre l'insins-tanciation partielle à une solution. Le choix de la valeur utilise l'heuristique de la "moindre utilisation" que nous avons dénie et qui consiste à étendre l'instanciation partielle avec la valeur consistante la moins utilisée par d'autres processus de recherche. L'heuristique de "moindre utilisation" garantit une explora-tion plus diversiée donc plus rapide de l'espace de recherche.

 Back : le message de retour arrière contient également une instanciation partielle CPA et adresse à l'agent prédécesseur sur l'anneau une demande de type Backtrack. L'agent qui reçoit ce message, essaie de changer la dernière valeur instanciée inconsistante. S'il n'a pas de prédécesseur, cette valeur sera éliminée du domaine global à tous les agents du système. Si le domaine local est vide, l'agent propage à son tour un message de type Back à son prédécesseur. Si le domaine est vide et que l'agent n'a pas de prédécesseur, cela signie que toute la recherche est inconsistante et un message Fail est envoyé à tous les agents.

Chapitre VI Approche parallèle et coopérative Les domaines des variables sont dénitivement réduits à chaque fois qu'un agent reçoit un message de type Back en provenance du processus de recherche qu'il a lui-même initié puisque on sait dans ce cas que la branche enracinée à cette valeur a été complètement explorée. L'algorithme s'achève lorsqu'une solution a été trouvée par l'un des agents, ou lorsque l'un des agents a un domaine vide, ce qui signie que le problème est insoluble.

L'algorithme 6.1.3 : Conformément à la dénition classique des DisCSP, on dispose d'un ensemble de p agents A = {A1, A2, ..., Ap}et pour des raisons de simplicité nous associons chaque variable à un agent, sans perte de généralité, puisque le même algorithme peut-être appliqué dans le cas où chaque agent gère plusieurs variables. L'agent Ai gère le domaine global initial de sa variable xi, et il gère également p domaines courants (un par processus de recherche). La procédure principale commence par une phase d'initialisation qui associe un indicateur initialement nul à chaque valeur qui peut être attribuée à la variable xi de Ai. Cet indicateur donne une information sur la fréquence d'utilisation de cette valeur par d'autres processus de recherche. Ensuite, chaque agent fait appel à la procédure Initialization, qui commence par initialiser un processus de recherche, c'est-à-dire que chaque agent crée une CPA. Il choisit pour cela une valeur pour sa variable xi, et incrémente l'indicateur de cette valeur. Après cette phase d'initialisation, l'agent envoie un message à son successeur et attend la réception d'un nouveau message dont dépendra la suite de l'exécution. Plus précisément :

 Lors de la réception d'un message de type Fail ou Success, la procédure s'achève.

 Lors de la réception d'un message de type Info, la procédure As-sign_CPA() est exécutée. Elle tente d'étendre l'instanciation partielle reçue. Pour ce faire, elle essaie de trouver la valeur consistante la moins utilisée. Si une telle valeur v existe, alors la procédure Assign_CPA() ajoute à la CPA l'instanciation de xi = v. Si la CPA est complète, un message de type Success est diusé à tous les agents. Sinon un message de type Info est envoyé à l'agent suivant. Si aucune valeur consistante v n'est trouvée, un message de type Back est renvoyé à l'émetteur (l'agent précédent).

 Lors de la réception d'un message de type Back, on appelle d'abord la procédure Remove_last_assignment() qui enlève la dernière valeur instanciée de la CPA reçue. La valeur v est éliminée du domaine local courant de la variable xipuis la procédure Assign_CPA() est à nouveau exécutée.

Chapitre VI Approche parallèle et coopérative Notre algorithme se distingue des autres techniques de backtracking distri-bués par les points suivants :

1. L'ordre d'instanciation des variables est propre à un processus de re-cherche. Il dépend de la position de l'agent dans l'anneau ;

2. L'ordre d'instanciation des valeurs dépend des indicateurs. Choisir la va-leur la moins utilisée permet de diversier l'exploration dans l'arbre de recherche ;

3. Certaines parties de l'espace de recherche seront visitées plus d'une fois car on ne mémorise pas les goods et les nogoods ;

4. La topologie en anneau est également un moyen de diversication dans l'espace de recherche, et contribue à un équilibrage de la charge entre les agents ;

5. La coopération entre les diérents processus de recherche est introduite par le choix de la valeur la moins utilisée et par la réduction des domaines initiaux des variables.