#lang scribble/doc @(require scribble/manual scribble/struct) @title[#:tag "introduction"]{Introduction} The Simulation Collection implements a hybrid discrete and continuous event simulation engine for developing simulation models in @link["http://racket-lang.org"]{Racket} (formerly known as PLT Scheme). The Simulation Collection: @itemize{ @item{Provides a process-based, discrete event simulation engine.} @item{Provides a robust interprocess communications mechanism.} @item{Supports combined discrete and continuous simulation models.} @item{Provides automatic data collection and associated graphics.} @item{Is designed to facilitate construction of component-based simulation models.} @item{Is written in, and provides access to, the Racket programming language.} } The source code is distributed with the Simulation Collection and is licensed under the GNU Lesser General Public License, Version 3.0 @cite["LGPL"]. The motivation behind the Simulation Collection is to provide the simulation engine for developing knowledge-based simulation models in @link["http://racket-lang.org"]{Racket}. It is based on a knowledge-based simulation system originally written in Symbolics Common Lisp @cite["Williams90"] @cite["Williams96"]. This is not as much a port of the earlier work as it is a complete re-engineering of the system into Racket. In particular, it makes extensive use of continuations to provide a process-based approach to building simulation models. It also adds support for building continuous simulation models, which were not part of the original work. The functionality and terminology of the simulation collection is similar to that found in @link["http://www.caci.com/asl/simscript.shtml"]{SIMSCRIPT II.5}. Some of the examples programs in this manual are based on examples from @italic{Building Simulation Models with SIMSCRIPT II.5} @cite["Russell99"] and @italic{Introduction to Combined Discrete-Continuous Simulation Using SIMSCRIPT II.5} @cite["Fayek02"]. The most important difference is that SIMSCRIPT II.5 @bold{@italic{is}} a simulation language while the simulation collection is written in and runs under an existing programming language, Racket. In this regard it is similar to @link["http://simpy.sourceforge.net/"]{Simulation in Python (SimPy)}, which is a simulation system that runs under the @link["http://www.python.org/"]{Python} propgramming language---although SimPy was not a major source of inspiration for the simulation collection. Chapter 16 gives some examples of simulation models in both SimPy and the Simulation Collection for comparison. @section{Routines Available in the Simulation Collection} The Simulation Collection covers a range of functionality for developing and executing simulation models: @itemize{ @item{Simulation Environments (Basic)} @item{Simulation Control (Basic)} @item{Events} @item{Processes} @item{Resources} @item{Data Collection} @item{Queues (Formerly Sets)} @item{Continuous Simulation Models} @item{Monitors} @item{Simulation Classes} @item{Simulation Control (Advanced)} @item{Simulation Environments (Hierarchical)} @item{Simulation Components} } The use of these functions is described in this manual. Each chapter provides detailed definitions of the functions, with example code. @section{The Simulation Collection is Free Software} The Simulation Collection is free software---this means that anyone is free to use it and redistribute it in other free programs. The simulation collection is not in the public domain---it is copyrighted and there are conditions on its distribution. Specifically, the simulation collection is distributed under the GNU Lesser General Public License, Version 3. A copy of the LGPL is provided with the software. @section{Obtaining the Simulation Collection} The preferred method for obtaining the Simulation Collection is via @link["http://planet.racket-lang.org/"]{PLaneT}, Racket's centralized package distribution system. The PLaneT identifier for the simulation collection is @scheme[(planet williams/simulation/simulation)] or, if you are using any of the graphical features, @scheme[(planet williams/simulation/simulation-with-graphics)]---either will download the entire Simulation Collection. See Chapter 2 for an example. The source code is maintained on the @link["http://schematics.sourceforge.net"]{Schematics} project website and Subversion repository at @link["http://sourceforge.net"]{SourceForge}. Note that Version 4.0 and higher of the Simulation Collection requires Racket Version 5.0 or higher. @section{No Warranty} The Simulation Collection is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. It is your responsibility to validate the behavior of the software and their accuracy using the source code provided. See the GNU Lesser General Public License, Version 3 @cite["LGPL"] for more details.