• Aucun résultat trouvé

Modélisation du problème DHP

5.4 Modélisation du problème et Propriétés à vérifier

5.4.3 Modélisation du problème DHP

Le modèle DHP _P T A est un réseau de n + 1 automates : un automate de la machine à vendanger et n automates de rang. Chaque automate de rang est instancié avec un numéro d’index du rang. Les variables ont été définies pour être cohérentes avec [36]. Le modèle est implémenté en ATC avec UppAal-CORA. Dans la suite, les détails du modèle DHP _P T A sont fournis.

5.4.3.1 Déclaration des constantes et des variables

Cette section définit les constantes et les variables déclarées dans le modèle.

A) Déclaration des constantes :

Rmin : est la quantité minimale de raisins A qui doit être récoltée. Elle est fournie en pourcentage de la quantité totale de raisins A identifiés sur la parcelle.

Q_A_D[i] (resp. Q_B_D[i]) : est la quantité de raisins A (respectivement de

raisins B) qui sera collectée dans le rang (i+1) si ce rang est récolté selon l’orientation directe.

Le décalage d’indice s’explique par le fait que, dans la matrice dd l’indice du premier rang est 1 car l’indice 0 est réservé à l’emplacement des bennes. Or on ne collecte le raisin que dans les rangs, donc le premier indice du tableau Q_A_D est 0 et

Q_A_D[0] représente la quantité de raisins A qui sera collectée dans le rang 1. Q_A_I[i](resp. Q_B_I[i]) : est la quantité des raisins A (respectivement de

raisins B) qui sera collectée dans le rang (i+1) si ce rang est récolté selon l’orientation inverse.

dd : est la matrice réduite des coûts.

DumpT ime : est le temps nécessaire pour vider les trémies dans les bennes.

B) Déclaration des variables :

M ixed: est une variable booléenne qui représente le mode de récolte. Si Mixed =

0, le mode de récolte est sélectif, sinon M ixed = 1.

T : est une variable entière qui représente le temps de déplacement de HM. Elle

est calculée de deux façons : 1) dans l’automate d’un rang (figure 5.8), elle prend en compte le temps que la machine met pour faire un déplacement vers le rang suivant et le récolter ; 2) dans l’automate de la machine (figure 5.9), elle prend en compte le temps pour se rendre à l’emplacement des bennes et vider la récolte dans les bennes.

Location : est une variable entière qui représente l’emplacement actuel de HM.

Si Location = 0, la machine est à l’emplacement des bennes. Sinon, si Location = i avec i ∈ [1 : n], alors la machine est au rang i.

DumpN umber : est une variable entière qui représente le nombre de vidanges

effectuées depuis le début de la récolte.

Ori[i] : est une variable booléenne qui mémorise l’orientation de récolte d’un

rang. Si Ori[i] = 1, le rang (i + 1) est récolté dans l’orientation directe, sinon il est récolté dans l’orientation inverse.

M ix[i] : est une variable booléenne qui mémorise le mode de récolte d’un rang.

Si Mix[i] = 0, le rang (i + 1) est récolté en mode sélectif sinon il est récolté en mode mixé (non sélectif).

U_A (resp. U_B) : représente la quantité courante de raisins A (resp. raisins

B) dans la a-trémie (resp. b-trémie).

Q_T _A (resp. Q_T _B) : représente la quantité totale de raisins A (resp. raisins B) récoltée dans les bennes depuis le début de la récolte jusqu’à la dernière vidange.

cest une horloge locale pour le modèle de la machine.

5.4. MODÉLISATION DU PROBLÈME ET PROPRIÉTÉS À VÉRIFIER 139

automates ont été définies. Dans la suite, les automates du modèle DHP _P T A sont décrits.

5.4.3.2 Description de l’automate de rang

Dans l’automate du modèle de rang représenté dans la figure 5.8, il y a deux parties similaires qui correspondent à chaque orientation potentielle.

À l’état Init, le rang i n’est pas récolté. Il peut être récolté selon l’orientation directe (transition supérieure) ou l’orientation inverse (transition inférieure). Si la valeur de la condition de la transition est vraie ((1) ou (2) en vert dans la figure 5.8), alors le rang passe à l’état Harvested (récolté).

Examinons tout d’abord la transition supérieure, qui a la condition (1)4. Cette

condition correspond au cas ou le rang i sera récolté dans une orientation di- recte. Il s’ensuit que soit le rang précédent a été récolté dans l’orientation inverse (Ori[Location−1] == 0), soit l’emplacement de la machine avant la transition était l’emplacement des bennes (Location == 0). L’automate vérifie également dans la condition (1), en fonction de la valeur de la variable Mixed, s’il reste suffisamment de volume disponible dans les trémies pour récolter les raisins du rang i :

Si Mixed == 0, le mode de récolte est sélectif. La quantité U_B + Q_B_D[i− 1] (raisins déjà dans la b-trémie + raisins B à collecter) ne doit pas dépas- ser CmaxHopper. En outre, la quantité U_A + U_B + Q_A_D[i − 1] +

Q_B_D[i − 1] (raisins déjà dans les deux trémies + raisins A et B à récolter)

ne doit pas dépasser 2 × CmaxHopper (car les raisins A peuvent être placés dans la a-trémie et la b-trémie, quelque soit le mode de récolte).

Si Mixed == 1, le mode de récolte est mixé (pas sélectif). L’automate du rang vérifie alors que la quantité U_A + U_B + Q_A_D[i − 1] + Q_B_D[i − 1] ne dépasse pas 2 × CmaxHopper.

