Insight Maker Guide

Welcome to the Insight Maker Guide. This guide is organized as a hierarchical book with chapters and sections describing different portions of Insight Maker.

You can navigate sequentially through the guide using the links at the bottom of this page or jump directly to a section of interest using the Table of Contents on the right. You may also create a print-friendly version of this entire guide.

Getting Help

Insight Maker is a complex application and there is a lot to learn about it. Fortunately, we've put together a number of resources to help you. These include:

  • This Manual: Use the links on the right side of this page to learn more about Insight Maker.
  • Community Forum: Post feedback and ask questions.
  • Beyond Connecting the Dots: Read a book on Systems Thinking and Modeling using Insight Maker.
  • Systems Thinking World: Insight Maker: Take a network perspective to learning Insight Maker and watch dozens of detailed videos describing Insight Maker's features.

Features

Insight Maker is a powerful simulation tool that runs right in your web browser. Best of all, it's completely free! Insight Maker supports the following features and more:

Building Models
Use Insight Maker to start with a conceptual map of your Insight and then convert it into a complete simulation model. Insight Maker supports extensive diagramming and modeling features that enable you to easily create representations of your system.
System Dynamics Modeling
Causal Loop Diagrams
Stock and Flow Models
Graphical Inputs
Ghosting Primitives
Vectorizing Primitives
Extensive Units Support
Agent Based Modeling
States and Transitions Diagrams
Custom Actions
Spatial Relationships
Network Relationships
Diagraming and Rich Pictures
Extensive Styling Features
Custom and Built-in Library of Pictures
Folding and Unfolding of Portions of Diagram
Storytelling
Loop Identification
Run Models
Insight Maker supports powerful simulation methods that rival many commercial programs. With Insight Maker you can use System Dynamics modeling, Agent Based Modeling or integrate the two methods seamlessly.
Results
Times Series and Scatterplots/Phase-Planes
Maps and Network Diagrams
Tables Data Export to CSV
Time Machine Analysis
Functions and Programming
Large Library of Built-In Functions
User Created Macros and Functions
Procedural Programming
Functional Programming
Object-Oriented Programming
Simulation Algorithms
Euler's Method
4th Order Runge-Kutte Method
Advanced
Sensitivity Testing
Model Scripting
Built-In Optimizer
Sharing Models
Insight Maker has extensive capabilities for sharing your models with others. Just send them a link or embed your model in your website or blog. Also, you can give others access to your models so they can work on them collaboratively with you right in their own browsers.
Sharing
Send Model Link
Embed Model in a Web Page
Publish Model as Web Page
Access Control
Enable Shared Editing
Make Insights Private or Public
CostFree!

Types of Modeling

Insight Maker is a multi-method modeling solution packaged within a fluid and cohesive software environment.

At one level, you can use Insight Maker purely to map out conceptual models: using casual loop diagrams or rich pictures to describe a system. In this mode, Insight Maker functions as a powerful diagraming tool that lets you illustrate a model and then easily share it with others.

Once you have a model diagram created, you can start to add behavior to the different components using Insight Maker's simulation engine. Insight Maker supports two different modeling paradigms that together can describe most of the models you could imagine:

  • System Dynamics: System Dynamics (sometimes called differential equation modeling or dynamical systems modeling) concerns itself with the high-level behavior of a system. It helps you understand the aggregate operations of system on a macro-scale. It is great for cutting away unnecessary detail and focusing on what is truly important in a model.
  • Agent Base Modeling: Agent Based models allow you to model individual agents within a system. Where in System Dynamics you might only look at the population as a whole, in Agent Based Modeling you can model each individual in the population and explore the differences and interactions between these individuals.

System Dynamics and Agent Based Modeling complement each other. In Insight Maker you can use either approach or integrate both of them together into one seamless model. To understand the pros and cons of an Agent Based Model versus a System Dynamics model, we can explore how these two techniques might approach the same problem: modeling the spread of an infectious disease in a population.

An Example: SIR Disease Model

For this example, let us model the spread of a disease such as the flu. We can classify people in this model as being in one of three states:

  • Susceptible: Healthy and susceptible to catching the disease
  • Infected: Infected with the disease and able to spread it to susceptible individuals
  • Recovered: No longer infected with the disease and temporarily immune to the disease (for diseases like the flu, a temporary immunity will be conferred after infection which will fade with time)

