Intelligent Objects: The Future of Simulation


One of the important and unique internal design features of Simio is the use of a three tier object structure that separates an object into an object definition, object instance, and object realization. The object definition specifies the object behavior and it is shared by all instances of the object. An object instance is simply an instance of that object within a parent object definition (e.g. a lathe machine instance is placed inside a work cell definition). The object instance defines the property values for each individual instance of the object and this instance data is in turn shared by all object realizations.

The object realization is used to represent a specific realization of an instance within an expanded model hierarchy. For example, each time a new work cell instance is placed in a parent object definition (e.g. a production line) it creates the need for a new realization for the embedded lathe. Although the work cell definition is built from a single lathe instance, this single lathe instance cannot hold the state values corresponding to multiple lathe realizations that result from multiple instances of the work cell. The object realizations provide the mechanism for holding this hierarchical state information in a very compact form. The object realizations are only created during model execution and hold only the model state variables and a reference to their parent object instance. This is a highly efficient structure that is crucial for large scale applications such as agent-based models that can have many thousands of object realizations.


The previous example in which we defined a new object definition (work cell) by combining other objects (machines and a robot) is one example of how we can create object definitions in Simio. This type of object is called a composed object because we create this object by combining two or more component objects. This object building approach is fully hierarchical, i.e. a composed object can be used as a component object in building higher level objects. This is only one way of building objects in Simio there are two other important methods.

The most basic method for creating objects in Simio is by defining the logical processes that alter their state in response to events. For example, a machine object might be built by defining the processes that alter the machine state as events occur such as part arrival, tool breakdown, etc. This type of modeling is similar to the process modeling done in traditional modeling systems in use today such as Arena or GPSS. An object that is defined by describing its native processes is called a base object.A base object can in turn be used as a component object for building higher level objects.

The final method for building objects in Simio is based on the concept of inheritance. In this case we create an object from an existing object by overriding (i.e. replacing) one or more processes within the object, or adding additional processes to extend its behavior. In other words we start with an object that is almost what we want, and then we modify and extend it as necessary to make it serve our own purpose. For example we might build a specialized drill object from a generalized machine object by adding additional processes to handle the failure and replacement of the drill bit. An object that is built in this way is referred to as a derived object because it is sub-classed from an existing object.

Regardless which method is used to create an object, once created it is used in exactly the same way. An object can be instantiated any number of times into a model. You simply select the object of interest and place it (instantiate it) into your model