Yapay Zeka Karar Agaclari Uygulamasi [C#]
- Sevdanur GENC

- Jan 28, 2013
- 9 min read
Bu makale iceriginde Suleyman Demirel Universitesi – Bilgisayar Muhendisligi bolumu’nun Yapay Zeka dersi icin gelistirilen Karar Agaci uygulamasinin .Net’de C# programlama dili ile birlikte kullanilarak yapilmis bir ornegini paylasiyor olacagim.
Simdi dilerseniz uygulamanin tasarim ve kod kisimlarina gecelim. Visual Studio’nun Windows Forms Application proje arayuzunde hazirliyoruz.
Pojo.Cs Kaynak Kodlari ;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace KararAgaclari
{
public class Pojo
{
string ad;
public string Ad
{
get { return ad; }
set { ad = value; }
}
string tip;
public string Tip
{
get { return tip; }
set { tip = value; }
}
double ent;
public double Ent
{
get { return ent; }
set { ent = value; }
}
double inf;
public double Inf
{
get { return inf; }
set { inf = value; }
}
public Pojo(string ad, double inf)
{
this.ad = ad;
this.inf = inf;
}
public Pojo(string ad, string tip, double ent)
{
this.tip = tip;
this.ad = ad;
this.ent = ent;
}
}
}
Form1.Cs Kaynak Kodlari;
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Collections; namespace KararAgaclari { public partial class Form1 : Form { public Form1() { InitializeComponent(); } int i; List <KararAgaclari.Pojo> entropiler = new List<KararAgaclari.Pojo>(); public List<KararAgaclari.Pojo> infler = new List<KararAgaclari.Pojo>(); public List<KararAgaclari.Pojo> inf = new List<KararAgaclari.Pojo>(); private void button1_Click(object sender, EventArgs e) { i = dataGridView1.Rows.Add(); dataGridView1.Rows
.Cells<0>
.Value = cmbTansiyon.SelectedItem.ToString(); dataGridView1.Rows
.Cells<1>
.Value = cmbSigara.SelectedItem.ToString(); dataGridView1.Rows
.Cells<2>
.Value = cmbYas.SelectedItem.ToString(); dataGridView1.Rows
.Cells<3>
.Value = cmbKilo.SelectedItem.ToString(); dataGridView1.Rows
.Cells<4>
.Value = cmbHastalik.SelectedItem.ToString(); dataGridView1.Rows
.Cells<5>
.Value = cmbAmeliyat.SelectedItem.ToString(); dataGridView1.Rows
.Cells<6>
.Value = cmbAgri.SelectedItem.ToString(); dataGridView1.Rows
.Cells<7>
.Value = cmbCinsiyet.SelectedItem.ToString(); dataGridView1.Rows
.Cells<8>
.Value = cmbKriz.SelectedItem.ToString(); } private void button2_Click(object sender, EventArgs e) { listBox1.Items.Clear(); inf = inflerim(); EntropiSirala(); treeView1.Nodes.Add(inf<0>
.Ad); for (int i = 1; i < inf.Count; i++) { treeView1.Nodes<0>
.Nodes.Add(inf
.Ad); } int a = 0; for (int i = 1; i < inf.Count; i++) { a = 0; for (int j = 0; j < entropiler.Count; j++) { if (inf
.Ad.Equals(entropiler
.Ad)) { Console.WriteLine("aaa"); treeView1.Nodes<0>
.Nodes
.Nodes.Add(entropiler
.Tip); a++; } } } } public double kriz() { int E = 0, H = 0; double satir=dataGridView1.RowCount-1; for (int i = 0; i <satir ; i++) { if (dataGridView1.Rows
.Cells<8>
.Value.Equals("Evet")) E++; else H++; } double a = E / satir; double b = H / satir; double ent=Entropi(Math.Round(a,2),Math.Round(b,2)); return Math.Round(ent,2); } public double tansiyon() { double satir = dataGridView1.RowCount-1; int YE = 0,YH=0, NE = 0,NH=0, DE = 0,DH=0; double Y=0,N=0,D=0; double inf; for (int i = 0; i < satir; i++) { if (dataGridView1.Rows
.Cells<0>
.Value.Equals("Yüksek") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Evet")) YE++; else if (dataGridView1.Rows
.Cells<0>
.Value.Equals("Yüksek") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Hayır")) YH++; else if (dataGridView1.Rows
.Cells<0>
.Value.Equals("Normal") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Evet")) NE++; else if (dataGridView1.Rows
.Cells<0>
.Value.Equals("Normal") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Hayır")) NH++; else if (dataGridView1.Rows
.Cells<0>
.Value.Equals("Düşük") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Evet")) DE++; else if (dataGridView1.Rows
.Cells<0>
.Value.Equals("Düşük") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Hayır")) DH++; } Y=(YE+YH); N=(NE+NH); D=(DE+DH); double entY =(Y!=0)?Entropi(YE / Y, YH / Y):0; double entN =(N!=0)? Entropi(NE/ N, NH/ N):0; double entD = (D!=0)?Entropi(DE/ D, DH/ D):0; entropiler.Add(new Pojo("Tansiyon", "Yüksek", entY)); entropiler.Add(new Pojo("Tansiyon", "Normal", entN)); entropiler.Add(new Pojo("Tansiyon", "Düşük", entD)); string b = Convert.ToString(kriz()); inf = Math.Round((kriz() - ((Y / satir) * entY) + ((N / satir) * entN) + ((D / satir) * entD)),2); listBox1.Items.Add(" " + YE + " " + YH + " " + NE + " " + NH + " " + DE + " " + DH + " /" + entY + " " + entN + " " + entD + " / " + inf); return Math.Round(inf,2); } public double sigara() { double satir = dataGridView1.RowCount-1; int EE = 0, EH = 0, HE = 0, HH = 0, BE = 0, BH = 0; double E = 0, H = 0, B = 0; double inf; for (int i = 0; i < satir; i++) { if (dataGridView1.Rows
.Cells<1>
.Value.Equals("Evet") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Evet")) EE++; else if (dataGridView1.Rows
.Cells<1>
.Value.Equals("Evet") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Hayır")) EH++; else if (dataGridView1.Rows
.Cells<1>
.Value.Equals("Hayır") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Evet")) HE++; else if (dataGridView1.Rows
.Cells<1>
.Value.Equals("Hayır") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Hayır")) HH++; else if (dataGridView1.Rows
.Cells<1>
.Value.Equals("Bıraktı") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Evet")) BE++; else if (dataGridView1.Rows
.Cells<1>
.Value.Equals("Bıraktı") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Hayır")) BH++; } E = (EE + EH); H = (HE + HH); B = (BE + HH); double entE =(E!=0)? Entropi(EE / E, EH / E):0; double entH = (H!=0)?Entropi(HE / H, HH / H):0; double entB = (B != 0) ? Entropi(BE / B, BH / B) : 0; entropiler.Add(new Pojo("Sigara", "Evet", entE)); entropiler.Add(new Pojo("Sigara", "Hayır", entH)); entropiler.Add(new Pojo("Sigara", "Bıraktı", entB)); inf =Math.Round( (kriz() - ((E / satir) * entE) + ((H / satir) * entH) + ((B / satir) * entB)),2); listBox1.Items.Add(" " + EE + " " + EH + " " + HE + " " + HH + " " + BE + " " + BH + " /" + entE + " " + entH + " " + entB + " / " + inf); return Math.Round(inf,2); } public double yas() { double satir = dataGridView1.RowCount - 1; int GE = 0, GH = 0, OE = 0, OH = 0, YE = 0, YH = 0; double G = 0, O = 0, Y = 0; double inf; for (int i = 0; i < satir; i++) { if (dataGridView1.Rows
.Cells<2>
.Value.Equals("Genç") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Evet")) GE++; else if (dataGridView1.Rows
.Cells<2>
.Value.Equals("Genç") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Hayır")) GH++; else if (dataGridView1.Rows
.Cells<2>
.Value.Equals("Orta Yaşlı") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Evet")) OE++; else if (dataGridView1.Rows
.Cells<2>
.Value.Equals("Orta Yaşlı") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Hayır")) OH++; else if (dataGridView1.Rows
.Cells<2>
.Value.Equals("Yaşlı") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Evet")) YE++; else if (dataGridView1.Rows
.Cells<2>
.Value.Equals("Yaşlı") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Hayır")) YH++; } G = (GE + GH); O= (OE + OH); Y = (YE + YH); double entG =(G!=0)? Entropi(GE / G, GH / G):0; double entO = (O!=0)?Entropi(OE / O, OH / O):0; double entY = (Y != 0) ? Entropi(YE / Y, YH / Y) : 0; entropiler.Add(new Pojo("Yaş", "Genç", entG)); entropiler.Add(new Pojo("Yaş", "Orta Yaşlı", entO)); entropiler.Add(new Pojo("Yaş", "Yaşlı", entY)); inf = Math.Round((kriz() - ((G / satir) * entG) + ((O / satir) * entO) + ((Y / satir) * entY)),2); listBox1.Items.Add(" " + GE + " " + GH + " " + OE + " " + OH + " " + YE + " " + YH + " /" + entG + " " + entO + " " + entY + " / " + inf); return Math.Round(inf, 2); } public double kilo() { double satir = dataGridView1.RowCount - 1; int AE = 0, AH = 0, NE = 0, NH = 0, FE = 0, FH = 0; double A = 0, N = 0, F = 0; double inf; for (int i = 0; i < satir; i++) { if (dataGridView1.Rows
.Cells<3>
.Value.Equals("Az") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Evet")) AE++; else if (dataGridView1.Rows
.Cells<3>
.Value.Equals("Az") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Hayır")) AH++; else if (dataGridView1.Rows
.Cells<3>
.Value.Equals("Normal") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Evet")) NE++; else if (dataGridView1.Rows
.Cells<3>
.Value.Equals("Normal") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Hayır")) NH++; else if (dataGridView1.Rows
.Cells<3>
.Value.Equals("Fazla") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Evet")) FE++; else if (dataGridView1.Rows
.Cells<3>
.Value.Equals("Fazla") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Hayır")) FH++; } A = (AE + AH); N = (NE + NH); F = (FE + FH); double entA = (A!=0)?Entropi(AE / A, AH / A):0; double entN = (N!=0)?Entropi(NE / N, NH / N):0; double entF = (F!=0)?Entropi(FE / F, FH / F):0; entropiler.Add(new Pojo("Kilo", "Az", entA)); entropiler.Add(new Pojo("Kilo", "Normal", entN)); entropiler.Add(new Pojo("Kilo", "Fazla", entF)); inf =Math.Round( (kriz() - ((A / satir) * entA) + ((N / satir) * entN) + ((F / satir) * entF)),2); listBox1.Items.Add(" " + AE + " " + AH + " " + NE + " " + NH + " " + FE + " " + FH+ " /" + entA + " " + entN + " " + entF + " / " + inf); return Math.Round(inf, 2); } public double genetikmi() { double satir = dataGridView1.RowCount - 1; int EE = 0, EH = 0, HE = 0, HH = 0; double E = 0, H = 0; double inf; for (int i = 0; i < satir; i++) { if (dataGridView1.Rows
.Cells<4>
.Value.Equals("Evet") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Evet")) EE++; else if (dataGridView1.Rows
.Cells<4>
.Value.Equals("Evet") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Hayır")) EH++; else if (dataGridView1.Rows
.Cells<4>
.Value.Equals("Hayır") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Evet")) HE++; else if (dataGridView1.Rows
.Cells<4>
.Value.Equals("Hayır") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Hayır")) HH++; } E = (EE + EH); H = (HE + HH); double entE = (E!=0)?Entropi(EE / E, EH / E):0; double entH = (H != 0) ? Entropi(HE / H, HH / H) : 0; entropiler.Add(new Pojo("Genetik mi", "Evet", entE)); entropiler.Add(new Pojo("Genetik mi", "Hayır", entH)); inf =Math.Round( (kriz() - ((E / satir) * entE) + ((H / satir) * entH)),2); listBox1.Items.Add(" " + EE + " " + EH + " " + HE + " " + HH + " /" + entE + " " + entH + " / " + inf); return Math.Round(inf, 2); } public double ameyiyatgecirdimi() { double satir = dataGridView1.RowCount - 1; int EE = 0, EH = 0, HE = 0, HH = 0; double E = 0, H = 0; double inf; for (int i = 0; i < satir; i++) { if (dataGridView1.Rows
.Cells<5>
.Value.Equals("Evet") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Evet")) EE++; else if (dataGridView1.Rows
.Cells<5>
.Value.Equals("Evet") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Hayır")) EH++; else if (dataGridView1.Rows
.Cells<5>
.Value.Equals("Hayır") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Evet")) HE++; else if (dataGridView1.Rows
.Cells<5>
.Value.Equals("Hayır") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Hayır")) HH++; } E = (EE + EH); H = (HE + HH); double entE = (E!=0)?Entropi(EE / E, EH / E):0; double entH = (H!=0)?Entropi(HE / H, HH / H):0; entropiler.Add(new Pojo("Ameliyat var mı", "Evet", entE)); entropiler.Add(new Pojo("Ameliyat var mı", "Hayır", entH)); inf =Math.Round( (kriz() - ((E / satir) * entE) + ((H / satir) * entH)),2); listBox1.Items.Add(" " + EE + " " + EH + " " + HE + " " + HH + " /" + entE + " " + entH + " / " + inf); return Math.Round(inf, 2); } public double agrivarmi() { double satir = dataGridView1.RowCount - 1; int YE = 0, YH = 0, AE = 0, AH = 0, OE = 0, OH = 0, CE = 0, CH = 0; double Y = 0, A = 0, O = 0, C = 0; double inf; for (int i = 0; i < satir; i++) { if (dataGridView1.Rows
.Cells<6>
.Value.Equals("Yok") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Evet")) YE++; else if (dataGridView1.Rows
.Cells<6>
.Value.Equals("Yok") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Hayır")) YH++; else if (dataGridView1.Rows
.Cells<6>
.Value.Equals("Az") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Evet")) AE++; else if (dataGridView1.Rows
.Cells<6>
.Value.Equals("Az") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Hayır")) AH++; else if (dataGridView1.Rows
.Cells<6>
.Value.Equals("Orta Şiddette") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Evet")) OE++; else if (dataGridView1.Rows
.Cells<6>
.Value.Equals("Orta Şiddette") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Hayır")) OH++; else if (dataGridView1.Rows
.Cells<6>
.Value.Equals("Çok") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Evet")) CE++; else if (dataGridView1.Rows
.Cells<6>
.Value.Equals("Çok") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Hayır")) CH++; } Y = (YE + YH); A = (AE + AH); O = (OE + OH); C = (CE + CH); double entY = (Y!=0)?Entropi(YE / Y, YH / Y):0; double entA = (A!=0)?Entropi(AE / A, AH / A):0; double entO = (O!=0)?Entropi(OE / O, OH / O):0; double entC = (C!=0)?Entropi(CE / C, CH / C):0; entropiler.Add(new Pojo("Ağrı", "Yok", entY)); entropiler.Add(new Pojo("Ağrı", "Az", entA)); entropiler.Add(new Pojo("Ağrı", "Orta Şiddette", entO)); entropiler.Add(new Pojo("Ağrı", "Çok", entC)); inf =Math.Round( (kriz() - ((Y / satir) * entY) + ((A / satir) * entA) + ((O / satir) * entO) + ((C / satir) * entC)),2); listBox1.Items.Add(" " + YE + " " + YH + " " + AE + " " + AH + " " + OE + " " + OH + " " + CE + " " + CH + " /" + entY+ " " + entA + " " + entO+ " " + entC + "/ " + inf); return Math.Round(inf, 2); } public double cinsiyet() { double satir = dataGridView1.RowCount - 1; int KE = 0, KH = 0, EE = 0, EH = 0; double K = 0, E = 0; double inf; for (int i = 0; i < satir; i++) { if (dataGridView1.Rows
.Cells<7>
.Value.Equals("Kadın") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Evet")) KE++; else if (dataGridView1.Rows
.Cells<7>
.Value.Equals("Kadın") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Hayır")) KH++; else if (dataGridView1.Rows
.Cells<7>
.Value.Equals("Erkek") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Evet")) EE++; else if (dataGridView1.Rows
.Cells<7>
.Value.Equals("Erkek") && dataGridView1.Rows
.Cells<8>
.Value.Equals("Hayır")) EH++; } K = (KE + KH); E = (EE + EH); double entK = (K!=0)?Entropi(KE / K, KH / K):0; double entE = (E!=0)?Entropi(EE / E, EH / E):0; entropiler.Add(new Pojo("Cinsiyet", "erkek",entE)); entropiler.Add(new Pojo("Cinsiyet", "bayan",entK)); inf =Math.Round( (kriz() - ((K / satir) * entK) + ((E / satir) * entE)),2); listBox1.Items.Add(" " + KE + " " + KH + " " + EE + " " + EH + " /" + entK + " " + entE + "/ " + inf); return Math.Round(inf, 2); } public double Entropi(double P1, double P2) { double degerP1 = 0, degerP2 = 0; degerP1 = (P1 == 0) ? 0 : (P1 * Math.Log(P1, 2)); degerP2 = (P2 == 0) ? 0 : (P2 * Math.Log(P2, 2)); double entropi = - degerP1- degerP2; return Math.Round(entropi,2); } private void Form1_Load(object sender, EventArgs e) { cmbTansiyon.SelectedIndex = 0; cmbSigara.SelectedIndex = 0; cmbKriz.SelectedIndex = 0; cmbKilo.SelectedIndex = 0; cmbHastalik.SelectedIndex = 0; cmbCinsiyet.SelectedIndex = 0; cmbAmeliyat.SelectedIndex = 0; cmbAgri.SelectedIndex = 0; cmbYas.SelectedIndex = 0; } public List<KararAgaclari.Pojo> inflerim() { infler.Add(new KararAgaclari.Pojo("Tansiyon", tansiyon())); infler.Add(new KararAgaclari.Pojo("Sigara", sigara())); infler.Add(new KararAgaclari.Pojo("Yaş", yas())); infler.Add(new KararAgaclari.Pojo("Kilo", kilo())); infler.Add(new KararAgaclari.Pojo("Genetik mi", genetikmi())); infler.Add(new KararAgaclari.Pojo("Ameliyat var mı", ameyiyatgecirdimi())); infler.Add(new KararAgaclari.Pojo("Ağrı", agrivarmi())); infler.Add(new KararAgaclari.Pojo("Cinsiyet", cinsiyet())); for (int i = 0; i < infler.Count(); i++) { for (int j = i + 1; j < infler.Count(); j++) { if (infler
.Inf<infler
.Inf) { String tempad=infler
.Ad; double tempinf=infler
.Inf; infler
.Ad=(infler
.Ad); infler
.Inf=(infler
.Inf); infler
.Ad=(tempad); infler
.Inf=(tempinf); } } } return infler; } public void EntropiSirala() { for (int i = 0; i < entropiler.Count(); i++) { for (int j = i + 1; j < entropiler.Count(); j++) { if (entropiler
.Ent < entropiler
.Ent) { String tempad = entropiler
.Ad; String temptip = entropiler
.Tip; double tempent = entropiler
.Ent; entropiler
.Ad=(entropiler
.Ad); entropiler
.Ent=(entropiler
.Ent); entropiler
.Tip=(entropiler
.Tip); entropiler
.Ad=(tempad); entropiler
.Ent=(tempent); entropiler
.Tip=(temptip);
}
}
}
}
}
}
Uygulamanin Ekran Goruntusu;
Keyifli Calismalar Dilerim...
Comments