Skip to content

Commit

Permalink
🧪 🚧 Introduces Features and descriptors for Instances. Not working yet.
Browse files Browse the repository at this point in the history
  • Loading branch information
amarrerod committed Jul 18, 2024
1 parent 1986521 commit c66eb9c
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 6 deletions.
17 changes: 14 additions & 3 deletions digneapy/core/instance.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,15 @@


class Instance:
__slots__ = ("_vars", "_fit", "_p", "_s", "_desc", "_pscores")
__slots__ = ("_vars", "_fit", "_p", "_s", "_features", "_desc", "_pscores")

def __init__(
self,
variables: Optional[Iterable] = None,
fitness: float = 0.0,
p: float = 0.0,
s: float = 0.0,
features: Optional[tuple[float]] = None,
descriptor: Optional[tuple[float]] = None,
portfolio_scores: Optional[tuple[float]] = None,
):
Expand All @@ -44,6 +45,7 @@ def __init__(
self._fit = fitness
self._p = p
self._s = s
self._features = tuple(features) if features else tuple()
self._pscores = tuple(portfolio_scores) if portfolio_scores else tuple()
self._desc = tuple(descriptor) if descriptor else tuple()

Expand Down Expand Up @@ -94,6 +96,14 @@ def fitness(self, f: float):

self._fit = f

@property
def features(self) -> tuple:
return self._features

@features.setter
def features(self, features: tuple):
self._features = features

@property
def descriptor(self) -> tuple:
return self._desc
Expand All @@ -111,13 +121,13 @@ def portfolio_scores(self, p: tuple):
self._pscores = tuple(p)

def __repr__(self):
return f"Instance<f={self.fitness},p={self.p},s={self.s},vars={len(self._vars)},descriptor={len(self.descriptor)},performance={len(self.portfolio_scores)}>"
return f"Instance<f={self.fitness},p={self.p},s={self.s},vars={len(self._vars)},features={len(self.features)},descriptor={len(self.descriptor)},performance={len(self.portfolio_scores)}>"

def __str__(self):
descriptor = reprlib.repr(self.descriptor)
performance = reprlib.repr(self.portfolio_scores)
performance = performance[performance.find("(") : performance.rfind(")") + 1]
return f"Instance(f={self.fitness},p={self.p},s={self.s},descriptor={descriptor},performance={performance})"
return f"Instance(f={self.fitness},p={self.p},s={self.s},features={len(self.features)},descriptor={descriptor},performance={performance})"

def __iter__(self):
return iter(self._vars)
Expand Down Expand Up @@ -188,6 +198,7 @@ def to_json(self):
"p": self.p,
"portfolio": self.portfolio_scores,
"variables": self._vars.tolist(),
"features": self.features,
"descriptor": self.descriptor,
}
return json.dumps(data, sort_keys=True, indent=4)
2 changes: 1 addition & 1 deletion digneapy/generators/_eig.py
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ def _run(self, verbose: bool = False):
p_2 = self.selection(self.population)
off = self._reproduce(p_1, p_2)
if self._describe_by == "features":
off.descriptor = self.domain.extract_features(off)
off.features = self.domain.extract_features(off)
offspring.append(off)

self._evaluate_population(offspring)
Expand Down
2 changes: 1 addition & 1 deletion digneapy/qd/_desc_strategies.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ def features_strategy(iterable: Iterable[Instance]) -> np.ndarray:
Returns:
np.ndarray: Array of the feature descriptors of each instance
"""
return np.asarray([i.descriptor for i in iterable])
return np.asarray([i.features for i in iterable])


def performance_strategy(iterable: Iterable[Instance]) -> np.ndarray:
Expand Down
3 changes: 2 additions & 1 deletion digneapy/qd/_novelty_search.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@

from digneapy.archives import Archive
from digneapy.core import Instance
from digneapy.qd._desc_strategies import descriptor_strategies, features_strategy
from digneapy.qd._desc_strategies import (descriptor_strategies,
features_strategy)
from digneapy.transformers import SupportsTransform


Expand Down

0 comments on commit c66eb9c

Please sign in to comment.