ORIE 4580/5580/5581 - Simulation Modeling and Analysis



Course Description

Simulation is a general technique for answering “what-if questions” about complex real-world systems using computer-generated models. There are many different simulation techniques across different fields; the focus of ORIE 4580/5580 is stochastic simulation: in particular, we will cover two topics:

  • Monte Carlo simulation: for the first part of the course, we will focus on simulating systems in which time does not play a substantive role.
  • Discrete-event simulation: in the second half, we will model systems that evolve over time, primarily using Simio a widely used simulation package.

Stochastic simulation deals with predicting certain aspects of the behavior of some system through approximate models. Manufacturers use simulation to model work cells, conveyors, auto- mated guided vehicles, storage and retrieval systems. Airlines and transportation companies use simulation to model fleet logistics and traffic. Designers of communications networks and computer systems use simulation to model data transmission and switching. Health care providers use simulation to model resource levels and placement in health care systems. Epidemiologists use simulation to model spread of diseases. The defense community uses simulation to model aircraft readiness and combat strategy. In public services, simulation is used to model police, fire fighting, ambulance and judicial systems. Many aspects of financial, marketing and information systems can be studied using simulation.

  • Course Syllabus: pdf

Course Information

  • Lectures: TR 1.25pm-2.40pm, Hollister B14, Map

  • Instructor: Siddhartha Banerjee, 229 Rhodes Hall, email

  • Teaching Assistants:
    1. David Eckman, email
    2. James Dong, email
    3. Ivy Wu, email
    4. James Dong, email
    5. Zeyu Huang, email
    6. Edmond Mui, email
    7. Matthew Dalton, email
    8. Judy Jiang, email
    Recitation and office hours schedule available on Piazza.

  • Course Logistics:
    • Piazza: All class announcements and resources will be posted on Piazza. Please sign up for the course immediately if you have not done so.
    • CMS: All homework submissions must be done electronically via CMS. You should be automatically signed up for this - please tell us immediately if this is not the case.
    • iClicker or iClicker App: Students are required to either have iClickers or the REEF Polling app for the course. Please see the following instructions, or consult the support site.

Course Material

  • Course notes:

    These will be uploaded on Piazza a week before the class. Students are encouraged to bring copies to class to annotate them.


  • Textbook: This is the suggested textbook for the course. We recommend reading so that you will know which section to read if you buy the book. Feel free to purchase older editions of the textbook if you can find a more reasonably priced copy. The contents of the textbook change very little from one edition to the next.

  • Other References:

    The following books are good references for the material we will cover.

    All the above references are available online on the Cornell library website.

  • Coding Resources:

    The assignments in the first half of semester can be done in any high-level language; our recommendation is for using Python (in particular, we will use Python 2.7 for our solutions) and Jupyter notebooks. These are installed in the labs in 571 Rhodes Hall and 453 Rhodes Hall.

    • For students using these for the first time, we highly recommend installing a packaga manager like Anaconda, which conveniently installs Python, the Jupyter Notebook, and other commonly used packages for scientific computing and data science.
    • The python tutorial is a good place to look up basic and advanced syntax. It should help you map other programming knowledge to Python, and learn the basic data types.
    • Use library reference to find standard library modules to help get your work done quickly.
    • The power of Python lies in the many packages that are available for different applications - we in particular will extensively use numpy, scipy and Matplotlib. Use library reference to find standard library modules to help get your work done quickly.
    • Read numpy for MATLAB users if you are familiar with MATLAB.
    • There are many more functions in scipy and numpy than you can remember. For a given task, you can look at the scipy reference or numpy reference to find the tool you are looking for. More generally, searching online for a task often brings up excellent suggestions in sites like StackExchange.
    • Matplotlib has many built-in plotting capabilities. Usually, I use the matplotlib gallery to find something similar to what I want, and edit the code provided there. Another great visualization package is Seaborn.

    For the second half of semester, we will use a commercial simulation package, Simio, which only operates on PCs, or on Macs running Windows. Simio is available in 571 Rhodes Hall and 453 Rhodes Hall. Students may consider obtaining the student version of Simio ($25, available here) - this imposes limits on the size of the models, but should be sufficient for the homework or project. The Simio software includes documentation.

Prerequisites

Familiarity with the topics covered in ENGRD 2700 and ORIE 3500/5500 is required, but ORIE 3500/5500 may be taken concurrently. The initial part of the course includes a short review of probability and statistics, which is in essence the material in Chapter 4 Review of Probability and Statistics - of the suggested textbook by Law (see below). If this material is unfamiliar to you, then you might study Chapters 1 through 6 of Introduction to Probability and Statistics for Engineers and Scientists, 2nd ed., by Sheldon Ross, or Chapters 1-5 and Chapter 7 of Probability and Statistics for Engineering and the Sciences, 8th ed., by Devore. This material is very standard, and can be found in other books at a similar level.

The course involves some coding, and some prior programming experience is useful. The programming in the first part of the course can be done using any high-level language of your choice (in particular, Python, MATLAB, R, Julia, C++ or Java); our preference is that students use Python, and submit iPython notebooks with annotated code and plots. There will be a recitation section introducing these for interested students, and students can use them in the lab computers in 571 Rhodes Hall and 453 Rhodes Hall. The second half of the course will be based on Simio, a commercial simulation package, which we will teach in class.