/*
         * public List<BayesResult> GetResults()
         * {
         *  List<BayesResult> result = new List<BayesResult>();
         *  Net.UpdateBeliefs();
         *  foreach (BayesStructureSchema child in Schema)
         *  {
         *      for (int i = 0; i < 4; i++)
         *      {
         *          Net.SetEvidence(child.ChildId, "s" + i.ToString());
         *          Net.UpdateBeliefs();
         *          foreach (string parent in child.Parents)
         *          {
         *              for (int j = 0; j < 3; ++j)
         *              {                           //var f = Net.GetNodeValue(parent);
         *                  double probability = (Net.GetNodeValue("result"))[j];
         *                  result.Add(new BayesResult(parent, "s" + j.ToString(), child.ChildId, "s" + i.ToString(), probability));
         *              }
         *          }
         *          Net.ClearEvidence(child.ChildId);
         *      }
         *
         *  }
         *  return result;
         * }
         */
        public BayesResult2 GetResult()
        {
            BayesResult2  result        = new BayesResult2();
            List <double> probabilities = new List <double>();

            Net.UpdateBeliefs();
            foreach (CancerData testData in this.Tdata)
            {
                Net.ClearAllEvidence();
                foreach (string attr in StructureAttributes)
                {
                    int idx = this.AttritubeToIndex(attr);
                    if (testData.attributes[idx] > -1 && attr.IndexOf('p') >= 0)
                    {
                        List <double> test = new List <double>();

                        test.AddRange(Net.GetNodeValue("result"));
                        Net.SetEvidence(attr, "s" + testData.attributes[idx]);
                        Net.UpdateBeliefs();

                        test.AddRange(Net.GetNodeValue("result"));
                        test.Clear();
                    }
                }
                probabilities.AddRange(Net.GetNodeValue("result"));
                Console.WriteLine("Result:" + probabilities.ElementAt(0) + " " + probabilities.ElementAt(1) + " " + probabilities.ElementAt(2));
                int cancerClass = this.ClassForMaxElement(probabilities);
                if (cancerClass == testData.cancerClass)
                {
                    result.Good++;
                }
                else
                {
                    result.Bad++;
                }

                probabilities.Clear();
            }

            return(result);
        }
 /*
  * public void PrintResult(List<BayesResult> result)
  * {
  *  foreach(BayesResult b in result)
  *  {
  *      Console.WriteLine(b.ToString());
  *  }
  * }
  */
 public void PrintResult(BayesResult2 result)
 {
     Console.WriteLine("Good: {0}, Bad: {1}", result.Good, result.Bad);
 }