... | @@ -16,5 +16,19 @@ En fonction du type de transporteur, ces variables n'ont bien sûr pas les même |
... | @@ -16,5 +16,19 @@ En fonction du type de transporteur, ces variables n'ont bien sûr pas les même |
|
Ces agents possèdent le skill `Transporter` définis dans le plugin `transport.organizer`. Ce skill les dote de deux fonctions :
|
|
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
|
|
* `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 mode particulier, depuis un bâtiment et vers un autre.
|
|
* 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 `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
|
|
|
|
* 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.
|
|
|
|
|
|
|
|
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`. |