Remove Elements from a Set

The empty statement in AIMMS is used to clear the contents of a set or reset values of identifiers within a subset of predefined sets. Its behavior depends on the type of set being emptied:

  • The set is not a subset of AllIdentifiers: the empty statement will remove all elements from the given set.

  • The set is a subset of AllIdentifiers: the empty statement will empty all the identifiers that are in the given subset.

Example: Clearing a Regular Set vs. a Subset of AllVariables

Let’s assume the following two identifiers:

Set NormalSet;

Set ActiveVariables {
  SubsetOf: AllVariables;
}

As you can see, it holds that ActiveVariables \(\subseteq\) AllVariables \(\subseteq\) AllIdentifiers because the predefined set AllVariables is defined in AIMMS to be a subset of AllVariablesConstraints, which in turn is a subset of AllIdentifiers. You can verify this by opening the attribute window of these predefined sets.

This means that the empty statement behaves differently for NormalSet and ActiveVariables, as explained below:

1!This will remove all elements from the set NormalSet
2empty NormalSet ;
3
4!This will clear the values of all variables in the subset ActiveVariables
5!After the empty statement, the set itself will still contain elements!
6empty ActiveVariables ;
7
8!This will actually remove all elements from the set ActiveVariables
9ActiveVariables := {} ;

Key Takeaways

  • The empty statement removes elements from general sets but only clears values for subsets of predefined sets.

  • To fully remove elements from a subset of AllIdentifiers, assign an empty set {} to it explicitly.

  • Use empty carefully when dealing with predefined sets to avoid unintended behavior.