The commonly used acronym to describe this type of model -- SIR -- comes from the initials of these three states.

Individuals will move between the three states: moving from susceptible to infected to recovered and back to susceptible. The movement from susceptible to infected will be governed by some infection rate equation that takes into account the status of currently infected individuals. The movement from infected to recovered and back to susceptible will be governed by the average duration of the disease and the average duration of the immunity conferred by it.

System Dynamics Implementation

Using the System Dynamics methodology, we model each of the three states using a Stock primitive that stores the number of individuals currently in that state. So, for instance, we have a Susceptible Stock storing the portion of the population that is currently in the susceptible state. We then use Flows to move individuals between the Stocks based on different factors. For instance, for the flow moving individuals between the Infected and Recovered Stocks, we would use an equation such as [Infected]*1/[Average Infection Duration]. If the average infection duration was ten days, this would move roughly 10% of the infected population every day.

The following embedded model illustrates the full System Dynamics implementation of this model. Please note the smooth aggregate curves in the resulting simulations.

Agent Based Implementation

To create the Agent Based Modeling implementation of this disease model, we first create an agent definition that defines the behavior of a single individual in our model. We use three State primitives in this model, one to represent each of the three disease states a person can be in. We connect these states with Transition primitives that instruct how a single individual moves between the states. Where in the System Dynamics models we had flows with rates, in the Agent Based models there are transitions that are given probabilities. These probabilities determine when the transition will be activated and the agent will switch states.

The Agent Based approach allows us to implement features in this model that would simply be impossible using System Dynamics. For instance we can look at the geographic proximity of agents and use this to affect our transmission probability. Susceptible agents that are closer to infected agents are more likely to become sick than those that are farther away. Similarly, we could look at social structure: how the connections between agents will influence their probability of coming into contact with the infection and falling ill. All this would simply not be possible to look at using System Dynamics.

The following embedded model illustrates the full Agent Based Modeling implementation of this model. An added twist included here is that the susceptible agents will actually try to run away from the infected agents!

System Dynamics

Insight Maker supports System Dynamics modeling: a powerful method for exploring systems on an aggregate level. By "aggregate", it is meant that System Dynamics models look at collections of objects, not the objects themselves. For instance, if you created a model of a water leakage from a bucket, a System Dynamics model would concern itself with the quantity of water as a whole, not with individual droplets or even molecules. Similarly, if you were modeling a population of rabbits, the System Dynamics model would look at the population as a whole, not at the individual rabbits.

System Dynamics models are constructed from a set basic building blocks also known as "primitives". The key primitives are Stocks, Flows, Variables and Links.

StockStocks store a material. For instance a bank account is a Stock that stores money. A bucket is a Stock that stores water. A population is a Stock that stores people.
FlowA Flow moves material between stocks. For instance, in the case of a bank account you could have an inflow of deposits and an outflow of withdrawals.
Variables Variables are dynamically calculated values or constants. In the bank account model you could have a Variable representing the interest rate. It could be a fixed value or be governed by an equation that changed over time.
LinksLinks show the transfer of information between the different primitives in the model. If two primitives are linked, they are related in some way.

From these basic primitives, and the others supported by Insight Maker, you can build both simple and complex models in a straightforward manner. Models related to ecology, policy, business, or many other fields are all possible. As an example of a simple model built using the System Dynamics features of Insight Maker, below is an embedded model showing the interactions between wolves and the moose they prey on at the Isle Royale in the Great Lakes. This model shows very interesting oscillatory behavior as the two species interact over time.

System Dynamics modeling is sometimes referred to as dynamical systems modeling or, simply, differential equation modeling as differential equations are at the heart of the technique.


Agent Based Modeling

Agent Based Modeling simulates individuals. For instance, if we were to simulate a population, we would have a separate agent for each individual in that population. Each of these agents would have a set of attributes that defined their state. For instance, if we built a predator-prey model, each of the predators might have two states "Hungry" and "Satiated". Which of these two states an agent was in would affect its behavior with the hungry predators seeking prey while the satiated predators would be content to stay where they were.

