private double distance2(Case a, Case b)                 // the distance between two points
        {
            EuclideanSimilarity sim = new EuclideanSimilarity(); // the Pythagorean theorem we calculate the distance between two points

            //    return sim.Compare(a, b); // vyzvraschaem distance 1/distance
            return(sim.Similarity(a, b));
        }
        public void EuclideanSimilarityTest()
        {
            EuclideanSimilarity sim = new EuclideanSimilarity();

            // Assert.Throws<ArgumentException>(() => sim.GetSimilarityScore(p0, q4));

            double result = sim.GetSimilarityScore(p0, q0);

            Assert.AreEqual(result, 0.58578, 0.00001);

            result = sim.GetSimilarityScore(p1, q1);
            Assert.AreEqual(result, 0.47213, 0.00001);

            result = sim.GetSimilarityScore(p2, q2);
            Assert.AreEqual(result, 1);

            result = sim.GetSimilarityScore(p3, q3);
            Assert.AreEqual(result, 1);

            result = sim.GetSimilarityScore(p4, q4);
            Assert.AreEqual(result, 0.2943, 0.00001);

            result = sim.GetSimilarityScore(p5, q5);
            Assert.AreEqual(result, 0.19074, 0.00001);
        }
Exemple #3
0
        /// <summary>
        /// Euclidean distance between two points in a two dimensional space.
        /// </summary>
        /// <param name="p1">Point 1</param>
        /// <param name="p2">Point 2</param>
        /// <returns>The distance</returns>
        public static double Distance(this Case p1, Case p2)
        {
            // call eucladian distance beteen tow cases
            EuclideanSimilarity sim = new EuclideanSimilarity();

            return(sim.Similarity(p1, p2));
        }
Exemple #4
0
        /// <summary>
        /// Simple Euclidean distance
        /// cf. http://en.wikipedia.org/wiki/Euclidean_distance
        /// Consider also: Manhattan, Chebyshev & Minkowski distances
        /// </summary>
        /// <param name="P1"></param>
        /// <param name="P2"></param>
        /// <returns></returns>
        private double GetEuclideanD(Case P1, Case P2)
        {
            EuclideanSimilarity sim = new EuclideanSimilarity(); // the Pythagorean theorem we calculate the distance between two points

            return(sim.Dissimilarity(P1, P2));                   // vyzvraschaem distance
            //return sim.Compare(P1, P2); // vyzvraschaem distance
        }
