... | @@ -11,21 +11,34 @@ La quantité initiale pour chacun de ces produits est définie aléatoirement en |
... | @@ -11,21 +11,34 @@ La quantité initiale pour chacun de ces produits est définie aléatoirement en |
|
# Baisse des stocks
|
|
# Baisse des stocks
|
|
|
|
|
|
Les stocks baissent à intervalle régulier. Le moment où les stocks baissent est déterminée par :
|
|
Les stocks baissent à intervalle régulier. Le moment où les stocks baissent est déterminée par :
|
|
- le paramètre "nbStepsbetweenDS" présent dans le fichier Parameters.gaml. Ce paramètre agit sur la fréquence et est fixé à 24. Ainsi, les stocks baissent une fois par jour.
|
|
- le paramètre `nbStepsbetweenDS` présent dans le fichier `Parameters.gaml`. Ce paramètre agit sur la fréquence et est fixé à 24. Ainsi, les stocks baissent une fois par jour.
|
|
- le paramètre "timeShifting". Ce paramètre est initialisé aléatoirement (pour chaque agent destinataire) entre 0 et 23 inclus au début de la simulation. Il permet de garantir que les agents ne vont pas tous voir leurs stocks baisser au même moment. Cela permet d'éviter des phénomènes de synchronisation entre les agents.
|
|
- le paramètre `timeShifting`. Ce paramètre est initialisé aléatoirement (pour chaque agent destinataire) entre 0 et 23 inclus au début de la simulation. Il permet de garantir que les agents ne vont pas tous voir leurs stocks baisser au même moment. Cela permet d'éviter des phénomènes de synchronisation entre les agents.
|
|
|
|
|
|
Pour chaque stock présent, la quantité baisse aléatoirement entre 0 et (la quantité maximale du stock / le taux de consommation).
|
|
Pour chaque stock présent, la quantité baisse aléatoirement entre 0 et (la quantité maximale du stock / le taux de consommation).
|
|
|
|
|
|
Le taux de consommation (variable "decreasingRateOfStocks" dans le code) est défini à l'initialisation pour chaque agent destinataire. La valeur de ce paramètre est déterminée à partir de l'indice de Huff (pré-calculé et stocké directement dans le Shapefile associé aux "FinalConsignee") et de deux autres paramètres renseignés par l'utilisateur. En effet, ce dernier doit indiquer les taux de consommation maximaux et minimaux ("valForMaxHuff" et "valForMinHuff" dans le code). On associe ainsi linéairement l'indice de Huff d'un agent à un taux de consommation : plus l'indice de Huff est élevé (plus l'agent est censé avoir de clients), plus le taux est bas (impliquant une baisse de stock importante car "quantité maximale / taux de consommation" => tend vers "quantité maximale" lorsque "taux de consommation" tend vers 1).
|
|
Le taux de consommation (variable `decreasingRateOfStocks `dans le code) est défini à l'initialisation pour chaque agent destinataire. La valeur de ce paramètre est déterminée à partir de l'indice de Huff (pré-calculé et stocké directement dans le Shapefile associé aux `FinalConsignee`) et de deux autres paramètres renseignés par l'utilisateur. En effet, ce dernier doit indiquer les taux de consommation maximaux et minimaux (`valForMaxHuff` et `valForMinHuff` dans le code). On associe ainsi linéairement l'indice de Huff d'un agent à un taux de consommation : plus l'indice de Huff est élevé (plus l'agent est censé avoir de clients), plus le taux est bas (impliquant une baisse de stock importante car "quantité maximale / taux de consommation" => tend vers "quantité maximale" lorsque "taux de consommation" tend vers 1).
|
|
|
|
|
|
En général, je fixe "valForMinHuff" à 6 et "valForMaxHuff" à 2.
|
|
En général, je fixe `valForMinHuff` à 6 et `valForMaxHuff` à 2.
|
|
|
|
|
|
# Choix d'un prestataire logistique
|
|
# Choix d'un prestataire logistique
|
|
|
|
|
|
Le choix d'un prestataire logistique s'effectue via la fonction "chooseLogisticProvider".
|
|
Le choix d'un prestataire logistique s'effectue via la fonction `chooseLogisticProvider`.
|
|
|
|
|
|
Cette fonction trie une liste de l'ensemble des prestataires en fonction de la distance euclidienne à partir du destinataire. Puis elle tire un nombre aléatoire entre 0 et 1, et biaise celui-ci à l'aide d'une fonction f(x)=x^4. Le nombre obtenu permet de tirer l'un des prestataires de la liste. Ainsi, plus le prestataire est proche du destinataire plus il aura de chance d'être sélectionné (on part du principe qu'un acteur a plus de facilité de traiter avec un acteur géographiquement proche de lui).
|
|
Cette fonction trie une liste de l'ensemble des prestataires en fonction de la distance euclidienne à partir du destinataire. Puis elle tire un nombre aléatoire entre 0 et 1, et biaise celui-ci à l'aide d'une fonction f(x)=x^4. Le nombre obtenu permet de tirer l'un des prestataires de la liste. Ainsi, plus le prestataire est proche du destinataire plus il aura de chance d'être sélectionné (on part du principe qu'un acteur a plus de facilité de traiter avec un acteur géographiquement proche de lui).
|
|
|
|
|
|
# Gestion du contrat avec le prestataire
|
|
# Gestion du contrat avec le prestataire
|
|
|
|
|
|
|
|
Un prestataire logistique s'occupe du réapprovisionnement d'un destinataire final. Par conséquent, ce dernier doit établir un contrat avec l'un d'entre eux. Chaque destinataire doit avoir exactement un contrat avec un prestataire, mais un prestataire peut avoir des contrats avec plusieurs destinataires. Un contrat est établi lorsqu'un destinataire choisit son prestataire. Le prestataire ne peut pas refuser l'établissement d'un contrat.
|
|
|
|
|
|
|
|
Le paramètre global `allowLSPSwitch` est un booléen indiquant si les agents destinataires ont le droit de changer de prestataire au cours de la simulation. S'ils n'ont pas le droit, alors la gestion du contrat s'arrête ici, sinon, d'autres règles, décrites ci-dessous, s'appliquent.
|
|
|
|
|
|
|
|
Le paramètre `numberOfHoursOfContract` détermine le nombre d'heure écoulée depuis la création du contrat. Et les contrats ont une durée minimale définie globalement au sein de `Parameters.gaml` par le paramètre `minimalNumberOfHoursOfContract`.
|
|
|
|
|
|
|
|
À l'initialisation des agents, on attribue à la variable `numberOfHoursOfContract` de chaque agent une valeur aléatoire comprise entre 100 et `minimalNumberOfHoursOfContract`. Ainsi, on contraint les agents à conserver leur prestataire pendant au moins les 100 premières étapes de la simulation, mais on évite également des phénomènes de synchronisation entre eux (qu'ils ne changent pas tous de prestataire au même moment).
|
|
|
|
|
|
|
|
Un agent destinataire peut tester à intervalle régulier si son prestataire est suffisamment efficace (voir ci-après pour les mesures d'efficacité). La durée de l'intervalle entre deux tests est égale à la valeur de `minimalNumberOfHoursOfContract`. Si le prestataire est considéré assez efficace, alors on le garde au moins jusqu'au prochain test. Par contre, si ce n'est pas le cas, alors on rompt le contrat avec lui et on choisit un autre prestataire. Les stocks gérés par l'ancien prestataire sont transférés au nouveau.
|
|
|
|
|
|
|
|
# Mesures d'efficacité des prestataires
|
|
|
|
|
|
|
|
|
|
# Sélection des destinataires voisins |
|
# Sélection des destinataires voisins |
|
|
|
\ No newline at end of file |