Insight Maker's Agent Based Modeling supports two types of spatial structure: geographic structure and network structure. Using geographic structure, you can give a position to each agent (as an x, y coordinate). The agents may then interact based on their positions. For instance, an agent may look to find the closest agent to it and then respond in some appropriate way. Agents may also be scripted to move in this geographic space. Network structure represents the connections between agents. Imagine a social network where each agent may have a set of friends and who they know will affect their behavior. This network structure can be dynamically rewired by the model over the course of the simulation.

The following embedded model is a simple illustration of an Agent Based model. It shows the interactions between two types of agents: a consumer and patches of ground. Think of this as illustrating an orchard. Each patch represents a clump of trees that are either fertile (they have fruit) or infertile (they do not have fruit). The consumer agents will move around the orchard seeking fruit trees. When they find a fertile patch they will consume all the fruit, converting it to an infertile patch. Over time, infertile patches will be converted to fertile patches as new fruit matures.


Collaborate and Share

Insight Maker runs on the Internet and so sharing Insights could not be easier. Want to let a colleague view your model? Simply send them the same link you use to edit the model. They'll be able to use this link to view and run the model right in their web browser.

Access Controls

This link will not allow them to edit the model, though. Do you want to give them the ability to edit the model so you can collaborate together? Simply edit the Insight's properties and grant your colleague the edit permission.

By default, everything in Insight Maker is public. As soon as you make a change to an Insight, it is pushed out to the world for anyone to see. All Insights will be indexed and categorized by Insight Maker so others can find them and can contribute to them. However, if you would prefer to keep an Insight under wraps for a bit, you can do so by making it private. Once you are ready to share it with the world, simply make it public again and it will be indexed by Insight Maker.

Embedding Insights

In addition to sending links to people with your insights, you can also directly embed them in your webpage or blog. Simply use Insight Maker's "Embed" feature and paste the specified HTML code into your blog. Then people will be able view and run your Insights right where you want them to.

Here is an example of an embedded Insight:

It really is that easy!

Free and Open Source

Insight Maker Free

Insight Maker is free to use. It is free to build a model, it is free to run a simulation, it is free to embed the model in your blog or website. We make Insight Maker free because we strongly believe that people who use it to explore important systems will be able to make better decisions that will benefit us all.

Insight Maker is Open Source

In addition to being free, Insight Maker is an open-source project. Want to see what algorithms are used to run your model? Just take a look at the source files. Insight Maker's source-code may be used and modified as covered by the terms of the Insight Maker Public License.

External Packages

Insight Maker uses a number of third party packages including:

The copyrights for these packages are held by their respective authors and their use is governed by their respective licenses.

And special thanks to Jim Cameron for developing custom icons for Insight Maker. He is responsible for the great snowball and balance icons. Jim can be contacted at jimbcameron AT yahoo.co.uk


Tutorials

The following tutorials provide step-by-step instructions on how to build a variety of models within Insight Maker. Tutorials marked with "SD" are primarily System Dynamics focused while tutorials marked ABM are primarily focused on Agent-Based Modeling.

Before starting on the tutorials, it may be useful to familiarize yourself with basic Insight Maker model-building practices. Specifically, you should familiarize yourself with how to create primitives and run models.

