Example #1
0
 private void PopulateDgv(List <Gejala> rule, Individu terbaik)
 {
     for (int i = 0; i < rule.Count; i++)
     {
         double[] nilaiDensity = terbaik.find(rule[i].GetKodeGejala());
         this.beliefDgv.Rows.Add(rule[i].GetKodeGejala(), nilaiDensity[0], nilaiDensity[1], nilaiDensity[2]);
     }
 }
Example #2
0
        public CrossOver(List <Individu> individu, double crossrate, int popSize)
        {
            double offspring = crossrate * (double)popSize;

            offspring = Math.Floor(offspring);

            SqliteDatabase db = new SqliteDatabase();

            DataTable dt = db.query("SELECT * FROM gejala");

            rule = new List <Gejala>();

            foreach (DataRow row in dt.Rows)
            {
                Gejala   g = new Gejala();
                double[] p = new double[3];
                g.SetKodeGejala(Convert.ToString(row["kode_gejala"]));
                g.SetNamaGejala(Convert.ToString(row["nama_gejala"]));
                p[0] = Convert.ToDouble(row["pneumonia"]);
                p[1] = Convert.ToDouble(row["bronkitis"]);
                p[2] = Convert.ToDouble(row["urti"]);
                g.SetPenyakit(p);
                rule.Add(g);
            }

            Density de = new Density(rule);

            de.setMinMax(-0.25, 0.25);
            Individu alpha = new Individu(de.GetDensity());

            crossover = new List <Individu>();

            int[] randomIndividu = generateNumber(individu.Count);
            int   offset         = 0;

            while (crossover.Count < offspring)
            {
                List <Gejala> c = new List <Gejala>();
                c = Cross(individu[offset], individu[offset + 1], alpha);
                Individu v = new Individu(c);
                crossover.Add(v);

                if (crossover.Count < offspring)
                {
                    c = Cross(individu[offset + 1], individu[offset], alpha);
                    Individu v2 = new Individu(c);
                    crossover.Add(v2);
                    offset = offset + 2;
                }
            }
        }
Example #3
0
        public CrossOver(List<Individu> individu, double crossrate, int popSize)
        {
            double offspring = crossrate * (double) popSize;
            offspring = Math.Floor(offspring);

            SqliteDatabase db = new SqliteDatabase();

            DataTable dt = db.query("SELECT * FROM gejala");

            rule = new List<Gejala>();

            foreach (DataRow row in dt.Rows)
            {
                Gejala g = new Gejala();
                double[] p = new double[3];
                g.SetKodeGejala(Convert.ToString(row["kode_gejala"]));
                g.SetNamaGejala(Convert.ToString(row["nama_gejala"]));
                p[0] = Convert.ToDouble(row["pneumonia"]);
                p[1] = Convert.ToDouble(row["bronkitis"]);
                p[2] = Convert.ToDouble(row["urti"]);
                g.SetPenyakit(p);
                rule.Add(g);
            }

            Density de = new Density(rule);
            de.setMinMax(-0.25, 0.25);
            Individu alpha = new Individu(de.GetDensity());

            crossover = new List<Individu>();

            int[] randomIndividu = generateNumber(individu.Count);
            int offset = 0;
            while (crossover.Count < offspring)
            {
                List<Gejala> c = new List<Gejala>();
                c = Cross(individu[offset], individu[offset + 1], alpha);
                Individu v = new Individu(c);
                crossover.Add(v);

                if (crossover.Count < offspring)
                {
                    c = Cross(individu[offset + 1], individu[offset], alpha);
                    Individu v2 = new Individu(c);
                    crossover.Add(v2);
                    offset = offset + 2;
                }    
            }
            
        }