Exemple #5
0
        private void button13_Click_2(object sender, EventArgs e)
        {
            int c;

            double[] ranks;
            int      dG_With = 0;

            ahp_sol_no_clustering = new MyAHPModel(CriteriaArr.GetLength(0), mybestchoice.Cases.Count);
            ahp_sol_no_clustering.AddCriteria(CriteriaArr);
            ahp_sol_no_clustering.AddCriterionRatedChoices(ChoicesArr_Non);
            if (ahp_sol_no_clustering.CalculatedCriteria())
            {
                ranks = ahp_sol_no_clustering.CalculatedChoices(out c);
                if (c != -1)
                {
                    MessageBox.Show("عدم تناسق في تفضيلات البدائل المدخلة للمعيار رقم" + c.ToString());
                    return;
                }
            }

            else
            {
                MessageBox.Show("عدم تناسق في تفضيلات المعايير المدخلة");
                return;
            }



            dg_results_no_clustering.Columns.Add("SolutionID", "Solution ID");
            dg_results_no_clustering.Columns.Add("SolutionWeight", "Solution Weight");
            dg_results_no_clustering.Columns.Add("SolutionSim", "Solution Similarity");
            for (int i = 0; i < ranks.Length; i++)
            {
                dg_results_no_clustering.Rows.Add();
                dg_results_no_clustering.Rows[dG_With].Cells[0].Value = mybestchoice.Cases[i].GetFeature("id").GetFeatureValue().ToString();
                dg_results_no_clustering.Rows[dG_With].Cells[1].Value = Math.Round(ranks[i] * 100, 2);
                EuclideanSimilarity s    = new EuclideanSimilarity();
                List <Case>         sols = Db.get_cases_condition(mybestchoice.Tablename_Standardization, mybestchoice.CaseName);
                dg_results_no_clustering.Rows[dG_With].Cells[2].Value = Math.Round(s.Similarity(sols[i], mybestchoice.StandrizeProblem) * 100, 2);
                dG_With++;
            }

            dg_results_no_clustering.Sort(dg_results_no_clustering.Columns["SolutionWeight"], ListSortDirection.Descending);
        }
        private void button3_Click_1(object sender, EventArgs e)
        {
            if (add_file())
            {
                List <Case> centroids = new List <Case>();
                centroids = Db.get_Centroids(choice.Tablename_Standardization, choice.CaseName);
                for (int i = 0; i < ListCases.Count; i++)
                {
                    // Case s_case = new Case(0, ListCases[0].GetCaseName(), ListCases[0].GetCaseDescription());
                    List <Case> restandrize_array = choice.Re_standrize(ListCases[i]);//, out s_case);
                    Case        s_case            = restandrize_array.Last();
                    Case        result_centroid   = choice.Updated_cluster_Min_Centroid(s_case, centroids, restandrize_array);
                    if (result_centroid != null)
                    {
                        Feature f = (Feature)result_centroid.GetFeatures()[0];
                        s_case.GetFeature("cluster").SetFeatureValue(f.GetFeatureValue()); // اسناد العنقود المناسب للعنصر الجديد
                        Db.update_cluster(choice.Tablename_Standardization, s_case.GetFeature("id").GetFeatureValue().ToString(), Convert.ToInt32(f.GetFeatureValue()));
                        Db.update_cluster(choice.TableName, s_case.GetFeature("id").GetFeatureValue().ToString(), Convert.ToInt32(f.GetFeatureValue()));
                        double ess = 0;
                        //   من ضمن الداتا سيت المقييسة يتم حساب المراكز لجميع العناقيد
                        for (int k = 0; k < Convert.ToInt32(choice.Clusters_Num); k++)
                        {
                            List <Case> S_Arr_Cluster = Db.get_cases_condition_cluster(choice.Tablename_Standardization, choice.CaseName, "cluster", k.ToString());
                            Feature     cen           = S_Arr_Cluster[0].GetFeature("cluster");
                            Case        new_centroid  = Kmeans.ReCalcCentroid(S_Arr_Cluster, Convert.ToInt32(cen.GetFeatureValue()));
                            Db.insert_case_to_table(new_centroid, choice.Tablename_Standardization);
                            EuclideanSimilarity es = new EuclideanSimilarity();
                            double d = 0;
                            foreach (Case c in S_Arr_Cluster)
                            {
                                d += es.Dissimilarity(c, new_centroid);
                            }

                            ess += d;
                        }
                        MessageBox.Show(ess.ToString());
                    }
                }
                dataGridView_old.DataSource = Db.get_table_contetnt(choice.TableName);
            }
        }
        private void button1_Click_1(object sender, EventArgs e)
        {
            textBox1.Text = Db.Get_CostFunction(listBox1.SelectedValue.ToString()).ToString();
            string t   = listBox1.SelectedValue.ToString().ToString();
            double sse = 0;
            EuclideanSimilarity sim = new EuclideanSimilarity();
            string      c           = listBox1.Text;
            List <Case> cases       = Db.get_cases_condition(Db.get_standriazation(t), c);
            List <Case> centroids   = Db.get_Centroids(Db.get_standriazation(t), c);

            foreach (Case a in cases)
            {
                foreach (Case ce in centroids)
                {
                    if (a.GetFeature("cluster").GetFeatureValue().ToString() == ce.GetFeature("id").GetFeatureValue().ToString())
                    {
                        sse += sim.Dissimilarity(a, ce); break;
                    }
                }
            }
            textBox1.Text = sse.ToString();
        }
        private void button2_Click_1(object sender, EventArgs e)
        {
            if (add_file())
            {
                List <Case> centroids = new List <Case>();
                centroids = Db.get_Centroids(choice.Tablename_Standardization, choice.CaseName);
                List <string> Ids = new List <string>();
                for (int i = 0; i < ListCases.Count; i++)
                {
                    //Case s_case = new Case(0, ListCases[0].GetCaseName(), ListCases[0].GetCaseDescription());
                    // تقييس الداتا سيت بناءا على العنصر الجديد
                    var watch = System.Diagnostics.Stopwatch.StartNew();

                    List <Case> restandrize_array = choice.Re_standrize(ListCases[i]);
                    // العنصر الجديد بعد التقييس
                    Case s_case = restandrize_array.Last();

                    // نرى إلى أي عنقود ستمم اضافته
                    Case result_centroid = choice.Updated_cluster(s_case, centroids, restandrize_array);
                    watch.Stop();
                    var elapsedMs = watch.ElapsedMilliseconds;
                    label2.Text = "with clustring time  " + elapsedMs.ToString();
                    // سيتم انضمامه لعنقود موجود
                    if (result_centroid != null)
                    {
                        Feature f = (Feature)result_centroid.GetFeatures()[0];
                        s_case.GetFeature("cluster").SetFeatureValue(f.GetFeatureValue()); // اسناد العنقود المناسب للعنصر الجديد
                        Db.update_cluster(choice.Tablename_Standardization, s_case.GetFeature("id").GetFeatureValue().ToString(), Convert.ToInt32(f.GetFeatureValue()));
                        Db.update_cluster(choice.TableName, s_case.GetFeature("id").GetFeatureValue().ToString(), Convert.ToInt32(f.GetFeatureValue()));
                        Ids.Add(f.GetFeatureValue().ToString());
                    }    // end if
                    else // عنقود جديد
                    {
                        int k = Convert.ToInt32(choice.Clusters_Num) + 1;
                        // اضافة عنقود جديد
                        Db.update_cluster(choice.Tablename_Standardization, s_case.GetFeature("id").GetFeatureValue().ToString(), k);
                        Db.update_cluster(choice.TableName, s_case.GetFeature("id").GetFeatureValue().ToString(), k);
                        Case new_centroid = s_case;
                        new_centroid.GetFeature("cluster").SetFeatureValue(-1);
                        Db.insert_case_to_table(new_centroid, choice.Tablename_Standardization);
                        choice.Clusters_Num = k.ToString();
                        Db.update_clusterNum(choice.CaseName, k);
                    }
                } // end for all new cases
                if (Ids != null)
                {
                    Db.del_centroids(choice.Tablename_Standardization, Ids);
                    double ess = 0;
                    //   من ضمن الداتا سيت المقييسة يتم حساب المراكز لجميع العناقيد
                    foreach (string id in Ids)
                    {
                        List <Case>         S_Arr_Cluster = Db.get_cases_condition_cluster(choice.Tablename_Standardization, choice.CaseName, "cluster", id);
                        Feature             cen           = S_Arr_Cluster[0].GetFeature("cluster");
                        Case                new_centroid  = Kmeans.ReCalcCentroid(S_Arr_Cluster, Convert.ToInt32(cen.GetFeatureValue()));
                        EuclideanSimilarity es            = new EuclideanSimilarity();
                        double              d             = 0;
                        foreach (Case c in S_Arr_Cluster)
                        {
                            d += es.Dissimilarity(c, new_centroid);
                        }

                        ess += d;

                        Db.insert_case_to_table(new_centroid, choice.Tablename_Standardization);
                    }
                    //  حساب distorion error
                    MessageBox.Show(ess.ToString());
                }
                dataGridView_old.DataSource = Db.get_table_contetnt(choice.TableName);
            }
        }
