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));
        }