Associating Units with Model Identifiers
The Unit attribute
To associate units with scalar or multi-dimensional identifiers in your model, you can specify a unit definition for such identifiers through the Unit attribute. The Unit attribute is only supported for the following identifier types:
parameters,
variables,
constraints,
arcs,
nodes,
function and procedure arguments, and
internal and external functions.
Visibility of the Unit attribute
Within the AIMMS Model Explorer, the Unit attribute is only visible in the attribute forms of the identifier types listed above if your model already contains the declarations of one or more quantities. If you only want to use the Unit attribute to specify a scale factor for an identifier (see below), you can make the Unit attribute visible in all attribute forms by adding a unitless quantity to your model (i.e. a quantity with base unit 1).
Unit attribute value
In its simplest form, the unit definition of a parameter, variable or
constraint is just a reference to a base or compound unit symbol. In
general, it can be a unit expression based on the same syntax as
described previously for specifying a derived unit expression in a
Quantity
declaration. The complete syntax of unit expressions is
discussed in Unit Expressions.
Example
The declaration
Variable VelocityOfItem
IndexDomain : i;
Unit : km/h;
}
introduces a variable VelocityOfItem(i)
with a corresponding unit
km/h
. This declaration could also have been written as
Variable VelocityOfItem {
IndexDomain : i;
Unit : 1000*m/h;
}
which contains an explicit scale factor of 1000, instead of using the
derived unit symbol km
.
Units also for scaling
When you do not use unit symbols, you can still use the Unit attribute to indicate the appropriate scale factor to be used for an identifier. These scale factors, whether or not in the presence of unit symbols, will be used by AIMMS to scale the corresponding data during various computations, as explained in Unit-based Scaling.
Use of units
By specifying units for some or all the identifiers in your model, AIMMS will perform the following unit-related tasks for you:
automatic checking of the statements in your model for unit consistency (see Unit Analysis),
automatic scaling of identifiers in assignments,
DISPLAY
andREAD
/WRITE
statements (see Unit-based Scaling), andautomatic conversion of arguments (and result value) of external procedures and functions (see Unit-based Scaling), and
automatic scaling of the variables and constraints in a mathematical program (see Unit-based Scaling of Mathematical Programs).
The .Unit
suffix
For all identifier types for which you can specify a Unit attribute,
there is also an associated .Unit
suffix. The value of the .Unit
suffix is a unit expression that equals the unit specified within the
Unit attribute of the identifier at hand.
Use of the .Unit
suffix
The .Unit
suffix is most commonly used in the following situations:
when generating reports by means of the
PUT
andDISPLAY
statements (see The PUT Statement and The DISPLAY Statement, respectively),when displaying units in strings generated by the
%u
conversion specifier of theFormatString
function (see Formatting Strings), andwhen performing sensitivity analysis of mathematical programs in the presence of variables and constraints which have a non-empty Unit attribute (see Unit-based Scaling of Mathematical Programs).
Indices not always required
If you want to reference the .Unit
suffix of a multidimensional
identifier, it is not always necessary to use the corresponding indices
of the identifier in its .Unit
suffix reference. The use of indices
is only necessary if the Unit attribute actively depends on the
indices, for instance, because it
contains a multidimensional scale factor, or
refers to a multidimensional unit parameter (see also Unit-valued Parameters).
In all other cases, a reference to just the identifier name is sufficient.
Example
Consider the declaration of the variable VelocityOfItem(i)
above.
Its UNIT
attribute is the constant unit km/h
, whence it can be
obtain through the (scalar) reference
VelocityOfItem.Unit
Unit-valued parameters are permitted
When the Unit attribute of an identifier contains references to
unit-valued parameters (see Unit-valued Parameters), such
references will be evaluated, within the context of the .Unit
suffix, to their corresponding unit expressions. Thus, the .Unit
suffix will always result in a unit expression containing only unit
symbols declared in one or more Quantity
declarations.