Disease Dynamics (SD)

    This tutorial describes how to construct a model of an infectious disease. Before starting the tutorial, make sure you have familiarized yourself with how to create primitives and run models.
  1. Create a new Stock named Healthy.
  2. Create a new Stock named Infected.
  3. The model diagram should now look something like this:
  4. Create a new Flow going from the primitive Healthy to the primitive Infected. Name that flow Infection.
  5. The model diagram should now look something like this:
    The basic model structure has been laid-out, we can start to define parameter values and equations. We'll start with a very simple model containing a population of 100 people and where 2 people becoming sick each year.
  6. Change the Initial Value of the primitive Healthy to 100.
  7. Change the Flow Rate of the primitive Infection to 2.
  8. Run the model. Here are sample results:
    The results are as we would expect. However this is not a model of an infectious disease as the infection rate does not depend on the presence of infected individuals. Let's change the infection rate so it depends on the contact rates between sick and healthy people.
  9. Change the Flow Rate of the primitive Infection to 0.006*[Healthy]*[Infected].
  10. Run the model. Here are sample results:
    That's strange. No one ever gets sick. Why is that? It turns out it is because we start the simulation with no infected people in the model. Since we're modeling an infectious disease, this means there is no one to start the epidemic! Let's change that we'll add a single infected person to get the epidemic started.
  11. Change the Initial Value of the primitive Infected to 1.
  12. Run the model. Here are sample results:
    That looks about right. Before moving on, let's spend a moment to improve our model structure. Right now if we wanted to edit the infection rate, we would have to dig down in the equations to find the right number. Let's make our model more modular, without changing any results, by separating the infection rate into its own variable.
  13. Create a new Variable named Infection Rate.
  14. Create a new Link going from the primitive Infection Rate to the primitive Infection.
  15. The model diagram should now look something like this:
  16. Change the Equation of the primitive Infection Rate to 0.006.
  17. Change the Flow Rate of the primitive Infection to [Infection Rate]*[Healthy]*[Infected].
  18. Run the model. Here are sample results:
    We can hide the display of the infection rate primitive by configuring the display.
  19. Run the model. Here are sample results:
    Now that we have our basic model working, let's extend it by adding the phenomena of people recovering from the disease. We'll model something like the Chicken Pox where people become immune to the disease after they recover.
  20. Create a new Stock named Immune.
  21. Create a new Flow going from the primitive Infected to the primitive Immune. Name that flow Recovery.
  22. Create a new Variable named Recovery Rate.
  23. Create a new Link going from the primitive Recovery Rate to the primitive Recovery.
  24. The model diagram should now look something like this:
  25. Change the Equation of the primitive Recovery Rate to 0.1.
  26. Change the Flow Rate of the primitive Recovery to [Recovery Rate]*[Infected].
  27. Change the Equation of the primitive Infection Rate to 0.008.
  28. Run the model. Here are sample results:
    Fantastic! Now we have a working disease simulation. You can experiment with different population sizes, infection rates and recovery rates to see how the results change.

Disease Dynamics (ABM)

    This tutorial describes how to construct a model of an infectious disease using Insight Maker. Agent-Based Modeling techniques are used in the construction of this model. Before starting the tutorial, make sure you have familiarized yourself with how to create primitives and run models.
  1. Create a new State named Healthy.
  2. Create a new State named Infected.
  3. Create a new State named Recovered.
  4. The model diagram should now look something like this:
    States represent the condition someone is in. So in our model a person can either be healthy, infected, or recovered from the infection. Now, lets add transitions that move a person from state to state.
  5. Create a new Transition going from the primitive Healthy to the primitive Infected. Name that transition Infection.
  6. Create a new Transition going from the primitive Infected to the primitive Recovered. Name that transition Recovery.
  7. The model diagram should now look something like this:
    Please note that in this model someone who is recovered cannot become sick again. They have gained immunity to the disease.

    Now that the model structure has been designed, let's add equations and configure the primitives.
  8. Change the Initial Active property of the primitive Healthy to true.
    When a state is active, it means a person is in that state. By setting Healthy to start true, we have the person start in the healthy state.
  9. Change the Trigger Type property of the primitive Infection to Probability.
  10. Change the Value/Equation property of the primitive Infection to 0.3.
  11. Change the Trigger Type property of the primitive Recovery to Probability.
  12. Change the Value/Equation property of the primitive Recovery to 0.2.
    Using the Probability type for the transition trigger means that the person has a fixed probability of transitioning from one state to the next each year.
  13. Run the model. Here are sample results:
    Don't worry if your results do not look exactly like this. This is a stochastic model so each time we run it, we will get different results. Let's give it a try.
  14. Run the model. Here are sample results:
  15. Run the model. Here are sample results:
    When a state takes on the value 1 it means the person is in the state. We can see how the person moves from healthy, to infected, to recovered in these three different simulation runs. Right now we are only simulating a single person. Let's extend our model to simulate a population of people.
  16. Create a new Folder named Person. The folder should surround the primitives Healthy, Infected, Recovered, Infection and Recovery.
  17. The model diagram should now look something like this:
  18. Change the Behavior property of the primitive Person to Agent.
  19. Create a new Agent Population named Population.
  20. Change the Agent Base property of the primitive Population to Person.
  21. The model diagram should now look something like this:
  22. Run the model. Here are sample results:
    That looks pretty good! We can see the disease gradually spread through our population of 100 people.

    However, right now the probability of a person getting sick is independent of the other people in the model. Let's change the model so the more sick people there are, the higher the likelihood that a healthy person will become sick.
  23. Create a new Variable named Percent Infected.
  24. Create a new Link going from the primitive Population to the primitive Percent Infected.
  25. Create a new Link going from the primitive Percent Infected to the primitive Infection.
  26. The model diagram should now look something like this:
    Now let's configure the value of Percent Infected and change the Infection transition to use it.
  27. Change the Equation property of the primitive Percent Infected to Count(FindState([Population], [Infected]))/PopulationSize([Population]).
    This equation uses the FindState function to select all the people in the Population primitive who are in the Infected state. It then divides the count of those people by the total size of the population.
  28. Change the Value/Equation property of the primitive Infection to [Percent Infected], and the Recalculate property of the primitive Infection to Yes.
    The Recalculate property causes the infection rate to be recalculated and updated at every time step of the simulation.
  29. Run the model. Here are sample results:
    Nothing happened because we don't have anyone to start the infection. Let's seed the model with a single initial infected person.
  30. Change the Initial Active property of the primitive Infected to Index(Self) == 1.
  31. Change the Initial Active property of the primitive Healthy to Index(Self) <> 1.
    Each of the people in the population is given an unique Index. The first agent will have an index of 1, the second an index of 2, and so on. Self always refers to the current agent. These equations will set the first agent created to start in the Infected state while all the other agents will start in the Healthy state.
  32. Run the model. Here are sample results:
    Since this is a stochastic model, each time you run it, you will get slightly different results. Let's give it a try.
  33. Run the model. Here are sample results:
  34. Run the model. Here are sample results:
    That works great! We now have a full Agent-Based Model of disease.

    We can also configure the display type to be a map of the people in the model in a two-dimensional geography. Right now, people are placed randomly, but we could configure their locations or make them move around in response to different factors. We could also change the infection rate so the infection spread geographically.
  35. Run the model. Here are sample results:

Predator-Prey Interactions (SD)

    This tutorial describes how to construct a model of the interactions between a predator species (wolves) and a prey species (moose). Before starting the tutorial, make sure you have familiarized yourself with how to create primitives and run models.
    First, let's create the structure to model a small population of moose.
  1. Create a new Stock named Moose.
  2. Create a new Flow going from empty space to the primitive Moose. Name that flow Moose Births.
  3. Create a new Flow going from the primitive Moose to empty space. Name that flow Moose Deaths.
  4. The model diagram should now look something like this:
    Now that the structure has been defined, let's enter the equations to define how our moose population behaves. We'll assume 150 moose to start and constant birth- and death-rates.
  5. Change the Initial Value property of the primitive Moose to 150.
  6. Change the Flow Rate property of the primitive Moose Births to 0.16*[Moose].
  7. Change the Flow Rate property of the primitive Moose Deaths to 0.10*[Moose].
  8. Run the model. Here are sample results:
    We see an exponential growth pattern to this model. That because the birth-rate is higher than the death-rate. If the reverse had been true, we would have seen a population decline over time.

    Now let's create a population of wolves.
  9. Create a new Stock named Wolves.
  10. Create a new Flow going from empty space to the primitive Wolves. Name that flow Wolf Births.
  11. Create a new Flow going from the primitive Wolves to empty space. Name that flow Wolf Deaths.
  12. The model diagram should now look something like this:
    Now we can enter equations to define the behavior of the wolf population.
  13. Change the Initial Value property of the primitive Wolves to 100.
  14. Change the Flow Rate property of the primitive Wolf Births to 0.2*[Wolves].
  15. Change the Flow Rate property of the primitive Wolf Deaths to 0.12*[Wolves].
  16. Run the model. Here are sample results:
    So far, so good.

    Before we have the two populations interact, let's make our model more modular by putting all the rate constants into separate variable primitives. This will make the model easier to mantain.
  17. Create a new Variable named Moose Birth Rate.
  18. Create a new Variable named Wolf Birth Rate.
  19. Create a new Variable named Moose Death Rate.
  20. Create a new Variable named Wolf Death Rate.
  21. The model diagram should now look something like this:
  22. Create a new Link going from the primitive Moose Birth Rate to the primitive Moose Births.
  23. Create a new Link going from the primitive Wolf Birth Rate to the primitive Wolf Births.
  24. Create a new Link going from the primitive Moose Death Rate to the primitive Moose Deaths.
  25. Create a new Link going from the primitive Wolf Death Rate to the primitive Wolf Deaths.
  26. The model diagram should now look something like this:
    Let's add the equations for the new cariables to complete this modularization.
  27. Change the Flow Rate property of the primitive Moose Births to [Moose Birth Rate]*[Moose].
  28. Change the Equation property of the primitive Moose Birth Rate to 0.16.
  29. Change the Flow Rate property of the primitive Moose Deaths to [Moose Death Rate]*[Moose].
  30. Change the Equation property of the primitive Moose Death Rate to 0.10.
  31. Change the Flow Rate property of the primitive Wolf Births to [Wolf Birth Rate]*[Wolves].
  32. Change the Equation property of the primitive Wolf Birth Rate to 0.2.
  33. Change the Flow Rate property of the primitive Wolf Deaths to [Wolf Death Rate]*[Wolves].
  34. Change the Equation property of the primitive Wolf Death Rate to 0.12.
    That's it! Let's check to make sure we get the same results as before.
  35. Run the model. Here are sample results:
    Now it's time to make the wolf and moose populations interact. In this model extension, wolves will chase and consume the moose. The more moose they catch, the faster the wolves reproduce, and the faster the moose population declines. We'll make the moose death-rate dependent on the number of wolves, and the wolf birth-rate dependent on the number of moose.
  36. Create a new Link going from the primitive Moose to the primitive Wolf Birth Rate.
  37. Create a new Link going from the primitive Wolves to the primitive Moose Death Rate.
  38. The model diagram should now look something like this:
  39. Change the Equation property of the primitive Wolf Birth Rate to 0.001*[Moose].
  40. Change the Equation property of the primitive Moose Death Rate to 0.0008*[Wolves].
  41. Run the model. Here are sample results:
    That's getting interesting! Let's increase the length and accuracy of our simulation.
  42. Change the Analysis Algorithm property of the Time Settings to RK4.
  43. Change the Simulation Time Step property of the Time Settings to 0.5.
  44. Change the Simulation Length property of the Time Settings to 100.
  45. Run the model. Here are sample results:
    Great! The oscillatory behavior we see is typical of some predator-prey systems. The wolves kill many of the moose, but then the wolves have nothing to eat. This leads the wolf population to drop, allowing the moose population to recovery. This repeats in an ongoing cycle.

    We can also configure the display to use a scatter-plot instead of a time-series to show the phase-plane oscillatory behavior clearly.
  46. Run the model. Here are sample results:
    There are many parameters in this model you can experiment with. This form of model what is known as the Lotka-Volterra Model in the modeling community.