Example #4
0
        private void Diagnose(List <Kasus> listKasus)
        {
            DataTable     dota = db.query("SELECT * FROM individu");
            List <Gejala> iv   = new List <Gejala>();

            foreach (DataRow dr in dota.Rows)
            {
                Gejala g = new Gejala();
                g.SetKodeGejala(Convert.ToString(dr["kode_gejala"]));
                double[] p = new double[3];
                p[0] = Convert.ToDouble(dr["pneumonia"]);
                p[1] = Convert.ToDouble(dr["bronkitis"]);
                p[2] = Convert.ToDouble(dr["urti"]);
                g.SetPenyakit(p);
                iv.Add(g);
            }

            Individu       iu         = new Individu(iv);
            DempsterShafer ds         = new DempsterShafer(iu, listKasus);
            List <Mass>    hasilAkhir = ds.GetMFinal();
            int            indeksMaks = 0;
            double         terbesar   = 0;

            for (int x = 0; x < hasilAkhir.Count; x++)
            {
                if (terbesar < hasilAkhir[x].GetDensity())
                {
                    terbesar   = hasilAkhir[x].GetDensity();
                    indeksMaks = x;
                }
            }

            List <string> d            = hasilAkhir[indeksMaks].GetPenyakit();
            string        namaPenyakit = "";

            foreach (string s in d)
            {
                namaPenyakit += GetNamaPenyakit(s) + "\n";
            }
            labelNamaPenyakit.Text = namaPenyakit;

            string nilaiBelief = Convert.ToString(terbesar);

            labelNilaiBelief.Text = nilaiBelief;
        }
Example #5
0
File: Mutasi.cs Project: wlwtvr/Po
        public Mutasi(List <Individu> individu, double mutasiRate, int popSize, double maxmin, List <Gejala> rule)
        {
            this.rule = rule;
            double offspring = mutasiRate * (double)popSize;

            offspring = Math.Floor(offspring);

            List <Gejala> g = new List <Gejala>();

            int randomIndividu = GetRandomIndex(individu.Count);
            int randomGejala   = GetRandomIndex(rule.Count);
            int randomPenyakit = GetRandomIndex(3);

            double r = GetRandomNumber(-0.1, 0.1);

            double[] gen = individu[randomIndividu].find(rule[randomGejala].GetKodeGejala());
            gen[randomPenyakit] = gen[randomPenyakit] + (r * maxmin);

            for (int i = 0; i < rule.Count; i++)
            {
                Gejala gg = new Gejala();
                gg.SetKodeGejala(rule[i].GetKodeGejala());
                if (i == randomGejala)
                {
                    gg.SetPenyakit(gen);
                }
                else
                {
                    gg.SetPenyakit(individu[randomIndividu].find(rule[i].GetKodeGejala()));
                }

                g.Add(gg);
            }

            hasilMutasi = new Individu(g);
        }
Example #6
0
        public Mutasi(List<Individu> individu, double mutasiRate, int popSize, double maxmin, List<Gejala> rule)
        {
            this.rule = rule;
            double offspring = mutasiRate * (double)popSize;
            offspring = Math.Floor(offspring);

            List<Gejala> g = new List<Gejala>();

            int randomIndividu = GetRandomIndex(individu.Count);
            int randomGejala = GetRandomIndex(rule.Count);
            int randomPenyakit = GetRandomIndex(3);

            double r = GetRandomNumber(-0.1, 0.1);
            
            double[] gen = individu[randomIndividu].find(rule[randomGejala].GetKodeGejala());
            gen[randomPenyakit] = gen[randomPenyakit] + (r * maxmin);

            for (int i = 0; i < rule.Count; i++)
            {
                Gejala gg = new Gejala();
                gg.SetKodeGejala(rule[i].GetKodeGejala());
                if (i == randomGejala)
                {
                    gg.SetPenyakit(gen);
                }
                else
                {
                    gg.SetPenyakit(individu[randomIndividu].find(rule[i].GetKodeGejala()));
                }

                g.Add(gg);
            }
            
            hasilMutasi = new Individu(g);

        }
Example #7
0
        private List <Gejala> Cross(Individu a, Individu b, Individu alpha)
        {
            List <Gejala> hasilKross = new List <Gejala>();

            for (int i = 0; i < rule.Count; i++)
            {
                Gejala   g        = new Gejala();
                double[] aDen     = a.find(rule[i].GetKodeGejala());
                double[] bDen     = b.find(rule[i].GetKodeGejala());
                double[] alphaden = alpha.find(rule[i].GetKodeGejala());
                double[] hasil    = new double[3];
                for (int j = 0; j < 3; j++)
                {
                    hasil[j] = aDen[j] + alphaden[j] * (bDen[j] - aDen[j]);
                }

                g.SetKodeGejala(rule[i].GetKodeGejala());
                g.SetPenyakit(hasil);

                hasilKross.Add(g);
            }

            return(hasilKross);
        }
