|
|
Le `ForwardingAgent` modélise un transitaire : c'est à dire un acteur capable d'organiser le transport de marchandises entre une source et une destination.
|
|
|
|
|
|
Dans la simulation, il n'y a qu'un seul agent de ce type. Son comportement principal consiste à calculer des plus courts chemins au sein d'un réseau de transport *multi-modal*. Par la même occasion, lorsqu'il effectue ce calcul, il réserve auprès d'agents `Transporter` les véhicules qui seront utilisés lors du transport.
|
|
|
|
|
|
La fonction qui permet de rechercher des plus courts chemins s'appelle `compute_shortest_path`. Cette fonction n'est pas directement codée dans le fichier `ForwardingAgent.gaml`, puisqu'elle est définie dans le plugin GAMA `transport.organizer`. Ce plugin déclare une nouvelle `skill` du nom `TransportOrganizer` et que le `ForwardingAgent` possède.
|
|
|
|
|
|
|
|
|
# Initialisation de l'agent
|
|
|
|
|
|
Pour fonctionner correctement, l'agent a besoin de certaines informations qu'il faut lui transmettre lors de l'initialisation de la simulation.
|
|
|
|
|
|
D'une part, il a besoin de référencer les transporteurs. On a un transporteur pour chaque mode de transport. Il y a donc :
|
|
|
|
|
|
* `transporter_road` pour le routier.
|
|
|
* `transporter_river` pour le fluvial.
|
|
|
* et `transporter_maritime` pour le maritime.
|
|
|
|
|
|
Cette partie s'effectue directement dans la fonction `init` de l'agent.
|
|
|
|
|
|
Ensuite, il faut transmettre le réseau de transport. Celui-ci se compose des différents modes inclus dans la simulation. Mais il faut également indiquer comment ces modes sont interconnectés. Pour cela, dans le reflex `second_init` du fichier `Main.gaml`, on utilise la méthode `add_mode` afin d'ajouter un mode de transport. Cette méthode prend en paramètre :
|
|
|
|
|
|
* le graphe correspondant au mode de transport à ajouter
|
|
|
* le nom de ce mode
|
|
|
* la liste des bâtiments logistiques qui sont connectés à ce réseau
|
|
|
|
|
|
En interne, le `ForwardingAgent` va donc maintenir un graphe dont les différents modes de transport sont interconnectés entre eux par les bâtiments logistiques.
|
|
|
|
|
|
# Le calcul de plus court chemin
|
|
|
|
|
|
L'appel à la fonction `compute_shortest_path` s'effectue au moment de la création d'un objet `Commodity` (voir la page [Bâtiments logistiques](Building#processOrders) pour plus de détail à ce sujet) et nécessite de lui passer ces quatres paramètres :
|
|
|
|
|
|
* le bâtiment d'orgine de la marchandise.
|
|
|
* la destination de la marchandise.
|
|
|
* La stratégie employée pour déterminer le plus court chemin : soit `travel_time` pour le plus court chemin en terme de temps, soit `financial_costs` pour le plus court chemin en terme de coûts financiers.
|
|
|
* l'objet `Commodity` a transporté.
|
|
|
|
|
|
`compute_shortest_path` s'occupe également de réserver les différents véhicules nécessaire au transport. La réservation consiste à appeler la fonction `maximalTransportedVolume` de la classe `TransporterSkill` du plugin `transport.organizer`. |
|
|
\ No newline at end of file |