def f16(x, rotation=None, shift=None, shuffle=None): """ Hybrid Function 6 (N=4) Args: x (array): Input vector of dimension 2, 10, 20, 30, 50 or 100. rotation (matrix): Optional rotation matrix. If None (default), the official matrix from the benchmark suite will be used. shift (array): Optional shift vector. If None (default), the official vector from the benchmark suite will be used. shuffle (array): Optionbal shuffle vector. If None (default), the official permutation vector from the benchmark suite will be used. """ nx = len(x) if rotation is None: rotation = transforms.rotations[nx][15] if shift is None: shift = transforms.shifts[15][:nx] if shuffle is None: shuffle = transforms.shuffles[nx][5] x_transformed = np.matmul(rotation, x - shift) x_parts = _shuffle_and_partition(x_transformed, shuffle, [0.2, 0.2, 0.3, 0.3]) y = basic.expanded_schaffers_f6(x_parts[0]) y += basic.h_g_bat(x_parts[1]) y += basic.rosenbrock(x_parts[2]) y += basic.modified_schwefel(x_parts[3]) return y + 1600.0
def f13(x, rotation=None, shift=None, shuffle=None): """ Hybrid Function 3 (N=3) Args: x (array): Input vector of dimension 2, 10, 20, 30, 50 or 100. rotation (matrix): Optional rotation matrix. If None (default), the official matrix from the benchmark suite will be used. shift (array): Optional shift vector. If None (default), the official vector from the benchmark suite will be used. shuffle (array): Optionbal shuffle vector. If None (default), the official permutation vector from the benchmark suite will be used. """ nx = len(x) if rotation is None: rotation = transforms.rotations[nx][12] if shift is None: shift = transforms.shifts[12][:nx] if shuffle is None: shuffle = transforms.shuffles[nx][2] x_transformed = np.matmul(rotation, x - shift) x_parts = _shuffle_and_partition(x_transformed, shuffle, [0.3, 0.3, 0.4]) y = basic.bent_cigar(x_parts[0]) y += basic.rosenbrock(x_parts[1]) y += basic.lunacek_bi_rastrigin(x_parts[2]) return y + 1300.0
def f4(x, rotation=None, shift=None): """ Shifted and Rotated Rosenbrock’s Function Args: x (array): Input vector of dimension 2, 10, 20, 30, 50 or 100. rotation (matrix): Optional rotation matrix. If None (default), the official matrix from the benchmark suite will be used. shift (array): Optional shift vector. If None (default), the official vector from the benchmark suite will be used. """ nx = len(x) if rotation is None: rotation = transforms.rotations[nx][3] if shift is None: shift = transforms.shifts[3][:nx] x_transformed = np.matmul(rotation, (x - shift)) return basic.rosenbrock(x_transformed) + 400.0