Example #8
0
        public Form1()
        {
            InitializeComponent();
            db = new SqliteDatabase();
            DataTable dt = new DataTable();
            dt = db.query("SELECT * FROM gejala");

            List<Gejala> rule = new List<Gejala>();

            double[,] cek = {
                {0.534, 0.875, 0.530},
                {0.238, 0.374, 0.573},
                {0.468,	0,	0},
                {0.375,	0.583, 0.384},
                {0,	0.347, 0.474},
                {0.472,	0.582, 0},
                {0,	0.285, 0.372},
                {0,	0.514, 0.572},
                {0.372,	0.512, 0},
                {0.582,	0, 0},
                {0,	0.352, 0},
                {0,	0,	0.235},
                {0.682,	0.235, 0},
                {0,	0.523, 0},
                {0.5325, 0,	0},
                {0.5244, 0.483,	0},
                {0,	0.602, 0.662}
            };

            List<double[]> c*k = new List<double[]>();
            for (int z = 0; z < cek.GetLength(0); z++)
            {
                double[] fak = new double[3];
                fak[0] = cek[z, 0];
                fak[1] = cek[z, 1];
                fak[2] = cek[z, 2];
                c*k.Add(fak);
            }


                foreach (DataRow row in dt.Rows)
                {
                    Gejala g = new Gejala();
                    double[] p = new double[3];
                    g.SetKodeGejala(Convert.ToString(row["kode_gejala"]));
                    g.SetNamaGejala(Convert.ToString(row["nama_gejala"]));
                    p[0] = Convert.ToDouble(row["pneumonia"]);
                    p[1] = Convert.ToDouble(row["bronkitis"]);
                    p[2] = Convert.ToDouble(row["urti"]);
                    g.SetPenyakit(p);
                    rule.Add(g);
                }

            List<Gejala> pesatu = new List<Gejala>();

            for (int i = 0; i < rule.Count; i++)
            {
                Gejala h = new Gejala();
                h.SetKodeGejala(rule[i].GetKodeGejala());
                h.SetPenyakit(c*k[i]);
                pesatu.Add(h);
            }

            de = new Density(rule);
            p1 = new Individu(pesatu);
            p2 = new Individu(de.GetDensity());
        }
Example #9
0
        public Form1()
        {
            InitializeComponent();
            db = new SqliteDatabase();
            DataTable dt = new DataTable();

            dt = db.query("SELECT * FROM gejala");

            List <Gejala> rule = new List <Gejala>();

            double[,] cek =
            {
                {  0.534, 0.875, 0.530 },
                {  0.238, 0.374, 0.573 },
                {  0.468,     0,     0 },
                {  0.375, 0.583, 0.384 },
                {      0, 0.347, 0.474 },
                {  0.472, 0.582,     0 },
                {      0, 0.285, 0.372 },
                {      0, 0.514, 0.572 },
                {  0.372, 0.512,     0 },
                {  0.582,     0,     0 },
                {      0, 0.352,     0 },
                {      0,     0, 0.235 },
                {  0.682, 0.235,     0 },
                {      0, 0.523,     0 },
                { 0.5325,     0,     0 },
                { 0.5244, 0.483,     0 },
                {      0, 0.602, 0.662 }
            };

            List <double[]> c*k = new List <double[]>();

            for (int z = 0; z < cek.GetLength(0); z++)
            {
                double[] fak = new double[3];
                fak[0] = cek[z, 0];
                fak[1] = cek[z, 1];
                fak[2] = cek[z, 2];
                c*k.Add(fak);
            }


            foreach (DataRow row in dt.Rows)
            {
                Gejala   g = new Gejala();
                double[] p = new double[3];
                g.SetKodeGejala(Convert.ToString(row["kode_gejala"]));
                g.SetNamaGejala(Convert.ToString(row["nama_gejala"]));
                p[0] = Convert.ToDouble(row["pneumonia"]);
                p[1] = Convert.ToDouble(row["bronkitis"]);
                p[2] = Convert.ToDouble(row["urti"]);
                g.SetPenyakit(p);
                rule.Add(g);
            }

            List <Gejala> pesatu = new List <Gejala>();

            for (int i = 0; i < rule.Count; i++)
            {
                Gejala h = new Gejala();
                h.SetKodeGejala(rule[i].GetKodeGejala());
                h.SetPenyakit(c*k[i]);
                pesatu.Add(h);
            }

            de = new Density(rule);
            p1 = new Individu(pesatu);
            p2 = new Individu(de.GetDensity());
        }
