After you have developed an (optimization) model in AIMMS, it will most probably contain some unnoticed logical and/or programming errors. These errors can cause infeasible solutions or results that are not entirely what you expected. Also, you may find that the execution times of some procedures in your model are unacceptably high for their intended purpose, quite often as the result of only a few inefficiently formulated statements. To help you isolate and resolve such problems, AIMMS offers a number of diagnostic tools, such as a debugger, data pages, a profiler, an identifier cardinalities tool, and the Math Program Inspector.
To help you track down errors that are the result of misformulations in assignment statements or in the definitions of defined parameters in your model, AIMMS provides asource debugger. Using the AIMMS debugger, you can
- set conditional and unconditional breakpoints on a statement within the body of any procedure or function of your model, as well as on the evaluation of set and parameter definitions,
- step through the execution of procedures, functions and definitions,
- view the stack of procedure calls associated with the current line of execution, and
- observe the effect of single statements and definitions on the data within your model, either through tooltips within the observed definitions and procedure bodies, or through separate data pages.
Data pages provide a default view of the current contents of an identifier selected in the Model Explorer. Data pages can be used during model development to inspect the results of a definition or procedure just entered, or during a debug session to inspect the effect of a particular statement. Which type of data page is shown by AIMMS depends on the type of the identifier. The data page on the right is particular to one-dimensional root sets, while the data page on the left is appropriate for a two-dimensional parameter.
AIMMS offers a profiler to help you resolve computational time related issues. The AIMMS profiler enables you to locate the most time-consuming evaluations of
- procedures and functions,
- individual statements within procedures and functions,
- defined sets and parameters, and
- constraints and defined variables during matrix generation.
After profiling a model run, you can get an instant overview of the number of calls to all procedures in your model, as well as the number of evaluations of parameter, variable and constraint definitions, along with the total and average execution time.
Another possible cause of performance problems is when one or more multi-dimensional identifiers in your model have missing or incorrectly specified domain conditions. As a result, AIMMS can store far too much data for such identifiers. In addition, computations with these identifiers may consume a disproportional amount of time. To help you locate identifiers with missing or incorrectly specified domain conditions, AIMMS offers the identifier cardinalities tool shown to the left, which displays, for each identifier in your model, the theoretical maximum cardinality as well as the actual number of values stored as a percentage of the maximum cardinality. As most multidimensional identifiers are very sparse, a high percentage may indicate a possible omission of a domain condition.
The AIMMS math program inspector is a collection of tools to visually inspect and analyze both linear and non-linear math programs. With the math program inspector you will be able to analyze the causes of infeasibilities, unrealistic results and other problems associated with a math program. The math program inspector includes:
- A tree with the symbolic and individual variables that are part of a generated math program
- A tree with the symbolic and individual constraints that are part of a generated math program
- The ability to automatically replace infinite variable bounds by a large constant to find potential causes of unboundedness.
- The ability to find Irreducible Infeasible Systems (IIS) and the ability to automatically introduce slack variables to find potential causes of infeasibility
- The ability to make subselections in either or both trees based on various criteria, such as a manual selection, all infeasible constraints, all unbounded variables, an IIS, variable/constraint status (basic/non-basic,…), all constraints that contain variables out of the current variable selection, all variables used in the current constraint selection, …
- A graphical view of the (block) structure of the generated matrix subselection (defined by the cross product of the subselection in both individual trees), with coefficient-based coloring for each block to allow easy detection of scaling problems
- A list view of the current matrix subselection, with columns for row/column name, matrix coefficients, level values and marginal levels of variables and constraints, etc.
- A special MIP Search Tree functionality provides the branching information of the search tree. Currently CPLEX is the only MIP solver in AIMMS that provides this information.
For a full description of the AIMMS Diagnostic Tools see the User’s Guide.