This post is also available in: English (Engels)
SmallSim is a business simulation tool. It helps building complex business models, and then execute these models. With SmallSim you create executable models. The important differentiating characteristic of SmallSim is that SmallSim is not only executable, but it executes inside a full-fledged simulation environment.
These business models can be the centre of a business-centred software architecture for enterprise systems (also called the Business Domain or Domain Component).
Using these models you can keep these systems aligned with the business while the technology with which these systems are built changes. Now this technology is J2EE, last year it was Cobol, and next year it will be whatever. As you can read in my article on Business-Centred Architectures there are many advantages in using a business-centred architecture. The base characteristic of such architectures is the strict uncoupling of the business domain components with technological components. This results in a robust and scalable architecture.
The following description is mostly based on a version of SmallSim of several years ago. We are working on a new version which will be multiplatform again (SmallSim became Windows-only for usability reasons that seemed valid at the time) and has a vastly improved look and feel. However, time and money constraints make it impossible to predict when this version will be available.
SmallSim originated from a research project on the University of Groningen, The Netherlands, at the Faculty of Management Science. It was also used in the curriculum for business modelling and simulation for a few years.
Key features of SmallSim
- SmallSim is a generic simulation environment for building simulation models
- SmallSim offers improved and scalable modelling possibilities due to the consistent use of object-oriented modelling
- SmallSim offers full stochastic features such as probability distributions
- SmallSim enables you to build complex models quickly and simply, many times faster than traditional simulation solutions!
- SmallSim was originally developed in close co-operation with the Faculty of Management of the University of Groningen, the Netherlands, with the main champion dr. A.C.M.A. (Ap) Rutges who used the tool with his lectures on business modelling.
- Dr. A.C.M.A. Rutges, from the Faculty of Management, University of Groningen
- Bart Vijfschaft for some statistical components of the tool
- Students of the course BMT-7 (in 1995-1996), who were (mis-)used for testing the product extensively!
SmallSim’s main strength comes from the fact that it models problem domains in an object-oriented way. In this respect it differs from the main simulation modelling tools such as Aris, ®Arena or BP$im™ and Taylor II. These tools take a process-oriented approach, which also is the approach taken by current standards such as BPMN (Business Process Model and Notation). The best thing to compare SmallSim with is not with these tools and standards, but with object oriented modelling languages such as UML. The difference is however that:
- SmallSim models are executable with full stochastic capabilities – we prefer to say they are simulatable
- execution can be monitored to provide rich statistical information and analysis
- strategies can be evaluated in advanced scenario factories
Many process-centric tools, for example for workflow modelling, offer simulation-like facilities. In fact we ourselves built such an modelling tool, LogSim. They enable you to build “virtual” organisations and run the simulation to see how well your design holds under “realistic” circumstances. Well, these circumstances are actually not so realistic, as any simulation expert will be able to tell you. Realistic simulations entail full stochastic behaviour, taking into consideration many different kinds of error-handling (for example to allow for run-in periods to dampen fluctuations in start-up situations). It is possible to achieve comparable results with well-crafted simulation tools. Our extensive experience with advanced simulations has shown us as much. But this can only be achieved by experienced simulation experts, and the resulting models often are complex and very hard to modify or tailor to changing conditions. The resulting models are also hard to explain to business experts.
Another Dutch company, BWise, attempted to develop tools along comparable lines. The difference, again, lies in the emphasis reflektis puts on modelling from an object-oriented and component-based perspective, compared to which the half-hearted but probably well-meant attempts of BWise fall short in many respects.
In SmallSim, you define object types. For example in modelling a mail office, an object type or class could be a Customer Teller (see illustration).
The class Teller contains the description of its instances, objects that are sometimes created and destroyed during the run of a simulation, or live during the entire simulation. Three aspects of objects can be specified: Arrivals, Attributes and Tasks.
An Arrival is a specification of the lifetime of the object: is it always available? Or is it entering the simulation, and if so, with which arrival schedule? Stochastic arrival times can be specified here. You can also specify arrivals that are drawn from real world measurements.
Attributes are slots containing values, which can be numbers, strings, dates and so on. These attributes are available during the lifetime of the object, and can be used in the behaviour specification, described in Tasks. They remember the state of the actual object, the instance that is living inside the simulated business world. For example it could be the age of a product, used to determine the chance of breakdown.
A Task is the actual behaviour of the object, as you can see in the illustration above. It contains a list of activities, which will be sequentially executed by the object during its lifetime. The list might contain one or more loops, which implies that the object will remain executing those tasks while the loop condition is true (potentially forever), or jumps (analogous to a goto).
There is a quite extensive list of standard activities to choose from, but SmallSim is completely extendible. You are free to specify custom activities, which are written using the powerful Smalltalk language. In the code for these custom activities you have access to the attributes and other activities of the object, as well as the direct collaborators of the object, i.e. those simulation elements that are connected with it on the canvas. In fact this creates infinite possibilities for creating models that can be as complex as you want them to be, and since the Smalltalk scripting language is exceptionally suited for describing complex business behaviour (Smalltalk has sometimes been designated as “the DSL of DSL’s”) you can do this in the most simple way.
A Comment contains a textual description that can be used as documentation of the object.
These classes are placed on a canvas, as you can see in the first illustration. After placing these basic building blocks on the SmallSim canvas, behaviour and properties are defined for each class object, as well as relations between the elements. This is done in exactly the same way as object-oriented modelling is done. Several approaches can be chosen, we prefer the Responsibility-Driven Design Approach (Rebecca Wirfs-Brock) combined with CRC sessions to model the behaviour of each object. In these sessions we can build the model live, with immediate feedback to the business experts, to validate the model and play with it.
Definition of behaviour in SmallSim is characterised by the addition of stochastic variables. Methods or operations are specified with a certain duration. In a method many actions can be specified, such as:
- Acquire, release and consume fixed and shared resources
- Wait for a specified duration (hold)
- Wait for or signal specified conditions that can be shared among many objects (i.e. a signal)
- Specify certain sections of tasks inside a loop
- Specify any action using scripts with many templates to choose from, or write your own script
- Create new objects or resources
- Stop the simulation
Below you can see the tasks list of a Customer object. The loop element of the list is selected. Not only can you specify behaviour of active objects, you can use attributes as information needed for an objects´ behaviour. For example when an objects´ age has reached a certain amount, another path of action is taken (inside a loop or switch).
An important aspect of active objects is their arrival. Arrivals of objects are specified according to stochastic patterns. Arrivals can be stochastic, but also fixed, or upon other events. Each active object can create other active objects (or schedule them to arrive in the simulation at a specified time).
With these predefined behaviours you can model almost any problem, but the powerful scripting language enables you to write your own scripts for behaviour of any complexity. Since the scripting language is Smalltalk, the full functionality of a full fledged programming language is at your disposal.
SmallSim distinguishes between active objects (of which a property dialog is shown above) and passive objects. Passive objects are used as resources in the simulation. Resources are used to synchronise behaviour of active objects. The active objects compete for access to the resources, and the resources specify whether concurrent access is allowed and how (waiting line behaviour).
After specifying the structure of your problem domain, the next thing to specify is the run configuration. This entails setting up special runs in batch- or interactive mode, and specifying what information you want to gather. After running the simulation, you can inspect the gathered information, for statistical analysis, and to further fine-tune your simulation runs.
SmallSim supports all relevant probability distributions, all of which built on industry-strength random number generators (a shortcoming of many comparable tools, because they often re-use random numbers generated from the standard programming language libraries in C# or Java). The following distributions are available:
- Pearson Type V and VI
- Empirical Distributions (from external datasets).
- Discrete Uniform
- Negative Binomial