⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainform.cs

📁 基于BP算法的贝叶斯网络参数学习
💻 CS
📖 第 1 页 / 共 2 页
字号:
            this.toolStrip1.PerformLayout();
            this.ResumeLayout(false);
            this.PerformLayout();

		}
		#endregion

		/// <summary>
		/// 应用程序的主入口点。
		/// </summary>
		[STAThread]
		static void Main() 
		{
			Application.Run(new MainForm());
		}

		private void miNew_Click(object sender, System.EventArgs e)
		{
			windowCount++ ;
			Doc doc = new Doc("Belief Network " + windowCount.ToString());
			doc.MdiParent = this;
			//doc.myNodeArray.cou
			IFormatter formatter = new BinaryFormatter();
            string path = Application.StartupPath;
			FileStream stream = new FileStream(path+"\\wy", FileMode.Create, FileAccess.Write, FileShare.None);
			formatter.Serialize(stream, doc);
			stream.Close();
			//currentdoc=doc;
			doc.Show();
		}

		private void miOpen_Click(object sender, System.EventArgs e)
		{
			OpenFileDialog opDlg=new OpenFileDialog();
			opDlg.Filter="Belief Network Format(*.xml)|*.xml|All Files(*.*)|*.*";
			opDlg.FilterIndex=1;
			opDlg.InitialDirectory="E:\\wy\\xml";
			if(opDlg.ShowDialog()==DialogResult.OK)
			{
				windowCount++ ;
				Doc docu = new Doc(opDlg.FileName);
                this.currentdoc = docu;
				docu.MdiParent = this;
				NodeArray myNodeArray=new NodeArray(docu);		
				XmlDocument doc = new XmlDocument();
                try
                {
                    doc.Load(opDlg.FileName);
                }
                catch (Exception er)
                {
                    MessageBox.Show(er.Message);
                }
                //建立一个xml文档存放刚打开的文件,以及一个nodearray存放当前文件的节点。		
				
				XmlElement root = doc.DocumentElement;

				ArrayList name=new ArrayList();
				ArrayList position=new ArrayList();
                ArrayList arr_style = new ArrayList();
				//int length=0;			
				Point from=new Point(0,0);
		    	Point to=new Point(0,0);
				string s="";
				
				XmlNodeList xmlNodes=root.SelectNodes("/BNetNodes/*");
				foreach(XmlNode node in xmlNodes)
				{
					name.Add(node.Name);//节点的名字编号全部存放在name里,可以只用编号解决。
					xmlNodes=node.SelectNodes("POSITION");
                    //确定节点坐标
					foreach(XmlNode node1 in xmlNodes)
					{	
						s=node1.InnerText.ToString();						
						s=s.Substring(1,s.Length-2);
						string[] obs=s.Split(',');
						int[] pos=new Int32[obs.Length];							
						for(int i=0;i<obs.Length;i++)
						{
							pos[i]=Convert.ToInt32(obs[i]);
							position.Add(pos[i]);						
						}
					}
                    XmlNodeList xmlNodes2 = node.SelectNodes("style");
                    try
                    {
                        arr_style.Add(xmlNodes2.Item(0).InnerText);
                    }
                    catch
                    {
                        arr_style.Add("no_style");
                    }
				}
				for(int i=0;i<name.Count;i++)
				{
                    try
                    {
                        myNodeArray.AddNewNode(Convert.ToInt32(position[2 * i].ToString()), Convert.ToInt32(position[2 * i + 1].ToString()));
                        myNodeArray[i].Text = name[i].ToString();
                        myNodeArray[i].indegree = 0;
                        myNodeArray[i].outdegree = 0;
                        myNodeArray[i].m_style = arr_style[i].ToString();
                        if (myNodeArray[i].m_style == "Noisy_And")
                        {
                            myNodeArray[i].BackColor = Color.DarkKhaki;
                        }
                        else if (myNodeArray[i].m_style == "Noisy_Or")
                        {
                            myNodeArray[i].BackColor = Color.OrangeRed;
                        }
                        else
                        {
                            myNodeArray[i].BackColor = Color.Yellow;
                        }
                    }
                    catch (Exception er)
                    {
                        statusBar1.Panels[0].Text = er.Message;
                    }
				}		
				int size=name.Count;
                //邻接矩阵部分,用于确定节点的连接


				bool[][] adjMatrix=new bool[size][];
				for(int i=0;i<size;i++)
					adjMatrix[i]=new bool[size];//一个方阵,这个方阵存放着每两个节点之间是不是有一条边
				//initial
				for(int i=0;i<size;i++)
					for(int j=0;j<size;j++)
						adjMatrix[i][j]=false;//把这个方阵的值都赋值为false
				
				int sumedge=0;

				XmlNodeList xmlNodes1=root.SelectNodes("/BNetNodes/*");
                foreach (XmlNode node in xmlNodes1)
                {			
                    xmlNodes1 = node.SelectNodes("Parents/*");
                    foreach (XmlNode xml_node in xmlNodes1)
                    {
                        adjMatrix[name.IndexOf(xml_node.Name)][name.IndexOf(node.Name)] = true;
                    }
                }
                for (int i = 0; i < size; i++)
                {
                    for (int j = 0; j < size; j++)
                    {
                        if (adjMatrix[i][j] == true)//这个矩阵变量是存放节点与节点之间是否有边的
                        {
                            Line curr = new Line();//如果有边则在它们之间画一条边
                            curr.StartPoint = myNodeArray[i].from;
                            curr.EndPoint = myNodeArray[j].to;
                            /////////////////////////////////////////////////////////////////
                            myNodeArray[i].outdegree++;//这个修改打开文件时输出路径的初始化
                            myNodeArray[j].indegree++;//这个修改了打开文件时输入的初始化
                            curr.sNode = myNodeArray[i].name;
                            curr.dNode = myNodeArray[j].name;
                            ////////////////////////////////////////////////////////////////
                            curr.DrawLine(docu);
                            docu.Lines.Add(curr);
                        }
                    }
                }
				Invalidate();	
				sumedge++;
                docu.myNodeArray = myNodeArray;
				docu.Show();
			}   

		}

		private void miExit_Click(object sender, System.EventArgs e)
		{
            this.misave.PerformClick();
		    this.Close();
		}

		private void miToolBar_Click(object sender, System.EventArgs e)//toolbar对话框是否显示
		{
			if(this.miToolBar.Checked)
			{
				this.toolStrip1.Dock=DockStyle.None;
				this.toolStrip1.Hide();
				this.miToolBar.Checked=false;
			}
			else
			{ 
				this.toolStrip1.Dock=DockStyle.Top;
				this.toolStrip1.Show();
				this.miToolBar.Checked=true;
			}
		}

		private void miStatusBar_Click(object sender, System.EventArgs e)//statusbar是否显示
		{
			if(this.miStatusBar.Checked)
			{
				this.statusBar1.Dock=DockStyle.None;
				this.statusBar1.Hide();
				this.miStatusBar.Checked=false;
			}
			else
			{ 
				this.statusBar1.Dock=DockStyle.Bottom;
				this.statusBar1.Show();
				this.miStatusBar.Checked=true;
			}
		}

		private void miAbout_Click(object sender, System.EventArgs e)
		{
		MessageBox.Show("贝叶斯网络参数学习!");
		}

		private void MainForm_MdiChildActivate(object sender, System.EventArgs e)
		{
			if (null == this.ActiveMdiChild) 
			{
				statusBar1.Text = "";
			} 
			else 
			{
				statusBar1.Text = this.ActiveMdiChild.Text;
			}
		}


        private void MainForm_Load(object sender, EventArgs e)
        {

        }

        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            this.miNew.PerformClick();
        }

        private void toolStripButton2_Click(object sender, EventArgs e)
        {
            this.miOpen.PerformClick();
        }

        private void toolStripButton3_Click(object sender, EventArgs e)
        {
            this.misave.PerformClick();
        }

        private void toolStripButton4_Click(object sender, EventArgs e)
        {
            this.helptopic.PerformClick();
        }

        private void helptopic_Click(object sender, EventArgs e)
        {
            MessageBox.Show("如果您已经建好了一个贝叶斯网络,请打开。\n\r 否则请新建一个贝叶斯网络进行参数学习!");
        }

        private void misave_Click(object sender, EventArgs e)
        {
            SaveFileDialog sfDlg = new SaveFileDialog();
            sfDlg.Filter = "Belief Network Format(*.xml)|*.xml|All Files(*.*)|*.*";
            sfDlg.FilterIndex = 1;
            sfDlg.DefaultExt = "xml";
            sfDlg.AddExtension = true;
            sfDlg.RestoreDirectory = true;
            sfDlg.InitialDirectory = "E:\\wy\\xml";
            if (sfDlg.ShowDialog() == DialogResult.OK)
            {
                MessageBox.Show("已经保存!");
            }
        }
		
		
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -