/**
         * <summary> The execute method takes an {@link Experiment} and a {@link MultipleRun} as inputs. By selecting a candidateList from given
         * Experiment it tries to find a FeatureSubSet that gives best performance.</summary>
         *
         * <param name="multipleRun">{@link MultipleRun} type input.</param>
         * <param name="experiment"> {@link Experiment} type input.</param>
         * <returns>FeatureSubSet that gives best performance.</returns>
         */
        public FeatureSubSet Execute(MultipleRun multipleRun, Experiment.Experiment experiment)
        {
            var processed = new HashSet <FeatureSubSet>();
            var best      = initialSubSet;

            processed.Add(best);
            var betterFound = true;
            ExperimentPerformance bestPerformance = null;

            if (best.Size() > 0)
            {
                bestPerformance = multipleRun.Execute(experiment.FeatureSelectedExperiment(best));
            }

            while (betterFound)
            {
                betterFound = false;
                var candidateList = Operator(best,
                                             experiment.GetDataSet().GetDataDefinition().AttributeCount());
                foreach (var candidateSubSet in candidateList)
                {
                    if (!processed.Contains(candidateSubSet))
                    {
                        if (candidateSubSet.Size() > 0)
                        {
                            var currentPerformance =
                                multipleRun.Execute(experiment.FeatureSelectedExperiment(candidateSubSet));
                            if (bestPerformance == null || currentPerformance.IsBetter(bestPerformance))
                            {
                                best            = candidateSubSet;
                                bestPerformance = currentPerformance;
                                betterFound     = true;
                            }
                        }

                        processed.Add(candidateSubSet);
                    }
                }
            }

            return(best);
        }
 public ExGraph()
 {
     expe = new Experiment.Experiment();
     InitializeComponent();
     Sample1();
 }