Example #1
0
        //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;
        }
Example #2
0
        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;
        }