Example #1
0
        private void cmbox_case_SelectedIndexChanged_2(object sender, EventArgs e)
        {
            if ((conn.State == ConnectionState.Closed) && (cmbox_case.SelectedValue.ToString() != "System.Data.DataRowView"))
            {
                DataTable mydt  = Db.get_table_contetnt_condition("tbl_cases", "case_name", cmbox_case.Text);
                ArrayList myarr = Db.get_cases_as_arraylist(cmbox_case.SelectedValue.ToString(), cmbox_case.Text);
                mybestchoice       = new BestChoice(myarr, mydt.Rows[0]["standrize_type"].ToString(), mydt.Rows[0]["kmeans_method"].ToString(), mydt.Rows[0]["clusters_num"].ToString());
                mybestchoice.Cases = Db.get_cases_condition(mybestchoice.Tablename_Standardization, mybestchoice.CaseName);
                statistics         = new Statistics(mybestchoice.TableName, mybestchoice.CaseName);
                lstBox_Notes.Items.Add("Fetching data from database");
                dG_data.DataSource = Db.get_all_cases(cmbox_case.SelectedValue.ToString());
                DataTable countcluster = Db.get_count_cluster(mybestchoice.TableName);
                dg_clusters.Rows.Clear();
                dg_clusters.Columns.Clear();
                dg_clusters.Columns.Add("cluster", "cluster");
                dg_clusters.Columns.Add("count", "count");
                dg_clusters.Rows.Add(countcluster.Rows.Count + 1);

                dg_clusters.Rows[0].Cells[0].Value = "عدد العناقيد الكلي";
                dg_clusters.Rows[0].Cells[1].Value = countcluster.Rows.Count;
                for (int i = 0; i < countcluster.Rows.Count; i++)
                {
                    dg_clusters.Rows[i + 1].Cells[0].Value = countcluster.Rows[i][1];
                    dg_clusters.Rows[i + 1].Cells[1].Value = countcluster.Rows[i][0];
                }
                List <Case> centroids = Db.get_Centroids(mybestchoice.Tablename_Standardization, mybestchoice.CaseName);
                mybestchoice.Clusters = new KmeansPlus.PointClusters();
                for (int i = 0; i < centroids.Count; i++)
                {
                    mybestchoice.Clusters.PC.Add(centroids[i], Db.get_cases_condition_cluster(mybestchoice.TableName, mybestchoice.CaseName, "cluster", centroids[i].GetFeature("id").GetFeatureValue().ToString()));
                }
            }
            conn.Close();
        }
        private void dataGridView1_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            ArrayList myarr = Db.get_cases_as_arraylist_condition(dataGridView1.SelectedRows[0].Cells["tbl_name"].Value.ToString(), dataGridView1.SelectedRows[0].Cells["case_name"].Value.ToString());

            choice = new BestChoice(myarr, dataGridView1.SelectedRows[0].Cells["standrize_type"].Value.ToString(), dataGridView1.SelectedRows[0].Cells["kmeans_method"].Value.ToString(), dataGridView1.SelectedRows[0].Cells["clusters_num"].Value.ToString());
            dataGridView_old.DataSource       = Db.get_table_contetnt(dataGridView1.SelectedRows[0].Cells["tbl_name"].Value.ToString());
            dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
        }
//-----------------------------------------------------------------------------------------
        private void cmbox_case_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cmbox_case.SelectedValue.ToString() != "System.Data.DataRowView")
            {
                ArrayList myarr = Db.get_cases_as_arraylist(cmbox_case.SelectedValue.ToString(), cmbox_case.Text);
                DataTable mydt  = Db.get_table_contetnt_condition("tbl_cases", "case_name", cmbox_case.Text);
                mybestchoice       = new BestChoice(myarr, mydt.Rows[0]["standrize_type"].ToString(), mydt.Rows[0]["kmeans_method"].ToString(), mydt.Rows[0]["clusters_num"].ToString());
                mybestchoice.Cases = Db.get_cases_condition(mybestchoice.Tablename_Standardization, mybestchoice.CaseName);
                statistics         = new Statistics(mybestchoice.TableName, mybestchoice.CaseName);
            }
        }
