private void Btn_Read_Click(object sender, RoutedEventArgs e)
        {
            FileReader  fr  = new FileReader();
            ListDataSet dsl = fr.ReadFile("DataSetBaru", cc);

            dsl.Normalized();

            GeneticAlgorithm ga = new GeneticAlgorithm();

            ga.Initialize(dsl, cc);
            fitChrom = ga.Run();

            for (int i = 0; i < dsl.Count; i++)
            {
                int popCount = 0;
                for (int j = 0; j < fitChrom.Length; j++)
                {
                    if (fitChrom[j] == 0)
                    {
                        dsl[i].RemoveBit(j - popCount);
                        popCount++;
                    }
                }
            }
            Stopwatch sw = Stopwatch.StartNew();

            nn.InitialiseNetwork(dsl[0].AttributeCount, dsl[0].AttributeCount / 2, cc.TargetCount);
            nn.Seed = 0;
            nn.InitialiseWeight();
            BackPropagation bp = new BackPropagation();

            bp.Initialise(nn, dsl, cc);
            bp.Run(500);
            sw.Stop();
            Console.WriteLine(sw.ElapsedMilliseconds / 1000.0f);
        }
        private void DoBackPropagation()
        {
            for (int i = 0; i < chromosoms.Count; i++)
            {
                ListDataSet lds = new ListDataSet(listDataSet);

                for (int j = 0; j < lds.Count; j++)
                {
                    int popCount = 0;
                    for (int k = 0; k < chromosoms[i].Length; k++)
                    {
                        if (chromosoms[i][k] == 0)
                        {
                            lds[j].RemoveBit(k - popCount);
                            popCount++;
                        }
                    }
                }

                NeuralNetwork nn = new NeuralNetwork();
                nn.InitialiseNetwork(lds[0].AttributeCount, lds[0].AttributeCount / 2, classificationClass.TargetCount);
                nn.InitialiseWeight();

                BackPropagation bp = new BackPropagation();
                bp.Initialise(nn, lds, classificationClass);
                bp.Run();

                FeedForward ff = new FeedForward();
                ff.Initialise(nn, lds);

                int totalCorrect = 0;
                for (int j = 0; j < lds.Count; j++)
                {
                    ff.Run(j);
                    //nn.Print();

                    //foreach (int ac in ff.GetActualClass())
                    //    Console.Write(ac + " ");
                    //Console.Write(" --> ");
                    //foreach (int ac in classificationClass.GetTarget(lds[j].ClassName))
                    //    Console.Write(ac + " ");
                    //Console.WriteLine();

                    bool  correct     = true;
                    int[] targetClass = classificationClass.GetTarget(lds[j].ClassName);
                    for (int k = 0; k < ff.GetActualClass().Length; k++)
                    {
                        if (targetClass[k] != ff.GetActualClass()[k])
                        {
                            correct = false;
                        }
                    }

                    if (correct)
                    {
                        totalCorrect++;
                    }
                }
                //Console.WriteLine("total: " + totalCorrect + "/" + lds.Count);
                chromosoms[i].FitnessValue = totalCorrect / (float)lds.Count;
                //chromosoms[i].Print();
            }
        }