Last change
on this file since 1145 was
1145,
checked in by Maciej Komosinski, 15 months ago

Added niching and novelty search with limited (i.e., local) competition ("nearest neighbors" according to dissimilarity measure)

File size:
1.2 KB

Line  

1  from abc import ABC 

2  

3  from evolalg.base.step import Step 

4  import numpy as np 

5  

6  

7  class Dissimilarity(Step, ABC): 

8  

9  def __init__(self, reduction="mean", output_field="dissim", knn=None, *args, **kwargs): 

10  super(Dissimilarity, self).__init__(*args, **kwargs) 

11  

12  self.output_field = output_field 

13  self.fn_reduce = None 

14  self.knn = knn 

15  if reduction == "mean": # TODO change this 'elif' sequence to dictionary? 

16  self.fn_reduce = np.mean 

17  elif reduction == "max": 

18  self.fn_reduce = np.max 

19  elif reduction == "min": 

20  self.fn_reduce = np.min 

21  elif reduction == "sum": 

22  self.fn_reduce = np.sum 

23  elif reduction == "knn_mean": 

24  self.fn_reduce = self.knn_mean 

25  elif reduction == "none" or reduction is None: 

26  self.fn_reduce = None 

27  else: 

28  raise ValueError("Unknown reduction type. Supported: mean, max, min, sum, knn_mean, none") 

29  

30  def reduce(self, dissim_matrix): 

31  if self.fn_reduce is None: 

32  return dissim_matrix 

33  return self.fn_reduce(dissim_matrix, axis=1) 

34  

35  def knn_mean(self, dissim_matrix,axis): 

36  return np.mean(np.partition(dissim_matrix, self.knn)[:,:self.knn],axis=axis) 

Note: See
TracBrowser
for help on using the repository browser.