Overview: NBest
Operator
In addition to the first
and last
functions, which return first and last elements of a set, you can use the NBest
operator to obtain the first \(n\) elements of a set. This is based on criteria you provide to the NBest
operator as an additional argument.
Let’s take for example a transportation problem, where you have a variable Transport(i,j)
denoting how much is transported from factory i
to customer j
. You may want to know the three customers j
to which the most amount is transported per factory i
. Let’s use the NBest
operator to get these elements.
The first argument for the NBest
operator is the binding index; the result of the operator is a subset of elements from this binding index.
The second argument is the sort criteria you want to use. Note that a higher value returned by this sort-criteria indicates a better value, i.e. NBest
will sort the elements from largest to smallest.
The third argument is the number n
, indicating how many elements you are interested in (in this example, n = 3).
Note that you need to add a subset identifier to store the results (LargestTransportCities
in this case) and to set the Order by attribute to user.
In the code below, LargestTransportCities
is an indexed subset that is indexed over all factories i
and is a subset of the set Customers
:
LargestTransportCities(i) := NBest( j, Transport(i,j), 3 );
For each factory i
, the above indexed subset LargestTransportCities(i)
will contain the three customers to which the most amount is transported.
For more information about the Order by attribute and sorted sets, see Set Expressions.