## 3 Solution Fundamentals
### Holonic Control Architecture and Artificial Agents  
HCA is a distributed control solution architecture which has been frequently used to solve the problem of reconfigurable manufacturing system [9; 10]. The HCA defines the holon as an autonomous and cooperative building unit of the manufacturing system, the holon is mainly responsible for transforming, transporting, storing, and validating the information and the physical inputs. The HCA divides the manufacturing process tasks and responsibilities over different holon categories. The most known HCA model is the Product-Resource-Order-Staff-Architecture (PROSA), which is shown in Figure 3a. The PROSA basic holons are:  
* Product Holon (PH): is responsible for processing and storing the different production plans which are necessary to obtain the proper manufacturing of a certain product. * Order Holon (OH): is responsible for composing, managing the production orders. Furthermore, in a small scale enterprise, the OH distribute the tasks assignment among the existing operating resources and hence it monitors the execution of these assigned tasks. * Operational Resource Holon (ORH): an entity on the shop floor which represents a physical object such as a machine, a robot, or a worker. The most common technology to apply the HCA concept is the software agent. An artificial agent is a piece of code which is deployed in a particular environment and is able to accomplish autonomous actions in this environment to achieve some criteria which are specified by the artificial agent programmer [11]. An agent is autonomous by nature. The meaning of agent autonomy is that the agent self-steers its actions without direct assistance of the humans, and has a high degree of a self-directed control over its actions and its internal states. To achieve the concept of autonomy, the agent must be responsive, pro-active, and social. 'Responsive' means that the agent can perceive its  
Figure 2: (a) First Come First Serve Scheduling Gantt chart; (b) Johnson Scheduling Gantt chart. environment and respond as fast as it is needed to the different changes happen in this environment. 'Pro-active' means that the agent is capable of taking initiatives based on a set of goal directed behaviors, thus it can exhibit opportunistic behavior. Finally,'social' means that the agent can solve the problems and reach its goals by being able to interact with other autonomous agents and humans in its environment [12]. Conceptually, an autonomous agent is an artificial software problem solver [13]. This means that the autonomous agent must be able to select a specific set of actions and build its own plans to solve an existing problem. The set of actions which are selected to be executed by an autonomous agent is called a behavior. The artificial agent behaviors are coded by the agent developer. One or more behaviors can execute by an artificial agent to achieve its goal. The choice of a specific behavior among many should be based on a proper criterion which has been developed by the agent software creator. The agent socialization is the method that an agent would use to collect the information from its environment, therefore it can build an execution plan. A Multi-Agent System (MAS) is a flexible topology which links a group of artificial agents. The idea of the MAS is to compose a team of artificial agents whom together can solve a problem beyond the capabilities of an individual artificial agent [14]. The most famous middleware to apply the autonomous agent concept is JAVA Agent Development Environment (JADE) [15], which can be seen in Figure 3b. An instance of JADE runtime is an independent thread over a specific operating system. This instance is composed of a set of containers. A container by definition is a group of autonomous agents which are deployed under the same instance of JADE runtime. Every JADE runtime must have at least a main container, which contains two substantial agents. Those two substantial agents are the Agent Management System (AMS) and the Directory Facilitator (DF).