def reduce_pareto_set(self, par_set): """ Realiza el clustering """ lista_cluster=[] for solucion in par_set.solutions: cluster = Cluster() cluster.agregar_solucion(solucion) lista_cluster.append(cluster) while len(lista_cluster) > self.max_pareto_points: min_distancia = sys.maxint for i in range (0,len(lista_cluster)-1): for j in range(i+1, len(lista_cluster)-1): c = lista_cluster[i] distancia = c.calcular_distancia(lista_cluster[j]) if distancia < min_distancia: min_distancia = distancia c1 = i c2 = j cluster = lista_cluster[c1].unir(lista_cluster[c2]) #retorna un nuevo cluster del lista_cluster[c1] del lista_cluster[c2] lista_cluster.append(cluster) par_set=[] for cluster in lista_cluster: solucion = cluster.centroide() par_set.append(solucion) return par_set
def get_cluster_obs(clusters, r): res = Cluster(-1, []) for c in clusters: for obs_row in c.observations: if obs_row == r: res.id = c.id res.centroide = c.centroide res.observations = c.observations return res