@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
|
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)
|