Prerequisite knowledge & skills

Modeling using MESSAGEix requires domain knowledge, understanding of certain research methods, and scientific computing skills. This page lists these prerequisite items, grouped by different use cases.

Where possible, suggested learning materials are linked. In some cases, there are multiple options. Keep in mind that the right choice of learning materials and the time required depends on the context (e.g. formal classroom learning with an instructor vs. self-guided learning), level of prior knowledge, and learning goals.

What is my use case?

There are many different use cases for MESSAGEix. This page currently distinguishes between “basic” and “advanced”:

Basic usage

Advanced usage

Install the released version of message_ix.

Install the development version (source code).

Use a laptop/desktop computer.

Use cloud computing/HPC servers.

Store data on your local machine.

Store data in a shared database.

Run/modify the tutorial notebooks.

Build large models from scratch.

Collaborate on MESSAGEix-GLOBIOM.

Use the mathematical formulation as-is.

Modify the MESSAGE equations.

Use the message_ix Python/R code.

Contribute or request new features.

Basic usage

Domain knowledge

You should be able to:

  1. Understand mathematical optimization, linear programming, and/or the calculus underlying these.

  2. Understand concepts including:

    • Energy systems, including their components: resources, supply-side technologies, demand and end-use.

    • Levels (such as primary or secondary energy) in an energy system.

    • Efficiency of energy use or transformation.

    • Costs, including the distinction between fixed costs, variable costs, and investment costs.

Scientific computing skills

You should be able to:

  1. Install and uninstall software on your operating system (OS): one of Linux, Windows, or macOS.

  2. Use a command line (terminal, command prompt) on your OS to navigate directories and files, run commands, and view their output.

  3. Modify environment variables on your OS.

  4. Write simple programs in Python or R, including:

    • Understand concepts including: variables, functions, and arguments.

    • Use control flow structures such as if statements and various types of loops.

    • Access and read the documentation for the core language.

    • Use a search engine to find code examples and to diagnose error messages.

    For Python, Dive Into Python is one beginner resource. Many free and paid online courses are available.

  5. Understand the concepts of a software package, software release, version number (in particular the concept of semantic versioning), and deprecation. See Versions and releases for specific practices used for message_ix.

  1. Understand the concept of virtual environments for Python, using either the built-in venv module (docs, usage with pip), or Anaconda environments to create, activate, switch, and remove environments.

    The Quick install and install-adv give instructions for the above two systems, but several others are in common use including virtualenv and virtualfish.

  2. Manage Python packages—that is, install, uninstall, upgrade, and check installed versions—using at least one of:

  3. Understand or learn the basic concepts functionality of widely-used Python data science packages:

  4. Use a Jupyter notebook to run Python or R code, including: start the notebook server; open, restart, and close notebooks; create and edit cells.

    • Jupyter notebook official documentation.

    • Video introductions to the notebook. Example 1 by Michael Fudge (English, 7 minutes) Example 2 by Corey Schafer (English, 30 minutes), both on YouTube. Many are available on other platforms.

    • An in-depth tutorial by Karlijn Williams on DataCamp.

Advanced usage

The following items may be more or less.

Domain knowledge

You should be able to:

  1. Understand concepts including:

    • Capacity factor of a power-generating technology.

    • Deprecation.

Scientific computing skills

You should be able to:

  1. Interact with a server or ‘headless’ computer, i.e. one without a graphical interface, over the command line, using SSH.

  2. Use the pip command-line interface (documentation) to install, uninstall, upgrade, and check the versions of Python packages.

  3. Use the Git version control system and the git command-line tool to clone repositories, pull, fetch, create branches, and push. For contributing to development, you should know how to:

    • git merge, i.e. bring all updates from the main branch into your PR branch, giving you a chance to fix conflicts and make a new commit.

    • git rebase, i.e. replay your PR branch commits one-by-one, starting from the tip of the main branch (rather than the original starting commit).

    Optionally, do these things via a graphical program such as GitHub Desktop.

  4. Understand and interact with repositories and issues on GitHub, including:

    • Find and read the list of issues for a repository.

    • Search within one repository or across all of GitHub.

    • Use GitHub’s formatting to produce legible descriptions of code and code errors.

    • Understand concepts including: pull request, merge, merge conflict, assign, review.


  5. Provide a complete and explicit description of a software error message and how to reproduce it.

  6. Read and understand GAMS code.