• Tidak ada hasil yang ditemukan

Implementasi Analytical Hierarchy Process Dan Algoritma Gale-Shapley Untuk Pemilihan Presidium Departemen UKMI AL-Khuwarizmi

N/A
N/A
Protected

Academic year: 2017

Membagikan "Implementasi Analytical Hierarchy Process Dan Algoritma Gale-Shapley Untuk Pemilihan Presidium Departemen UKMI AL-Khuwarizmi"

Copied!
22
0
0

Teks penuh

(1)

Listing Program

1.

Mainform.cs

/*

* Created by SharpDevelop. * User: asus

* Date: 7/23/2014 * Time: 4:51 PM *

* To change this template use Tools | Options | Coding | Edit Standard Headers.

*/

using System;

using System.Collections.Generic;

using System.Drawing;

using System.Windows.Forms;

namespace AHPTest

{

/// <summary>

/// Description of MainForm.

/// </summary>

public partial class MainForm : Form {

string [] kriteria = new string[] {"IMK","Usia

Mentoring","Training Pengurus","Hafalan Al-Qur'an","Jumlah

Kelompok Mentoring"};//poin-poin kriteria

string [] alternatif = new string[] {"Amat

Baik","Baik","Cukup","Kurang"};//poin-poin alternatif setiap kriteria

AHPTest.Data m_kriteria;//variabel yang menyimpan nilai matriks dan eigen vektor dari kriteria

List<Data> m_alternatif;//variabel yang menyimpan nilai matriks dan eigen vektor dari alternatif

float [][] matriks;//matriks sementara untuk menampung nilai yang diinput user

data_pen [][] data_sat;

(2)

pengumpulan.hasil [] data_hasil;

Nilai y;

public MainForm() {

//

// The InitializeComponent() call is required for Windows Forms designer support.

//

InitializeComponent();

inisialisasi_tabel();//memulai membuat tabel sebagai tempat input nilai perbandingan

m_alternatif = new List<Data>();

data_sat = new MainForm.data_pen[2][];

bidang = new string[]{"Kaderisasi,",

"Syiar",

"KW",

"Akkom",

"LSO-IT"};

//

// TODO: Add constructor code after the InitializeComponent() call.

// }

void inisialisasi_tabel()

{

if (button1.Text == "Simpan Kriteria")//jika teks tombol seperti kondisi ini

{

dg.Columns.Add("C0","");//menambah 1 kolompada tabel,ada 2 parameter,nilai CO sebagai nama kolom, nilai "" sebagai headertext

dg.Rows.Insert(0,"");//menambah 1 baris pada tabel,ada 2 parameter, satu index baris, satu lagi nilai isi sel di kolom pertama di baris tersebut

dg[0,0].Value = "";//nilai dari sel [kolom ke-,baris ke-]

(3)

= 1;i<kriteria.Length+1;i++)//membuat tabel matriks dengan ukuran = jumlah kriteria

{

dg.Columns.Add("C"+i.ToString(),"");

dg.Rows.Insert(i,kriteria[i-1]);

dg[i,0].Value = kriteria[i-1];

dg[i,i].Value = "1";

}

}

else

{

dg.Columns.Add("C0","");

dg.Rows.Insert(0,"");

dg[0,0].Value = "";

for (int i

= 1;i<alternatif.Length+1;i++)//membuat tabel matriks dengan ukuran = jumlah poin alternatif

{

dg.Columns.Add("C"+i.ToString(),"");

dg.Rows.Insert(i,alternatif[i-1]);

dg[i,0].Value = alternatif[i-1];

dg[i,i].Value = "1";

}

}

}

void DgCellValidated(object sender, DataGridViewCellEv

entArgs e)//ketika suatu user mengisi suatu sel, maka sel yang merupakan perbandingan terbalik dari sel tsb akan otomatis terisi dgn nilai 1/sel

{

try{

dg[e.RowIndex,e.ColumnIndex].Value

= (1/float.Parse(dg[e.ColumnIndex,e.RowIndex].Value.ToString()

)).ToString();

}

catch{

(4)

}

void Button1Click(object sender, EventArgs e)

{

if (button1.Text == "Simpan Kriteria") {

matriks

= new float[kriteria.Length][];//membuat ukuran matriks for (int i = 0;i<kriteria.Length;i++) {

matriks[i] = new float[kriteria.Length];// membuat ukuran sub matriks

for (int j = 0;j<kriteria.Length;j++) {

matriks[i][j] = float.Parse(dg[j+1,i+1

].Value.ToString());//memindahkan nilai dari tabel ke matriks dengan iterasi sebanyak poin poin yang dibandingkan

}

}

m_kriteria

= new Data(kriteria,matriks);//membuat tempat baru bagi variable m_kriteria untuk menyimpan nilai matriks dan poin poin kriteria

dg.Rows.Clear();//membersihkan baris, agar bisa digunakan oleh alternatif

dg.Columns.Clear();//membersihkan kolom button1.Text = "Simpan Alternatif";//teks berganti

inisialisasi_tabel();//lakukan kembali inisialisasi

}

else if (button1.Text == "Simpan Alternatif") {

matriks

= new float[alternatif.Length][];//hampir sama, yang ini untuk menyimapn alternatif

for (int i = 0;i<alternatif.Length;i++) {

(5)

for (int j = 0;j<alternatif.Length;j++) {

matriks[i][j] = float.Parse(dg[j+1,i+1

].Value.ToString());

}

}

for (int i = 0;i<kriteria.Length;i++) {

m_alternatif.Add(new Data(alternatif,matri

ks));

}

button1.Text = "Selesai";

}

else if (button1.Text == "Selesai") {

pengumpulan x

= new pengumpulan(m_kriteria,m_alternatif);//membuat form untuk mengumpulkan data

x.ShowDialog();//menampilkannya

data_hasil = x.da;//variabel yang menyimpan data data calon

y

= new Nilai(data_hasil,m_kriteria,m_alternatif);//membuat form hasil menampilkan hasil dari peritungan AHP

y.ShowDialog();//menampilkannya. dg.Rows.Clear();

dg.Columns.Clear();

//dg.Rows.Add();

dg.Columns.Add("C","Nama/Bidang");

for (int i = 0;i<5;i++) {

dg.Rows.Insert(i,data_hasil[(y.kandidat[i]

.index/2)-1].nama);

dg.Columns.Add("C",bidang[i]);

}

data_sat[0] = new data_pen[5];

button1.Text = "Tahap 2";

dg.CellValidated -= DgCellValidated;

(6)

else if (button1.Text == "Tahap 2") {

for (int i = 0;i<5;i++) {

data_sat[0][i].nama =

dg[0,i].Value.ToString();

data_sat[0][i].index = 0;

data_sat[0][i].free = true;

data_sat[0][i].prio = new List<sbyte>();

int max;

for (int j = 0;j<5;j++) {

max = 4-j;

for (int k = 0;k<5;k++) {

if (sbyte.Parse(dg[k+1,i].Value.To String()) == (sbyte)max)

{

data_sat[0][i].prio.Add((sbyte

)k);

break;

}

}

}

}

dg.Rows.Clear();

dg.Columns.Clear();

dg.Columns.Add("C","Bidang/Nama");

for (int i = 0;i<5;i++) {

dg.Columns.Add("C",data_hasil[(y.kandidat[

i].index/2)-1].nama);

dg.Rows.Insert(i,bidang[i]);

}

data_sat[1] = new data_pen[5];

button1.Text = "Proses...";

}

(7)

{

for (int i = 0;i<5;i++) {

data_sat[1][i].nama =

dg[0,i].Value.ToString();

data_sat[1][i].index = 0;

data_sat[1][i].free = true;

data_sat[1][i].prio = new List<sbyte>();

int max;

for (int j = 0;j<5;j++) {

max = 5-j;

for (int k = 0;k<5;k++) {

if (sbyte.Parse(dg[k+1,i].Value.To String()) == (sbyte)max)

{

data_sat[1][i].prio.Add((sbyte

)k);

break;

}

}

}

}

gale_shapley();

}

}

public struct data_pen {

public string nama { get; set; } public List<sbyte> prio { get; set; } public sbyte index { get; set; } public bool free { get; set; } }

sbyte ind = 0;

void gale_shapley()

{

(8)

{

if (data_sat[1][data_sat[0][ind].prio[data_sat [0][ind].index]].free)

{

data_sat[1][data_sat[0][ind].prio[data_sat

[0][ind].index]].index = ind;

data_sat[1][data_sat[0][ind].prio[data_sat

[0][ind].index]].free = false;

data_sat[0][ind].free = false;

}

else

{

for (int i = 0;i<5;i++) {

if (data_sat[1][data_sat[0][ind].prio[ data_sat[0][ind].index]].prio[i] == ind)

{

data_sat[1][data_sat[0][ind].prio[

data_sat[0][ind].index]].index = ind;

data_sat[0][ind].free = false;

break;

}

else if (data_sat[1][data_sat[0][ind]. prio[data_sat[0][ind].index]].prio[i] ==

data_sat[1][data_sat[0][ind].prio[data_sat[0][ind].index]].ind

ex)

break;

}

}

data_sat[0][ind].index++;

MessageBox.Show(data_sat[1][data_sat[0][ind].p

rio[data_sat[0][ind].index]].index.ToString()+" :

"+data_sat[0][data_sat[1][data_sat[0][ind].prio[data_sat[0][in

d].index]].index].nama);

}

dg.Columns.Clear();

dg.Rows.Clear();

(9)

dg.Columns.Add("C","Kandidat");

for (int i = 0;i<5;i++) {

dg.Rows.Add();

dg[0,i].Value = data_sat[1][i].nama;

dg[1,i].Value =

data_sat[0][data_sat[1][i].index].nama;

}

}

bool t_hab()

{

for (int i = 0;i<5;i++) {

if (data_sat[0][i].free == true) {

ind = (sbyte)i;

return true;

}

}

return false;

}

}

}

