Advanced Interactive Multidimensional Modeling System

Website Developer
7 min readMar 8, 2021

AIMMS (Advanced Interactive Multidimensional Modeling System) is a prescriptive analytics software company. The AIMMS Prescriptive Analytics Platform allows advanced users to develop optimization-based applications and deploy them to business users. It is used in various industries such as supply chain management, production planning, logistics, forestry planning, and risk-, revenue- and asset-management to help with decision-making processes. AIMMS SC Navigator, launched in 2017, is built on the AIMMS Prescriptive Analytics Platform and provides configurable Apps for supply chain teams.

AIMMS offers various advanced modeling concepts not found in other languages, as well as a full graphical user, interface both for developers and end-users AIMMS also provides an ideal platform for creating advanced prototypes that are then easily transformed into operational end-user systems.

History of AIMMS

AIMMS was founded in 1989 by Johannes Bisschop, a mathematician. It was initially called Paragon Decision Technology and started as a software system designed for modeling and solving large-scale optimization and scheduling-type problems. Johannes’ idea was to make optimization more approachable by building models rather than programming.

AIMMS was later introduced as a new type of mathematical modeling tool in 1993. It’s an integrated combination of a modeling language, a graphical user interface, and numerical solvers.

AIMMS Prescriptive Analytics Platform

AIMMS is considered to be a Prescriptive Analytics technology. It offers a way to get recommended actions during a decision-making process using optimization modeling that is working under the hood of a user-friendly interface.

The AIMMS Prescriptive Analytics Platform is a rapid model building and deployment technology perfected over 30 years by mathematicians, modeling experts, and data scientists, working in conjunction with computer scientists, software engineers, cloud experts, and UI/UX professionals. It provides a repeatable way to build and deploy custom optimization-based apps to end-users across your organization.

Benefits of AIMMS

  • AIMMS is a great fit for teams ready to move away from spreadsheets or dated legacy tools for network design, demand forecasting, and S&OP/IBP.
  • AIMMS SC Navigator offers off-the-shelf apps to get the benefits from sophisticated analytics without needing an analytics background.
  • You can create custom solutions to tackle your specific strategic or operational problems across a broad range of functional areas.
  • Easier model building and debugging — AIMMS Integrated Development Environment (IDE) helps to develop and adapt models in an interactive and object-based way. The Mathematical Program Inspector provides several tools to help “debug” a mathematical program quickly and efficiently.
  • Data model consistency — AIMMS clear data model makes it easier to maintain code down the road.
  • Flexibility supports many use cases — A complete set of optimization engines ranging from Linear to Nonlinear, Integer, and Constraint Programming supports most typical optimization problems.
  • AIMMS has a community that connects passionate analytics professionals in order to exchange ideas, challenges, and points of view as well as discuss new features and upcoming plans.

Examples of code

AIMMS provides a rich set of execution statements that you can use to compose your procedures. Available statements include a versatile assignment statement, statements for data and options management, the most common flow control statements.

The AIMMS Language Reference provides a complete description of the AIMMS modeling language, its underlying data structures, and advanced language constructs. AIMMS provides six forms of flow control:

  • the IF-THEN-ELSE statement for conditional execution,
  • the WHILE statement for repetitive conditional execution,
  • the REPEAT statement for repetitive unconditional execution,
  • the FOR statement for repetitive domain-driven execution,
  • the SWITCH statement for branching onset and integer values,
  • the HALT and RETURN statement for terminating the current execution,
  • the SKIP and BREAK statements for terminating the current repetitive execution, and
  • the BLOCK statement for visually grouping together multiple statements.

In the condition of flow control statements, it is needed to know whether the result is equal to 0.0 or not in order to take the appropriate branch of execution. AIMMS will issue an error message if the result of a condition in these statements evaluates to NA (not yet available/ not yet known whether it is equal to 0.0 or not) or UNDF (illegal operation/ value cannot be known)

The IF-THEN-ELSE Statement

The syntax of the IF-THEN-ELSE statement is as follows:

AIMMS will evaluate all logical conditions in succession and stops at the first condition that is satisfied. The statements associated with that branch are executed. If none of the conditions is satisfied, the statements of the ELSE branch, if present, will be executed.

Example of if statement:

In this example, the evaluation of the ELSEIF condition only makes sense when a SupplyDepot exists. This is automatically enforced because the IF condition is not satisfied. Similarly, the successful execution of the ELSE branch apparently depends on the failure of both the IF and ELSEIF conditions.

The WHILE and REPEAT Statements

The WHILE and REPEAT statements group a series of execution statements and execute them repeatedly. The execution of the repetitive loop can be terminated by a logical condition that is part of the WHILE statement, or by means of a BREAK statement from within both the WHILE and REPEAT statements.

The syntax of the WHILE and REPEAT Statements is as follows:

Example of while statement:

This example computes the machine epsilon, which is the smallest number that, when added to 1.0, gives a value different from 1.0

An alternative way to terminate a WHILE or REPEAT statement is the use of a BREAK statement inside the loop. BREAK statements make it possible to abort the execution at any position inside the loop.

In addition to the BREAK statement, AIMMS also offers a SKIP statement. With it, you instruct AIMMS to skip the remaining statements inside the current iteration of the loop, and immediately return to the top of the WHILE or REPEAT statement to execute the next iteration. The SKIP statement is an elegant alternative to placing the statements inside the loop following the SKIP statement in a conditional IF statement.

The syntax is as follows:

Also, by adding a WHEN clause to either a BREAK or SKIP statement, you make its execution conditional to a logical expression. In practice, the execution of a BREAK or SKIP statement is almost always subject to some condition.

Example of repeat statement:

By applying a BREAK statement, the machine epsilon can be computed equivalently using the following REPEAT statement.

The FOR Statements

The FOR statement is related to the use of iterative operators in expressions. An iterative operator such as SUM or MIN applies a particular operation to all expressions defined over a particular domain. Similarly, the FOR statement executes a group of execution statements for all elements in its domain.

The syntax for the FOR statement is as follows:

FOR statements with integer domains are mostly of an algorithmic nature, and the indices bound by the FOR statement typically serve as an iteration count. For example:

Here, the algorithm first only solves for those integer variables that have a particular integer priority, and then changes them to non-variables before going on to the next priority.

FOR statements with non-integer binding domains are typically used to process the data of a model for all elements in a data-related domain. For example:

Whenever you use a FOR statement unnecessarily, AIMMS will produce a compile-time warning to tell you that the code would be more efficient by removing the FOR statement.

The SWITCH statements

The SWITCH statement is used to choose between the execution of different groups of statements depending on the value of a scalar parameter reference. The syntax is as follows:

Each selector in a SWITCH statement must be a comma-separated list of values or value ranges, matching the type of the selecting scalar parameter. Expressions and ranges used in a SWITCH statement must only contain constant integers and set elements.

Set elements used in a switch selector must be known at compile-time, i.e. the data initialization of the corresponding settings must be a part of the model description.

Takeaway

AIMMS is far more than just another mathematical modeling language. AIMMS recognizes and warns about several types of possibly problematic situations. These situations might warrant further investigation.

As with most other languages, AIMMS warns against the use of identifiers before initializing them. But unlike other languages, AIMMS also warns against the inconsistent use of units of measurement (such as a comparison of a volume against a weight), or of model formulations for which AIMMS can detect either compile-time or runtime issues that lead to sub-optimal performance or ambiguous results.

--

--