/// <summary> /// Starts the simulation of the algorithm run. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btn_run_Click(object sender, EventArgs e) { foreach (var node in NodeHolder.GetCopyList().AsParallel()) { Task.Run(() => { node.UserDefined_SingleInitiatorProcedure(); }); } ; NodeHolder.StartTerminationDetection(); }
private void HandleReport() { RunReport.ReportNodes(NodeHolder.GetCopyList(), false); RunReport.GatherMessageCounts(NodeHolder.GetCopyList()); RunReport.GatherMoveCount(NodeHolder.GetCopyList()); RunReport.ReportInvalidNodes(NodeHolder.GetCopyList()); RunReport.ReportDegrees(NodeHolder.GetCopyList()); RunReport.ReportCongestions(NodeHolder.GetCopyList()); RunReport.SetDuration(Duration.TotalSeconds); using (var streamWriter = new StreamWriter("test.txt", true)) streamWriter.WriteLine(RunReport.ToString()); }
/// <summary> /// Not implemented. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btn_proof_Click(object sender, EventArgs e) { var invalidNodes = NodeHolder.GetCopyList().Where(n => !n.IsValid()); var runCountReport = string.Join("\n", NodeHolder.GetCopyList().Select(n => string.Format("node: {0}\t runCount: {1}", n.Id, n.MoveCount))); runCountReport += string.Format("\ntotal run count: {0}", NodeHolder.GetCopyList().Sum(n => n.MoveCount)); if (!invalidNodes.Any()) { MessageBox.Show(string.Format("{0}\nRun count report:\n{1}", "Each node is valid", runCountReport)); } else { MessageBox.Show(string.Format("Some nodes are invalid: {0}", string.Join(",", invalidNodes.Select(n => n.Id.ToString())))); } }
private void Run() { StartTime = DateTime.Now; InitializeHolders(); RunReport.ReportTopology(EdgeHolder.GetCopyList()); RunReport.ReportNodes(NodeHolder.GetCopyList(), true); foreach (var node in NodeHolder.GetCopyList().AsParallel()) { Task.Run(() => { node.UserDefined_SingleInitiatorProcedure(); }); } NodeHolder.StartTerminationDetection(); }
public override void Generate(int nodeCount, NodeHolder nodeHolder, EdgeHolder edgeHolder, AlgorithmType SelectedAlgorithm) { base.Generate(nodeCount, nodeHolder, edgeHolder, SelectedAlgorithm); for (int i = 0; i < nodeCount; i++) { if (i != nodeCount - 1) { var node1 = nodeHolder.GetNodeAt(i); var node2 = nodeHolder.GetNodeAt(i + 1); edgeHolder.AddEgde(new ConsoleEdge(node1, node2)); } } var randomizer = new Random(); foreach (var node1 in nodeHolder.GetCopyList()) { for (int i = 0; i < Grade; i++) { if (node1.Neighbours.Count >= Grade) { break; } var nextNodeId = randomizer.Next(0, nodeCount); while (nextNodeId == node1.Id || node1.IsNeigbourOf(nextNodeId)) { nextNodeId = randomizer.Next(0, nodeCount); } edgeHolder.AddEgde(new ConsoleEdge(node1, nodeHolder.GetNodeById(nextNodeId))); } //foreach (var node2 in nodeHolder.GetCopyList().Where(n => n != node1)) //{ // if (randomizer.Next() % 100 > 2) continue; // if (node1.IsNeigbourOf(node2.Id)) continue; // edgeHolder.AddEgde(new ConsoleEdge(node1, node2)); //} } }
private void HandleReport() { RunReport.ReportNodes(NodeHolder.GetCopyList(), false); RunReport.GatherMessageCounts(NodeHolder.GetCopyList()); RunReport.GatherMoveCount(NodeHolder.GetCopyList()); RunReport.ReportInvalidNodes(NodeHolder.GetCopyList()); RunReport.ReportDegrees(NodeHolder.GetCopyList()); RunReport.ReportCongestions(NodeHolder.GetCopyList()); RunReport.SetDuration(Duration.TotalSeconds); if (!Directory.Exists(FolderName)) { Directory.CreateDirectory(FolderName); } using (var streamWriter = new StreamWriter(FolderName + ".txt", true)) streamWriter.WriteLine(RunReport.ToString()); using (var streamWriter = new StreamWriter(GetFileNameForCurrentRun(), false)) streamWriter.WriteLine(RunReport.Serialize()); }
private void Run() { StartTime = DateTime.Now; InitializeHolders(); var graphGenerator = GraphFactory.GetGraphGenerator(GraphType); graphGenerator.Generate(NodeCount, NodeHolder, EdgeHolder, AlgorithmType); RunReport.ReportTopology(EdgeHolder.GetCopyList()); RunReport.ReportNodes(NodeHolder.GetCopyList(), true); foreach (var node in NodeHolder.GetCopyList().AsParallel()) { Task.Run(() => { node.UserDefined_SingleInitiatorProcedure(); }); } NodeHolder.StartTerminationDetection(); }
public override void Generate(int nodeCount, NodeHolder nodeHolder, EdgeHolder edgeHolder, string SelectedAlgorithm) { var arg = new PaintEventArgs(Drawing_panel.CreateGraphics(), new Rectangle()); var radius = (Math.Min(Drawing_panel.Height, Drawing_panel.Width) - 80) / 2; var origin = new Point(Drawing_panel.Width / 2, Drawing_panel.Height / 2); var randomizer = new Random(); for (int i = 0; i < nodeCount; i++) { var angle = 360 / (float)nodeCount * i; var p = PointOnCircle(radius, angle, origin); if (!nodeHolder.AnyIntersecting(p)) { var node = NodeFactory.Create(SelectedAlgorithm, nodeHolder.NodeCount, new WinformsNodeVisualiser(arg, p.X, p.Y, nodeHolder.NodeCount, ParentForm), ParentForm.cb_selfStab.Checked, nodeHolder, randomizer.Next(0, 3)); nodeHolder.AddNode(node); } else { i--; } } ; //for (int i = 0; i < nodeCount; i++) //{ // var p = new Point(randomizer.Next(40, Drawing_panel.Width - 40), randomizer.Next(40, Drawing_panel.Height - 40)); // if (!nodeHolder.AnyIntersecting(p)) // { // var node = NodeFactory.Create(SelectedAlgorithm, nodeHolder.NodeCount, new WinformsNodeVisualiser(arg, p.X, p.Y, nodeHolder.NodeCount, ParentForm), ParentForm.cb_selfStab.Checked, nodeHolder); // nodeHolder.AddNode(node); // } // else // { // i--; // } //}; for (int i = 0; i < nodeCount; i++) { if (i != nodeCount - 1) { var node1 = nodeHolder.GetNodeAt(i); var node2 = nodeHolder.GetNodeAt(i + 1); edgeHolder.AddEgde(new WinformsEdge(arg, node1, node2)); } } foreach (var node1 in nodeHolder.GetCopyList()) { for (int i = 0; i < Grade; i++) { if (node1.Neighbours.Count >= Grade) { break; } var nextNodeId = randomizer.Next(0, nodeCount); while (nextNodeId == node1.Id || node1.IsNeigbourOf(nextNodeId)) { nextNodeId = randomizer.Next(0, nodeCount); } edgeHolder.AddEgde(new WinformsEdge(arg, node1, nodeHolder.GetNodeById(nextNodeId))); } //foreach (var node2 in nodeHolder.GetCopyList().Where(n => n != node1)) //{ // if (randomizer.Next() % 100 > 10) continue; // if (node1.Neighbours.ContainsKey(node2.Id)) continue; // edgeHolder.AddEgde(new WinformsEdge(arg, node1, node2)); //} } }