Example #4
0
        private void radioButton2_Click_1(object sender, EventArgs e)
        {
            //cmbox_case.Items.Clear();

            dG_data.DataSource = null;
            // Create an instance of the open file dialog box.
            OpenFileDialog openFileDialog1 = new OpenFileDialog();

            // Set filter options and filter index.
            openFileDialog1.Filter      = "Text Files (.txt)|*.txt|All Files (*.*)|*.*";
            openFileDialog1.FilterIndex = 1;

            openFileDialog1.Multiselect = true;

            // Call the ShowDialog method to show the dialog box.
            DialogResult userClickedOK = openFileDialog1.ShowDialog();

            // Process input if the user clicked OK.
            if (userClickedOK.Equals(DialogResult.OK))
            {
                string url = openFileDialog1.FileName;
                // Open the selected file to read.
                System.IO.Stream fileStream = openFileDialog1.OpenFile();
                // تحميل الى datagrid
                IOCBRFile   myfile     = OCBRFileFactory.newInstance(url, true);
                ArrayList   ArrayCases = myfile.GetCases();
                string      CaseName   = myfile.GetCaseName();
                List <Case> ListCases  = myfile.GetListCases();
                mybestchoice = new BestChoice(ArrayCases, ListCases, "MN", "KPP");
                if (ArrayCases.Count != 0)
                {
                    for (int j = 0; j < ListCases[0].GetFeatures().Count; j++)
                    {
                        Feature feature = (Feature)ListCases[0].GetFeatures()[j];
                        dG_data.Columns.Add(feature.GetFeatureName().ToString(), feature.GetFeatureName().ToString());
                    }

                    dG_data.Rows.Add(ArrayCases.Count);
                }
                for (int i = 0; i < ArrayCases.Count; i++)
                {
                    Case c = (Case)ArrayCases[i];
                    for (int j = 0; j < c.GetFeatures().Count; j++)
                    {
                        Feature f = (Feature)c.GetFeatures()[j];
                        dG_data.Rows[i].Cells[j].Value = f.GetFeatureValue();
                    }
                }
            }
        }
Example #5
0
        public void GetRandomCases_File()
        {
            exp_random_cases.Clear();
            exp_random_cases_nonstandrize.Clear();
            Case        Max_Mean = Db.get_Case_data(standrize_table, -2);
            Case        Min_Sd   = Db.get_Case_data(standrize_table, -3);
            List <Case> templist = new List <Case>();

            templist = Db.read_file();


            if (templist.Count != 0)
            {
                for (int i = 0; i < templist.Count; i++)
                {
                    exp_random_cases_nonstandrize.Add(templist[i]);
                    //  i have to put general seetings for normalization a
                    Case c = BestChoice.StandardizeCase(templist[i], Max_Mean, Min_Sd, standrize_type);
                    exp_random_cases.Add(c);
                }
            }
        }
Example #6
0
        //=========================================================================================
        public void GenerateRandomCases()
        {
            exp_random_cases.Clear();
            Case        Max_Mean = Db.get_Case_data(standrize_table, -2);
            Case        Min_Sd   = Db.get_Case_data(standrize_table, -3);
            Random      r        = new Random();
            List <Case> Cases    = Db.get_cases_condition(tablename, casename);

            for (int i = 0; i < 100; i++)
            {
                double x = 0;
                Case   c = new Case(0, Max_Mean.GetCaseName(), "");

                for (int j = 0; j < Max_Mean.GetFeatures().Count; j++)
                {
                    Feature max_f = (Feature)Max_Mean.GetFeatures()[j];
                    Feature min_f = (Feature)Min_Sd.GetFeatures()[j];
                    if (max_f.GetFeatureName() == "id")
                    {
                        x = (double)i;
                    }
                    else if (max_f.GetFeatureName() == "cluster")
                    {
                        x = -1;
                    }
                    else if (max_f.GetFeatureType() >= 5 && max_f.GetFeatureType() <= 9)// mstring, string, ordinal, categorical
                    {
                        int     k = r.Next(0, Cases.Count);
                        Feature f = (Feature)Cases[k].GetFeatures()[j];
                        c.AddFeature(max_f.GetFeatureName(), max_f.GetFeatureType(), f.GetFeatureValue(), max_f.GetWeight(), max_f.GetIsKey(), max_f.GetIsIndex(), max_f.GetFeatureUnit());
                        continue;
                    }
                    else if (max_f.GetFeatureType() == 1)// mstring, string, ordinal, categorical
                    {
                        int  k = r.Next(0, 2);
                        bool o = false;
                        if (k == 1)
                        {
                            o = true;
                        }
                        c.AddFeature(max_f.GetFeatureName(), max_f.GetFeatureType(), o, max_f.GetWeight(), max_f.GetIsKey(), max_f.GetIsIndex(), max_f.GetFeatureUnit());
                        continue;
                    }
                    else if (max_f.GetFeatureType() == 2)
                    {
                        int max = Convert.ToInt32(max_f.GetFeatureValue());
                        int min = Convert.ToInt32(min_f.GetFeatureValue());
                        x = r.Next(min, max + 1);
                    }
                    else
                    {
                        double max = Convert.ToDouble(max_f.GetFeatureValue());
                        double min = Convert.ToDouble(min_f.GetFeatureValue());
                        x = r.NextDouble(min, max + 0.05);
                        x = Math.Round(x, 1);
                    }

                    c.AddFeature(max_f.GetFeatureName(), max_f.GetFeatureType(), x, max_f.GetWeight(), max_f.GetIsKey(), max_f.GetIsIndex(), max_f.GetFeatureUnit());
                }
                exp_random_cases_nonstandrize.Add(c);
                //  i have to put general seetings for normalization
                exp_random_cases.Add(BestChoice.StandardizeCase(c, Max_Mean, Min_Sd, standrize_type));
            }
        }
