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

📄 doc.cs

📁 基于BP算法的贝叶斯网络参数学习
💻 CS
📖 第 1 页 / 共 5 页
字号:
            
                #region 注释
                //sumedge++;
                //MessageBox.Show(sumedge.ToString());

                /*XmlNodeList xmlNodes1=root.SelectNodes("/BNetNodes/*");
                foreach(XmlNode node in xmlNodes1)
                {
						
                    xmlNodes1=node.SelectNodes("Parents");
                    MessageBox.Show(xmlNodes1.Count.ToString());
                }
                    //xmlNodes=node.SelectNodes("Parents");
                    //foreach(XmlNode node1 in xmlNodes)
                    */

                //MessageBox.Show(node.Name.ToString());
                //this.Show();
                #endregion
            }
            #endregion
        }

        private void toolStripButton10_Click(object sender, EventArgs e)
        {
            #region 权值批量输入代码
            /*foreach (BNode1 node in myNodeArray)
            {
                if (node.BackColor == Color.DarkSeaGreen)
                {
                    NodeProperties dlg = new NodeProperties(node.State);
                    dlg.textBox1.Text = node.Text;
                    dlg.textBox2.Text = node.Text;
                    dlg.ShowDialog();
                    if (dlg.DialogResult == DialogResult.OK)
                    {
                        node.Text = dlg.textBox1.Text;
                        node.Font = dlg.font;
                        node.BackColor = dlg.color;
                        tempColor = dlg.color;
                    }
                }
            }*/
            if (this.Lines.Count == 0)
            {
                MessageBox.Show("您还没有添加边");
                return;
            }
            else
            {
                frm_Wij_Bat frm = new frm_Wij_Bat();
                frm.lines = this.Lines;
                if (frm.ShowDialog() == DialogResult.OK)
                {
                    for (int i = 0; i < frm.lines.Count; i++)
                    {
                        this.Lines[i].wij = frm.lines[i].wij;
                    }
                    this.arrYb = new ArrayList();
                    for (int i = 0; i < this.Lines.Count; i++)
                    {
                        this.arrYb.Add(this.Lines[i].wij);
                    }
                }
                
            }
            #endregion
        }

        private void toolStripButton11_Click(object sender, EventArgs e)
        {
            #region 删除边的代码
            for (int i = 0; i < Lines.Count; i++)
            {
                if (Lines[i].PenWidth == 5)
                {
                    Lines.RemoveAt(i);
                }
            }
            this.Invalidate();
            #endregion
        }

        private void toolStripButton8_Click(object sender, EventArgs e)
        {
            #region 注释
            /*Swatch_add sa = new Swatch_add();//这个按钮不在用于添加样本,而是用于添加 学习速率值
            int sumofPar = 0;//输入节点数量
            int sumofTar = 0;//输出节点数量
            foreach (BNode1 node in this.myNodeArray)
            {
                if (node.indegree == 0)
                {
                    sumofPar++;
                }
                if (node.outdegree == 0)
                {
                    sumofTar++;
                }
            }
            sa.num_of_TextBox = sumofPar;
            sa.num_of_TextBox1 = sumofTar;
            if (sa.ShowDialog() == DialogResult.OK)
            {

            }*/
            
            #endregion
            #region 样本学习速率的录入
            frm_EtaSet frm = new frm_EtaSet();
            frm.numericUpDown1.Value = (decimal)this.Eta;
            if (frm.ShowDialog() == DialogResult.OK)
            {
                this.Eta = (double)frm.numericUpDown1.Value;
            }
            #endregion
        }

        private void Doc_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            #region 添加权值代码
            foreach (Line l in Lines)
            {
                if (((l.EndPoint.X > l.StartPoint.X && l.StartPoint.X < e.X && e.X < l.EndPoint.X) || (l.StartPoint.X > l.EndPoint.X && l.EndPoint.X < e.X && e.X < l.StartPoint.X)) && (l.yPositon(e.X) - e.Y) > -5 && (l.yPositon(e.X) - e.Y) < 5)
                {
                    frm_wij frm = new frm_wij();
                    if (frm.ShowDialog() == DialogResult.OK)
                    {
                        l.wij = frm.maskedTextBox1.Text;
                    }
                }
            }
            foreach (BNode1 node in myNodeArray)
            {
                if (node.IsInNode(e.Location)&&(node.indegree!=0))
                {
                    frm_AndOr frm = new frm_AndOr();
                    if ((node.m_style == "no_style")||(node.m_style==""))
                    {
                        frm.index = -1;
                    }
                    else if (node.m_style == "Noisy_And")
                    {
                        frm.index = 0;
                    }
                    else if(node.m_style=="Noisy_Or")
                    {
                        frm.index = 1;
                    }
                    if (frm.ShowDialog() == DialogResult.OK)
                    {
                        if (frm.comboBox1.SelectedIndex == -1)
                        {
                            MessageBox.Show("您没有选择节点类型", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                        else
                        {
                            node.m_style = frm.comboBox1.SelectedItem.ToString();
                            if (node.m_style == "Noisy_And")
                            {
                                node.BackColor = Color.DarkKhaki;
                            }
                            else
                            {
                                node.BackColor=Color.OrangeRed;
                            }
                        }
                    }
                }
            }
            #endregion
        }

        private void toolStripButton9_Click_1(object sender, EventArgs e)
        {
            #region 自动生成样本
            int sumOfNoWij=0;
            int sumOfNoType=0;
            foreach (Line l in this.Lines)
            {
                if (l.wij==null)
                {
                    sumOfNoWij++;
                }
            }
            foreach (BNode1 node in this.myNodeArray)
            {
                if ((node.indegree != 0) && ((node.m_style == "no_style")||(node.m_style=="")))
                {
                    sumOfNoType++;
                }
            }
            if (this.myNodeArray.Count == 0)
            {
                MessageBox.Show("不存在贝叶斯网络,\r\n请新建或打开一个文件!");
                return;
            }
            else
            {
                if (sumOfNoType != 0)
                {
                    MessageBox.Show("请您设置除输入层节点外的所有节点类型!");
                }
                else if (sumOfNoWij != 0)
                {
                    MessageBox.Show("请您设置所有边的权值!");
                }
                else
                {
                    frm_Auto_Swatch frm = new frm_Auto_Swatch();
                    frm.myNodeArray = this.myNodeArray;
                    frm.Lines = this.Lines;
                    if (frm.ShowDialog() == DialogResult.OK)
                    {
                        this.arrayA = frm.arryA;
                        this.arrR = frm.sumofR;
                        this.arrC = frm.sumofC;
                    }
                }
            }
            #endregion
        }

        #region 注释
        //------------------------------------------------------------------
		// This function splits a list of functions(因子函数,在这里一个因子函数对应一个节点的条件概率表) into buckets in accordance
		// with the given ordering of n variables in the network.
		// Bucket i is a list of type Tlist<Function*> that contains the pointers
		// to all functions whose highest ordered argument is the
		// variable that appears i-th in the given ordering.
		//------------------------------------------------------------------

        /*	public void highestIndex(int[] ord)
            {
                ord=this.minDegree();

            }

            public void createBucket()
            {
                int Nvars=myNodeArray.Count;
                ArrayList buckets=new ArrayList(); // one extra for constatnts (topmost)
                //constants=0;
                //将因子函数放入到它的序号最大的变量所对应的桶中


			

            }

		
            private class Bucket
            {
                public Bucket(int i) 
                {
                    id = i;
                    parentNodes = new ArrayList();
                    childBuckets = new ArrayList();
                }

                public int id;
                public ArrayList parentNodes;
                public ArrayList childBuckets;
            }
                ArrayList m_buckets = new ArrayList();
            private void PrepareBuckets()
            {
                //ArrayList nodes = m_net.Nodes;
		

                for(int i=0; i<myNodeArray.Count; ++i)
                    m_buckets.Add(new Bucket(i));

                // go through all buckets from buttom up
                for(int i=myNodeArray.Count-1; i>=0; --i)
                {
                    //BNode theNode = (BNode)nodes[i];
                    Bucket theBuck = (Bucket)m_buckets[i];

                    foreach(BNode1 node in myNodeArray)
                    {
                        for(int j=0;j<this.Parent(myNodeArray[i].name).Count;j++)
                            if(node.name==(this.Parent(myNodeArray[i].name))[j].ToString())
                                theBuck.parentNodes.Add(node.name);
                    }

                    foreach(Bucket nxtBuck in theBuck.childBuckets)
                    {
                        //foreach(BNode node in nxtBuck.parentNodes)
                        //if( node.ID!=i && !theBuck.parentNodes.Contains(node) ) 
                        //theBuck.parentNodes.Add(node);
                        foreach(BNode1 node in myNodeArray)
                            for(int j=0;j<nxtBuck.parentNodes.Count;j++)
                                if( node.ID!=i && !theBuck.parentNodes.Contains(node.name) ) 
                                    theBuck.parentNodes.Add(node.name);
                    }

              int max=-1;
                for(int j=0;j<theBuck.parentNodes.Count;j++)
                    foreach(BNode1 node in myNodeArray)
                        if(node.name==theBuck.parentNodes[j].ToString())
                            if( node.ID > max ) 
                                max = node.ID;
                    int max_nid=max;



                    //int max_nid = FindMaxNodeId(theBuck.parentNodes);

                    if( max_nid >= 0 )
                        ((Bucket)m_buckets[max_nid-1]).childBuckets.Add(theBuck);
                }
            }
		
            protected double Sum(int nid, int para)
            {
                //BNode theNode = (BNode)m_net.Nodes[nid];
                Bucket theBuck = (Bucket)m_b

⌨️ 快捷键说明

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