|
|
Le fichier `Transporters.gaml` contient trois types d'agents différents qui héritent tous du super-type `Transporter`. Ces trois types de transporteurs sont :
|
|
|
Le fichier `Transporters.gaml` contient trois types d'agents différents qui héritent tous du super-type `🆃 Transporter`. Ces trois types de transporteurs sont :
|
|
|
|
|
|
* `RoadTransporter` pour le mode routier
|
|
|
* `RiveTransporter` pour le mode fluvial
|
|
|
* et `MaritimeTransporter` pour le mod maritime
|
|
|
* `🆃 RoadTransporter` pour le mode routier
|
|
|
* `🆃 RiveTransporter` pour le mode fluvial
|
|
|
* et `🆃 MaritimeTransporter` pour le mod maritime
|
|
|
|
|
|
Le super-type `Transporter` déclare quatre variables :
|
|
|
Le super-type `🆃 Transporter` déclare quatre variables :
|
|
|
|
|
|
* `networkType` : le type de mode de transport que gère ce transporteur
|
|
|
* `timeBetweenVehicles` : le nombre de cycle minimum entre deux départs de véhicules depuis un même bâtiment.
|
|
|
* `maximalTransportedVolume` : la quantité maximale que peut transporter un véhicule se déplaçant sur le réseau gérer par le transproteur.
|
|
|
* et `volumeKilometersCosts` : le coût financier pour transporter une unité de marchandise sur un kilomètre et sur le mode gérer par le transporteur.
|
|
|
* `🆅 networkType` : le type de mode de transport que gère ce transporteur
|
|
|
* `🆅 timeBetweenVehicles` : le nombre de cycle minimum entre deux départs de véhicules depuis un même bâtiment.
|
|
|
* `🆅 maximalTransportedVolume` : la quantité maximale que peut transporter un véhicule se déplaçant sur le réseau gérer par le transproteur.
|
|
|
* et `🆅 volumeKilometersCosts` : le coût financier pour transporter une unité de marchandise sur un kilomètre et sur le mode gérer par le transporteur.
|
|
|
|
|
|
En fonction du type de transporteur, ces variables n'ont bien sûr pas les mêmes valeurs.
|
|
|
|
|
|
Ces agents possèdent le skill `Transporter` définis dans le plugin `transport.organizer`. Ce skill les dote de deux fonctions :
|
|
|
|
|
|
* `getDepartureDate` : qui détermine la date la plus proche à laquelle un véhicule d'un mode particulier peut quitter un bâtiment donnée et avec la quantité de marchandises spécifiée
|
|
|
* et `registerDepartureDate` : qui réserve une place dans (ou crée) un véhicule pour transporter des marchandises sur un mode particulier, depuis un bâtiment et vers un autre.
|
|
|
* `🅵 getDepartureDate` : qui détermine la date la plus proche à laquelle un véhicule d'un mode particulier peut quitter un bâtiment donnée et avec la quantité de marchandises spécifiée
|
|
|
* et `🅵 registerDepartureDate` : qui réserve une place dans (ou crée) un véhicule pour transporter des marchandises sur un mode particulier, depuis un bâtiment et vers un autre.
|
|
|
|
|
|
La fonction `getDepartureDate` détermine la date de départ de la marchandise en se basant sur les même contraintes que `registerDepartureDate`. D'une certaine façon, elle simule le départ de la marchandise à partir d'une date d'arrivée et d'un volume à transporter.
|
|
|
La fonction `🅵 getDepartureDate` détermine la date de départ de la marchandise en se basant sur les même contraintes que `🅵 registerDepartureDate`. D'une certaine façon, elle simule le départ de la marchandise à partir d'une date d'arrivée et d'un volume à transporter.
|
|
|
|
|
|
La fonction `registerDepartureDate` prends plusieurs informations en paramètre :
|
|
|
La fonction `🅵 registerDepartureDate` prends plusieurs informations en paramètre :
|
|
|
* L'agent transporteur qui doit gérer le transport sur ce tronçon (pour des raisons techniques, la fonction est `static`, c'est pour cela qu'il faut passer le transporteur en paramètre).
|
|
|
* L'objet `Commodity` qui représente la marchandise à transporter
|
|
|
* L'objet `🆃 Commodity` qui représente la marchandise à transporter
|
|
|
* Le nœud source
|
|
|
* Le nœud destination
|
|
|
* La date minimale de départ : c'est à dire la date à laquelle la marchandise pourrait partir si elle peut être chargée aussitôt sur un véhicule.
|
|
|
|
|
|
`registerDepartureDate` commence par récupérer la liste des véhicules du mode de transport sélectionné et au départ du nœud source. La fonction regarde alors s'il existe un véhicule ayant la capacité d'accueillir la marchandise et dont la date de départ est supérieure ou égale à la date minimal de départ.
|
|
|
`🅵 registerDepartureDate` commence par récupérer la liste des véhicules du mode de transport sélectionné et au départ du nœud source. La fonction regarde alors s'il existe un véhicule ayant la capacité d'accueillir la marchandise et dont la date de départ est supérieure ou égale à la date minimal de départ.
|
|
|
|
|
|
Si un tel véhicule est trouvé, alors il faut vérifier qu'il n'est pas non plus possible de créer un nouveau véhicule pouvant partir avant le véhicule trouvé. Si c'est possible, alors on crée ce véhicule, sinon le véhicule trouvé est sélectionné et on ajoute la marchandise à ce véhicule.
|
|
|
|
|
|
S'il n'existe pas de véhicule capable de transporter la marchandise, alors on crée un nouveau véhicule auquel on ajoute la marchandise de l'objet `Commodity`. La date de départ est déterminée par la fonction `findBestDepartureDate`. |
|
|
S'il n'existe pas de véhicule capable de transporter la marchandise, alors on crée un nouveau véhicule auquel on ajoute la marchandise de l'objet `🆃 Commodity`. La date de départ est déterminée par la fonction `🅵 findBestDepartureDate`.
|
|
|
|
|
|
# Légende
|
|
|
|
|
|
`🅵 fonctions`
|
|
|
|
|
|
`🆃 type d'agent`
|
|
|
|
|
|
`🆅 variable` |
|
|
\ No newline at end of file |