Example #7
0
        private void button5_Click_1(object sender, EventArgs e)
        {
            statistics = new Statistics(mybestchoice.TableName, mybestchoice.CaseName);
            Case   Max_Mean = Db.get_Case_data(statistics.standrize_table, -2);
            Case   Min_Sd   = Db.get_Case_data(statistics.standrize_table, -3);
            string url      = "";

            System.IO.StreamReader reader          = null;
            OpenFileDialog         openFileDialog1 = new OpenFileDialog();
            ArrayList inputs = new ArrayList();

            // Set filter options and filter index.
            openFileDialog1.Filter      = "Text Files (.key)|*.key|All Files (*.*)|*.*";
            openFileDialog1.FilterIndex = 1;

            openFileDialog1.Multiselect = true;

            // Call the ShowDialog method to show the dialog box.
            DialogResult userClickedOK = openFileDialog1.ShowDialog();

            // Process input if the user clicked OK.
            if (userClickedOK.Equals(DialogResult.OK))
            {
                url    = openFileDialog1.FileName;
                reader = File.OpenText(url);
                if (reader == null)
                {
                    System.Console.WriteLine("file open failed " + url);
                    return;
                }

                for (int i = 0; i < dataGV_CaseEntries.Rows.Count; i++)
                {
                    string s = reader.ReadLine();
                    dataGV_CaseEntries.Rows[i].Cells["UserEntry"].Value = s;
                    inputs.Add(s);
                }
                reader.Close();
            }



            Case _problem = new Case(0, mybestchoice.CaseName, "");

            _problem.AddFeature("id", FeatureType.TYPE_FEATURE_INT, 0, 1.0, false, false, "num");


            for (int i = 0; i < dataGV_CaseEntries.Rows.Count - 1; i++)
            {
                if (dataGV_CaseEntries.Rows[i].Cells["UserEntry"].Value.ToString() != "".ToString())
                {
                    _problem.AddFeature(
                        dataGV_CaseEntries.Rows[i].Cells["FeatureName"].Value.ToString().Trim(),
                        Token.GetType(dataGV_CaseEntries.Rows[i].Cells["FeatureType"].Value.ToString().Trim()),
                        dataGV_CaseEntries.Rows[i].Cells["UserEntry"].Value.ToString().Trim(),
                        Convert.ToDouble(dataGV_CaseEntries.Rows[i].Cells["FeatureWeight"].Value.ToString().Trim()),
                        Convert.ToBoolean(dataGV_CaseEntries.Rows[i].Cells["FeatureKey"].Value.ToString().Trim()),
                        Convert.ToBoolean(dataGV_CaseEntries.Rows[i].Cells["FeatureIndex"].Value.ToString().Trim()),
                        dataGV_CaseEntries.Rows[i].Cells["FeatureUnit"].Value.ToString().Trim());
                }
            }

            _problem.AddFeature("cluster", FeatureType.TYPE_FEATURE_INT, 0, 1.0, false, false, "num");
            statistics.exp_random_cases.Add(BestChoice.StandardizeCase(_problem, Max_Mean, Min_Sd, statistics.standrize_type));
            statistics.exp_random_cases_nonstandrize.Add(_problem);
            mybestchoice.Problem          = statistics.exp_random_cases_nonstandrize[0];
            mybestchoice.StandrizeProblem = statistics.exp_random_cases[0];
        }
        private void button3_Click(object sender, EventArgs e)
        {
            var watch = System.Diagnostics.Stopwatch.StartNew();

            string Standrize_Type = "";

            if (rbtn_normalize.Checked)
            {
                Standrize_Type = "Q";
            }

            else if (rbtn_minmax.Checked)
            {
                Standrize_Type = "MN";
            }
            else
            {
                Standrize_Type = "none";
            }

            string Kmeans_Method = "";

            if (rbtn_kmeansPlus.Checked)
            {
                Kmeans_Method = "KPP";
            }

            else if (rbtn_simpleKmean.Checked)
            {
                Kmeans_Method = "K";
            }
            else
            {
                Kmeans_Method = "none";
            }

            string Clusters_num = txt_cluster.Text;


            mybestchoice = new BestChoice(ArrayCases, Standrize_Type, Kmeans_Method, Clusters_num);
            standardize_current_cases = mybestchoice.StandardizeData(ArrayCases);


            if (rbtn_simpleKmean.Checked)
            {
                // Kmeans kmeans = new Kmeans(int.Parse(txt_cluster.Text), standardize_current_cases);
                // kmeans.run();

                // Number of Attributes

                List <Cluster> AllClusters = new List <Cluster>();
                AllClusters.Add(null);
                Cluster myc    = new Cluster();
                int     Nd     = standardize_current_cases[0].GetFeatures().Count - 2;//except id , cluster
                Kmeans  kmeans = new Kmeans(1, standardize_current_cases);
                kmeans.run();
                myc.clusters = kmeans.clusters;
                foreach (double sk in kmeans.distances)
                {
                    myc.sk += sk;
                }
                myc.fk = 1;
                myc.k  = 1;
                AllClusters.Add(myc);
                for (int ik = 2; ik <= 5; ik++)//19
                {
                    myc    = new Cluster();
                    kmeans = new Kmeans(ik, standardize_current_cases);
                    kmeans.run();
                    myc.k        = ik;
                    myc.clusters = kmeans.clusters;
                    foreach (double sk in kmeans.distances)
                    {
                        myc.sk += sk;
                    }
                    if (AllClusters[ik - 1].sk == 0)
                    {
                        myc.fk = 1;
                    }
                    else
                    {
                        double ak = 1;
                        if (Nd > 1)
                        {
                            ak = Convert.ToDouble(kmeans.Ak(ik, Nd));
                        }
                        myc.fk = myc.sk / (ak * AllClusters[ik - 1].sk);
                    }
                    AllClusters.Add(myc);
                }


                double min = double.MaxValue;
                int    kk  = 0;
                for (int ik = 1; ik <= 19; ik++)
                {
                    if (AllClusters[ik].fk < min)
                    {
                        kk = AllClusters[ik].k; kmeans.clusters = AllClusters[ik].clusters; min = AllClusters[ik].fk;
                    }
                }
                watch.Stop();
                textBox1.Text    = min.ToString();
                txt_cluster.Text = kk.ToString();
                var elapsedMs = watch.ElapsedMilliseconds;
                label3.Text = "with clustring time  " + elapsedMs.ToString();
                int t = 0;
                int i = 0;
                dataGridView1.Rows.Clear();
                dataGridView1.Columns.Clear();
                for (int j = 0; j < ListCases[0].GetFeatures().Count; j++)
                {
                    Feature feature = (Feature)ListCases[0].GetFeatures()[j];
                    dataGridView1.Columns.Add(feature.GetFeatureName().ToString(), feature.GetFeatureName().ToString());
                }

                dataGridView2.Rows.Clear();
                dataGridView2.Columns.Clear();
                dataGridView1.Rows.Add(ArrayCases.Count);


                dataGridView2.Columns.Add("cluster", "cluster");
                dataGridView2.Columns.Add("count", "count");
                dataGridView2.Rows.Add(kmeans.clusters.Count);

                foreach (List <Case> list in kmeans.clusters) // for each cluster, define a new centroid
                {
                    kmeans.centroids[t].GetFeature("id").SetFeatureValue(t);
                    standardize_current_cases.Add(kmeans.centroids[t]);
                    dataGridView2.Rows[t].Cells[0].Value = t.ToString();
                    dataGridView2.Rows[t].Cells[1].Value = list.Count;
                    mybestchoice.Cost_Function          += kmeans.distances[t];
                    foreach (Case c in list) // Determine the poit on clusters
                    {
                        Case realcase = ListCases.Find(
                            delegate(Case ca)
                        {
                            return(ca.GetFeature("id").GetFeatureValue() == c.GetFeature("id").GetFeatureValue());
                        }
                            );
                        realcase.GetFeature("cluster").SetFeatureValue(t);
                        c.GetFeature("cluster").SetFeatureValue(t);
                        for (int j = 0; j < c.GetFeatures().Count; j++)
                        {
                            Feature f = (Feature)realcase.GetFeatures()[j];
                            dataGridView1.Rows[i].Cells[j].Value = f.GetFeatureValue();
                        }
                        i++;
                    }
                    t++;
                }
            }
            else if (rbtn_kmeansPlus.Checked)
            {
                KmeansPlus mykp = new KmeansPlus();
                KmeansPlus.PointClusters        myclusters;
                List <KmeansPlus.PointClusters> Allmyclusters = new List <KmeansPlus.PointClusters>();
                // myclusters = mykp.GetKMeansPP(standardize_current_cases,int.Parse( Clusters_num));
                double min_fk = Double.MaxValue;
                int    min_i  = 0;
                for (int j = 0; j < 100; j++)
                {
                    myclusters = new KmeansPlus.PointClusters();
                    myclusters = mykp.GetKMeansPP_K(standardize_current_cases);
                    Allmyclusters.Add(myclusters);
                    if (myclusters.Fk < min_fk)
                    {
                        min_i = j;
                    }
                }
                myclusters = Allmyclusters[min_i];
                // KmeansPlus mykp = new KmeansPlus();
                // KmeansPlus.PointClusters myclusters =new KmeansPlus.PointClusters();;
                //  myclusters = mykp.GetKMeansPP_K(standardize_current_cases);
                textBox1.Text    = myclusters.Fk.ToString();
                txt_cluster.Text = myclusters.PC.Count.ToString();
                watch.Stop();
                var elapsedMs = watch.ElapsedMilliseconds;
                label3.Text = "with clustring time  " + elapsedMs.ToString();

                foreach (Case centroid in myclusters.PC.Keys)
                {
                    standardize_current_cases.Add(centroid);
                }


                // intialize db grids

                int t            = 0;
                int i            = 0;
                int countcluster = myclusters.PC.Count;
                dataGridView1.Rows.Clear();
                dataGridView1.Columns.Clear();
                for (int j = 0; j < ListCases[0].GetFeatures().Count; j++)
                {
                    Feature feature = (Feature)ListCases[0].GetFeatures()[j];
                    dataGridView1.Columns.Add(feature.GetFeatureName().ToString(), feature.GetFeatureName().ToString());
                }

                dataGridView2.Rows.Clear();
                dataGridView2.Columns.Clear();
                dataGridView1.Rows.Add(ArrayCases.Count);


                dataGridView2.Columns.Add("cluster", "cluster");
                dataGridView2.Columns.Add("count", "count");
                dataGridView2.Rows.Add(countcluster);

                foreach (List <Case> cluster in myclusters.PC.Values)
                {
                    dataGridView2.Rows[t].Cells[0].Value = t.ToString();
                    dataGridView2.Rows[t].Cells[1].Value = cluster.Count;
                    foreach (Case c in cluster)
                    {
                        Case realcase = ListCases.Find(
                            delegate(Case ca)
                        {
                            return(ca.GetFeature("id").GetFeatureValue() == c.GetFeature("id").GetFeatureValue());
                        }
                            );
                        realcase.GetFeature("cluster").SetFeatureValue(t);
                        c.GetFeature("cluster").SetFeatureValue(t);
                        for (int j = 0; j < c.GetFeatures().Count; j++)
                        {
                            Feature f = (Feature)realcase.GetFeatures()[j];
                            dataGridView1.Rows[i].Cells[j].Value = f.GetFeatureValue();
                        }
                        i++;
                    } // end feautres
                    t++;
                }     // end clusters
            }         // end if
            else
            if (rbtn_nonekmeans.Checked)
            {
                dataGridView1.DataSource = Db.get_table_contetnt(mybestchoice.TableName);
            }

            // for sorting
            comboBox1.Items.Clear();
            for (int i = 0; i < dataGridView1.Columns.Count; i++)
            {
                comboBox1.Items.Add(dataGridView1.Columns[i].HeaderText);
            }
            comboBox1.Text = "id";


            dataGridView1.AutoSizeColumnsMode =
                DataGridViewAutoSizeColumnsMode.AllCells;
        }