Combinatorial generators

In this example we are going to expose the various design of experiments that allow one to generate all the integer collections satisfying a given combinatorial constraint:

  • The Tuples generator, which allows one to generate all the elements of a Cartesian product E=\{0,\dots,n_0-1\}\times\dots\times\{0,\dots,n_{d-1}-1\}.

    The total number of generated points is N=\prod_{k=0}^{d-1}n_k.

  • The K-permutations generator, which allows one to generate all the injective functions from \{0,\dots,k-1\} into \{0,\dots,n-1\}

    The total number of generated points is N=\dfrac{n!}{(n-k)!}.

  • The Combinations generator, which allows one to generate all the subsets of size k of \{0,\dots,n-1\}

    The total number of generated points is N=\dfrac{n!}{k!(n-k)!}.

import openturns as ot

ot.Log.Show(ot.Log.NONE)

Tuples

experiment = ot.Tuples([2, 3, 5])
print(experiment.generate())
[[0,0,0],[1,0,0],[0,1,0],[1,1,0],[0,2,0],[1,2,0],[0,0,1],[1,0,1],[0,1,1],[1,1,1],[0,2,1],[1,2,1],[0,0,2],[1,0,2],[0,1,2],[1,1,2],[0,2,2],[1,2,2],[0,0,3],[1,0,3],[0,1,3],[1,1,3],[0,2,3],[1,2,3],[0,0,4],[1,0,4],[0,1,4],[1,1,4],[0,2,4],[1,2,4]]#30

K-permutations

experiment = ot.KPermutations(3, 4)
print(experiment.generate())
[[0,1,2],[0,2,1],[1,0,2],[1,2,0],[2,0,1],[2,1,0],[0,1,3],[0,3,1],[1,0,3],[1,3,0],[3,0,1],[3,1,0],[0,2,3],[0,3,2],[2,0,3],[2,3,0],[3,0,2],[3,2,0],[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]#24

Combinations

experiment = ot.Combinations(4, 6)
print(experiment.generate())
[[0,1,2,3],[0,1,2,4],[0,1,2,5],[0,1,3,4],[0,1,3,5],[0,1,4,5],[0,2,3,4],[0,2,3,5],[0,2,4,5],[0,3,4,5],[1,2,3,4],[1,2,3,5],[1,2,4,5],[1,3,4,5],[2,3,4,5]]#15