@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
116
117
118
119
120
121
122
123
124
125
126
127 | 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,
name: str = "Domain",
feat_names: Optional[Sequence[str]] = None,
seed: Optional[int] = 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_instances(self, n: int = 1) -> List[Instance]:
"""Generates N instances for the domain.
Args:
n (int, optional): Number of instances to generate. Defaults to 1.
Returns:
List[Instance]: A list of Instance objects created from the raw numpy generation
"""
raise NotImplementedError(
"generate_n_instances is not implemented in Domain class."
)
@abstractmethod
def generate_problems_from_instances(
self, instances: Sequence[Instance] | np.ndarray
) -> List[Problem]:
msg = "generate_problems_from_instances is not implemented in Domain class."
raise NotImplementedError(msg)
@abstractmethod
def extract_features(
self, instances: Sequence[Instance] | np.ndarray
) -> np.ndarray:
"""Extract the features of the instances 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, instances: Sequence[Instance] | np.ndarray
) -> List[Dict[str, np.float32]]:
"""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)
@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 instances based on the domain
| Parameters: |
-
instance
(Instance)
–
Instance to extract the features from
|
Source code in digneapy/_core/_domain.py
78
79
80
81
82
83
84
85
86
87
88
89
90
91 | @abstractmethod
def extract_features(
self, instances: Sequence[Instance] | np.ndarray
) -> np.ndarray:
"""Extract the features of the instances 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(instances)
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: |
-
List[Dict[str, float32]]
–
Mapping[str, float]: Dictionary with the names/values of each feature
|
Source code in digneapy/_core/_domain.py
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108 | @abstractmethod
def extract_features_as_dict(
self, instances: Sequence[Instance] | np.ndarray
) -> List[Dict[str, np.float32]]:
"""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_instances(n=1)
abstractmethod
Generates N instances for the domain.
| Parameters: |
-
n
(int, default:
1
)
–
Number of instances to generate. Defaults to 1.
|
| Returns: |
-
List[Instance]
–
List[Instance]: A list of Instance objects created from the raw numpy generation
|
Source code in digneapy/_core/_domain.py
57
58
59
60
61
62
63
64
65
66
67
68
69 | @abstractmethod
def generate_instances(self, n: int = 1) -> List[Instance]:
"""Generates N instances for the domain.
Args:
n (int, optional): Number of instances to generate. Defaults to 1.
Returns:
List[Instance]: A list of Instance objects created from the raw numpy generation
"""
raise NotImplementedError(
"generate_n_instances is not implemented in Domain class."
)
|