Analisis Metode Seleksi Rank-Based Fitness Assigment Dan One Point Crossover Pada Penjadwalan Matakuliah

DAFTAR PUBLIKASI PENULIS

Publikasi
No

Judul Artikel

Penulis

(Seminar/Jurnal,
Dll)

1.

Waktu
Publikasi

Tempat

Pengolahan Data FitriRizani


LENTERA Jurnal

Januari

Universit

Periklanan

Ilmiah Sains dan

2012

Menggunakan

Teknologi (ISSN

Muslim,

Corel Draw Dan


1829 – 9598)

Matangg

as

Al-

Adobe

lumpang

Photoshop Di Al-

dua

Muslim Business

Kabupat


Center

en
Bireuen

Aplikasi

LENTERA Jurnal

September

Download Video

Ilmiah Sains dan

2012

Di

Teknologi (ISSN


Muslim,

1829 – 9598)

Matangg

You

FitriRizani

Tube

Dengan
2.

Universit
as

Al-


Menggunakan

lumpang

Program

dua

Basic 6.0

Visual

Kabupat
en
Bireuen

Universitas Sumatera Utara

Lampiran Skript Program


FrmBuildJadwal
#define SAVE_AS_XL

using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Windows.Forms;
using csPenjadwalanGenetika;
using IniParser;
using Excel = Microsoft.Office.Interop.Excel;

namespace csPenjadwalanGenetika
{
publicpartialclassFrmBuildJadwal : Form
{
privateint maxIterasi;
privateint populasi;

ClassGenetik genetik;
privatereadonlyint kode_jumat;
privatereadonlyint kode_dhuhur;
privatereadonlyint[] range_jumat;

readonlyClassDbConnect _dbConnect = newClassDbConnect();
staticreadonlyFileIniDataParser parser = newFileIniDataParser();
readonlyIniData data = parser.LoadFile("config.ini");

//solution
privateint[,] jadwal_kuliah;

public FrmBuildJadwal()
{

Universitas Sumatera Utara

InitializeComponent();

//load config

txtJumlahPopulasi.Text = data["genetik"]["populasi"];
numCrossover.Text = data["genetik"]["crossover"];
numMutasi.Text = data["genetik"]["mutasi"];
txtIterasi.Text = data["genetik"]["max_iterasi"];

kode_jumat = int.Parse(data["genetik"]["kode_jumat"]);
kode_dhuhur = int.Parse(data["genetik"]["kode_dhuhur"]);
range_jumat = data["genetik"]["range_jumat"].Split('').ToIntArray();
}

privatevoid FrmBuildJadwal_Load(object sender, EventArgs e)
{

}

privatevoid btnTutup_Click(object sender, EventArgs e)
{
Close();
}


privatevoid btnProses_Click(object sender, EventArgs e)
{
constint GANJIL = 1;
constint GENAP = 0;

int jenis_semester = cmbSemester.Text == "GANJIL" ? GANJIL : GENAP;
string tahun_akademik = cmbTahunAkademik.Text;
populasi = int.Parse(txtJumlahPopulasi.Text);

if (populasi % 2 != 0)
{
MessageBox.Show("Populasi harus kelipatan 2");
return;
}

Universitas Sumatera Utara

float crossOver = float.Parse(numCrossover.Text); //(float)0.7;
float mutasi = float.Parse(numMutasi.Text); //(float)0.4;
maxIterasi = int.Parse(txtIterasi.Text);


genetik = newClassGenetik(
jenis_semester, tahun_akademik,
populasi, crossOver, mutasi,
kode_jumat, range_jumat, kode_dhuhur);

genetik.AmbilData();
genetik.Inisialisasi();

if (!worker.IsBusy)
{
worker.RunWorkerAsync();
btnProses.Enabled = false;
DisableAllParamComponent(true);
btnStop.Enabled = true;
}
}

privatevoid label9_Click(object sender, EventArgs e)
{

//MessageBox.Show(
//

"Kenapa? \n" +

//

"Karena prinsip yang digunakan adalah pernikahan Monogami\n" );
}

privatevoid DisableAllParamComponent(bool disabled)
{
cmbSemester.Enabled = cmbTahunAkademik.Enabled =
txtJumlahPopulasi.Enabled =
numCrossover.Enabled = numMutasi.Enabled =
txtIterasi.Enabled = !disabled;
}

privatevoid Export2Excel()

Universitas Sumatera Utara

{
object misValue = System.Reflection.Missing.Value;

var xlApp = new Excel.ApplicationClass();
var xlWorkBook = xlApp.Workbooks.Add(misValue);
var xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
int i = 0;
int j = 0;

//export header
for (i = 1; i ruang reguler
//TODO: jika kuliah praktikum => ruang lab

//individu[i, j, 3] = random.Next(ruang.Length); // Penentuan ruang secara
acak
if (jenis_mk[j] == TEORI)
{
individu[i, j, 3] =
ruangReguler[random.Next(ruangReguler.Length)];
}
else
{
individu[i, j, 3] =
ruangLaboratorium[random.Next(ruangLaboratorium.Length)];
}
#if(SHOW_LOG)
String

kr;

Universitas Sumatera Utara

if (j + 1 < 10)
{
kr = "0" + (j + 1);
}
else {
kr = Convert.ToString(j + 1);
}
//logInisialisasi += "\r\nKromosom " + kr + " = " +
logInisialisasi += "\r\n" +
mata_kuliah[individu[i, j, 0]] + "," +
jam[individu[i, j, 1]] + "," +
hari[individu[i, j, 2]] + "," +
individu[i, j, 3];
#endif
}
}
}
#endregion

