• Aucun résultat trouvé

II.4 Les travaux de thèse de S Peillon

III.3. Partitionnement de graphe pour la détection de sous-ensembles d’entreprises complémentaires

III.3.4. Algorithmes de partitionnement de graphe

Nous donnons dans cette section une liste non exhaustive des algorithmes de partitionnement de graphe, ainsi que leurs avantages mais surtout leurs inconvénients par rapport à notre problématique.

δe principe du partitionnement de graphes est de diviser un ensemble d’objets interconnectés

en un ensemble de sous-ensembles ou clusters pour optimiser un objectif spécifié. C’est-à-

dire grouper les sommets du graphe en un nombre prédéterminé de parties (de tailles elles aussi prédéterminées) tout en minimisant les arcs reliant les différents groupes. δ’objectif du partitionnement peut varier de manière significative en fonction du problème à résoudre et de son application.

Il y a deux types de partitionnement de graphe : le bi-partitionnement et le k-

partitionnement18. Le bi-partitionnement est un cas particulier du k-partitionnement où k = 2.

Formulation du problème de partitionnement

Les définitions données dans ce qui suit sont la base du partitionnement de graphe, elles sont utilisées dans les algorithmes présentés plus loin.

Soit un ensemble de n sommets V = {v1, v2, …,vn}, le but du partitionnement est d’affecter les

sommets à un nombre spécifié de k clusters satisfaisant des propriétés prédéfinies.

Définition 1 : Un partitionnement Pk = {C1, C2,…, Ck} consiste en k partitions (sous-

ensembles de V) C1, C2,…, Ck tel que :

C1 C2… Ck = V et Ch Cl =  1  h < l  k.

Si k = 2 on parle alors de bi-partitionnement.

δ’objectif à optimiser est noté par : f(Pk

), l’objectif est fonction de la solution du

partitionnement.

18

Beaucoup de travaux distinguent entre le problème partitionnement où k est petit et le problème de "clustering" où k est grand (par exemple k>200).

Définition 2 : On définit E(C) comme étant l’ensemble des arcs coupés par le cluster C. E(C)={e E tel que e relie deux sommets x, y, dont un seul appartient à C}.

Nous notons |E(C)| la dimension de la coupe. Dans le cas d’un graphe non pondéré |E(C)| =

card (E(C)) et dans le cas d’un graphe pondéré |E(C)| = la somme des degrés des arcs de E(C).

Ainsi, dans le cas d’un graphe pondéré avec une matrice d’adjacence A, la coupe est donnée par :

 

C v v C ij i j a

Donc, l’ensemble des arcs coupés par la solution du partitionnement Pk

