forked from testingautomated-usi/deepjanus
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindividual.py
52 lines (41 loc) · 1.69 KB
/
individual.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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
import evaluator
from predictor import Predictor
class Individual:
# Global counter of all the individuals (it is increased each time an individual is created or mutated).
COUNT = 0
SEEDS = set()
def __init__(self, member1, member2, seed):
self.id = Individual.COUNT
self.seed = seed
self.distance = None
self.sparseness = None
self.misclass = None
self.aggregate_ff = None
self.misbehaviour = None
self.member1 = member1
self.member2 = member2
def reset(self):
self.id =Individual.COUNT
self.distance = None
self.sparseness = None
self.misclass = None
self.aggregate_ff = None
self.misbehaviour = None
def evaluate(self, archive):
self.sparseness = None
if self.misclass is None:
# Calculate fitness function 2
self.misclass = evaluator.evaluate_ff2(self.member1.diff,
self.member2.diff)
self.misbehaviour = self.member1.correctly_classified != self.member2.correctly_classified
if self.distance is None:
# Calculate fitness function 1
self.distance = evaluator.evaluate_ff1(self.member1.model_params,
self.member2.model_params)
# Recalculate sparseness at each iteration
self.sparseness = evaluator.evaluate_sparseness(self, archive)
if self.sparseness == 0.0:
print(self.sparseness)
print("BUG")
self.aggregate_ff = evaluator.evaluate_aggregate_ff(self.sparseness, self.distance)
return self.aggregate_ff, self.misclass