Example #10
0
        private void Diagnose(List<Kasus> listKasus)
        {
            DataTable dota = db.query("SELECT * FROM individu");
            List<Gejala> iv = new List<Gejala>();
            foreach (DataRow dr in dota.Rows)
            {
                Gejala g = new Gejala();
                g.SetKodeGejala(Convert.ToString(dr["kode_gejala"]));
                double[] p = new double[3];
                p[0] = Convert.ToDouble(dr["pneumonia"]);
                p[1] = Convert.ToDouble(dr["bronkitis"]);
                p[2] = Convert.ToDouble(dr["urti"]);
                g.SetPenyakit(p);
                iv.Add(g);
            }

            Individu iu = new Individu(iv);
            DempsterShafer ds = new DempsterShafer(iu, listKasus);
            List<Mass> hasilAkhir = ds.GetMFinal();
            int indeksMaks = 0;
            double terbesar = 0;

            for (int x = 0; x < hasilAkhir.Count; x++)
            {
                if (terbesar < hasilAkhir[x].GetDensity())
                {
                    terbesar = hasilAkhir[x].GetDensity();
                    indeksMaks = x;
                }
            }

            List<string> d = hasilAkhir[indeksMaks].GetPenyakit();
            string namaPenyakit = "";
            foreach (string s in d)
            {
                namaPenyakit += GetNamaPenyakit(s) + "\n";
            }
            labelNamaPenyakit.Text = namaPenyakit;

            string nilaiBelief = Convert.ToString(terbesar);
            labelNilaiBelief.Text = nilaiBelief;
            
        }
