//Open Graph private void LoadGraph_OnClick(object sender, RoutedEventArgs e) { FileDialog dialog = new OpenFileDialog(); dialog.DefaultExt = ".xml"; dialog.Filter = "XML Documents (.xml)|*.xml"; bool? result = dialog.ShowDialog(); if (result != true) { return; } string path = dialog.FileName; TaskGraph graph = new TaskGraph(true); XmlDocument document = new XmlDocument(); document.LoadXml(File.ReadAllText(path)); XmlNodeList vertices = document.GetElementsByTagName("vertice"); XmlNodeList edges = document.GetElementsByTagName("edge"); foreach (XmlNode node in vertices) { TaskVertex vertex = new TaskVertex(node.Attributes[0].Value, node.Attributes[1].Value); graph.AddVertex(vertex); } foreach (XmlNode node in edges) { var source = graph.Vertices.First(x => x.ID == node.Attributes[1].Value); var target = graph.Vertices.First(x => x.ID == node.Attributes[2].Value); TaskEdge edge = new TaskEdge(node.Attributes[0].Value, source, target); graph.AddEdge(edge); } vm.Graph = graph; }
private void generateButton_Click(object sender, RoutedEventArgs e) { Random r = new Random(); int nodeMinWeight = 1, nodeMaxWeight = 5, nodesNumber = 15, vertexWeight = 0, sumGraphWeight = 0; double coherence = 0.9; stats.Text += "coherence = " + coherence + "\n"; TaskGraph graph = new TaskGraph(true); for (int i = 0; i < nodesNumber; i++) { vertexWeight = r.Next(nodeMinWeight, nodeMaxWeight); sumGraphWeight += vertexWeight; graph.AddVertex(new TaskVertex("V" + i, vertexWeight.ToString())); } int edgesWeight = (int)(sumGraphWeight * (1.0 / coherence - 1)); int averageEdgeWeight = edgesWeight / r.Next(nodesNumber, (int)(nodesNumber * 1.2)) + 1; //int averageEdgeWeight = edgesWeight / r.Next(nodesNumber * (nodesNumber - 1) / 5, nodesNumber * (nodesNumber - 1) / 4 + 1) + 1; int edgesNumber = 0; while (edgesWeight > 0 && edgesNumber != nodesNumber * (nodesNumber - 1) / 2) { int source = r.Next(nodesNumber - 1); int target = r.Next(source + 1, nodesNumber); int weight = r.Next(averageEdgeWeight / 3, (int)(averageEdgeWeight * 2)); weight = weight > edgesWeight ? edgesWeight : weight; TaskEdge edge = null; try { edge = (from v in graph.Edges where v.Source.ID == "V" + source && v.Target.ID == "V" + target select v).First(); } catch { } if (edge == null && weight > 0) { var sourceVertex = graph.Vertices.Where(node => node.ID == "V" + source).Single(); var targetVertex = graph.Vertices.Where(node => node.ID == "V" + target).Single(); graph.AddEdge(new TaskEdge(weight.ToString(), sourceVertex, targetVertex)); edgesWeight -= weight; edgesNumber++; } } vm.Graph = graph; }