2.

Pengumpulan.cs

/*

* Created by SharpDevelop. * User: asus

* Date: 7/21/2014 * Time: 6:10 PM *

* To change this template use Tools | Options | Coding | Edit Standard Headers.

*/

using System;

using System.Drawing;

using System.Collections.Generic;

(10)

using System.Threading;

namespace AHPTest

{

/// <summary>

/// Description of pengumpulan.

/// </summary>

public partial class pengumpulan : Form {

Data krit;

List<Data>alternatif;

int count = 1;

public hasil [] da;

public pengumpulan(Data krit,List<Data>alternatif) {

//

// The InitializeComponent() call is required for Windows Forms designer support.

//

InitializeComponent();

this.krit = krit;

this.alternatif = alternatif;

generate();

//

// TODO: Add constructor code after the InitializeComponent() call.

// }

void generate()

{

DataGridViewComboBoxColumn x1;

dg.Columns.Insert(0,new DataGridViewTextBoxColumn(

));

dg.Columns[0].HeaderText = "No.";

dg.Columns.Insert(1,new DataGridViewTextBoxColumn(

));

dg.Columns[1].HeaderText = "Nama Kandidat";

(11)

x1 = new DataGridViewComboBoxColumn();

x1.DataSource = alternatif[i-2].keterangan;

x1.FlatStyle = FlatStyle.Flat;

x1.HeaderText = krit.keterangan[i-2];

dg.Columns.Insert(i,x1);

//dg.Rows.Add(); }

/*x1 = new DataGridViewComboBoxColumn(); x1.DataSource = alternatif[alternatif.Count-1].keterangan;

x1.FlatStyle = FlatStyle.Flat; x1.HeaderText =

krit[0].keterangan[krit[0].keterangan.Length-1];

dg.Columns.Insert(alternatif.Count+1,x1);*/ /*string [] bidang = new

string[]{"Kaderisasi","Syiar","Kewirausahaan","Akkom","LSO-IT"};

string [] nomor = new string[]{"1","2","3","4","5"}; for (int i = 1;i<6;i++) {

x1 = new DataGridViewComboBoxColumn(); x1.DataSource = nomor;

x1.FlatStyle = FlatStyle.Flat; x1.HeaderText = bidang[i-1];

dg.Columns.Insert(alternatif.Count+i+1,x1); }*/

/*for (int i = 2;i<alternatif.Count+7;i++) {

dg.Columns[i].Width = 1107/(alternatif.Count+6);

}

dg.Columns[0].Width = 40; dg.Columns[1].Width = (2*(1107/(alternatif.Count+6)))-40;*/ dg.Rows.Add();

dg.Rows[0].Cells[0].Value = "1";

(12)

void Button1Click(object sender, EventArgs e)

{

count++;

dg.Rows.Add();

dg.Rows[count-1].Cells[0].Value =

count.ToString();

}

public struct hasil {

public string nama { get; set; } public int [] nilai_p { get; set; } /*public string [] minat { get; set; } public bool habis { get; set; }

public bool free { get; set; } public int index { get; set; }*/ }

void Button2Click(object sender, EventArgs e)

{

DataGridViewComboBoxCell x1;

//float jumlah = 0f; da = new hasil[count];

for (int i = 0;i<count;i++) {

da[i].nilai_p

= new int[krit.keterangan.Length];

da[i].nama =

dg.Rows[i].Cells[1].Value.ToString();

for (int j = 2;j<alternatif.Count+2;j++) {

x1 = (DataGridViewComboBoxCell)dg[j,i];

da[i].nilai_p[j-2] =

x1.Items.IndexOf(dg[j,i].Value.ToString());

//MessageBox.Show(j.ToString());

(13)

}

/*da[i].minat = new string [] {dg[alternatif.Count+2,i].Value.ToString(),

dg[alternatif. Count+3,i].Value.ToString(),

dg[alternatif. Count+4,i].Value.ToString(),

dg[alternatif. Count+5,i].Value.ToString(),

dg[alternatif. Count+6,i].Value.ToString()};

//MessageBox.Show(i.ToString()); da[i].index = 0;

da[i].free = true; da[i].habis = false;

pb1.Value = (100*(i+1))/count; Thread.Sleep(300);*/

}

}

}

}

3.

Nilai.cs

/*

* Created by SharpDevelop. * User: asus

* Date: 7/23/2014 * Time: 6:04 PM *

* To change this template use Tools | Options | Coding | Edit Standard Headers.

*/

using System;

using System.Drawing;

using System.Windows.Forms;

using System.Collections.Generic;

namespace AHPTest

(14)

/// <summary>

/// Description of Nilai.

/// </summary>

public partial class Nilai : Form {

pengumpulan.hasil [] data_hasil;

Data m_krit;

List<Data> m_altern;

public juara [] kandidat;

public Nilai(pengumpulan.hasil [] data_hasil,Data m_krit,List<Data> m_altern)

{

//

// The InitializeComponent() call is required for Windows Forms designer support.

//

InitializeComponent();

this.data_hasil = data_hasil;

this.m_krit = m_krit;

this.m_altern = m_altern;

inisialisasi_tabel2();

//

// TODO: Add constructor code after the InitializeComponent() call.

// }

void inisialisasi_tabel()

{

dg.Columns.Add("C0","Nama Kandidat");

int hitung = 0;

while (hitung < m_krit.keterangan.Length) {

dg.Columns.Add("C"+(hitung+1).ToString(),"Nila

i Alt"/*m_krit.keterangan[hitung]*/);

dg.Columns.Add("C"+(hitung+2).ToString(),"Nila

i Alt");

hitung++;

}

(15)

int hitung1;

int bantu ;

for (int i = 0;i<data_hasil.Length;i++) {

dg.Rows.Add();

dg[0,i].Value = data_hasil[i].nama;

hitung1 = 0;

bantu = 1;

while (hitung1 < hitung) {

dg[bantu++,i].Value =

m_krit.prioritas[hitung1].ToString("N4");

dg[bantu++,i].Value =

m_altern[hitung1].prioritas[data_hasil[i].nilai_p[hitung1]].To

String("N4");

//MessageBox.Show(bantu.ToString()); hitung1++;

}

}

}

void inisialisasi_tabel2()

{

dg.Columns.Add("C0","Peserta");

dg.Columns[0].Width = 120;

dg.Columns.Add("C1","");

dg.Rows.Insert(0,"");

dg[0,0].Value = "Kriteria";

dg[1,0].Value = "Eigen Vector(e)";

for (int i =1;i<m_krit.keterangan.Length+1;i++) {

dg.Rows.Insert(i,m_krit.keterangan[i-1]);

dg[1,i].Value =

(m_krit.prioritas[i-1]*100f).ToString("N4");

}

dg.Rows.Insert(m_krit.keterangan.Length+1, "Total"

);

int k = 0;

(16)

float jlh;

while (k<data_hasil.Length) {

jlh = 0;

dg.Columns.Add("C",data_hasil[k].nama);

dg.Columns.Add("C","");

bantu+=2;

dg[bantu-1,0].Value = "Nilai Peserta(n)";

dg[bantu,0].Value = "e x n";

dg.Columns[bantu].DefaultCellStyle.Alignment =

DataGridViewContentAlignment.MiddleRight;

dg.Columns[bantu].Width = 50;

for (int j

= 1;j<m_krit.keterangan.Length+1;j++)

{

dg[bantu-1,j].Value =

(m_altern[j-1].prioritas[data_hasil[k].nilai_p[j-1

]]/m_altern[j-1].prioritas[0]).ToString("N4");

dg[bantu,j].Value =

((m_altern[j-1].prioritas[data_hasil[k].nilai_p[j-1

]]/m_altern[j-1].prioritas[0])*m_krit.prioritas[j-1]*100f).ToString("N2");

jlh += float.Parse(dg[bantu,j].Value.ToStr

ing());

}

if (k%2 == 0) {

dg.Columns[bantu-1].DefaultCellStyle.BackColor = Color.Gray;

dg.Columns[bantu].DefaultCellStyle.BackCol

or = Color.Gray;

}

else

{

dg.Columns[bantu-1].DefaultCellStyle.BackColor = Color.White;

dg.Columns[bantu].DefaultCellStyle.BackCol

or = Color.White;

(17)

dg[bantu,6].Value = jlh.ToString();

k++;

}

kandidat = new juara[5];

for (int i =0;i<5;i++) {

kandidat[i].index = 0;

kandidat[i].jumlah = 0f;

for (int j = 3;j<bantu+2;j+=2) if (i == 0)

{

if (float.Parse(dg[j,6].Value.ToString()) > kandidat[i].jumlah)

{

kandidat[i].jumlah

= float.Parse(dg[j,6].Value.ToString());

kandidat[i].index = (sbyte)j;

}

}

else

{

if ((float.Parse(dg[j,6].Value.ToString()) > kandidat[i].jumlah) && (float.Parse(dg[j,6].Value.ToString()

) <= kandidat[i-1].jumlah) && (sbyte)j !=

kandidat[i-1].index )

{

kandidat[i].jumlah

= float.Parse(dg[j,6].Value.ToString());

kandidat[i].index = (sbyte)j;

}

}

}

//MessageBox.Show(juara[4].ToString());

dg.Columns[kandidat[0].index].DefaultCellStyle.Bac

kColor = Color.DarkOrange;

(18)

].index-1].DefaultCellStyle.BackColor = Color.DarkOrange;

dg.Columns[kandidat[1].index].DefaultCellStyle.Bac

kColor = Color.DodgerBlue;

dg.Columns[kandidat[1

].index-1].DefaultCellStyle.BackColor = Color.DodgerBlue;

dg.Columns[kandidat[2].index].DefaultCellStyle.Bac

kColor = Color.DarkGray;

dg.Columns[kandidat[2

].index-1].DefaultCellStyle.BackColor = Color.DarkGray;

dg.Columns[kandidat[3].index].DefaultCellStyle.Bac

kColor = Color.DarkOrchid;

dg.Columns[kandidat[3

].index-1].DefaultCellStyle.BackColor = Color.DarkOrchid;

dg.Columns[kandidat[4].index].DefaultCellStyle.Bac

kColor = Color.DarkOliveGreen;

dg.Columns[kandidat[4

].index-1].DefaultCellStyle.BackColor = Color.DarkOliveGreen;

}

public struct juara {

public sbyte index; public float jumlah; }

}

}

4.

Data.cs

/*

* Created by SharpDevelop. * User: asus

* Date: 7/23/2014 * Time: 5:39 PM *

* To change this template use Tools | Options | Coding | Edit Standard Headers.

*/

(19)

namespace AHPTest

{

/// <summary>

/// Inilah variabel yang menyimpan nilai matriks, serta

memunyai fungsi untuk memrosesnya dengan algoritma AHP. /// </summary>

public class Data {

public string [] keterangan;//variabel penyimpan bacaan keterangan

float [][] matriks;//variabel penympan matriks float [] kolom;//untuk menyimpan nilai setiap kolom public float [] prioritas;//menyiman nilai eigenvektor yang merupakan nilai prioritas

float [][] temp;//matriks pembantu mencari nilai cr public float CR;//variabel nilai inkonsistensi

public Data(string [] keterangan, float [][] matriks) {

this.keterangan = keterangan;//memindahkan nilai yang ada di parameter keterangan ke variabel keterangan form ini (nilai parameter ini adalah nilai dari form sebelumnya) this.matriks = matriks;//memindahkan nilai yang ada di parameter matriks ke matriks keterangan form ini kolom = new float[keterangan.Length];//membuat tempat nilai yang bisa ditampung kolom sepanjang jumlah poin-poin

prioritas = new float[keterangan.Length];//membuat tempat nilai bagi eigen vektor

temp = new float[keterangan.Length][];

for (int i= 0;i<keterangan.Length;i++) {

temp[i] = new float[keterangan.Length];

}

proses();

(20)

void proses()//algoritma AHP {

float jlh = 0f,eigen = 0f;//jlh sebagai penampung nilai setiap baris, eigen disini bukan eigen vektor, tapi eigen value

for (int i = 0;i<kolom.Length;i++)//proses untuk mencari jumlah nilai setiap kolom

{

for (int j =0;j<kolom.Length;j++) {

kolom[i] += float.Parse(matriks[j][i].ToSt

ring("N4"));

}

}

for (int i = 0;i<kolom.Length;i++)//proses membagi nilai setiap sel dengan jumlah nilai kolom yang bersesuaian {

for (int j =0;j<kolom.Length;j++) {

temp[j][i] = float.Parse((float.Parse((mat

riks[j][i]).ToString("N4")) / kolom[i]).ToString("N4"));

}

}

for (int i = 0;i<kolom.Length;i++)//proses untuk mencari jumlah nilai setiap baris

{

for (int j =0;j<kolom.Length;j++) {

jlh += temp[i][j];

}

prioritas[i] = float.Parse((jlh/(float)kolom.L

ength).ToString("N4"));//Nilai eigen vektor dari suatu poin = nilai jumlah baris dari poin yang bersangkutan/banyaknya poin-poin

(21)

kolom[i] = 0f;

}

for (int i = 0;i<kolom.Length;i++) {

for (int j =0;j<kolom.Length;j++) {

temp[j][i] = float.Parse ((matriks[j][i] *

prioritas[i]).ToString("N4"));

}

}

for (int i = 0;i<kolom.Length;i++) {

for (int j =0;j<kolom.Length;j++) {

kolom[i] += temp[i][j];

}

kolom[i] /= prioritas[i];

}

for (int i = 0;i<kolom.Length;i++) {

jlh += kolom[i];

}

eigen = jlh/(float)kolom.Length;

float CI =

(eigen-(float)kolom.Length)/(float)kolom.Length;

float RC = 0f;

if ((float)kolom.Length == 4f) RC = 0.9f;

else

RC = 1.12f;

(22)

CR = (CI/RC)*100f;

//MessageBox.Show("CR =

"+CR.ToString()+"%",prioritas[0].ToString("N4"));

//MessageBox.Show((prioritas[0]).ToString("N4")+": "+(prioritas[1]).ToString("N4")+":"+(prioritas[2]).ToString("N 4")+":"+(prioritas[3]).ToString("N4"));

}

}

Referensi

Dokumen terkait