• Aucun résultat trouvé

Décomposition de la modélisation

8.1 Méthodologie de décomposition

8.1.1 Décomposition de la modélisation

La décomposition de la modélisation que nous proposons pour ce problème se divise en deux étapes qui consistent à :

1. Former des parties : décomposer le rang R en n parties du rang (P1, ..., Pn). 2. Générer des sous-modèles : générer le sous-modèle associé à chaque partie.

8.1.1.1 Décomposition grâce aux blocs "trou de végétation"

Comme nous l’avons vu dans le chapitre 4, le choix d’utiliser Cbest ou Calt dans une commande optimale pour un bloc donné peut être influencée par les commandes possibles des blocs qui le suivent et le précèdent. Cependant, la présence d’un trou entre 2 blocs casse cette notion de dépendance, car elle engendre obligatoirement la commande de fermeture de toutes les buses. Nous appellerons état stable qui a cet effet de casser la dépendance entre la suite de commandes avant l’état stable et la suite de commande après cet état. Ainsi, la présence de trous dans un rang de vigne représente une situation particulière à considérer lors de la décomposition de notre

8.1. MÉTHODOLOGIE DE DÉCOMPOSITION 187

problème. Dans un premier temps, nous étudions donc la décomposition en fonction de la présence des trous de végétation.

Ainsi, un rang R est décomposé en n parties {P1, ..., Pn}, c’est-à-dire en n sous- ensemble de blocs. Les parties sont définies de façon à avoir entre elles un bloc de recouvrement de type "Trou" qui appartiendra aux deux parties. Ainsi, une partie est un ensemble de blocs qui commence par un bloc de type "Trou" ou par le premier bloc du rang, et qui se termine par un bloc de type "Trou" ou par le dernier bloc du rang. La figure 8.1 illustre, par un exemple, la formation des parties. Le rang R est formé par m + 1 blocs. Les blocs {bi, bj, bk, bl} sont des blocs de type "Trou". La partie P1 est composée de la succession des blocs du bloc b0 de début de rang au

bloc bi. La partie P2 est la succession des blocs du bloc bi au bloc bj. Le bloc bi est le bloc de recouvrement (BR) entre P1 et P2. On poursuit le même raisonnement

pour les autres parties jusqu’à Pn.

Pn P1 b0 b1 ... bi .... bj bk .... bl .... bm-1 bm

R

... Pn-1 P2

Figure 8.1 – Décomposition du rang R en n parties

Cependant cette première approche de décomposition générique et guidée par les trous peut se révéler insuffisante pour réduire significativement la complexité du problème si il existe une trop grande séquence de blocs sans trou. Nous proposons donc dans le paragraphe suivant une approche complémentaire, dite approche de décomposition par injection, permettant de réduire la complexité de notre problème.

8.1.1.2 Décomposition par injection

L’idée générale de décomposition peut alors être adaptée en considérant que la décomposition peut se faire pour n’importe quel bloc de recouvrement si sa com- mande est connue a priori de façon déterministe, ou si cette commande n’a pas d’in- fluence sur notre critère de vérification. Dans notre cas, cela signifie que les blocs pour lesquels Cbest = Calt peuvent également être considérés comme des blocs de recouvrement potentiels. Par contre, contrairement aux blocs trous, un Cbest = Calt n’oblige pas à fermer toutes les buses : les temps de fermeture/ouverture des buses restent dépendant des commandes antérieures et postérieures à ce bloc.

Prenons comme exemple un ensemble de 5 blocs (sans trou) que nous nommerons

présente l’ensemble des commandes possibles. BiCbest désigne la commande Cbest du bloc bi et BiCalt désigne la commande Calt du bloc bi. Le même raisonnement s’applique pour le reste des blocs. On remarque que le bloc bi+2 constitue un point de passage obligé quelque soit les commandes Cbest et Calt qui ont été choisies pour les autres blocs, nous allons donc baser notre décomposition sur ce bloc.

Soit P 2 la partie qui regroupe tous les blocs. On peut supposer que P 2 est le résultat d’une première décomposition basée sur les trous de végétation, mais que cette partie est encore trop grosse et qu’on désire encore la décomposer. Soit

P 1 la partie qui regroupe les 3 premiers blocs. Pour P 1, il existe 4 séquences de

commandes possibles et pour P 2, il en existe 16. Soit SO(P 1) la séquence optimale pour P 1, SO(P 2) la séquence optimale pour P 2 et (SO(P 2))[P 1] est la sélection de la séquence optimale des 3 premiers blocs formant P 1.