privatefloat CekFitness(int indv)
{
//float[,] penalty = new float[populasi, 6];
float penalty1 = 0, penalty2 = 0, penalty3 = 0, penalty4 = 0, penalty5 = 0;

for (var i = 0; i < mata_kuliah.Length; i++)
{
for (var j = 0; j < mata_kuliah.Length; j++)//1.Konflik ruang dan waktu dan
3.Konflik dosen
{
//ketika pemasaran matakuliah sama, maka langsung ke perulangan berikutnya
if (i == j) continue;

#region Konflik Ruang dan Waktu
//Ketika jam,hari dan ruangnya sama, maka penalty + satu
if (
(individu[indv, i, 1] == individu[indv, j, 1]) &&
(individu[indv, i, 2] == individu[indv, j, 2]) &&

Universitas Sumatera Utara

(individu[indv, i, 3] == individu[indv, j, 3])
)
{
#if(SHOW_LOG)
log += string.Format("\nHardConstraint[1#A] =>
Individu ke-{0} ", (indv + 1));
log += string.Format(
"Kromosom {0} [{1},{2},{3},{4}] == Kromosom {5} [{6},{7},{8},{9}]",
(i + 1), mata_kuliah[individu[indv, i, 0]],
jam[individu[indv, i, 1]], hari[individu[indv, i, 2]], individu[indv, i,
3],
(j + 1), mata_kuliah[individu[indv, j, 0]],
jam[individu[indv, j, 1]], hari[individu[indv, j, 2]], individu[indv, j, 3]
);
#endif
penalty1 += 1;
}

//Ketika sks lebih dari 1,
//hari dan ruang sama, dan
//jam kedua sama dengan jam pertama matakuliah yang lain, maka penalty + 1
if (sks[i] >= 2)
{
if (
(individu[indv, i, 1] + 1 == individu[indv, j,
1]) &&
(individu[indv, i, 2] == individu[indv, j, 2])
&&
(individu[indv, i, 3] == individu[indv, j, 3])
)
{
#if(SHOW_LOG)
log += string.Format("\nHardConstraint[1#B] =>
Individu ke-{0} ", (indv + 1));
log += string.Format(
"Kromosom {0} [{1},{2},{3},{4}][SKS={10}] == Kromosom {5}
[{6},{7},{8},{9}][SKS={11}]",

Universitas Sumatera Utara

(i + 1), mata_kuliah[individu[indv, i, 0]],
jam[individu[indv, i, 1]], hari[individu[indv, i, 2]], individu[indv, i,
3],
(j + 1), mata_kuliah[individu[indv, j, 0]],
jam[individu[indv, j, 1]], hari[individu[indv, j, 2]], individu[indv, j,
3],
sks[1], sks[j]
);
#endif

penalty1 += 1;
}
}

//Ketika sks lebih dari 2,
//hari dan ruang sama dan
//jam ketiga sama dengan jam pertama matakuliah yang lain, maka penalty + 1
if (sks[i] >= 3)
{
if (
(individu[indv, i, 1] + 2 == individu[indv, j,
1]) &&
(individu[indv, i, 2] == individu[indv, j, 2])
&&
(individu[indv, i, 3] == individu[indv, j, 3])
)
{
#if(SHOW_LOG)
log += string.Format("\nHardConstraint[1#C] =>
Individu ke-{0} ", (indv + 1));
log += string.Format(
"Kromosom {0} [{1},{2},{3},{4}][SKS={10}] == Kromosom {5}
[{6},{7},{8},{9}][SKS={11}]",
(i + 1), mata_kuliah[individu[indv, i, 0]],
jam[individu[indv, i, 1]], hari[individu[indv, i, 2]], individu[indv, i,
3],

Universitas Sumatera Utara

(j + 1), mata_kuliah[individu[indv, j, 0]],
jam[individu[indv, j, 1]], hari[individu[indv, j, 2]], individu[indv, j,
3],
sks[1], sks[j]
);
#endif
penalty1 += 1;
}
}

//Ketika sks lebih dari 3,
//hari dan ruang sama dan
//jam keempat sama dengan jam pertama matakuliah yang lain, maka penalty +
1
if (sks[i] >= 4)
{
if (
(individu[indv, i, 1] + 3 == individu[indv, j,
1]) &&
(individu[indv, i, 2] == individu[indv, j, 2])
&&
(individu[indv, i, 3] == individu[indv, j, 3])
)
{
#if(SHOW_LOG)
log += string.Format("\nHardConstraint[1#D] =>
Individu ke-{0} ", (indv + 1));
log += string.Format(
"Kromosom {0} [{1},{2},{3},{4}][SKS={10}] == Kromosom {5}
[{6},{7},{8},{9}][SKS={11}]",
(i + 1), mata_kuliah[individu[indv, i, 0]],
jam[individu[indv, i, 1]], hari[individu[indv, i, 2]], individu[indv, i,
3],
(j + 1), mata_kuliah[individu[indv, j, 0]],
jam[individu[indv, j, 1]], hari[individu[indv, j, 2]], individu[indv, j,
3],
sks[1], sks[j]
);

Universitas Sumatera Utara

#endif
penalty1 += 1;
}
}

#endregion
//______________________Konflik DOSEN

#region Konflik Dosen

if (
//ketika jam sama
individu[indv, i, 1] == individu[indv, j, 1] &&
//dan hari sama
individu[indv, i, 2] == individu[indv, j, 2] &&
//dan dosennya sama
dosen[i] == dosen[j]
)
{
//maka...
#if(SHOW_LOG)
log += string.Format("\nHardConstraint[3#A] =>
Individu ke-{0} ", (indv + 1));
log += string.Format(
"Kromosom {0} [{1},{2},{3},{4}][SKS={10}][DOSEN={12}] == Kromosom {5}
[{6},{7},{8},{9}][SKS={11}][DOSEN={13}]",
(i + 1), mata_kuliah[individu[indv, i, 0]],
jam[individu[indv, i, 1]], hari[individu[indv, i, 2]], individu[indv, i,
3],
(j + 1), mata_kuliah[individu[indv, j, 0]],
jam[individu[indv, j, 1]], hari[individu[indv, j, 2]], individu[indv, j,
3],
sks[1], sks[j], dosen[i], dosen[j]
);
#endif
penalty3 += 1;
}

Universitas Sumatera Utara

if (
//jika lebih dari 1 SKS
sks[i] >= 2
)
{
if (
//jam ke-2 == dengan jam ke-1 mk yang lain
(individu[indv, i, 1] + 1) == (individu[indv,
j, 1]) &&
//dan hari sama
(individu[indv, i, 2]) == (individu[indv, j,
2]) &&
//dan dosen sama
dosen[i] == dosen[j]
)
{
//maka...
#if(SHOW_LOG)
log += string.Format("\nHardConstraint[3#B] =>
Individu ke-{0} ", (indv + 1));
log += string.Format(
"Kromosom {0} [{1},{2},{3},{4}][SKS={10}][DOSEN={12}] == Kromosom {5}
[{6},{7},{8},{9}][SKS={11}][DOSEN={13}]",
(i + 1), mata_kuliah[individu[indv, i,
0]], jam[individu[indv, i, 1]], hari[individu[indv, i, 2]], individu[indv,
i, 3],
(j + 1), mata_kuliah[individu[indv, j,
0]], jam[individu[indv, j, 1]], hari[individu[indv, j, 2]], individu[indv,
j, 3],
sks[1], sks[j], dosen[i], dosen[j]
);
#endif
penalty3 += 1;
}
}

if (
//jika lebih dari 2 SKS

Universitas Sumatera Utara

sks[i] >= 3
)
{
if (
//jam ke-3 == dengan jam ke-1 mk yang lain
(individu[indv, i, 1] + 2) == (individu[indv,
j, 1]) &&
//dan hari sama
(individu[indv, i, 2]) == (individu[indv, j,
2]) &&
//dan dosen sama
dosen[i] == dosen[j]
)
{
//maka...
#if(SHOW_LOG)
log += string.Format("\nHardConstraint[3#C] =>
Individu ke-{0} ", (indv + 1));
log += string.Format(
"Kromosom {0} [{1},{2},{3},{4}][SKS={10}][DOSEN={12}] == Kromosom {5}
[{6},{7},{8},{9}][SKS={11}][DOSEN={13}]",
(i + 1), mata_kuliah[individu[indv, i,
0]], jam[individu[indv, i, 1]], hari[individu[indv, i, 2]], individu[indv,
i, 3],
(j + 1), mata_kuliah[individu[indv, j,
0]], jam[individu[indv, j, 1]], hari[individu[indv, j, 2]], individu[indv,
j, 3],
sks[1], sks[j], dosen[i], dosen[j]
);
#endif
penalty3 += 1;
}
}

if (
//jika lebih dari 3 SKS
sks[i] >= 4
)

Universitas Sumatera Utara

{
if (
//jam ke-4 == dengan jam ke-1 mk yang lain
(individu[indv, i, 1] + 3) == (individu[indv,
j, 1]) &&
//dan hari sama
(individu[indv, i, 2]) == (individu[indv, j,
2]) &&
//dan dosen sama
dosen[i] == dosen[j]
)
{
//maka...
#if(SHOW_LOG)
log += string.Format("\nHardConstraint[3#D] =>
Individu ke-{0} ", (indv + 1));
log += string.Format(
"Kromosom {0} [{1},{2},{3},{4}][SKS={10}][DOSEN={12}] == Kromosom {5}
[{6},{7},{8},{9}][SKS={11}][DOSEN={13}]",
(i + 1), mata_kuliah[individu[indv, i,
0]], jam[individu[indv, i, 1]], hari[individu[indv, i, 2]], individu[indv,
i, 3],
(j + 1), mata_kuliah[individu[indv, j,
0]], jam[individu[indv, j, 1]], hari[individu[indv, j, 2]], individu[indv,
j, 3],
sks[1], sks[j], dosen[i], dosen[j]
);
#endif
penalty3 += 1;
}
}
#endregion
}//end 1.Konflik ruang dan waktu dan 3.Konflik dosen

#region Konflik sholat Jumat
if (individu[indv, i, 2] + 1 == (kode_jumat)) //2.Konflik sholat jumat
{
//int x = individu[indv, i, 2];

Universitas Sumatera Utara

if (sks[i] == (1))
{
if (
individu[indv, i, 1] == (range_jumat[0] - 1) ||
individu[indv, i, 1] == (range_jumat[1] - 1) ||
individu[indv, i, 1] == (range_jumat[2] - 1)
)
{
#if(SHOW_LOG)
log += string.Format("\nHardConstraint[2#SKS =
1] => Individu ke-{0} ", (indv + 1));
log += string.Format(
"Kromosom {0} [{1},{2},{3},{4}]",
(i + 1), mata_kuliah[individu[indv, i, 0]],
jam[individu[indv, i, 1]],
hari[individu[indv, i, 2]], individu[indv,
i, 3]
);
#endif
penalty2 += 1;
}
}

if (sks[i] == (2))
{
if (
individu[indv, i, 1] == (range_jumat[0] - 2) ||
individu[indv, i, 1] == (range_jumat[0] - 1) ||
individu[indv, i, 1] == (range_jumat[1] - 1) ||
individu[indv, i, 1] == (range_jumat[2] - 1)
)
{
#if(SHOW_LOG)
log += string.Format("\nHardConstraint[2#SKS =
2] => Individu ke-{0} ", (indv + 1));
log += string.Format(
"Kromosom {0} [{1},{2},{3},{4}]",

Universitas Sumatera Utara

(i + 1), mata_kuliah[individu[indv, i, 0]],
jam[individu[indv, i, 1]],
hari[individu[indv, i, 2]], individu[indv,
i, 3]
);
#endif
penalty2 += 1;
}
}

if (sks[i] == (3))
{
if (
individu[indv, i, 1] == (range_jumat[0] - 3) ||
individu[indv, i, 1] == (range_jumat[0] - 2) ||
individu[indv, i, 1] == (range_jumat[0] - 1) ||
individu[indv, i, 1] == (range_jumat[1] - 1) ||
individu[indv, i, 1] == (range_jumat[2] - 1)
)
{
#if(SHOW_LOG)
log += string.Format("\nHardConstraint[2#SKS =
3] => Individu ke-{0} ", (indv + 1));
log += string.Format(
"Kromosom {0} [{1},{2},{3},{4}]",
(i + 1), mata_kuliah[individu[indv, i, 0]],
jam[individu[indv, i, 1]],
hari[individu[indv, i, 2]], individu[indv,
i, 3]
);
#endif
penalty2 += 1;
}
}

if (sks[i] == (4))
{
if (

Universitas Sumatera Utara

individu[indv, i, 1] == (range_jumat[0] - 4) ||
individu[indv, i, 1] == (range_jumat[0] - 3) ||
individu[indv, i, 1] == (range_jumat[0] - 2) ||
individu[indv, i, 1] == (range_jumat[0] - 1) ||
individu[indv, i, 1] == (range_jumat[1] - 1) ||
individu[indv, i, 1] == (range_jumat[2] - 1)
)
{
#if(SHOW_LOG)
log += string.Format("\nHardConstraint[2#SKS =
4] => Individu ke-{0} ", (indv + 1));
log += string.Format(
"Kromosom {0} [{1},{2},{3},{4}]",
(i + 1), mata_kuliah[individu[indv, i, 0]],
jam[individu[indv, i, 1]],
hari[individu[indv, i, 2]], individu[indv,
i, 3]
);
#endif
penalty2 += 1;
}
}
}
#endregion

#region Konflik dengan Waktu Keinginan Dosen

//Boolean penaltyForKeinginanDosen = false;
for (int j = 0; j < iDosen.Length; j++)
{
if (dosen[i] == iDosen[j])
{
string[] hari_jam = waktu_dosen[j, 1].Split(':');

if (
jam[individu[indv, i,
1]].ToString(CultureInfo.InvariantCulture) == hari_jam[1] &&

Universitas Sumatera Utara

hari[individu[indv, i,
2]].ToString(CultureInfo.InvariantCulture) == hari_jam[0]
)
{
//penaltyForKeinginanDosen = true;
#if(SHOW_LOG)
log += string.Format(
"\nHardConstraint[4] => Individu ke {0} Kromosom {1}[{2},{3},{4},{5}][Dosen
= {6}]",
(indv + 1), (i + 1),
mata_kuliah[individu[indv, i, 0]], jam[individu[indv, i, 1]],
hari[individu[indv, i, 2]], individu[indv,
i, 3], iDosen[j]);
#endif
penalty4 += 1;

}
}
}

#endregion

#region Konflik waktu dhuhur
if (individu[indv, i, 1] == (kode_dhuhur - 1))
{
#if(SHOW_LOG)
log += string.Format(
"\nHardConstraint[5] => Individu ke {0} Kromosom {1}[{2},{3},{4},{5}][Dosen
= {6}]",
(indv + 1), (i + 1),
mata_kuliah[individu[indv, i, 0]], jam[individu[indv, i, 1]],
hari[individu[indv, i, 2]], individu[indv,
i, 3], dosen[i]);
#endif
penalty5 += 1;
}

Universitas Sumatera Utara

#endregion
}

#if(SHOW_LOG)
log += string.Format("\nPenalty Individu ke-{0} : {1} \n",
(indv + 1), penalty1 + penalty2 + penalty3 + penalty4 + penalty5);
#endif

float fitness = 1 / (1 + (penalty1 + penalty2 + penalty3 + penalty4 +
penalty5));

return fitness;
}

#region Hitung Fitness

publicfloat[] HitungFitness()
{
//hard constraint
//1.Konflik ruang dan waktu
//2.Konflik sholat jumat
//3.Konflik dosen
//4.Konflik keinginan waktu dosen
//5.Konflik waktu dhuhur
//=>6.praktikum harus pada ruang lab {telah ditetapkan dari awal perandoman
//

bahwa jika praktikum harus ada pada LAB dan mata kuliah reguler harus

//

pada kelas reguler

//soft constraint //TODO

log = null;

float[] fitness = newfloat[populasi];

#if(SHOW_LOG)
log += "\n\n=========================== HITUNG FITNESS";

Universitas Sumatera Utara

log += "\nRule:\n" +
"Hard Constraint:\n" +
"[1] => Konflik ruang dan Waktu\n" +
"[1#A] => jam,hari dan ruangnya sama\n" +
"[1#B] => sks lebih dari 1 + hari dan ruang sama + jam kedua sama dengan
jam pertama matakuliah yang lain\n" +
"[1#C] => sks lebih dari 2 + hari dan ruang sama + jam ketiga sama dengan
jam pertama matakuliah yang lain\n" +
"[1#D] => sks lebih dari 3 + hari dan ruang sama + jam keempat sama dengan
jam pertama matakuliah yang lain\n" +
"[2] => Konflik sholat jumat\n" +
"[2#SKS = 1] => sks = 1\n" +
"[2#SKS = 2] => sks = 2\n" +
"[2#SKS = 3] => sks = 3\n" +
"[2#SKS = 4] => sks = 4\n" +
"[3] => Konflik Dosen\n" +
"[3#SKS = 1] => sks = 1\n" +
"[3#SKS = 2] => sks = 2\n" +
"[3#SKS = 3] => sks = 3\n" +
"[3#SKS = 4] => sks = 4\n" +
"[4] => Konflik keinginan waktu dosen\n";
#endif

for (var indv = 0; indv < populasi; indv++)
{
//Cek Fitness
fitness[indv] = CekFitness(indv);
#if(SHOW_LOG)
log += string.Format(
"Fitness Individu ke-{0} : {1} \n", (indv + 1), fitness[indv]);
#endif
}

//~~~~~buble sort~~~~~~
string[] sort = newstring[populasi];
//fill the data
//

Universitas Sumatera Utara

#if(SHOW_LOG)
log += "\nReview Penalty dan Fitness: (Best Fitness => Worst
Fitness)";
#endif

for (int i = 0; i < populasi; i++)
{
sort[i] = string.Format("\nIndividu {0} :Fitness {1}",
(i + 1), fitness[i]);
}

try
{
bool swapped = true;
while (swapped)
{
swapped = false;
for (int i = 0; i < populasi - 1; i++)
{
string[] strI = sort[i].Split(',');
float fitI = float.Parse(string.Format("0,{0}", strI[1]));

string[] strJ = sort[i + 1].Split(',');
float fitJ = float.Parse(string.Format("0,{0}", strJ[1]));

if (fitI < fitJ)
{
string sTmp = sort[i];
sort[i] = sort[i + 1];
sort[i + 1] = sTmp;
swapped = true;
}
}
}
}
catch (Exception)
{

Universitas Sumatera Utara

MessageBox.Show("Kemungkinan data tidak ada untuk Tahun Akademik dan
Semester yang terpilih!", "ERROR", MessageBoxButtons.OK,
MessageBoxIcon.Error);
throw;
}

#if(SHOW_LOG)
for (var i = 0; i < populasi; i++)
{
log += sort[i];
}
#endif
return fitness;
}

#endregion

#region Seleksi
publicvoid Seleksi(float[] fitness)
{
var jumlah = 0;
int[] rank = newint[populasi];
induk = newint[populasi];

#if(SHOW_LOG)
log += "\n\n";
#endif

for (var i = 0; i < populasi; i++)
{

//proses ranking berdasarkan nilai fitness
rank[i] = 1;

for (var j = 0; j < populasi; j++)
{

//ketika nilai fitness jadwal sekarang lebih dari nilai

fitness jadwal yang lain,
//ranking + 1;
//if (i == j) continue;

if (fitness[i] > fitness[j])

Universitas Sumatera Utara

{
rank[i] += 1;
}
}
#if(SHOW_LOG)
log += string.Format("Ranking individu {0} = {1}\n", (i +
1), rank[i]);
#endif
jumlah += rank[i];
}
#if(SHOW_LOG)
log += string.Format("[jumlah:{0}] ", jumlah);
#endif
var random = newRandom();

#if(SHOW_LOG)
log += "\r\n\nProses Seleksi:\r\n" +
"Induk terpilih: ";
#endif

for (var i = 0; i < induk.Length; i++)
{
//proses seleksi berdasarkan ranking yang telah dibuat
//int nexRandom = random.Next(1, jumlah);
//random = new Random(nexRandom);
var target = random.Next(jumlah);
var cek = 0;
for (var j = 0; j < rank.Length; j++)
{
cek += rank[j];
if (cek >= target)
{
induk[i] = j;
#if(SHOW_LOG)
log += string.Format("Individu {0} , ", (j + 1));
#endif
break;
}

Universitas Sumatera Utara

}
}
}
#endregion

//Crossover-----------------------------------------publicvoid StartCrossOver()
{
#if(SHOW_LOG)
log += string.Format("\r\n\r\n===========================PROSES
CROSSOVER / PINDAH SILANG (CrossOver values = {0})", crossOver);
#endif

int[, ,] individu_baru = newint[populasi, mata_kuliah.Length, 4];

var random = newRandom();

for (int i = 0; i < populasi; i += 2) //perulangan untuk jadwal yang
terpilih
{
int b = 0;
int nexRandom = random.Next(1, 1000);
random = newRandom(nexRandom);
double cr = random.NextDouble();

if (cr < crossOver)
{
//ketika nilai random kurang dari nilai probabilitas pertukaran
//maka jadwal mengalami prtukaran

int a = random.Next(mata_kuliah.Length - 1);
while (b