Example #11
0
        public DempsterShafer(Individu individu, List <Kasus> data)
        {
            this.individu = individu;
            this.data     = data;

            for (int i = 0; i < data.Count; i++)
            {
                Console.Write("Kasus " + (i + 1) + " | ");
                string[]            gejala   = data[i].GetGejala();
                int                 jumlahM  = (gejala.Length * 2) - 1;
                List <List <Mass> > Masses   = new List <List <Mass> >();
                int                 mCounter = 0;

                for (int j = 0; j < gejala.Length; j++)
                {
                    double[] nilaiGejala = individu.find(gejala[j]);
                    double   max         = GetMaximumDensity(nilaiGejala); // max jadi nilai m
                    if (max == 1)
                    {
                        Mass m = new Mass();
                        m.SetPenyakit(GetKodePenyakit(nilaiGejala));
                        m.SetDensity(max);

                        string[] indikasi = data[i].GetDiagnosa();

                        int ada = 0;
                        foreach (string idk in indikasi)
                        {
                            if (m.GetPenyakit().Contains(idk))
                            {
                                ada++;
                            }
                        }
                        if (ada != 0)
                        {
                            counter++;
                        }
                        break;
                    }
                    //Console.WriteLine(gejala[j] + " " + max);
                    List <string> sTheta = new List <string>()
                    {
                        "theta"
                    };
                    if (j == 0)   // gejala pertama
                    {
                        List <Mass> M = new List <Mass>();

                        Mass m = new Mass();
                        m.SetPenyakit(GetKodePenyakit(nilaiGejala));
                        m.SetDensity(max);
                        M.Add(m);

                        Mass mTheta = new Mass();
                        mTheta.SetPenyakit(sTheta);
                        mTheta.SetDensity(GetTheta(max));

                        M.Add(mTheta);

                        Masses.Add(M); // m1
                        //mCounter = 0;
                    }
                    else     // gejala ke-2 dst
                    //Console.WriteLine("Gejala ke- " + gejala[j]);

                    {
                        List <Mass> M = new List <Mass>();

                        Mass m = new Mass();
                        m.SetPenyakit(GetKodePenyakit(nilaiGejala));
                        m.SetDensity(max);
                        M.Add(m);

                        //DebugString(m.GetPenyakit());

                        Mass mTheta = new Mass();
                        mTheta.SetPenyakit(sTheta);
                        mTheta.SetDensity(GetTheta(max));

                        M.Add(mTheta);

                        Masses.Add(M);
                        mCounter++;

                        List <Mass> matriksKombinasi = new List <Mass>();

                        matriksKombinasi = CombineMass(Masses[mCounter - 1], Masses[mCounter]);
                        List <Mass> mBaru = GetMassBaru(matriksKombinasi);

                        Masses.Add(mBaru);
                        mCounter++;
                        //Console.WriteLine(mCounter + " " + mBaru[mBaru.Count-1].GetDensity());
                    }
                }
                // ambil dari m yang terakhir, nilai yg terbesar
                // bandingkan diagnosa pakar dg hasil (intersect)
                // count+1 kalo ada;

                mFinal = Masses[mCounter];
                int    indeksMaks = 0;
                double terbesar   = 0;

                for (int x = 0; x < mFinal.Count; x++)
                {
                    if (terbesar < mFinal[x].GetDensity())
                    {
                        terbesar   = mFinal[x].GetDensity();
                        indeksMaks = x;
                    }
                }

                List <string> d = mFinal[indeksMaks].GetPenyakit();

                DebugString(d);
                Console.Write(" | Nilai Belief : " + terbesar);
                Console.WriteLine();

                string[] indi = data[i].GetDiagnosa();
                int      a    = 0;
                foreach (string idk in indi)
                {
                    if (d.Contains(idk))
                    {
                        a++;
                    }
                }
                if (a != 0)
                {
                    counter++;
                }
                //Console.WriteLine();
            }
        }
Example #12
0
        public DempsterShafer(Individu individu, List<Kasus> data)
        {
            this.individu = individu;
            this.data = data;

            for (int i = 0; i < data.Count; i++)
            {
                Console.Write("Kasus " + (i + 1) + " | ");
                string[] gejala = data[i].GetGejala();
                int jumlahM = (gejala.Length*2)-1;
                List<List<Mass>> Masses = new List<List<Mass>>();
                int mCounter = 0;

                for (int j = 0; j < gejala.Length; j++)
                {
                    double[] nilaiGejala = individu.find(gejala[j]);
                    double max = GetMaximumDensity(nilaiGejala); // max jadi nilai m  
                    if (max == 1)
                    {
                        Mass m = new Mass();
                        m.SetPenyakit(GetKodePenyakit(nilaiGejala));
                        m.SetDensity(max);

                        string[] indikasi = data[i].GetDiagnosa();

                        int ada = 0;
                        foreach (string idk in indikasi)
                        {
                            if (m.GetPenyakit().Contains(idk))
                            {
                                ada++;
                            }
                        }
                        if (ada != 0)
                        {
                            counter++;
                        }
                        break;
                    }
                    //Console.WriteLine(gejala[j] + " " + max);
                    List<string> sTheta = new List<string>() { "theta" };
                    if (j == 0) { // gejala pertama 
                        List<Mass> M = new List<Mass>();

                        Mass m = new Mass();
                        m.SetPenyakit(GetKodePenyakit(nilaiGejala));
                        m.SetDensity(max);
                        M.Add(m);
                        
                        Mass mTheta = new Mass();
                        mTheta.SetPenyakit(sTheta);
                        mTheta.SetDensity(GetTheta(max));

                        M.Add(mTheta);

                        Masses.Add(M); // m1
                        //mCounter = 0;
                    } else { // gejala ke-2 dst
                        //Console.WriteLine("Gejala ke- " + gejala[j]);

                        List<Mass> M = new List<Mass>();

                        Mass m = new Mass();
                        m.SetPenyakit(GetKodePenyakit(nilaiGejala));
                        m.SetDensity(max);
                        M.Add(m);

                        //DebugString(m.GetPenyakit());

                        Mass mTheta = new Mass();
                        mTheta.SetPenyakit(sTheta);
                        mTheta.SetDensity(GetTheta(max));

                        M.Add(mTheta);

                        Masses.Add(M);
                        mCounter++;

                        List<Mass> matriksKombinasi = new List<Mass>();

                        matriksKombinasi = CombineMass(Masses[mCounter - 1], Masses[mCounter]);
                        List<Mass> mBaru = GetMassBaru(matriksKombinasi);

                        Masses.Add(mBaru);
                        mCounter++;
                        //Console.WriteLine(mCounter + " " + mBaru[mBaru.Count-1].GetDensity());
                        
                    }
                    
                }
                // ambil dari m yang terakhir, nilai yg terbesar
                // bandingkan diagnosa pakar dg hasil (intersect)
                // count+1 kalo ada;

                mFinal = Masses[mCounter];
                int indeksMaks = 0;
                double terbesar = 0;
                                
                for (int x = 0; x < mFinal.Count; x++)
                {
                    if (terbesar < mFinal[x].GetDensity())
                    {
                        terbesar = mFinal[x].GetDensity();
                        indeksMaks = x;
                    }
                }

                List<string> d = mFinal[indeksMaks].GetPenyakit();

                DebugString(d);
                Console.Write(" | Nilai Belief : " + terbesar);
                Console.WriteLine();

                string[] indi = data[i].GetDiagnosa();
                int a = 0;
                foreach (string idk in indi)
                {
                    if (d.Contains(idk))
                    {
                        a++;
                    }
                }
                if (a != 0)
                {
                    counter++;
                }
                //Console.WriteLine();
            }
        }