Manual

Building a model consists of several different steps:

  • Conceptualizing the model
  • Diagraming the model in Insight Maker
  • Adding equations to the model
  • Running the model and observing the results
  • Carrying out sensitivity testing and model verification and validation activities

Not all these steps will be carried out for every model, but in general they will occur in an iterative cycle where feedback from a later step is used to adjust the product from an earlier step.

The fundamental building blocks of any Insight Maker model are a set of primitives. Primitives are basic tools provided by Insight Maker and may be used to simulate virtually any kind of system. There are a number of built-in primitives including: Stocks, Flows, Variables, Converters, and Links.

Model Diagramming

Insight Maker enables you to build models graphically and it supports a rich set of diagramming features. In fact, many Insight Maker models consist only of the diagram itself without a simulation component.

You can add elements to your model by selecting "Add Primitive" in the toolbar then choosing your desired primitive type.

Another way to create a primitive is to right-click on the model canvas. A contextual menu will open that lets you select a primitive to insert into the model.

There are many different types of primitives. Some — Stocks, Flows, Converters — have specific meaning and play roles in simulations. Others — Text, Pictures — are general primitives that you can use to illustrate your model but do not play a role in simulations. You can learn more about primitives here

Once you have added primitives to your model, you can connect them together using Flows, Transitions and Links. Flows and Transitions have a very specific simulation meaning and can only be used to connect certain types of primitives (Stocks for Flows and States for Transitions). Links on the other hand can be used to connect any primitives.

To create a Link, make sure "Links" is selected in the toolbar.

Then, hover your mouse over a primitive. A blue arrow will appear in the middle of the primitive that you can click and drag to another primitive. Let go of the mouse, and a Link will be created.

