# Multi-Agent Simulation Environment for Logistics Warehouse Design Based on Self-Contained Agents
## 3 Proposed Multi-Agent Simulation Modeling Environment for Logistics Warehouses
### Message and Fact Architecture
The working memory is a list of facts as shown in Figure 4. Facts stored in the working memory include the key \"_s\" and the characterizing keyword as a key. For example, almost every agent in a logistics warehouse carries objects; therefore, the agent core library prepares a function to retrieve and update the facts that include {\"_s\":\"carrying_object\"}. Figure 5 shows the fact of map information stored in the spatial-temporal agent. The fact includes {\"_s\":\"map_info\"} and the current time frame (e.g., \"t\":0). This data format represents the physical space of a logistics warehouse as a collection of nodes labeled (<vertical node location>, <horizontal node location>). Each node has a type, such as wall, floor, and some specific types like racrew_area that the Racrew AGVs (the AGVs that can carry shelves) can move around. Each node also has the key \"has\", and the key value is an empty list by default. The list can contain keywords representing the objects on the nodes, such as the IDs of AGVs, and those of inventory shelves. The spatial-temporal agent sends the whole map to the logging agent to log the map configuration in each time frame. The visualization program parses the \"map_info\" facts to recreate the location of objects in the time series to visualize the simulated logistics warehouse. Figure 4: Fact architecture (example written in Python syntax). The overview of the messaging sequence of agents in simulation models is shown in Figure 6. In every time frame, the spatial-temporal agent first broadcasts the performative of tick_start to the simulation agents. Simulation agents then make decisions at the current time frame by evaluating rules, executing actions, and/or exchanging messages (e.g., messages with handover performative, pick, etc.). Next, simulation agents send messages with the move_request performative (not applicable if the simulation agent does not have a physical location) to move to the next location in the next time frame. The spatial-temporal agent then evaluates the requests and replies to the messages with move_request_accepted performative to grant the requests. If the move_request messages conflict with the next physical location or the next physical location is unacceptable (e.g., the requested location is a wall), the spatial-temporal agent replies with move_request_rejected performatives. The simulation agents that received the messages with move_request_rejected then make the decisions again and sends the move_request until they are accepted. This procedure repeats in every time frame. Each agent is free to accept or reject a request from the other agents in the decision-making phase of the time frame, while they are also free to request the other agents perform a certain task. The agents make decisions on individual behavior by their states and rules. For example, when the WMS agent (the management system of a logistics warehouse) requests the Racrew agents (the agent representing  
Figure 5: Fact of map information stored in spatial-temporal agent (example). Figure 6: Overview of message exchange sequence among simulation agents and spatial-temporal agent. an AGV in the picking area) to process a customer order, each Racrew agent evaluates its state and decide whether it accepts the customer order processing task, or not. Once the Racrew agent accepts a customer order processing task, it decides its path to go to the target shelf using a path planning algorithm. The Racrew agent requests the spatial-temporal agent to provide the map of the picking system area to determine the path.