Source code for EDAspy.optimization.custom.initialization_models.multi_gauss_geninit

#!/usr/bin/env python
# coding: utf-8

import numpy as np
from ..probabilistic_models import MultiGauss
from ._generation_init import GenInit


[docs]class MultiGaussGenInit(GenInit): """ Initial generation simulator based on the probabilistic model of multivariate Gaussian distribution. """ def __init__(self, n_variables: int, means_vector: np.array = np.empty(0), cov_matrix: np.array = np.empty(0), lower_bound: float = -100, upper_bound: float = 100): """ :param n_variables: Number of variables :param means_vector: Array of means to initialize the item. :type means_vector: np.array :param cov_matrix: Covariance matrix to initialize the item. :type cov_matrix: np.array :param lower_bound: lower bound for the random covariance matrix. :param upper_bound: upper bound for the random covariance matrix. """ super().__init__(n_variables) assert len(means_vector) == len(cov_matrix), "Lengths of means vector and covariance matrix must be the same." if len(means_vector) == 0: self.means_vector = np.random.choice(np.arange(lower_bound, upper_bound + 1), n_variables) self.cov_matrix = np.random.choice(np.arange(lower_bound, upper_bound + 1), (n_variables, n_variables)) else: self.means_vector = means_vector self.cov_matrix = cov_matrix self.pm = MultiGauss(list(range(n_variables)), lower_bound, upper_bound) self.pm.pm_means = self.means_vector self.pm.pm_cov = self.cov_matrix self.id = 3
[docs] def sample(self, size: int) -> np.array: """ Sample several times the initializator. :param size: number of samplings. :return: array with the dataset sampled. :rtype: np.array """ return self.pm.sample(size)