Learning Simulation

The simulation field does not explain simulation well to beginners or newbies.

Many technical fields have this issue. The curse of knowledge affects technical fields. On knowledge scale of A-Z the experts are at X, Y, or Z, newbies at A or B. Newbies may not know enough to focus on why the Euler method is not best for differential equations initially.

Since many simulation practitioners are consultants, perhaps there is a disincentive to share. Perhaps many practitioners think sharing how will lower the barrier of entry for potential competitors.

Universities only share a few basics, typically. Many give the same old bank teller lines example. There are little to no gradually increasing difficulty and complexity examples with explanation to help newbies. It seems like these courses were only teaching a knowledge survey of simulation approaches and tools and don’t have time to build practical skills in the students that can be used on the job.

One professor publishes his own book on how to learn simulation using python, but to make it easier on his students he added his own library that does not translate well to commercial use.

Simulation tool vendors offer “free” versions for students that commercial newbies cannot use legally. Such free tools drain away people willing to show how to do simulation with a regular programming language. It is much easier if you have such an expensive tool to just use it. Tools like Arena, AnyLogic, and Simul8 are great for personal use, but then the tool becomes a dependency that a commercial newbie may not be able to make a sufficient business case for the licensing cost without some previous success to show on a small scale. This is a catch twenty two that slows adoption.

These tools cost thousands of U.S. dollars for commercial use. This makes sense if you are a simulation shop. However, this is very challenging to make a business case when trying to apply simulation to a business situation when there is no existing group to reach out to inside the organization.

Low cost, small scale experiments are not aided by a $5,000+ tool.

Regular programming languages are typically free (i.e. Python, Ruby, Java). But there are not many non-trivial examples available on how to create a simulation from scratch using a regular programming language, growing in complexity.

Some languages have existing simulation libraries, but these libraries are designed for advanced simulation practitioners, not newbies. Their documentation typically does not explain why, only how, assuming you already know why. For example, SimPy assumes you already know how to use Discrete Event Simulation. The documentation is aimed at knowledgeable practitioners, without much support for newbies explaining why.

The simulation community argues that they avoid regular programming languages because some practitioners do not know how to code. Yet software is eating the world. Many of the same principles of good software development apply to simulation too.

There are some modeling languages, such as Modelica and SysML. Modelica is challenging because it is not like other programming languages. Running modelica models is not as simple as running a java command line app. SysML is visual, and does not seem to easily convert to a form that can be simulated.

So how to learn simulation for beginners?

If you can find a mentor or tutor, that is a terrific short cut.

First commit to learning it. Be clear on the value of learning it. Be willing to work hard. When mentally fatigued, or thinking you can’t do it, take a break and come back fresh another time. Get 7+ hours of sleep before working on learning hard things. When you hit a wall learning some element of simulation, stop and take a break. I’ve taken a break for a few weeks sometimes on learning really hard subjects. It helps.

Learn in iterations in short chunks of time. Use a pomodoros application as a focus timer, or an actual kitchen timer that looks like a tomato. This little by little approach allows your brain to absorb better. It also avoids you burning out or yielding to negative self-talk that says “You can’t do this!” You can. Hard problems take time to master. Stay at it.

Recognize that your subconscious is still at work while you are doing other things, eating away at the problem you conscious brain told it to solve. You have to give your subconscious time to work by focusing on other things periodically and not forcing it.

Reward yourself for small gains. Learning hard things takes much effort. Celebrate small incremental gains along the way to help you stay motivated. “Yay, I did this small step!” also helps fight off the feeling of “I can’t do this,” that we all sometimes feel.

Be patient. Think of a few other hard things you learned previously. Think about how long it took you to master it. Now give yourself permission to spend a similar amount of time mastering simulation. If you give in to impatience, then you end up with a learning curve that looks more like a cliff face in front of you and that just feeds the negative voice crying “Give up, you can’t do this.” Take it a step at a time, like some simulations progress in steps.

