views:

132

answers:

3

I'm a programmer, and have completely forgotten all the advanced engineering Math I studied ~20 years ago at school. I now have an urgent need to learn about Modelling and Simulation. Though the present context is Disease Modelling, I'm not sure if there's such a thing as 'general' modelling and simulation... with concepts / techniques / algorithms that could be used in just about any domain (and not just limited to biology, finance, trade, economic, weather, etc.)

Would you have any recommendations that are easy to read by a semi-Math-literate programmer?

Basically, I cannot afford to drown myself in too much Math and theory behind M & S, hence this post.

Tia...

+2  A: 

First, some background: There are four typical pieces to the general "modeling & simulation" problem: simulation, stimulation, emulation, and modeling.

Simulation is the use of modeling to create a controllable, representative stand in for a complex system. Simulations are, by definition, always incomplete.

Stimulation is the use of artificial environmental inputs to a well defined interface to drive, examine and test the behavior of a real world device.

Emulation is the replacement of a real world device with an model at a well defined interface for the purposes of allowing controlled responses from the emulated real world device. The emulation is "complete" if all the interfaces are present, and the resulting observed behavior matches that of the real world device. Emulation (almost) never matches the real world device in speed.

Modeling is the use of mathematical techniques, specialized hardware, and engineering judgment to create a representative stand in for a real world environment, device, system, or behavior.

With that as a basis...the "Modeling and Simulation" of any interesting problem is going to rely on a detailed understanding of the physics and logical behavior of that problem domain. While there are general "frameworks" that can prove helpful, there is no general way to cover the problem specific methods that will be required to get a reasonable stand in for any given problem domain.

Within M&S, there are a few big pieces that typically come into play: dynamic systems (time driven simulation), discrete systems (event based simulation), and general numerical methods. I have a book recommendation for each of those.

Modeling and Simulation of Dynamic Systems I studied under Dr Woods many years ago as an undergrad and grad student. This text covers most of the common physical systems: electrical, thermal, and mechanical. The book has a reasonable review of differential equations, linear and non-linear systems, and enough numerical methods to get started.

Discrete-Event System Simulation I used a much earlier edition of this book to learn about Discrete Even Simulations. This book focused on the theory, rather than specific tools (which was uncommon when I was learning the subject). The sections of verification and validation were particularly helpful.

Numerical Methods in Engineering with Python I am not generally a fan of language or tool specific books for topics like there. However, in this case I will make an exception. Numerical methods form the backbone of any modeling and simulation effort. Most of the math centric texts are likely too dense for your purposes. This book (specifically the second edition) strikes a reasonable balance. If you are unfamiliar with Python, it reads enough like pseudo-code that taking the ideas to other languages is reasonable straightforward. If you are able to use Python for your project, then so much the better.

semiuseless
Hey 'semiuseless' - I found your answer quite helpful. Will wait for a few days before I mark it as final. Thanks a ton!
Harry
Can't say I agree with definition of simulation here, just to be pedantic.
ima
Thanks, please upvote the question (if you haven't already done so). This way, the question can get more attention and thus more answers.
Harry
@ima: How would you define simulation?
semiuseless
Yours it tautological with modelling: "using creating a stand in to create a stand in". I also don't agree that simulation must be controllable - it's not unknown to run simulations without control of any kind just to see how things develop in unstable model. Finally, simulation is a time based process, which should be mentioned. The shortest meaningful definition I've seen is "Simulation is implementation of a model over time".
ima
Or maybe you mean "simulation" as a human activity of creating a simulator, versus mine "simulation" as something being run by a simulator.
ima
semiuseless
The goal of both a simulation and a model is to provide a controllable stand in. The difference is in the scope. A model has a limited scope. A model is typically a single environment (e.g. gravity model, atmosphere model, etc), or a single device (e.g. keyboard model, mouse model, etc), and so on. Simulation is the use of modeling, stimulation, and emulation to create a controllable, representative stand in for a complex system. A simulation may contain many models. That said, one simulation could be model within another simulation.
semiuseless
Have a reference for that? I'm not saying you are wrong, it would be interesting to know some people use words differently, but only if that definition is actually used in literature. Google gives only one link for ""use of modeling" "representative stand in"", which is this very page. On the other hand, "implementation of a model over time" is rather common."aircraft model", "climate model", "population model" are complex _models_, while "steam valve simulation" is a simple _simulation_. The difference is that model is an object and simulation is a process.
ima
+1  A: 

Can't recommend any specific book (most I read weren't in English), but following may be useful:

The only common mathematics for most kinds of simulation is numerical integration. You can get away with online articles there, using high order method and small timestep to guarantee stability.

Most of the other methods and equations in simulation books and courses apply to rigid bodies and common physical processes - important knowledge generally, but perhaps not so helpful in your practical situation.

On the software side:

For organizing data for simulation I'd recommend looking at energy utilities CIM (Common Information Model);

For data access - OPC (OLE for Process Control, but modern specification is not based on OLE or COM).

For general architecture and interoperation: HLA (High Level Architecture, military standard with some historical peculiarities, but a good starting point for a more refined design).

ima
Thanks, please upvote the question (if you haven't already done so). This way, the question can get more attention and thus more answers.
Harry
You won't get any attention with a question that fails buzzword bingo. Add some asinine mentions of ASP.NET, Haskell and Agile, ask for "your favorite book", add some drama, make it sound like you need career (or, better, life) advice... This isn't really the right place for non-trivial technical questions
ima
+1  A: 

In short there are many techniques that can be applied to any given simulation but realistically the techniques differ depending on what you are trying to model.

To model anything you need a deep domain understanding of the problem. Without this it is almost impossible to build a model. Models can be (and are) built in many different ways; a mathematician will produce a mathematical model, a biologist a biological model, etc...

If you fully understand the domain you are modelling you can learn the mathematics that you require, there are many available sources.

A lot of simulation (that I've seen) uses lookup tables together with equations to produce the results. Equally I've seen some clever polynomials that achieve great results.

It's all down to the problem domain, your understanding of it, and testing the results against known good values.

Richard Harrison