
<ConsistencyModule:> max_index(+Collection,?Index)

   Index is constrained to the index(es) of the variable(s) with the maximum value in Collection

Arguments
   Collection          A collection (a la collection_to_list/2) of integers or (domain) variables
   Index               (Domain) variable or integer (array notation accepted)

Type
   library(gfd)

Description
    	Index is constrained to the index(es) of the variable(s) with
        the maximum  value in Collection. If Index is a variable, it
        must not occur in  Collection..  

        You may find it more convenient to embed max_index(Vars) in a
        constraint expression.
        
        As with all constraints that involve indexes, the index starts
        from 1, unlike Gecode's native indexes that starts from 0 - a
        dummy first element is added to Collection in the constraint posted
        to Gecode if Collection is not empty. 
         
        ConsistencyModule is the optional module specification to give the 
        consistency level for the propagation for this constraint: 
        gfd_gac for domain (generalised arc) consistency. 

        This constraint is known as max_index in the global constraint catalog,
        and is implemented using Gecode's maxarg() constraint with tie-break
        set to false.



Examples
   [eclipse 17]: max_index([1,2,3], I).

I = 3

[eclipse 18]: max_index([1,2,3,1,10,9,10], I).

I = I{[5, 7]}

[eclipse 19]: L = [A,B,C,D,E], L :: 1..10, max_index(L, 3), C #> 4.

L = [A{[1 .. 10]}, B{[1 .. 10]}, C{[5 .. 10]}, D{[1 .. 10]}, E{[1 .. 10]}]
A = A{[1 .. 10]}
B = B{[1 .. 10]}
C = C{[5 .. 10]}
D = D{[1 .. 10]}
E = E{[1 .. 10]}

[eclipse 20]:  L = [A,B,C,D,E], L :: 1..10, max_index(L, 3), C #< 4.

L = [A{[1 .. 3]}, B{[1 .. 3]}, C{[1 .. 3]}, D{[1 .. 3]}, E{[1 .. 3]}]
A = A{[1 .. 3]}
B = B{[1 .. 3]}
C = C{[1 .. 3]}
D = D{[1 .. 3]}
E = E{[1 .. 3]}

[eclipse 21]:  L = [A,B,C,D,E], L :: 1..10, max_index(L, 3), B #> 4.

L = [A{[1 .. 10]}, B{[5 .. 10]}, C{[5 .. 10]}, D{[1 .. 10]}, E{[1 .. 10]}]
A = A{[1 .. 10]}
B = B{[5 .. 10]}
C = C{[5 .. 10]}
D = D{[1 .. 10]}
E = E{[1 .. 10]}

[eclipse 23]:  L = [A,B,C,D,E], L :: 1..10, max_index(L, 3), B #< 4.

L = [A{[1 .. 10]}, B{[1 .. 3]}, C{[1 .. 10]}, D{[1 .. 10]}, E{[1 .. 10]}]
A = A{[1 .. 10]}
B = B{[1 .. 3]}
C = C{[1 .. 10]}
D = D{[1 .. 10]}
E = E{[1 .. 10]}

[eclipse 24]: [A,B,D] :: 1..10, C :: 20..30, max_index([A,B,C,D], I).

A = A{[1 .. 10]}
B = B{[1 .. 10]}
D = D{[1 .. 10]}
C = C{[20 .. 30]}
I = 3



See Also
   max_first_index / 2, min_index / 2, min_first_index / 2, min / 2, max / 2, eclipse_6 : collection_to_list / 2, lists : collection_to_list / 2
