Minimal number of runs for an orthognal array

In this example we calculate the minimum number of runs required for an orthogonal array. For more details, see Schoen et al.

[6]:
import itertools
import numpy as np


def minimum_number_of_runs(factor_levels, strength):
    """Calculate the minimum number of runs for an orthogonal array

    The minimum number of runs is based on the strength conditions. IWhether a design actually exists
    Args:
        factor_levels: Factor levels of the design
        strength: Strength of the array
    Returns:
        Minimum number of runs

    """
    runs = [np.prod(tt) for tt in itertools.combinations(factor_levels, strength)]
    N = np.lcm.reduce(runs)
    return N

We run the method on several examples.

[7]:
strength = 3
factor_levels = [2, 3, 3, 4, 5]
N = minimum_number_of_runs(factor_levels, strength)

print(f"for a design of strength {strength} and factor levels {factor_levels} we require (a multiple of) {N} runs")
for a design of strength 3 and factor levels [2, 3, 3, 4, 5] we require (a multiple of) 360 runs
[12]:
strength = 2
factor_levels = [3, 2, 2, 2, 2]
N = minimum_number_of_runs(factor_levels, strength)

print(f"for a design of strength {strength} and factor levels {factor_levels} we require (a multiple of) {N} runs")
for a design of strength 2 and factor levels [3, 2, 2, 2, 2] we require (a multiple of) 12 runs
[ ]: