double GetSilhouette(Element e) { if (Structuring.HaveUnassignedElements() && Structuring.IsUnassigned(e)) { return(0); } EuclideanDistance ed = new EuclideanDistance(); ed.AttributesToCalculateProximity = Set.Attributes.Values; Cluster actual = Structuring.GetCluster(e)[0]; double ai = ed.CalculateProximity(e, actual.Centroid); double bi = double.MaxValue; foreach (var cluster in Structuring.Clusters.Values) { if (actual.Name != cluster.Name) { double aux = ed.CalculateProximity(e, cluster.Centroid); if (aux < bi) { bi = aux; } } } return((bi - ai) / Math.Max(bi, ai)); }