Insight Maker has many styling options you can use to configure the primitives in your model. You can adjust colors, fonts and more. You can also assign a picture to different primitives. Insight Maker has a large library of built-in pictures, but you can add your own by linking to the URL of a picture that has been uploaded to the internet.

Ghosting

As a model becomes more and more complex in Insight Maker, the number of connections between different components can start to become daunting. For complex models, Links and Flows may criss-cross each other in many places leading to a "spaghetti"-like model appearance that can be difficult to follow. Ghosting is one tool that can be used to combat this graphical complexity and to keep even the most complex models straightforward.

In short, ghosting allows you to make a reference to, or a Ghost of, a primitive in your model. The Ghost can be moved around in your model independently of the original primitive or its Source. This Ghost isn't a duplicate of the Source primitive (you don't now have two separate primitives) instead it is more of a mirror: it references the Source primitives value and state at all times. Any primitive that is connected to the Ghost primitive is automatically connect to the Ghost's Source and vice versa.

In Insight Maker, Ghosts of primitives are shown with a partially transparent graphical style. The above figure shows one example of a Ghosted primitive. If the Effect of EL LOS primitive had been connected directly to the EL LOS Product primitive, a Link would have to been made that cut across many other parts of the model. By using a Ghost of the primitive instead, we have achieved the same effect but the model diagram is now much cleaner.


Keyboard Shortcuts

There are a number of Shortcut Keys defined for Insight Maker.

  • Control/Command + B Bold the style of the currently selected primitives.
  • Control/Command + I Italicize the style of the currently selected primitives.
  • Control/Command + U Underline the style of the currently selected primitives.

  • Control/Command + C Copy the selected primitives. Note that Insight Maker does not actually have access to your system's clipboard so you can only Copy and Paste within the context of a single Insight.
  • Control/Command + V Paste whatever is on the local clipboard.
  • Control/Command + X Cut the currently selected primitives to the local clipboard.
  • Delete Deletes the currently selected Primitives.

  • Control/Command + Z Undo the previous command.
  • Control/Command + Y Redo the previous command.

  • Control/Command + F Opens the Find & Replace dialogue which will allow you to search for text in Primitive Labels, Notes and Values. You may specify if the search is to be case sensitive.
  • Control/Command + G Find Next instances of specified text.

  • Control/Command + ] Step forward when in Storytelling mode.
  • Control/Command + . Open the Note Editor dialogue.
  • Control/Command + L Open the Time Settings dialogue.
  • Control/Command + K Switch the canvas to Scratchpad mode so you can draw on it.
  • Control/Command + P Create a printer friendly image in a new window.
  • Control/Command + S Save the insight. Note that if it hasn't been saved at least once the description dialogue will open. You typically don't need the Save shortcut because Insight Maker does an automatic Save after each change you make.
  • Control/Command + Enter Run the simulation.

  • Right Click Open a drop down from which you can select primitives to be created at the current mouse pointer location.
  • Option Click on a Link Primitive Create a waypoint you can move to curve the link.

Equations and Formulae

Many primitives allow you to enter equations that determine their values or behavior. To access the equation editor for a primitive, hover your mouse over the primitive and click the "=" sign that appears. You can also use the configuration panel on the right side of the main window to edit the equation when the primitive is selected.

The equation editor allows you to type in an equation. On the bottom of the editor are a list of functions built into Insight Maker. If you hover over a function, a tooltip will describe what it does. On the right side of the editor are a list of other primitives this primitive can reference. You can click on one of these to insert it into the equation.

These equations can be arbitrary mathematical or programming expressions. For instance, take the example of the following equation:

Sin(Years()*2) + [Rain Flow]^0.05

This example displays a number of features that the Insight Maker equation engine supports:

  • ‘Years’ refers to the current simulation time as measured in years.
  • ‘[Rain Flow]’ refers to the value of another primitive. Primitives can reference each other using this square-bracket notation.
  •  ‘Sin’ applies the trigonometric sine function.
  • ‘+’, ‘*’, and ‘^’ are all standard mathematical operators representing addition, multiplication and exponentiation respectively.

There are a wide range of built-in functions you can use to develop equations and many advanced programming features that can also be utilized.

Built-In Functions

In addition to standard algebraic and logical operators, Insight Maker has many powerful built-in functions. The following is a list of these functions along with descriptions and sample usages.