BiCalt BiCbest Bi+1Calt Bi+1Cbest Bi+1Calt Bi+1Cbest Bi+2Cbest =Calt Bi+3Calt Bi+3Cbest Bi+4Calt Bi+4Cbest Bi+4Calt Bi+4Cbest

Figure 8.2 – Exemple d’un bloc où Cbest = Calt

Dans notre exemple, contrairement au cas des trous de végétation, pour bi+2 rien n’oblige à fermer toutes les buses, donc le coût optimal trouvé pour P 2[P 1] est différent au coût optimal trouvé pour P 1 (fermeture des buses pour P 1) mais la séquence optimale SO(P 2)[P 1] trouvée pour P 2[P 1] est la même que la séquence optimale SO(P 1) trouvée pour P 1.

On en retient que du point de vue ouverture et fermeture de buses, il y a une dépendance en ce qui concerne le coût optimal mais il n’y a pas de dépendance en ce qui concerne la séquence optimale. L’idée de décomposition par injection est de mémoriser la séquence optimale SO(P 1), et d’injecter cette solution dans la partie

8.1. MÉTHODOLOGIE DE DÉCOMPOSITION 189

P 2. Ainsi, dans la partie P 2, les blocs de P 1 auront leur commande optimale imposée

ce qui permet de supprimer la complexité liée au choix des commandes pour chaque bloc de P 1. On appelle cette méthode de décomposition décomposition par injection. Cette méthode ne nécessite pas de modifier les automates du modèle, simplement les tableaux Commande[1] et Commande[2] spécifiant les commandes possibles pour les rangs.

La question qui se pose maintenant est comment utiliser ces 2 critères de décom- position ? Sont-elles exclusives ou complémentaires ? La réponse à ces questions est l’objet de la section suivante qui décrit la stratégie de partitionnement employée.

8.1.1.3 Stratégie de décomposition employée

Les deux approches de décomposition, décomposition orientée trou et décomposi- tion par injection, sont deux approches complémentaires. Il serait possible d’utiliser seulement l’approche par injection mais cette approche nécessite de mémoriser expli- citement les commandes ce qui complexifie la résolution et consomme de la mémoire. Nous utiliserons donc cette solution en deuxième recours que lorsque la décomposi- tion orientée trou ne suffit pas.

Ainsi, la stratégie de décomposition mise en œuvre est la suivante : 1. Décomposition orientée trou sur tout le rang,

2. Appel au processus de vérification pour les parties formées,

3. En cas de problème d’explosion combinatoire, appel à la décomposition par injection pour les parties étant encore de trop grande dimension.

Dans la section suivante, les modifications à apporter sur le modèle pour générer les sous-modèles sont précisées.

8.1.1.4 Modification du modèle et génération des sous-modèles

Au sein du modèle, la décomposition du modèle initial en sous-modèles se tra- duira de la façon suivante :

• Variables globales : diminution du nombre de blocs pour chaque sous-modèle à la valeur du nombre de blocs formant la partie. Ainsi les dimensions de tous les tableaux stockant les informations de ces blocs seront réduites (typiquement les tableaux Commande[1], commande[2], tempo_bloc et Choice).

• Aucun changement dans les automates

Même si cela n’a pas été le cas pour ces travaux de thèse, faute de temps, la décomposition de la modélisation peut aisément être automatisée. Le processus pra- tique de génération des sous-modèles s’appuie sur un fichier texte data.txt, obtenu

à la fin de l’étape 2 de AMPS et décrivant : le nombre de blocs formant le rang, la durée de chaque bloc tempo_bloc, les commandes Cbest, Calt pour chaque bloc. La génération des sous-modèles décompose, en fonction de la présence des trous, le contenu du fichier data.txt en n fichiers data_i.txt avec i ∈ {1, .., n}. Le fichier data_1.txtcontient le nombre de blocs formant la partie 1, la durée, les commandes

Cbest, Calt et pour la décomposition par injection la commande choisie Choice pour chaque bloc de la partie 1. En utilisant ce fichier et le fichier .xml décrivant le mo- dèle initial correspondant à tout le rang, on génère le fichier .xml du sous-modèle correspondant à la partie P1 (SMP 1 : Sous-Modèle de la partie P1). On applique ensuite le même processus pour générer le sous-modèle de chaque partie formant le rang.

Après avoir présenté la décomposition en modélisation, abordons maintenant la décomposition en vérification.