Les agents Vehicle
sont créés par les Transporter
. Ils permettent de déplacer de la marchandise entre une source
et une destination
mais sur un seul et même mode de transport (spécifier par networkType
dans le code). Leur date de départ est déterminée par la variable departureDate
.
Les agents Vehicle
possèdent deux reflex : authorizeDeparture
et move
. Le premier reflex permet de vérifier régulièrement si les conditions sont réunies pour que le véhicule parte de son point de départ. Le deuxième reflex est activé lorsque le véhicule a obtenu son autorisation et permet à l'agent de se déplacer progressivement sur le réseau jusqu'à sa destination.
authorizeDeparture
vérifie en premier lieu que la date courante est supérieur ou égale à la date départ (departureDate
dans le code). Si c'est le cas alors le reflex transfère les marchandises prévues (définie par la liste scheduledCommodities
) depuis la liste des marchandises du bâtiment source, et vers la liste transportedCommodities
de l'agent véhicule. Si certaines marchandises prévues ne sont pas encore arrivées dans le bâtiment source, alors le véhicule attend encore. Un véhicule peut donc partir en retard.
Lorsque toutes les marchandises prévues sont effectivement chargées dans le véhicule alors il est autorisé à partir. Le véhicule fait alors appel à la fonction removeVehicleFromList
(définie dans Building.gmal
) du bâtiment source
afin de prévenir de son départ.
À partir du moment où le véhicule est autorisé à se déplacer, c'est le reflex move
qui est appelé une fois par étape de la simulation.
Ce reflex se contente d'appeler la fonction go_to
définie par le plugin moving.on.network
et qui permet de déplacer un agent ayant le skill MovingOnNetwork
sur un graphe.
Le reflex move
vérifie aussi si le véhicule est arrivé à destination. Si c'est le cas, alors l'agent transfère les marchandises transportées au bâtiment destination
via la fonction receiveCommodity
définie dans Building.gaml
.
Voir Building pour plus de détails quant aux fonctions receiveCommodity
et removeVehicleFromList
.