est ) ( ) (Pk kh 1E Ch E  

La dimension de la coupe de Pk est |E(Pk)|. Formulations du problème de bi-partitionnement

Le problème du bi-partitionnement par la coupe minimum a pour but de diviser l’ensemble V

en deux sous-ensembles en minimisant la coupe entre ces deux sous-ensembles.

Minimiser f(P2) = |E(C1)| = |E(C2)|= |E(Pk)| tel que C1 , C2.

Les solutions optimales du problème de bi-partitionnement par coupe minimum sont souvent déséquilibrées (i.e. les sous-groupes obtenus ont des tailles très différentes les unes par rapport aux autres). Dans une grande partie des problèmes traités par le bi-partitionnement ces solutions n’ont pas de sens et ne sont pas exploitables directement. Elles constitueront des solutions de départ pour des méthodes heuristiques (Yang et al. 1994). Pour prendre en comptes les contraintes de taille sur les sous-ensembles, des formulations plus pertinentes existent, comme la bissection par coupe minimum ou le bi-partitionnement par coupe minimum avec contrainte de taille :

 On parle de problème de bissection quand on cherche à obtenir des sous-ensembles de taille égale (une relaxation des contraintes de taille permet une meilleure solution tout en gardant des sous-groupes relativement équilibrés) :

Minimiser f(P2) = |E(C1)| tel que |w(C1)- w(C2)|  .

Avec

  i C v i v C w( ) deg( )

 On parle de bi-partitionnement avec contrainte sur la taille, quand on prédéfinit une borne supérieure et inférieure (L et U) pour la taille des clusters :

εodélisation des liens de coopération et des trajectoires d’évolution des réseaux 100

D’autres travaux ont intégrés les contraintes de taille dans la fonction objectif du partitionnement (Leighton et al. 1988). Cette méthode est connue sous le nom anglais de "Ratio cut bi-partitioning".

Formulations du problème de k-partitionnement

La formulation standard du problème de k-partitionnement (k > 2) est la suivante :

Etant donné le nombre de cluster k, et la borne inférieure et supérieure respectivement L et U de la taille des clusters alors,

Minimiser

  k h h k C E P f 1 ) ( ) ( tel que L  w(Ch)  U h = 1,…, k

Beaucoup de travaux se sont intéressés à la formulation de la contrainte de taille, i.e. à la valeur exacte des deux bornes L et U (Barnes 1982, Sun et al. 1993).

Comme dans le cas du bi-partitionnement il est possible d’intégrer les contraintes de taille dans la fonction objectif. Nous pouvons citer à titre d’exemple la fonction "Scaled Cost" ou coût proportionné (Chan et al. 1994) :

Minimiser

   k h h h k C A C E k n P f 1 ( ) ) ( ) 1 ( 1 ) (

où n est le nombre de sommets

D’autres travaux utilisent la maximisation d’une fonction objectif qu’ils définissent, comme par exemple la fonction absorption (Sun et al. 1993), ou aussi la fonction densité (Huany et

al. 1995).

Le problème de k-partitionnement du graphe est NP-difficile. Le problème de bissection où l’on veut partitionner le graphe en deux, est déjà NP-difficile (Garey et al. 1979). Théoriquement un k-partitionnement peut être obtenu par une approche "diviser pour régner" en appliquant récursivement la bissection.

Avant d’aller plus loin dans ce chapitre, il est nécessaire de faire un choix sur le type de partitionnement (bi-partitionnement ou k-partitionnement) qui est le plus adapté à notre problématique. En effet, le choix se pose entre l’application d’un bi-partitionnement de manière récursive, qui est une pratique largement mobilisée (Tran Dac 2004), ou bien appliquer directement un k-partitionnement.

Choix entre bi-partitionnement et k-partitionnement

Appliquer un k-partitionnement, ou un bi-partitionnement récursif, ne donne pas la

même solution ni en termes de nombre de cluster ni en termes de coût (perte d’information).

Deux raisons ont guidé notre choix vers l’application d’un k-partitionnement. Premièrement, la faiblesse (voir l’exemple ci-dessous qui illustre cette faiblesse en termes de coût) du bi- partitionnement récursif dans la plupart des configurations a été prouvée (Alpert 1996), c’est- à-dire que cette méthode pourrait marcher mais seulement sur un nombre restreint de graphes. Deuxièmement, le résultat obtenu par le bi-partitionnement récursif donne toujours un nombre

de clusters puissance de 2 (k =2, 4, 8, ou 16….), ce qui dans notre cas est un inconvénient. Cependant le bi-partitionnement récursif est largement utilisé sachant que la plupart des algorithmes développés font du bi-partitionnement ou de la bissection.

Exemple : Considérons un graphe avec 8 sommets où la pondération des arcs est 1 partout. Le

bi-partitionnement récursif commence par diviser le graphe en deux sous-graphes de 4 sommets chacun, et chacun de ces sous-graphes est ensuite divisé en deux sous-graphes de 2 sommets. Au bout du compte on se retrouve avec une perte d’information de 6 (figure III-6- a). Le k-partitionnement quant à lui donne le même nombre de sous-graphes mais avec une perte d’information de 4 (figure III-6-b).

Figure III-6 : Différence entre bi-partitionnement récursive et k-partitionnement

Maintenant que nous nous concentrons sur le k-partitionnement, nous allons passer en revue de manière brève les grandes familles d’algorithmes et approches utilisées pour résoudre le problème du partitionnement. Pour plus de détails concernant ces méthodes le lecteur peut se reporter aux références citées, et notamment aux travaux de J. C. Alpert (Alpert 1996, Alpert 1995), ainsi qu’à ceux de B. T. Preas et M. J. Lorenzetti (Preas et al.

1988), dans le domaine des circuits VLSI19, qui est le domaine de prédilection du

partitionnement de graphe, mais aussi (Chung et al. 1981, Jarvis 1982, Park 1988).

Heuristiques d’améliorations locales (Iterative Improvement Methods)

δes algorithmes d’améliorations locales sont basés sur le concept "greedy strategy" : on démarre à partir d’une solution faisable et on la perturbe itérativement jusqu’à atteindre la meilleure solution voisine. δa procédure s’arrête quand l’algorithme atteint un minimum où toutes les solutions voisines ont un coût plus élevé. Il est donc facile d’être piégé dans un minimum local. Ils doivent donc être couplés avec un algorithme qui établit un

partitionnement initial. Les deux algorithmes les plus connus dans ce domaine sont

l’algorithme Kδ (Kernighan et δin 1970), et l’algorithme Fε (Fiduccia et εattheyses 1982). Ces deux algorithmes font exclusivement de la bissection.

δ’algorithme Kδ constitue une base qui a inspiré la majorité des algorithmes développés dans ce domaine :

19

Le partitionnement est devenu une phase critique dans la conception des circuits électroniques VLSI (Very Large Scale Integrated), qui comporte de plus en plus de transistors (plusieurs millions). Le partitionnement permet de passer à des systèmes plus petits ainsi plus gérables.

(b) Résultats du k- partitionnement (a) Résultats du bi-

εodélisation des liens de coopération et des trajectoires d’évolution des réseaux 102 Algorithme KL ( Kernighan-Lin) :

C’est en 1970 que Kernighan et δin ont introduit ce qui est souvent décrit comme étant la première "bonne" heuristique pour une bissection d’un graphe. δ’algorithme Kδ utilise une structure de voisinage avec échange par paire et procède par des séries de passages. A chaque

passage de l’algorithme, chaque sommet ne bouge qu’une seule fois, de C1 à C2 ou bien de C2

à C1. Au début du passage, chaque sommet est déverrouillé, ce qui signifie qu’il est libre et

peut être échangé. Après avoir été échangé le sommet devient verrouillé. δ’algorithme Kδ échange itérativement la paire de sommets déverrouillés qui ont le gain le plus élevé. Le gain est la diminution du coût de la solution résultant de l’échange de paire. On donne ci dessous le gain pour un graphe pondéré non orienté avec une fonction objectif de coupe minimum :

( ) ) , ( 1 2

    C v ik jk C v jk ik j i k k a a a a v v gain

δe processus d’échange est réitéré jusqu’à ce que tous les sommets soient verrouillés, et la valeur retournée sera celle du plus petit coût observé durant le passage. Et ainsi un autre passage sera effectué utilisant le résultat du précédent passage comme solution de départ. δ’algorithme s’arrête quand le passage n’arrive plus à trouver une solution avec un coût plus petit que celui de la solution de départ.

δ’avantage de l’algorithme Kδ et qu’il peut faire des sauts hors du minimum local, car il peut utiliser même des gains négatifs.

δ’inconvénient de cet algorithme est qu’il est très gourmand, car on doit parcourir toutes les solutions accessibles lors d’un seul passage. Une simple implémentation de l’algorithme Kδ

requière une complexité de O(n3) par passage, et O(n2) pour trouver le meilleur gain

d’échange. Il faut en plus générer une solution initiale.

δ’algorithme Fε est une amélioration de l’algorithme Kδ. Il diminue le temps de passage. δa différence principale avec l’algorithme Kδ est la structure de voisinage : un nouveau bi-

partitionnement est donné en déplaçant un seul sommet de C1 à C2 ou de C2 à C1 au lieu de

faire un déplacement par paire de sommets. Cela permet une exécution plus rapide.

Plusieurs algorithmes on été développés dans le sens des deux algorithmes FM et KL. Parmi ceux que l’on a rencontrés nous pouvons citer l’algorithme Tie-breaking (brisement de lien) (Krichnamurthy 1984), et l’algorithme de Sanchis qui est une généralisation de l’algorithme FM combiné avec celui du Tie-breaking pour le k-partitionnement (Sanchis 1989).

Algorithmes de recuit simulé et algorithmes génétiques

Les algorithmes de type "greedy" vus jusque là, sont facilement piégés dans un

optimum local. Pour atteindre la vallée la plus profonde, les randonneurs savent bien qu’ils ne

peuvent pas toujours descendre mais doivent parfois accepter de remonter. C’est cette stratégie qui est adoptée par les algorithmes de recuit simulé et les algorithmes génétiques.

Nous n’allons pas entrer dans le détail de ces méthodes qui sont connues.

δ’application de l’algorithme de recuit simulé dans le partitionnement de graphe est à ce jour assez limitée, tous simplement à cause de son temps d’exécution qui est assez long. Néanmoins quelques travaux se sont intéressés à cet aspect. Pour plus de d’approfondissements sur cet algorithme et son application dans le domaine du partitionnement de graphe, on peut se reporter aux travaux de (Johnson et al. 1989, Chatterjee et al. 1990).

Les algorithmes génétiques ne sont pas équipés pour la recherche d’un optimum local dans une région prescrite de l’espace des solutions. Un algorithme génétique donné peut prendre un temps assez long pour trouver une bonne solution, s’il en trouve une. Beaucoup de travaux se sont donc intéressés à la combinaison entre les algorithmes génétiques avec des heuristiques d’optimisation locale (Areibi 1993, Inayoshi et al. 1992), le plus souvent avec les algorithmes KL et FM. Des travaux proposent des algorithmes génétiques pour une bissection par coupe minimum (Ackley 1987), mais aussi pour le k-partitionnement (Chandrasekharam et al. 1993).

Algorithme de Recherche taboue

La recherche taboue est parmi les algorithmes qui ont été exploités en partitionnement de graphe. Cet algorithme est une alternative au mécanisme de verrouillage (locking mechanism) dans les algorithmes FM et KM. La recherche taboue a donnée de très bons résultats avec des temps de traitement très raisonnables par rapport à d’autres méthodes

(Alpert 1995), Néanmoins elle n’a été exploitée qu’en bi-partitionnement (Lim et al. 1991) et

bissection (Tao et al. 1991).

Les méthodes de clustering hiérarchique

Cette méthode a été introduite pour analyser des données. Elle s’adapte parfaitement aux graphes : son but est alors de grouper les sommets en sous-ensembles de telle sorte que chaque sommet soit groupé avec d’autres sommets similaires. Pour cela, il est nécessaire d’introduire une mesure dij de similarité entre chaque paire de sommets. Dans notre cas ne

nous ne pouvons pas définir une similarité à cause de la non symétrie de la relation de complémentarité.

Les approches géométriques

Ces méthodes construisent une représentation géométrique du problème de partitionnement via plusieurs types de représentations géométriques du graphe. Ces méthodes sont souvent utilisées pour leur capacité à capturer l’information globale du graphe. δa représentation géométrique du graphe constituera une base sur laquelle seront appliquées des heuristiques "géométriques" accélérées pour trouver un partitionnement.

Les approches géométriques utilisent les valeurs propres et vecteurs propres de la matrice

d’adjacence ou δaplacienne20

du graphe pour construire une représentation géométrique de ce dernier. Ces algorithmes sont appelés approches spectrales.

Il existe une panoplie de techniques pour la représentation géométrique d’un graphe, nous allons nous intéresser de manière succincte à l’une d’elles qui est le partitionnement de

vecteur (Vector partitioning) développée par C. J. Alpert (Alpert 1999). Partitionnement de vecteur

δ’idée ici est de transformer le problème de partitionnement de graphes en un problème de partitionnement de vecteurs. Cette correspondance est développée en utilisant les vecteurs

20 La matrice Laplacienne Q possède d’intéressantes propriétés, notamment concernant ses vecteurs propres. Ils

sont mutuellement orthogonaux, donc ils constituent une base dans l’espace à n dimensions. Toutes les valeurs propres de Q sont réelles. La plus petite valeur propre 1 est nulle, et son vecteur propre correspondant 1 =

εodélisation des liens de coopération et des trajectoires d’évolution des réseaux 104

propres de la matrice Laplacienne, qui contient les informations de connexité du graphe, pour construire un vecteur multidimensionnel pour chaque sommet. δa méthode s’applique en trois étapes :

 Construire une représentation vectorielle du graphe. Chaque sommet sera représenté par un vecteur qui contiendra toutes les informations concernant le sommet.

 Appliquer un algorithme de tri simple pour trier les vecteurs de la plus grande amplitude à la plus petite

 Appliquer une bonne heuristique pour la recherche d’un partitionnement. Une des heuristiques présentées précédemment peut s’appliquer.

Nous n’allons pas développer la démonstration de la méthode, qui est expliquée et développée en détail dans (Alpert 1999). Nous donnons seulement quelques indications.

Définition 3 : Le k-partitionnement de vecteurs de l’ensemble des vecteurs Y est un ensemble

de k sous-ensembles non vides Sk = {S1, S2, …, Sk } tel que chaque y  Y appartient

exactement à un seul Sh , 1 h  k.

Soit un ensemble de n vecteurs, un nombre prédéfini de sous-ensembles k. Soit les bornes inférieures et supérieur Lh et Wh, le problème de partitionnement de vecteurs se pose de la

manière suivante :

Trouver Sk qui satisfait Lh |Sh|  Wh

Pour tout 1  h  k, et qui optimise

h S y h k h h k y Y Y S g 1 2 ) (

Le partitionnement de graphe Pk = {C1, C2, …, Ck} correspond au partitionnement de vecteur

Sk = {S1, S2, …, Sk } si et seulement si vi Ch chaque fois que yid Sh .

Une bonne heuristique pour résoudre le problème du partitionnement de vecteurs avec une fonction objectif de somme minimum doit être quelque peu intuitive. Si chaque sous- ensemble doit consister en un ensemble de vecteurs qui doit avoir une somme aussi près que possible du vecteur nul, les vecteurs dans ce sous-ensemble vont pointer dans toutes les directions. Il n’est donc pas évident de construire les sous-ensembles. Pour faciliter la

procédure, la fonction objectif est transformée en somme maximum où g(Sk) est à maximiser

et on cherche les sous-ensembles de vecteurs pointant dans la même direction.

Le partitionnement de graphe par la coupe minimum est transformé en partitionnement de vecteur par la somme maximum.

 Calcul de la matrice symétrique de la matrice d’adjacence A : As = A AT ;

 Calculer la matrice Laplacienne : Q = D – A, où D est une matrice de dimension nxn donnée par dii = deg (vi) et dij = 0;

 Calculer la matrice des vecteurs propres E de la matrice Laplacienne Q ;

 Calculer les valeurs propres j de la matrice Laplacienne Q ;

 Calculer la matrice des vecteurs propres pondérés E’ = (eij) , avec, eij = ij Hj

(i.e. chaque colonne ij de E est pondérée par la valeur Hj ), où, H représente la

plus grande valeur propre ;

 Appliquer une heuristique (Alpert 1999) pour trouver le partitionnement de vecteur

Sk={S1, S2, …, Sk}, où chaque sous-ensemble de vecteurs S1, S2, …, Sk consisteras en

une somme de vecteurs donnant la plus grande amplitude.

Choix de la méthode de partitionnement

Le choix de la méthode à appliquer, est bien sûr fonction de notre problématique avec toutes les spécificités quelle peut comporter. Parmi toutes les méthodes vues dans cette section aucune ne répond exactement à la problématique posée. Car le but principal de toutes ces méthodes est la minimisation des arrêtes à éliminer, et la qualité n’est pas prise en compte, comme cela a été expliqué plus haut. De plus, ces méthodes ont été développées pour des graphes qui sont symétriques. Néanmoins, nous allons appliquer une de ces méthodes pour analyser son influence sur les résultats.

Nous avons choisi la méthode proposée par (Alpert et al. 1999) car c’est celle qui se

rapproche le plus du besoin, et aussi à cause de sa capacité à préserver l’information globale

du partitionnement. En effet chaque vecteur contient ces informations. C’est-à-dire

l’ensemble des arcs connectés à chaque sommet dans le graphe initial.

Concernant la contrainte de prédétermination du nombre de clusters k (Feige et al. 2003,

Bezrukova et al. 1999), nous allons l’utiliser en appliquant plusieurs partitionnements pour

différentes valeurs de k. On choisit ensuite trois valeurs (i.e. trois solutions), une solution pour un k petit, une solution pour un k moyen, et une solution pour un k grand. Les trois solutions

représenteront respectivement les trois degrés d’intensité de la coopération de type Réseau

Proactif : faible, moyenne et forte.

Après avoir passé en revue les méthodes utilisées en partitionnement de graphe, nous avons conclu que les algorithmes de partitionnement existants ne sont pas compatibles avec notre problématique. Nous avons donc réfléchi à une méthode ou un algorithme qui prenne en compte nos diverses spécificités.

εodélisation des liens de coopération et des trajectoires d’évolution des réseaux 106 III.3.5. Méthode proposée

Nous proposons dans cette section un algorithme de détection de sous-groupes d’entreprises complémentaires à partir d’un graphe de complémentarité des activités. Cet algorithme est basé sur l’idée d’éliminer progressivement les arcs de pondération la plus petite et qui sont le seul lien entre deux sommets (Benali et al. 2004). On procède par

plusieurs passages, et après chaque passage on fait apparaître des sous-groupes d’entreprises

ayant des activités complémentaires. A chaque passage le pas augmente et le degré de

complémentarité augmente, c’est-à-dire que plus le nombre de passages est élevé plus le

nombre de clusters est susceptible d’augmenter et plus les clusters contiennent des entreprises qui sont fortement complémentaires.

Avant de détailler l’algorithme proposé, nous donnons quelques définitions que nous utilisons dans l’algorithme. δa première est une proposition d’un indicateur de qualité de la partition (Benali et al. 2004). La deuxième est un algorithme de recherche de disjonctions dans un graphe (Muller 1972).

Indicateur de qualité de la partition (I)

Nous proposons dans ce qui suit un indicateur de qualité (noté I par la suite) de la solution de décomposition du graphe de complémentarité. Cet indicateur nous permet d’évaluer et de quantifier l’information perdue lors d’une décomposition.

Si la perte d’information est trop grande, cela signifie que trop d’arcs ont été enlevés, et donc des liens de types "Réseau Proactif " ou de type "Firme" peuvent avoir été négligés. Cet indicateur se calcule d’une manière simple, par la somme des pondérations des arcs enlevés divisée par la somme totale des arcs du graphe. Plus il se rapproche de zéro, meilleure est la