Example #13
0
        private void prosesBtn_Click(object sender, EventArgs e)
        {
            beliefDgv.Rows.Clear();
            individuDgv.Rows.Clear();
            int popSize = Convert.ToInt32(popSizeBox.Text);
            int iterasi = Convert.ToInt32(iterationBox.Text);
            double cr = Convert.ToDouble(crBox.Text);
            double mr = Convert.ToDouble(mrBox.Text);

            DataTable dt = db.query("SELECT * FROM gejala");

            rule = new List<Gejala>();

            foreach (DataRow row in dt.Rows)
            {
                Gejala g = new Gejala();
                double[] p = new double[3];
                g.SetKodeGejala(Convert.ToString(row["kode_gejala"]));
                g.SetNamaGejala(Convert.ToString(row["nama_gejala"]));
                p[0] = Convert.ToDouble(row["pneumonia"]);
                p[1] = Convert.ToDouble(row["bronkitis"]);
                p[2] = Convert.ToDouble(row["urti"]);
                g.SetPenyakit(p);
                rule.Add(g);
            }

            DataTable ks = db.query("SELECT * FROM kasus");

            List<Kasus> listKasus = new List<Kasus>();
            foreach (DataRow r in ks.Rows)
            {
                string s = Convert.ToString(r["gejala"]);
                string[] gejala = Array.ConvertAll(s.Split(','), ge => ge.Trim());
                string d = Convert.ToString(r["diagnosa"]);
                string[] diagnosa = Array.ConvertAll(d.Split(','), di => di.Trim());
                Kasus k = new Kasus();
                k.SetGejala(gejala);
                k.SetDiagnosa(diagnosa);
                listKasus.Add(k);
            }
            
            de = new Density(rule);
            iBaru = new List<Individu>();
            List<int> index = new List<int>();
            for (int iter = 0; iter < iterasi; iter++)
            {
                // Init
                List<Individu> P;
                Console.WriteLine("Iterasi ke - " + (iter + 1) + " ---------------------------------");
                if (iter == 0)
                {
                    P = new List<Individu>();
                    Console.WriteLine("-- Dempster Shafer Individu --");
                    for (int i = 0; i < popSize; i++)
                    {
                        Console.WriteLine(">> Individu ke - " + (i + 1));
                        Individu inv = new Individu(de.GetDensity());
                        DempsterShafer ds = new DempsterShafer(inv, listKasus);
                        inv.SetFitness(ds.GetFitness());
                        P.Add(inv);
                    }
                }
                else
                {
                    P = iBaru;
                }
                
                List<Individu> C = new List<Individu>();
                CrossOver co = new CrossOver(P, cr, popSize);
                C = co.GetCrossover();

                Console.WriteLine("-- Dempster Shafer Crossover --");
                for (int j = 0; j < C.Count; j++)
                {
                    Console.WriteLine(">> Crossover ke - " + (j + 1));
                    DempsterShafer ds = new DempsterShafer(C[j], listKasus);
                    C[j].SetFitness(ds.GetFitness());
                }

                double minimum = C[0].GetFitness();
                double maximum = 0;
                for (int k = 0; k < C.Count; k++)
                {
                    if (minimum > C[k].GetFitness()) minimum = C[k].GetFitness();
                    if (maximum < C[k].GetFitness()) maximum = C[k].GetFitness();
                }

                double maxmin = maximum - minimum;

                Console.WriteLine("-- Mutasi, Dempster Shafer Mutasi --");
                Mutasi mts = new Mutasi(P, mr, popSize, maxmin, rule);
                C.Add(mts.GetMutasi());
                DempsterShafer dss = new DempsterShafer(C[C.Count - 1], listKasus);
                C[C.Count - 1].SetFitness(dss.GetFitness());

                Console.WriteLine("-- Nilai Fitness Akhir --");
                Selection slct = new Selection(P, C, popSize);
                iBaru = slct.GetITerbaik();
                index = slct.GetIndex();
            }
            PopulateDgv(rule, iBaru[0]);
            double akurasi = iBaru[0].GetFitness() * 100; 
            labelAkurasi.Text = akurasi.ToString() + " %";

            for (int i = 0; i < iBaru.Count; i++)
            {
                int idIndividu = index[i]+1;
                string kode;
                if ( idIndividu > popSize)
                {
                    idIndividu -= popSize;
                    kode = "C" + idIndividu;
                }
                else
                {
                    kode = "P" + idIndividu;
                }
                this.individuDgv.Rows.Add(kode, iBaru[i].GetFitness());
            }

            MessageBox.Show("Proses Perhitungan Selesai");
        }