You do not need 10,000 to learn to apply simulation in a basic way. But it also will not happen like a television episode with everything neatly wrapped up in one hour. Plan on many hours because simulation is a deep field. To be an expert, perhaps 10,000 hours is better.

At the beginning you do not realize how much there is to learn. That is okay because it helps avoid feeling overwhelmed. As you learn, you will learn there is more that you did not know. Learn the portion you are learning well enough to explain it to a child or someone closer to the novice end of the expertise continuum that you have now become. If you can’t do it without having to look things up, practice some more until this part sticks in your head. Teaching someone else helps you really get it too.

Identify a real problem you want to solve. This will help you as you learn to notice what will help solve this problem. Sometimes those that teach things try to cover all of it, rather than stop and apply this portion. You may learn better only learning a part of simulation that applies to your problem first. Then iterate and learn the next part of the problem. Avoid starting out with the most complex problem you can think of as the first problem to tackle with simulation. This is akin to shooting yourself in the foot.

Engineering is about designing under constraints. Picking a real problem constrains your learning to a subset needed to solve a problem. Solving the problem will increase your confidence in this new endeavor of simulation. Study different resources. Search for resources. Pick one and study it. Try to apply it. As you learn, later searches get better because you begin to learn the terminology used by the practitioners. You find more resources that seemed hidden before you knew what to look for and what to ask the search engine.

Tom Johnson recommends asking questions about the subject. He picks 10 questions and then goes and learns the answers. If this method helps you learn simulation, apply it.

Build a conceptual mind map of your current mental model about simulation. Map out what you have learned as you learn it. Human brains are wired for visual inputs. Mind maps visually show the relationships between the concepts as you’re learning them. As you iteratively add to the mind map, you also reinforce prior learning by seeing it again over time intervals. This helps your brain make the knowledge stick. It helps build a conceptual framework.

Someone once described this as giving ideas a place to land in your head like an airplane needs a runway to land. Such a mind map allows you to more easily see things you need to learn next as you are more clear on the gaps in your knowledge. Mind map tools allow you to move things around easily. As you iteratively refine your understanding, you can move things around as you deepen your knowledge, understanding, and application strategies. I sometime find I have to refine or correct my original perspective as I go. Mind maps may also help you avoid the curse of knowledge. The mind map may help you teach someone else how to apply simulation so you can pass it forward.

Spend time on your design with a pen and paper first. Think of the real process manually at first. Consider the simulation elements required and why. Read the manuals by Arena, Simul8, and AnyLogic for the introduction to simulation portions. These are much better than many of the academic papers for explaining simulation to newbies in regular English without all the passive voice.

Caution
These manuals are about their tool. If you don’t plan to use their tool yet, be clear about when their manual stops being helpful conceptually.

Decompose the relevant system elements. For example, all technologies involve control. The essence of control to compare what is happening to what we want to happen and make adjustments.[1] Understand what control elements are needed in simulation generally and in your problem space specifically. What entities are needed to simulate your problem? Think of the real world physical system or the abstracted virtual system. UML tools work for this too, if you know how to use them.

Build a modular model using hierarchical layered composition. This makes it easier to implement / code your model into smaller testable pieces. It also allows for potential reuse later. Most STEM educational backgrounds will cover breaking a system down into smaller chunks. I’m calling those chunks modules.

Run small tests on the manual prototype. By hand if necessary to be clear in your own mental model.

If you do not already know a programming language, pick one that is easy to learn. Python is easy to learn and has a large community that has answered many questions by newbies. Then code it. Having a clear design mental model will help debug the code.

Practice until comfort level is obtained

Start to read the literature of the simulation community.

Repeat. Work a slightly more complex problem. Grow your skills.

Aim to concisely communicate the benefits and ROI as a business case.

Good luck. Share your journey.


1. Science for all Americans_, by Project 2061
comments powered by Disqus