当前位置: 首页>>代码示例>>C#>>正文


C# Cluster.AddElement方法代码示例

本文整理汇总了C#中Cluster.AddElement方法的典型用法代码示例。如果您正苦于以下问题:C# Cluster.AddElement方法的具体用法?C# Cluster.AddElement怎么用?C# Cluster.AddElement使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Cluster的用法示例。


在下文中一共展示了Cluster.AddElement方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: Crossover

        private void Crossover(Pair parents)
        {
            parents.P1 = Utils.Clone((Structuring)parents.P1);
            parents.P2 = Utils.Clone((Structuring)parents.P2);

            Cluster new_c1 = new Cluster(parents.C1.Name);
            Cluster new_c2 = new Cluster(parents.C2.Name);

            List<Element> un_el_p1=new List<Element>();
            List<Element> un_el_p2=new List<Element>();

            foreach (Element item in parents.C1.Elements)
            {
                if (parents.C2.HaveElement(item))
                    new_c2.AddElement(item);

                //else if (!parents.P2.Clusters.Values.ToList().Exists(c => c.HaveElement(item)))
                //    new_c2.AddElement(item);
                //else
                //{
                //    //Si entra aki, el problema es que un elemento de C1, no pertenece a C2 (C2 es un de la P2), ni tampoco
                //    //pertenece a algun otro cluster de P2, por lo tanto ese elemento no esta en la particion P2, y P2 y P1
                //    //son particiones de un mismo conjunto. Este caso solamente se debe dar cuando P2 tiene elementos no asignados
                //    //y este elemento que estoy analizando puede estar no asignado, ahi en P2.
                //    throw new Exception("no puede entrara aki, siginificaria que cada particion tiene conjuntos distintos.");
                    
                //    string c_temp = parents.P2.Elements[item][0];
                //    parents.P2.Clusters[c_temp].Elements.Remove(item);
                //    parents.P2.Elements.Remove(item);
                //    un_el_p2.Add(item);
                //}       
                
            }            

            foreach (Element item in parents.C2.Elements)
            {
                if (parents.C1.HaveElement(item))
                    new_c1.AddElement(item);

                //else if (!parents.P1.Clusters.Values.ToList().Exists(c => c.HaveElement(item)))
                //    new_c1.AddElement(item);
                //else
                //{
                //    for (int i = 0; i < parents.P1.Clusters.Values.ToList().Count; i++)
                //    {
                //        Cluster _ccc = parents.P1.Clusters.Values.ToList()[i];
                //        for (int ii = 0; ii < _ccc.ElementsCount; ii++)
                //        {
                //            if (_ccc[ii].Index == item.Index)
                //            { 
                //            }
                //        }
                //    }
                //    //Si entra aki, el problema es que un elemento de C1, no pertenece a C2 (C2 es un de la P2), ni tampoco
                //    //pertenece a algun otro cluster de P2, por lo tanto ese elemento no esta en la particion P2, y P2 y P1
                //    //son particiones de un mismo conjunto. Este caso solamente se debe dar cuando P2 tiene elementos no asignados
                //    //y este elemento que estoy analizando puede estar no asignado, ahi en P2.
                //    throw new Exception("no puede entrara aki, siginificaria que cada particion tiene conjuntos distintos.");

                //    string c_temp = parents.P1.Elements[item][0];
                //    parents.P1.Clusters[c_temp].Elements.Remove(item);
                //    parents.P1.Elements.Remove(item);
                //    un_el_p1.Add(item);
                //}

            }

            foreach (var item in new_c1.Elements)
            {
                parents.P1.Elements[item] = new List<string>() { new_c1.Name };
            }

            foreach (var item in new_c2.Elements)
            {
                parents.P2.Elements[item] = new List<string>() { new_c2.Name };
            }

            parents.P1.Clusters[new_c1.Name] = new_c1;
            parents.P2.Clusters[new_c2.Name] = new_c2;

            if (parents.P1.UnassignedElements != null)
                parents.P1.UnassignedElements.AddRange(un_el_p1);
            else
                parents.P1.UnassignedElements = un_el_p1;

            if (parents.P2.UnassignedElements != null)
                parents.P2.UnassignedElements.AddRange(un_el_p2);
            else
                parents.P2.UnassignedElements = un_el_p2;

        }
开发者ID:svegapons,项目名称:clustering_ensemble_suite,代码行数:91,代码来源:Genetics.cs