Exemple #9
0
        //---------------------------------------------------------------------------------------
        public void FindSolutions_FuzzyAHP()
        {
            bool consistency;

            double[] choices;
            double[] tempresult;
            AllAhpCriteria     = new Dictionary <Case, double[]>();
            AllFAhpCriteria    = new Dictionary <Case, double[]>();
            AllAhpResults      = new Dictionary <Case, double[, ]>();
            AllFuzzyAhpResults = new Dictionary <Case, double[, ]>();
            List <double[, ]> tempahp;
            List <double[, ]> tempfahp;
            List <Case>       AhpArrCases;

            double[,] Ahp_Results;
            double[,] Fahp_Results;

            //---------------------------------------------------------------------------------
            for (int u = 0; u < exp_random_cases.Count; u++)
            {
                Case _problem = exp_random_cases[u];
                // Criteria Comparsions------------------------
                MyAHPModel model = new MyAHPModel(count_citeria);
                tempahp           = new List <double[, ]>();
                tempfahp          = new List <double[, ]>();
                double[,] cri_arr = model.Create_Criteria_Comparison_Array(count_citeria);

                //-------Criteria Weights----------------------------------------------------------------
                model.AddCriteria(cri_arr);
                double[] cri_wgh = new double[count_citeria];
                bool     res     = false;
                while (!res)
                {
                    if (model.CalculatedCriteria())
                    {
                        res = true;
                    }
                }
                cri_wgh = model.CriteriaWeights;
                //-------------------------------AHP--------------------------------------------------
                AhpArrCases = FindAlternative_WithClustering(_problem);
                if (AhpArrCases.Count != 0)
                {
                    // non clustering
                    MyAHPModel model1 = new MyAHPModel(count_citeria, AhpArrCases.Count);
                    model1.AddCriteria(cri_arr);
                    model1.CalculatedCriteria();
                    AllAhpCriteria.Add(exp_random_cases[u], model1.CriteriaWeights);
                    // Choices Comparsions------------------------
                    consistency = false;
                    choices     = new double[AhpArrCases.Count];
                    tempresult  = new double[AhpArrCases.Count];
                    for (int uu = 0; uu < count_citeria; uu++)
                    {
                        double[,] comp_choice = model1.CreateOne_CeiteriaChoiceComp(uu, AhpArrCases);
                        while (!consistency)
                        {
                            tempresult = model1.Calculated_One__Choic(out consistency, model1.CriteriaWeights[uu], comp_choice);
                        }
                        consistency = false;
                        for (int h = 0; h < tempresult.GetLength(0); h++)
                        {
                            choices[h] += tempresult[h];
                        }
                    }
                    int ii = 0;
                    Ahp_Results = new double[AhpArrCases.Count, 2];
                    foreach (Case cc in AhpArrCases)
                    {
                        Ahp_Results[ii, 0] = Convert.ToDouble(cc.GetFeature("id").GetFeatureValue());
                        Ahp_Results[ii, 1] = choices[ii] * 100;
                        ii++;
                    }
                    // sort Clustered
                    for (int i = 0; i < Ahp_Results.GetLength(0) - 1; i++)
                    {
                        for (int j = 0; j < Ahp_Results.GetLength(0) - i - 1; j++)
                        {
                            if (Ahp_Results[j, 1] < Ahp_Results[j + 1, 1])
                            {
                                double temp = Ahp_Results[j, 1];
                                Ahp_Results[j, 1]     = Ahp_Results[j + 1, 1];
                                Ahp_Results[j + 1, 1] = temp;
                                temp = Ahp_Results[j, 0];
                                Ahp_Results[j, 0]     = Ahp_Results[j + 1, 0];
                                Ahp_Results[j + 1, 0] = temp;
                            }
                            else if (Ahp_Results[j, 1] == Ahp_Results[j + 1, 1])
                            {
                                EuclideanSimilarity s = new EuclideanSimilarity();
                                int    num1           = Convert.ToInt32(Ahp_Results[j, 0]);
                                int    num2           = Convert.ToInt32(Ahp_Results[j + 1, 0]);
                                double sim1           = s.Similarity(AhpArrCases[num1], _problem);
                                double sim2           = s.Similarity(AhpArrCases[num2], _problem);
                                if (sim2 > sim1)
                                {
                                    double temp = Ahp_Results[j, 1];
                                    Ahp_Results[j, 1]     = Ahp_Results[j + 1, 1];
                                    Ahp_Results[j + 1, 1] = temp;
                                    temp = Ahp_Results[j, 0];
                                    Ahp_Results[j, 0]     = Ahp_Results[j + 1, 0];
                                    Ahp_Results[j + 1, 0] = temp;
                                }
                            }
                        }
                    }


                    // Fuzzy
                    MyFuzzyAHP model2 = new MyFuzzyAHP(count_citeria, AhpArrCases.Count);
                    model2.AddCriteria(cri_arr);
                    model2.CalculatedCriteria();
                    AllFAhpCriteria.Add(exp_random_cases[u], model2.CriteriaWeights);
                    // Choices Comparsions------------------------
                    consistency = false;
                    choices     = new double[AhpArrCases.Count];
                    tempresult  = new double[AhpArrCases.Count];
                    for (int uu = 0; uu < count_citeria; uu++)
                    {
                        double[,] comp_choice = model2.CreateOne_CeiteriaChoiceComp(uu, AhpArrCases);

                        while (!consistency)
                        {
                            tempresult = model2.Calculated_One__Choice(out consistency, model2.CriteriaWeights[uu], comp_choice);
                        }
                        consistency = false;
                        for (int h = 0; h < tempresult.GetLength(0); h++)
                        {
                            choices[h] += tempresult[h];
                        }
                    }
                    ii           = 0;
                    Fahp_Results = new double[AhpArrCases.Count, 2];
                    foreach (Case cc in AhpArrCases)
                    {
                        Fahp_Results[ii, 0] = Convert.ToDouble(cc.GetFeature("id").GetFeatureValue());
                        Fahp_Results[ii, 1] = choices[ii] * 100;
                        ii++;
                    }

                    // sort Clustered
                    for (int i = 0; i < Fahp_Results.GetLength(0) - 1; i++)
                    {
                        for (int j = 0; j < Fahp_Results.GetLength(0) - i - 1; j++)
                        {
                            if (Fahp_Results[j, 1] < Fahp_Results[j + 1, 1])
                            {
                                double temp = Fahp_Results[j, 1];
                                Fahp_Results[j, 1]     = Fahp_Results[j + 1, 1];
                                Fahp_Results[j + 1, 1] = temp;
                                temp = Fahp_Results[j, 0];
                                Fahp_Results[j, 0]     = Fahp_Results[j + 1, 0];
                                Fahp_Results[j + 1, 0] = temp;
                            }
                        }
                    }
                    AllAhpResults.Add(exp_random_cases[u], Ahp_Results);
                    AllFuzzyAhpResults.Add(exp_random_cases[u], Fahp_Results);
                }
            } //end if
        }     // end for
        private void button21_Click(object sender, EventArgs e)
        {
            // display


            int dG_WithR = 0;

            dG_With.Columns.Clear();



            //dG_Non.Columns.Add("Porblem No ", "Porblem No  ");
            dG_With.Columns.Add("SolNum", "Sol Num  ");
            dG_With.Columns.Add("Weight  ", "Weight  ");
            dG_With.Columns.Add("Sim  ", "Sim  ");



            List <Case> solutions = statistics.FindAlternative_WithClustering(statistics.exp_random_cases[problem_num]);

            // call method
            listBox1.Items.Add("Finding Alternatices by specifying best cluster");

            double[] ranks;
            Dictionary <int, double[, ]> choices;

            double[,] criteriaarr;

            MyFuzzyAHP myfahp = new MyFuzzyAHP(statistics.count_citeria, solutions.Count);

            criteriaarr = GenerateComparison.CriteriaComparisonMatrix;

            myfahp.AddCriteria(criteriaarr);
            myfahp.CalculatedCriteria();
            choices = GenerateComparison.Create_All_Criteria_Choice_Comparison_Array(solutions);
            myfahp.AddCriterionRatedChoices(choices);
            ranks = myfahp.CalculatedChoices();
            for (int i = 0; i < ranks.Length; i++)
            {
                dG_With.Rows.Add();
                dG_With.Rows[dG_WithR].Cells[0].Value = solutions[i].GetFeature("id").GetFeatureValue().ToString();
                dG_With.Rows[dG_WithR].Cells[1].Value = Math.Round(ranks[i] * 100, 2);
                EuclideanSimilarity s = new EuclideanSimilarity();
                dG_With.Rows[dG_WithR].Cells[2].Value = Math.Round(s.Similarity(solutions[i], statistics.exp_random_cases[problem_num]) * 100, 2);
                dG_WithR++;
            }


            dG_With.Sort(dG_With.Columns[1], ListSortDirection.Descending);

            if (dG_Prob.Columns.Count == 0)
            {
                dG_Prob.Columns.Add("Criteria", " Criteria ");
                dG_Prob.Columns.Add("AHP", "AHP");
                dG_Prob.Columns.Add("FuzzyAHP", "Fuzzy AHP");
                for (int i = 1; i < solutions[0].GetFeatures().Count - 1; i++)
                {
                    dG_Prob.Rows.Add();
                    Feature f = (Feature)solutions[0].GetFeatures()[i];
                    dG_Prob.Rows[i - 1].Cells[0].Value = f.GetFeatureName().ToString();
                    dG_Prob.Rows[i - 1].Cells[2].Value = Math.Round(myfahp.CriteriaWeights[i - 1] * 100, 2);
                }
            }
            else
            {
                for (int i = 1; i < solutions[0].GetFeatures().Count - 1; i++)
                {
                    Feature f = (Feature)solutions[0].GetFeatures()[i];
                    dG_Prob.Rows[i - 1].Cells[2].Value = Math.Round(myfahp.CriteriaWeights[i - 1] * 100, 2);
                }
            }

            dG_Prob.AutoResizeColumns();
            dG_Prob.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
            dG_With.AutoResizeColumns();
            dG_With.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

            // display
        }
        //------------------------------------------------------------------------------------------
        public void implement_ahp()
        {
            // call method
            statistics.FindSolutions_FuzzyAHP();


            // display
            int dG_R = 0;

            int DG_cri = 0;

            dg_With_stat.Columns.Clear();
            dg_With_stat.Columns.Add("Porblem No  ", "Porblem No  ");
            dg_With_stat.Columns.Add("SolNum", "Sol No ");
            dg_With_stat.Columns.Add("Weight", "Weight");
            dg_With_stat.Columns.Add("Sol sim with problem  ", "Sol sim with problem  ");

            dg_Non_stat.Columns.Clear();
            dg_Non_stat.Columns.Add("Porblem No ", "Porblem No  ");
            dg_Non_stat.Columns.Add("SolNum", "Sol Num  ");
            dg_Non_stat.Columns.Add("Weight", "Weight");
            dg_Non_stat.Columns.Add("Sol sim with problem  ", "Sol sim with problem  ");

            dg_criteria.Columns.Clear();
            dg_criteria.Columns.Add("Porblem No", "Porblem No  ");
            for (int i = 1; i < statistics.exp_random_cases[0].GetFeatures().Count - 1; i++)
            {
                Feature f = (Feature)statistics.exp_random_cases[0].GetFeatures()[i];
                dg_criteria.Columns.Add(f.GetFeatureName(), f.GetFeatureName());
            }


            listBox1.Items.Add("خطوة2: إيجاد حلول لكل حالة دراسة");
            listBox1.Items.Add("الأنسب ايجاد بدائل العنقود");
            listBox1.Items.Add("AHP خطوة 3: تطبيق");
            listBox1.Items.Add("خطوة 1.3 توليد المقارنات الزوجية للمعاير وللبدائل");

            foreach (Case c in statistics.exp_random_cases)
            {
                dg_Non_stat.Rows.Add();
                dg_With_stat.Rows.Add();

                // ahp
                dg_Non_stat.Rows[dG_R].Cells[0].Value = c.GetFeature("id").GetFeatureValue().ToString();
                dg_Non_stat.Rows[dG_R].Cells[1].Value = statistics.AllAhpResults[c][0, 0]; // first sol
                dg_Non_stat.Rows[dG_R].Cells[2].Value = Math.Round(statistics.AllAhpResults[c][0, 1], 2).ToString();
                int sol_id            = Convert.ToInt32(statistics.AllAhpResults[c][0, 0]);
                EuclideanSimilarity s = new EuclideanSimilarity();
                dg_Non_stat.Rows[dG_R].Cells[3].Value = Math.Round(s.Similarity(c, mybestchoice.Cases[sol_id]) * 100, 2).ToString();
                // fuzzy ahp
                dg_With_stat.Rows[dG_R].Cells[0].Value = c.GetFeature("id").GetFeatureValue().ToString();
                dg_With_stat.Rows[dG_R].Cells[1].Value = statistics.AllFuzzyAhpResults[c][0, 0];  // first sol
                sol_id = Convert.ToInt32(statistics.AllFuzzyAhpResults[c][0, 0]);
                dg_With_stat.Rows[dG_R].Cells[2].Value = Math.Round(statistics.AllFuzzyAhpResults[c][0, 1], 2);
                s = new EuclideanSimilarity();
                dg_With_stat.Rows[dG_R].Cells[3].Value = Math.Round(s.Similarity(c, mybestchoice.Cases[sol_id]) * 100, 2).ToString();
                dG_R++;
                //criteria
                dg_criteria.Rows.Add(2);
                dg_criteria.Rows[DG_cri].Cells[0].Value     = c.GetFeature("id").GetFeatureValue().ToString();
                dg_criteria.Rows[DG_cri + 1].Cells[0].Value = c.GetFeature("id").GetFeatureValue().ToString();
                for (int i = 0; i < statistics.exp_random_cases[0].GetFeatures().Count - 2; i++)
                {
                    dg_criteria.Rows[DG_cri].Cells[i + 1].Value     = Math.Round(statistics.AllAhpCriteria[c][i] * 100, 2).ToString() + "%";
                    dg_criteria.Rows[DG_cri + 1].Cells[i + 1].Value = Math.Round(statistics.AllFAhpCriteria[c][i] * 100, 2).ToString() + "%";
                }
                DG_cri += 2;
            }

            dg_With_stat.AutoResizeColumns();
            dg_Non_stat.AutoResizeColumns();

            dg_With_stat.AutoSizeColumnsMode =
                DataGridViewAutoSizeColumnsMode.AllCells;
            dg_Non_stat.AutoSizeColumnsMode =
                DataGridViewAutoSizeColumnsMode.AllCells;
        }
        public void calc_matching()
        {
            listBox1.Items.Add("خطوة 4: اظهر نتائج تطابق الطريقتين");
            diff_fuzzy_bigger      = new List <int[]>();
            diff_fuzzy_smaller     = new List <int[]>();
            diff_fuzzy_equal       = new List <int[]>();
            diff_fuzzy_bigger_sim  = new List <double[]>();
            diff_fuzzy_smaller_sim = new List <double[]>();
            diff_fuzzy_equal_sim   = new List <double[]> ();

            // display
            dg_result.Columns.Clear();
            dg_result.Columns.Add("Cases_numbers", "Cases_numbers");
            dg_result.Columns.Add("Similarity", "Similarity");
            double[,] fuzzyAhp_pair, ahp_pair;
            //---------------------------------------------------------------------------------

            // display
            foreach (Case c in statistics.exp_random_cases)
            {
                ahp_pair      = statistics.AllAhpResults[c];
                fuzzyAhp_pair = statistics.AllFuzzyAhpResults[c];
                EuclideanSimilarity s = new EuclideanSimilarity();

                int num1   = Convert.ToInt32(fuzzyAhp_pair[0, 0]);
                int num2   = Convert.ToInt32(ahp_pair[0, 0]);
                int sol_id = Convert.ToInt32(c.GetFeature("id").GetFeatureValue());

                double   sim1 = Math.Round(s.Similarity(mybestchoice.Cases[num1], c) * 100, 2); // fuzzy
                double   sim2 = Math.Round(s.Similarity(mybestchoice.Cases[num2], c) * 100, 2); // ahp
                int[]    te   = new int [3];
                double[] tee  = new double[2];

                if (ahp_pair[0, 0] == fuzzyAhp_pair[0, 0])
                {
                    te[0]  = sol_id;
                    te[1]  = num1;
                    te[2]  = num2;
                    tee[0] = sim1;
                    tee[1] = sim2;
                    diff_fuzzy_equal.Add(te);
                    diff_fuzzy_equal_sim.Add(tee);
                }
                else
                {
                    // fuzzy > ahp
                    if (sim1 > sim2)
                    {
                        te[0]  = sol_id;
                        te[1]  = num1;
                        te[2]  = num2;
                        tee[0] = sim1;
                        tee[1] = sim2;
                        diff_fuzzy_bigger.Add(te);
                        diff_fuzzy_bigger_sim.Add(tee);
                    }
                    else // fuzz  < ahp
                    {
                        te[0]  = sol_id;
                        te[1]  = num1;
                        te[2]  = num2;
                        tee[0] = sim1;
                        tee[1] = sim2;
                        diff_fuzzy_smaller.Add(te);
                        diff_fuzzy_smaller_sim.Add(tee);
                    }
                }
            }


            int h = 0;

            dg_result.Rows.Add();
            dg_result.Rows[h].Cells[0].Value = "Fuzzy AHP = AHP";
            dg_result.Rows[h].Cells[1].Value = diff_fuzzy_equal.Count;
            h++;
            for (int i = 0; i < diff_fuzzy_equal.Count; i++)
            {
                dg_result.Rows.Add();
                dg_result.Rows[h].Cells[0].Value = diff_fuzzy_equal[i][0] + "[ " + diff_fuzzy_equal[i][1] + "," + diff_fuzzy_equal[i][2] + " ]";
                dg_result.Rows[h].Cells[1].Value = diff_fuzzy_equal_sim[i][0] + " , " + diff_fuzzy_equal_sim[i][1];
                h++;
            }

            dg_result.Rows.Add();
            dg_result.Rows[h].Cells[0].Value = "Fuzzy AHP Sim> AHP Sim";
            dg_result.Rows[h].Cells[1].Value = diff_fuzzy_bigger.Count;
            h++;

            for (int i = 0; i < diff_fuzzy_bigger.Count; i++)
            {
                dg_result.Rows.Add();
                dg_result.Rows[h].Cells[0].Value = diff_fuzzy_bigger[i][0] + " [ " + diff_fuzzy_bigger[i][1] + " , " + diff_fuzzy_bigger[i][2] + " ] ";
                dg_result.Rows[h].Cells[1].Value = diff_fuzzy_bigger_sim[i][0] + ", " + diff_fuzzy_bigger_sim[i][1];
                h++;
            }

            dg_result.Rows.Add();
            dg_result.Rows[h].Cells[0].Value = "Fuzzy AHP Sim  < AHP Sim";
            dg_result.Rows[h].Cells[1].Value = diff_fuzzy_smaller.Count;
            h++;

            for (int i = 0; i < diff_fuzzy_smaller.Count; i++)
            {
                dg_result.Rows.Add();
                dg_result.Rows[h].Cells[0].Value = diff_fuzzy_smaller[i][0] + " [ " + diff_fuzzy_smaller[i][1] + " , " + diff_fuzzy_smaller[i][2] + " ] ";
                dg_result.Rows[h].Cells[1].Value = diff_fuzzy_smaller_sim[i][0] + ", " + diff_fuzzy_smaller_sim[i][1];
                h++;
            }
            dg_result.AutoResizeColumns();
            dg_result.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
        }