本文整理汇总了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;
}
示例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;
}
}
示例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;
}