|
|
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](Building) pour plus de détails quant aux fonctions `receiveCommodity` et `removeVehicleFromList`. |