## 3 Key Concepts  
### Ontology-Based Multi-Agent System  
A software agent is a computer system situated in a specific environment that is capable of performing autonomous actions in this environment in order to meet its design objective [21]. An agent is autonomous by nature, this means an agent operates without a direct intervention of the humans, and has a high degree of controlling its actions and internal states. In order to achieve this autonomy, an agent must be able to fulfil the following characteristics:  
* Responsive: an agent is capable of perceiving its environment and respond in a timely fashion to the changes occurring in it. * Pro-active: an agent is able to exhibit opportunistic, goal directed behavior and take initiative. * Social: an agent can interact with other artificial agents or humans within its environment in order to solve a problem. Conceptually, an agent is a computing machine which is given a specific problem to solve [22]. Therefore, it chooses certain set of actions and formulates the proper plans to accomplish the assigned task. The set of actions which are available to be performed by the agent are called a behavior. The agent behaviors are mainly created by the agent programmer. An agent can execute one or more behavior to reach its target. The selection of an execution behavior among others would be based on a certain criterion which has been defined by the agent programmer. Building an execution plan is highly depending on the information which the agent infers from its environment including the other agents. An MAS is a collective system composed of a group of artificial agents, teaming together in a flexible distributed topology, to solve a problem beyond the capabilities of a single agent. JAVA Agent Development Environment (JADE) is a distributed MAS middleware framework as it is shown in Figure 3a [23]. Each JADE instance is an independent thread which contains a set of containers. A container is a group of agents run under the same JADE runtime instance. Every platform must contain a main container. The main container contains two necessary agents which are: an Agent Management System (AMS) and a Directory Facilitator (DF). AMS provides a unique ID for every agent under its platform to be used as an agent communication address. While the DF announces the services which agents can offer under its platform, to facilitate the agent services exchange, so that  
Figure 3: (a) Java Agent Development (JADE); (b) Ontology-Based Agent Communication Language (ACL)-Message Exchange. every agent can obtain its specific goal. JADE applies the reactive agent architecture which complies with the Foundation for Intelligent Physical Agent (FIPA) specifications, and provides a graphical interface to deploy and debug an MAS. FIPA is an IEEE Computer Society standards organization that promotes agent-based technology and the interoperability of its standards with other technologies [24]. JADE agents use FIPA-Agent Communication Language (FIPA-ACL) to exchange messages either inside its own platform or with another platform in a distributed MAS. The interaction mechanism for sending and receiving an ontology-based ACL-message between two JADE agents is illustrated in Figure 3b. Every JADE agent must have an Agent Identification (AID). The AID is composed of a unique name for the agent over a specific platform, and it is used as an address for the agent to send or receive a message. Also, every agent must have a setup method. The setup method is automatically triggered after the agent creation. The main function of the setup method is to initialize the required parameters and behaviors needed for the agent to perform its tasks. In order to complete a communication process between two agents, one agent must have a behavior which is responsible for constructing and sending an ACL-message, the other agent must have a behavior which is responsible for receiving the ACL-message. An ACL-message is composed from variety of fields, and it must have at least a Sender and a Receiver AIDs.