示例2: BuildStructuringFromOutputFile

        //OJO Excepciones porque dice que no puede acceder al fichero porque esta siendo usado por otro proceso
        //tbn da Excepcion porque dice que no existe el fichero.
        //Parece que el metis se demora un poco creandolo, debe ser algo de eso, y lo crea pero despues parece que empieza
        //a escribir sobre el y entonces es que me da la otra excepcion de que esta siendo usado por otra persona, es que todo
        //ocurre muy rapido, NUNCA ME HA DADO EXCEPCION EN EL MODO DEBUG
        public static Structuring BuildStructuringFromOutputFile(string inputfilename, Set Set, int ClustersCount, Proximity Proximity)
        {
            try
            {
                string folderpath = Utils.ExesFolderPath;
                string filename = inputfilename + ".part." + ClustersCount;
                string filepath = folderpath + Path.DirectorySeparatorChar + filename;

                //Dar tiempo a que el algoritmo Metis cree el fichero
                while (!File.Exists(filepath))
                {
                }

                FileStream fs = null;
                bool ok = false;
                //Dar tiempo a que el algoritmo Metis termine de escribir sobre el fichero de salida
                while (!ok)
                {
                    try
                    {
                        fs = new FileStream(filepath, FileMode.Open, FileAccess.Read);
                        ok = true;
                    }
                    catch
                    { }
                }

                StreamReader sr = new StreamReader(fs);
                Dictionary<string, Cluster> dic_clusters;
                try
                {
                    //Crear Dictionary<string,Cluster> para poder construir la particion
                    dic_clusters = new Dictionary<string, Cluster>();
                    string line;
                    int vertex = 0;
                    while ((line = sr.ReadLine()) != null)
                    {
                        int cluster = int.Parse(line);
                        string nameOfCluster = "C-" + cluster;
                        if (dic_clusters.ContainsKey(nameOfCluster))
                        {
                            dic_clusters[nameOfCluster].AddElement(Set[vertex]);
                        }
                        else
                        {
                            Cluster c = new Cluster(nameOfCluster);
                            c.AddElement(Set[vertex]);
                            dic_clusters.Add(nameOfCluster, c);
                        }
                        vertex++;
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception("Formato incorrecto del fichero de salida del algoritmo METIS \r\nInformacion Adicional: " + ex.Message);
                }
                finally
                {
                    sr.Close();
                    fs.Close();

                    //Eliminar el fichero de entrada
                    File.Delete(ExesFolderPath + Path.DirectorySeparatorChar + inputfilename);

                    //Eliminar el fichero de salida
                    File.Delete(filepath);
                }

                //Los numeros de las particiones comienzan con cero hasta el numero de particiones menos uno[0,...,P-1]
                return new Partition() { Clusters = dic_clusters, Proximity = Proximity };
            }
            catch
            {
                return null;
            }
        }
开发者ID:svegapons,项目名称:segmentation_ensemble_suite,代码行数:81,代码来源:Utilities.cs

示例3: BuildStructuring

        public override Structuring BuildStructuring()
        {
            if (Structurings == null || Set == null)
                throw new NullReferenceException();

            if (IContainerProgressBar != null)
            {
                IContainerProgressBar.ResetProgressBar(1, 1, true);
                IContainerProgressBar.UpdateProgressBar(0, "Running QMI algorithm...", true);
            }

            List<Attribute> list_att = new List<Attribute>();
            int cont = 0;
            foreach (Structuring s in Structurings)
            {
                foreach (Cluster c in s.Clusters.Values)
                {
                    Attribute att = new Attribute("x" + cont, null);
                    cont++;

                    att.AttributeType = AttributeType.Numeric;
                    list_att.Add(att);
                }
            }

            Set newset = new Set("Artificial");
            newset.Attributes = new Attributes(list_att);
            newset.ElementType = ElementType.Numeric;

            
            foreach (Element e in Set.Elements)
            {
                List<object> values = new List<object>();
                foreach (Structuring s in Structurings)
                {
                    foreach (Cluster c in s.Clusters.Values)
                    {
                        double temp = c.HaveElement(e) ? 1 : 0;
                        temp = temp - ((double)c.ElementsCount / (double)Set.ElementsCount);
                        values.Add(temp);
                    }
                }
                Element newelement = new Element(newset, values);                
                newelement.Name = e.Name;
                newelement.Index = e.Index;
                
                newset.AddElement(newelement);
            }

            KMeans kms = new KMeans(newset, new EuclideanDistance() { AttributesToCalculateProximity = newset.Attributes.Values });
            kms.ClustersCount = ClusterCount;
            kms.IterationsCount = IterationsCount;
            kms.Seed = Environment.TickCount;

            kms.IContainerProgressBar = IContainerProgressBar;

            Structuring art_struct = kms.BuildStructuring();

            List<Cluster> clusters = new List<Cluster>();
            cont = 0;
            foreach (Cluster c in art_struct.Clusters.Values)
            {
                Cluster temp = new Cluster("C-" + cont);
                cont++;
                foreach (Element item in c.Elements)
                {
                    temp.AddElement(Set[item.Index]);
                }
                clusters.Add(temp);
            }

            Dictionary<string, Cluster> temp_dic=new Dictionary<string,Cluster>();
            foreach (Cluster item in clusters)
            {
                temp_dic.Add(item.Name, item); 
            }

            Structuring real_struct = new Partition() { Clusters = temp_dic };
            return real_struct;            
        }
开发者ID:svegapons,项目名称:clustering_ensemble_suite,代码行数:80,代码来源:QMI.cs


注:本文中的Cluster.AddElement方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。