Contributed by:
Roman Schmied, University of Basel
ResourceFunction["MaximizeOverPermutations"][f,n]
maximizes f numerically with respect to permutations of {1,…,n}.
Details and Options
ResourceFunction["MaximizeOverPermutations"] takes a Method option that accepts either "Enumerate" or "MonteCarlo".
The number of permutations of n objects scales very quickly with n. The default "Enumerate" method should not be used with n≳12 in order to prevent memory overflow, as the time and space required for this enumeration both scale with n!. A warning is issued, but the user needs to decide whether or not to call for full enumeration of larger permutation spaces.
With the default option setting Method→"Enumerate", the maximum is determined by applying the function f to all permutations of the numbers 1…n. The result is guaranteed to be optimal.
With the option setting Method→"MonteCarlo", the maximum is determined by a Monte Carlo Metropolis–Hastings stochastic search. There is no guarantee of the result’s optimality. This method makes it possible to search very large permutation spaces efficiently.
With the suboption settings Method→{"MonteCarlo",options…}, the Monte Carlo method can be fine-tuned as follows:
The suboption "Iterations"→m specifies the number of iterations that the Monte Carlo algorithm performs in the stochastic search. The algorithm's runtime scales linearly with m. The default value is "Iterations"→104.
The suboption "AnnealingParameter"→β specifies the annealing parameter of the Metropolis–Hastings acceptance/rejection step. Smaller values of β give a wider search; larger values of β tend to restrict the search more toward a monotonically increasing strategy. The default value is "AnnealingParameter"→1.
With "AnnealingParameter"→{βstart,βend}, the annealing parameter progresses exponentially from βstart at the simulation’s beginning to βend at the end. An increasing annealing parameter is useful to narrow the search progressively during the course of the simulation.
The suboption "StartingPermutation"→σ specifies the initial point of the stochastic search in permutation space and must be given as a list σ={s1,s2,…,sn} that is a permutation of the numbers 1…n. The default value is "StartingPermutation"→Automatic, which uses the trivial permutation {1,2,…,n} as the starting point.
The Monte Carlo Metropolis–Hastings stochastic search relies on the annealing parameter β, which can be kept uniform or varied exponentially during the simulation. A proposed random step from a permutation σi to a new permutation σi+1 is accepted with probability Max[1,Exp[β(f[σi+1]-f[σi])]]. The annealing parameter β must therefore be chosen in relation to the typically occurring differences in the function f to be maximized. The value of this parameter is crucial for the efficiency of the simulation and must be determined by experimentation.
As implemented, the Monte-Carlo algorithm traverses permutation space solely by applying random 2-cycles (that is, by interchanging two random elements at a time). Even though there are n! possible permutations of n objects, any pair of permutations is connected by only n-1 such 2-cycles: permutation space is very well connected and surprisingly small in diameter. For this reason the present implementation does not use larger random cycles to traverse permutation space, and we believe that even highly inhomogeneous maximization problems can be addressed with the present implementation by starting with a sufficiently low annealing parameter β.