private void computarProbabilidadesToolStripMenuItem_Click(object sender, EventArgs e) { tabControl1.SelectTab(0); try { if (CheckConsistency()) { //obtener la evidencia if (flowChartViewer1.Charts.Count > 0 && Evidence.Count > 0) { GetEvidence(); } //transformar el grafo del visor a un grafo de nodos bayesianos var graph = new BayesianGraph(); // var dict = new Dictionary <BayesianNode, BayesianNodeChartElement>(flowChartViewer1.Charts.Count); BayesianNode node; var dict2 = new Dictionary <BayesianNodeChartElement, BayesianNode>(flowChartViewer1.Charts.Count); graph.Clear(); foreach (var item in flowChartViewer1.Charts.Cast <BayesianNodeChartElement>()) { node = new BayesianNode(item.Parents.Count, item.Childs.Count(), item.States.Count, item.Parents.Select(x => x.States.Count).ToArray()) { Probabilities = item.Condicional_Probabilities, Name = item.Name }; dict.Add(node, item); dict2.Add(item, node); item.CreateConditionalProbabilities(); graph.AddVertex(node); } foreach (var bnodechart in flowChartViewer1.Charts.Cast <BayesianNodeChartElement>()) { foreach (var child in bnodechart.Childs) { graph.AddEdge(dict2[bnodechart], dict2[child]); } } //ejecutar el traspaso de mensajes en un poliarbol o en una red multiplemente conexa progressBar1.Value = 5; //if(MessageTransfer.ParalellStartNumber>graph.Count) MessageTransfer.Increment += UpdateProgress; if (graph.Arbol()) { if (Evidence.Count > 0) { MessageTransfer.Message_Tranfer_Poliarbol(graph, Evidence[EvidenceIndex]); } else { MessageTransfer.Message_Tranfer_Poliarbol(graph); } foreach (var nodebayesian in graph) { dict[nodebayesian].SetConditionalProbabilities(nodebayesian.ConditionalProbability); } } else { var markovnet = new MarkovNet(graph); if (Evidence.Count > 0) { MessageTransfer.Message_Tranfer_Arbol_Union(markovnet, Evidence[EvidenceIndex]); } else { MessageTransfer.Message_Tranfer_Arbol_Union(markovnet); } foreach (var nodebayesian in markovnet.BayesianNet) { dict[nodebayesian].SetConditionalProbabilities(nodebayesian.ConditionalProbability); } } timer1.Stop(); progressBar1.Value = 100; Tests.Add(new BayesianTest() { Evidence = Evidence[EvidenceIndex].Clone(), Probabilities = graph.Select(x => x.ConditionalProbability.Clone() as double[]).ToArray() }); TestsIndex = Tests.Count - 1; ShowConditionalProbabilities(); } } catch (Exception ex) { MessageBox.Show("Hubo algun problema al calcular las probabilidades condicionales. " + ex.Message); } }