Si la valeur de la condition de la transition est vraie, l’automate du rang envoie un signal de synchronisation toRow! à l’automate de la machine et met à jour les variables Ori[i − 1], Mix[i − 1], Location, U_A, U_B et T (instructions en bleu).

Ori[i − 1] est mise à jour à 1 si le ième rang est récolté selon une orientation

directe, sinon elle est mise à jour à 0. Mix[i − 1] est mise à jour à la valeur de

M ixed. Location est mise à jour à i.

Enfin, T est mise à jour à la somme du temps de parcours entre rangs et du temps de récolte dans le rang. Le temps de récolte est dd[i][i]. Le temps de parcours dépend de l’orientation avec laquelle le rang sera récolté. Si le rang doit être récolté selon l’orientation directe, alors le temps de parcours est égal à dd[Location][i] sinon il est égal à dd[i][Location]. Ceci résulte de la définition de la matrice des coûts dd (équation 5.1).

Enfin, l’automate met à jour les quantités de raison. Ce calcul de U_A et U_B nécessite quelques explications.

• U_A représente la quantité de raisins dans la a-trémie à la fin du rang i.

– Si U_A + Q_A_D[i − 1] est inférieure à CmaxHopper, alors la variable U_A est mise à jour à la valeur U_A + Q_A_D[i − 1].

– Sinon, cela signifie que la quantité de raisins A dépasse la capacité de la

a-trémie : U_A est mise à jour à la valeur de CmaxHopper, et le reste de raisins A (U_A + Q_A_D[i − 1] − CmaxHopper) est placé dans la b-trémie. U_B est donc mise à jour en conséquence.

4. La transition inférieure est construite de manière similaire et ne nécessitera donc pas d’ex- plications supplémentaires.

5.4. MODÉLISATION DU PROBLÈME ET PROPRIÉTÉS À VÉRIFIER 141

• U_B représente la quantité de raisins dans la b-trémie à la fin du rang i.

– Si U_B + Q_B_D[i − 1] est inférieur à CmaxHopper, alors U_B est

mise à jour à la valeur U_B + Q_B_D[i].

– Sinon, U_B est mise à jour à la valeur de CmaxHopper et le reste des

raisins B (U_B + Q_B_D[i] − CmaxHopper) est mise dans la a-trémie. Donc, U_A est mise à jour avec ce reste de raisins B. Il est à noter que ce dernier cas ne se produira que dans le mode de récolte mixte (non sélectif). En effet, le cas U_B + Q_B_D[i] > CmaxHopper ne peut se produire qu’en mode mixte. Pour cela, la garde des transitions vérifie bien que si Mixed == 0, alors U_B + Q_B_D[i] ≤ CmaxHopper.

5.4.3.3 Description de l’automate de la machine de récolte

L’automate de la machine de récolte est écrit par la figure 5.9. Il comporte 4 états : "Bin", "Wait _Harvesting", "Next_Row" et "Wait _Dumping".

Figure 5.9 – Automate de la machine de récolte HM

Au moment de l’initialisation, l’emplacement de départ de HM est l’emplace- ment des bennes (état Bin). Dès que l’automate de la machine reçoit un signal de synchronisation toRow? à partir d’un automate de rang, ce qui correspond à une commande de récolte d’un rang, l’horloge locale c est réinitialisée et la transition vers l’état suivant Wait _Harvesting est franchie.

A l’état Wait _Harvesting, HM attend pendant la durée de récolte du rang, représentée par la variable T qui a été calculée par l’automate de rang au moment de l’envoie du signal toRow?. Une fois ce temps écoulé, la machine a alors fini de récolter le rang et l’automate de HM passe à l’état Next_Row.

À ce stade, HM est à la fin d’un rang. Deux cas sont possibles. Dans le premier cas, l’automate reçoit de nouveau un signal de synchronisation toRow? d’un auto- mate de rang, qui le fait retourner à l’état Wait _Harvesting. Dans le deuxième cas, la vidange des trémies de la machine dans les bennes doit être effectuée, la transition de l’état Next _Row à l’état Wait _Dumping sera donc franchie et l’automate HM mettra à jour les variables Q_T _A, Q_T _B, Mixed, Location, DumpNumber,

U_A, U_B, c et T comme suit :

Q_T _A (resp. Q_T _B) est mise à jour à la valeur Q_T _A + U_A (resp. Q_T _B + U_B) et U_A (resp. U_B) est réinitialisée. Location est mise à jour

à 0 (emplacement des bennes). DumpNumber est incrémentée. Si Rmin est atteint (Q_T _A > = Rmin), Mixed est mise à 1 pour passer en mode mixé. Sinon Mixed reste à 0 et la récolte sélective continue.

Sur cette transition, T représente le temps de vidange des trémies (DumpT ime) plus le temps de parcours entre le rang et l’emplacement des bennes. Ce temps de parcours dépend de l’orientation avec laquelle le rang précédent (Location − 1) a été récolté. S’il a été récolté selon l’orientation directe (Ori[Location − 1] == 1), le temps de parcours est dd[Location][0], sinon il est dd[0][Location].

A l’état Wait _Dumping, l’automate de HM attend les unités de temps T . Lorsque ce temps s’est écoulé, l’automate HM repasse à l’état initial Bin.

5.4.4 Vérification du modèle et calcul de la séquence de