private string Get_Prime_Info(PINode primeList)
        {
            PINode PI    = primeList;
            string upper = "{";

            while (PI != null)
            {
                upper = upper + " {";
                LeafNode leaf = PI.Implicant;
                while (leaf != null)
                {
                    if (leaf.flag == 2)
                    {
                        upper = upper + "~";
                    }
                    else
                    {
                        upper = upper + " ";
                    }
                    upper = upper + "N" + leaf.Node_Num.ToString();
                    leaf  = leaf.Next;
                }
                upper = upper + "}";
                PI    = PI.Next;
            }
            upper = upper + " }";
            return(upper);
        }
        private void button_ok_Click(object sender, EventArgs e)
        {
            if (filenameBox.Text.ToString() == null)
            {
                MessageBox.Show("please choose input file!");
                return;
            }
            Build_Fault_Tree build_T = new Build_Fault_Tree();

            _rootFaultTree = build_T.Build_fault_tree(filenameBox.Text.ToString());
            _leaflists     = new Build_Leaf_lists(_rootFaultTree).Get_leaflists();
            Build_Uncertainty_Tree build_UT = new Build_Uncertainty_Tree(_rootFaultTree);

            _rootFaultTree_Uncertainty = build_UT.Get_uncertainty_Tree();
            _leaflists_Uncertainty     = new Build_Leaf_lists(_rootFaultTree_Uncertainty).Get_leaflists();
            Build_BDD_Tree build_BDD = new Build_BDD_Tree();

            _rootBDDTree             = build_BDD.FAT_BDD(_rootFaultTree);
            _rootBDDTree_Uncertainty = build_BDD.FAT_BDD(_rootFaultTree_Uncertainty);
            Build_Meta_Tree build_Meta = new Build_Meta_Tree();

            _rootMetaTree             = build_Meta.BUILD_META_TREE(_rootBDDTree, _leaflists);
            _rootMetaTree_Uncertainty = build_Meta.BUILD_META_TREE(_rootBDDTree_Uncertainty, _leaflists_Uncertainty);
            Prime_Implicants build_PI = new Prime_Implicants(_rootMetaTree);

            _prime_lists = build_PI.get_First_Prime();
            Prime_Implicants build_UPI = new Prime_Implicants(_rootMetaTree_Uncertainty);

            _prime_lists_Uncertainty = build_UPI.get_First_Prime();
        }
Ejemplo n.º 3
0
 PINode GET_PRIME_IMPLICANT(BinaryTreeNode tree, PINode prime)
 {
     if (tree.Node_Num == 0)
     {
         return(null);
     }
     if (tree.Node_Num == 1)
     {
         if (first_prime == null)
         {
             first_prime = new PINode();
             return(first_prime);
         }
         else
         {
             PINode p, q;
             p = new PINode();
             q = first_prime;
             while (q.Next != null)
             {
                 q = q.Next;
             }
             q.Next = p;
             return(p);
         }
     }
     if (tree.flag == 1)
     {
         PINode temp_left;
         PINode temp_right;
         temp_left  = GET_PRIME_IMPLICANT(tree.Left, prime);
         temp_right = GET_PRIME_IMPLICANT(tree.Right, prime);
         if (temp_left != null)
         {
             return(temp_left);
         }
         else
         {
             return(temp_right);
         }
     }
     //   if(tree.flag==2)
     else
     {
         PINode temp_left, prime_left = null;
         PINode temp_right, prime_right = null;
         prime_left  = GET_PRIME_IMPLICANT(tree.Left, prime);
         prime_right = GET_PRIME_IMPLICANT(tree.Right, prime);
         temp_left   = prime_left;
         temp_right  = prime_right;
         while (temp_left != null)
         {
             LeafNode leaf;
             leaf          = new LeafNode();
             leaf.Node_Num = tree.Node_Num;
             leaf.flag     = 1;
             LeafNode p = temp_left.Implicant;
             if (p == null)
             {
                 temp_left.Implicant = leaf;
             }
             else
             {
                 while (p.Next != null)
                 {
                     p = p.Next;
                 }
                 p.Next = leaf;
             }
             temp_left = temp_left.Next;
         }
         while (temp_right != null)
         {
             LeafNode leaf;
             leaf          = new LeafNode();
             leaf.Node_Num = tree.Node_Num;
             leaf.flag     = 2;
             LeafNode p = temp_right.Implicant;
             if (p == null)
             {
                 temp_right.Implicant = leaf;
             }
             else
             {
                 while (p.Next != null)
                 {
                     p = p.Next;
                 }
                 p.Next = leaf;
             }
             temp_right = temp_right.Next;
         }
         if (prime_left != null)
         {
             return(prime_left);
         }
         else
         {
             return(prime_right);
         }
     }
 }