Example #14
0
 private void PopulateDgv(List<Gejala> rule, Individu terbaik)
 {
     for (int i = 0; i < rule.Count; i++)
     {
         double[] nilaiDensity = terbaik.find(rule[i].GetKodeGejala());
         this.beliefDgv.Rows.Add(rule[i].GetKodeGejala(), nilaiDensity[0], nilaiDensity[1], nilaiDensity[2]);
     }
 }
Example #15
0
        private List<Gejala> Cross(Individu a, Individu b, Individu alpha)
        {
            List<Gejala> hasilKross = new List<Gejala>();
            for (int i = 0; i < rule.Count; i++)
            {
                Gejala g = new Gejala();
                double[] aDen = a.find(rule[i].GetKodeGejala());
                double[] bDen = b.find(rule[i].GetKodeGejala());
                double[] alphaden = alpha.find(rule[i].GetKodeGejala());
                double[] hasil = new double[3];
                for (int j = 0; j < 3; j++)
                {
                    hasil[j] = aDen[j] + alphaden[j] * (bDen[j] - aDen[j]);
                }

                g.SetKodeGejala(rule[i].GetKodeGejala());
                g.SetPenyakit(hasil);

                hasilKross.Add(g);
            }

            return hasilKross;
        }
Example #16
0
        private void prosesBtn_Click(object sender, EventArgs e)
        {
            beliefDgv.Rows.Clear();
            individuDgv.Rows.Clear();
            int    popSize = Convert.ToInt32(popSizeBox.Text);
            int    iterasi = Convert.ToInt32(iterationBox.Text);
            double cr      = Convert.ToDouble(crBox.Text);
            double mr      = Convert.ToDouble(mrBox.Text);

            DataTable dt = db.query("SELECT * FROM gejala");

            rule = new List <Gejala>();

            foreach (DataRow row in dt.Rows)
            {
                Gejala   g = new Gejala();
                double[] p = new double[3];
                g.SetKodeGejala(Convert.ToString(row["kode_gejala"]));
                g.SetNamaGejala(Convert.ToString(row["nama_gejala"]));
                p[0] = Convert.ToDouble(row["pneumonia"]);
                p[1] = Convert.ToDouble(row["bronkitis"]);
                p[2] = Convert.ToDouble(row["urti"]);
                g.SetPenyakit(p);
                rule.Add(g);
            }

            DataTable ks = db.query("SELECT * FROM kasus");

            List <Kasus> listKasus = new List <Kasus>();

            foreach (DataRow r in ks.Rows)
            {
                string   s        = Convert.ToString(r["gejala"]);
                string[] gejala   = Array.ConvertAll(s.Split(','), ge => ge.Trim());
                string   d        = Convert.ToString(r["diagnosa"]);
                string[] diagnosa = Array.ConvertAll(d.Split(','), di => di.Trim());
                Kasus    k        = new Kasus();
                k.SetGejala(gejala);
                k.SetDiagnosa(diagnosa);
                listKasus.Add(k);
            }

            de    = new Density(rule);
            iBaru = new List <Individu>();
            List <int> index = new List <int>();

            for (int iter = 0; iter < iterasi; iter++)
            {
                // Init
                List <Individu> P;
                Console.WriteLine("Iterasi ke - " + (iter + 1) + " ---------------------------------");
                if (iter == 0)
                {
                    P = new List <Individu>();
                    Console.WriteLine("-- Dempster Shafer Individu --");
                    for (int i = 0; i < popSize; i++)
                    {
                        Console.WriteLine(">> Individu ke - " + (i + 1));
                        Individu       inv = new Individu(de.GetDensity());
                        DempsterShafer ds  = new DempsterShafer(inv, listKasus);
                        inv.SetFitness(ds.GetFitness());
                        P.Add(inv);
                    }
                }
                else
                {
                    P = iBaru;
                }

                List <Individu> C  = new List <Individu>();
                CrossOver       co = new CrossOver(P, cr, popSize);
                C = co.GetCrossover();

                Console.WriteLine("-- Dempster Shafer Crossover --");
                for (int j = 0; j < C.Count; j++)
                {
                    Console.WriteLine(">> Crossover ke - " + (j + 1));
                    DempsterShafer ds = new DempsterShafer(C[j], listKasus);
                    C[j].SetFitness(ds.GetFitness());
                }

                double minimum = C[0].GetFitness();
                double maximum = 0;
                for (int k = 0; k < C.Count; k++)
                {
                    if (minimum > C[k].GetFitness())
                    {
                        minimum = C[k].GetFitness();
                    }
                    if (maximum < C[k].GetFitness())
                    {
                        maximum = C[k].GetFitness();
                    }
                }

                double maxmin = maximum - minimum;

                Console.WriteLine("-- Mutasi, Dempster Shafer Mutasi --");
                Mutasi mts = new Mutasi(P, mr, popSize, maxmin, rule);
                C.Add(mts.GetMutasi());
                DempsterShafer dss = new DempsterShafer(C[C.Count - 1], listKasus);
                C[C.Count - 1].SetFitness(dss.GetFitness());

                Console.WriteLine("-- Nilai Fitness Akhir --");
                Selection slct = new Selection(P, C, popSize);
                iBaru = slct.GetITerbaik();
                index = slct.GetIndex();
            }
            PopulateDgv(rule, iBaru[0]);
            double akurasi = iBaru[0].GetFitness() * 100;

            labelAkurasi.Text = akurasi.ToString() + " %";

            for (int i = 0; i < iBaru.Count; i++)
            {
                int    idIndividu = index[i] + 1;
                string kode;
                if (idIndividu > popSize)
                {
                    idIndividu -= popSize;
                    kode        = "C" + idIndividu;
                }
                else
                {
                    kode = "P" + idIndividu;
                }
                this.individuDgv.Rows.Add(kode, iBaru[i].GetFitness());
            }

            MessageBox.Show("Proses Perhitungan Selesai");
        }