@File : domain.py @Time : 2024/06/07 14:08:47 @Author : Alejandro Marrero @Version : 1.0 @Contact : amarrerd@ull.edu.es @License : (C)Copyright 2024, Alejandro Marrero @Desc : None

Domain

Bases: ABC, RNG

Domain is a class that defines the domain of the problem. The domain is defined by its dimension and the bounds of each variable.

Parameters:
  • RNG

    Subclass that implements the RNG protocol

Source code in digneapy/_core/_domain.py
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
class Domain(ABC, RNG):
    """Domain is a class that defines the domain of the problem.
    The domain is defined by its dimension and the bounds of each variable.

    Args:
        RNG: Subclass that implements the RNG protocol
    """

    def __init__(
        self,
        dimension: int,
        bounds: Sequence[tuple],
        dtype=np.float64,
        seed: int = 42,
        name: str = "Domain",
        feat_names: Optional[Sequence[str]] = None,
        *args,
        **kwargs,
    ):
        self.name = name
        self.__name__ = name
        self._dimension = dimension
        self._bounds = bounds
        self._dtype = dtype
        self.feat_names = feat_names if feat_names else list()
        self.initialize_rng(seed=seed)
        if len(self._bounds) != 0:
            ranges = list(zip(*bounds))
            self._lbs = np.array(ranges[0], dtype=dtype)
            self._ubs = np.array(ranges[1], dtype=dtype)

    @abstractmethod
    def generate_instance(self) -> Instance:
        """Generates a new instances for the domain

        Returns:
            Instance: New randomly generated instance
        """
        msg = "generate_instances is not implemented in Domain class."
        raise NotImplementedError(msg)

    @abstractmethod
    def extract_features(self, instances: Instance) -> tuple:
        """Extract the features of the instance based on the domain

        Args:
            instance (Instance): Instance to extract the features from

        Returns:
            Tuple: Values of each feature
        """
        msg = "extract_features is not implemented in Domain class."
        raise NotImplementedError(msg)

    @abstractmethod
    def extract_features_as_dict(self, instance: Instance) -> Mapping[str, float]:
        """Creates a dictionary with the features of the instance.
        The key are the names of each feature and the values are
        the values extracted from instance.

        Args:
            instance (Instance): Instance to extract the features from

        Returns:
            Mapping[str, float]: Dictionary with the names/values of each feature
        """
        msg = "extract_features_as_dict is not implemented in Domain class."
        raise NotImplementedError(msg)

    @abstractmethod
    def from_instance(self, instance: Instance) -> Problem:
        msg = "from_instance is not implemented in Domain class."
        raise NotImplementedError(msg)

    @property
    def bounds(self):
        return self._bounds

    def get_bounds_at(self, i: int) -> tuple:
        if i < 0 or i > len(self._bounds):
            raise ValueError(
                f"Index {i} out-of-range. The bounds are 0-{len(self._bounds)} "
            )
        return (self._lbs[i], self._ubs[i])

    @property
    def dimension(self):
        return self._dimension

    def __len__(self):
        return self._dimension

extract_features(instances) abstractmethod

Extract the features of the instance based on the domain

Parameters:
  • instance (Instance) –

    Instance to extract the features from

Returns:
  • Tuple( tuple ) –

    Values of each feature

Source code in digneapy/_core/_domain.py
66
67
68
69
70
71
72
73
74
75
76
77
@abstractmethod
def extract_features(self, instances: Instance) -> tuple:
    """Extract the features of the instance based on the domain

    Args:
        instance (Instance): Instance to extract the features from

    Returns:
        Tuple: Values of each feature
    """
    msg = "extract_features is not implemented in Domain class."
    raise NotImplementedError(msg)

extract_features_as_dict(instance) abstractmethod

Creates a dictionary with the features of the instance. The key are the names of each feature and the values are the values extracted from instance.

Parameters:
  • instance (Instance) –

    Instance to extract the features from

Returns:
  • Mapping[str, float]

    Mapping[str, float]: Dictionary with the names/values of each feature

Source code in digneapy/_core/_domain.py
79
80
81
82
83
84
85
86
87
88
89
90
91
92
@abstractmethod
def extract_features_as_dict(self, instance: Instance) -> Mapping[str, float]:
    """Creates a dictionary with the features of the instance.
    The key are the names of each feature and the values are
    the values extracted from instance.

    Args:
        instance (Instance): Instance to extract the features from

    Returns:
        Mapping[str, float]: Dictionary with the names/values of each feature
    """
    msg = "extract_features_as_dict is not implemented in Domain class."
    raise NotImplementedError(msg)

generate_instance() abstractmethod

Generates a new instances for the domain

Returns:
  • Instance( Instance ) –

    New randomly generated instance

Source code in digneapy/_core/_domain.py
56
57
58
59
60
61
62
63
64
@abstractmethod
def generate_instance(self) -> Instance:
    """Generates a new instances for the domain

    Returns:
        Instance: New randomly generated instance
    """
    msg = "generate_instances is not implemented in Domain class."
    raise NotImplementedError(msg)