You are on page 1of 26

#include<iostream>

#include<conio.h>
#include<fstream>
#include<stdlib.h>
#include<time.h>
#include<math.h>

void main()
{
ofstream keluar;
keluar.open("D:/sejarah.txt");
int pil1,job,msn,i,j,pops,iter,it,matpop[100][100]/*,sol[100]*/,cek[100],p,p1
,cont;
int z,t,k,l,varsem[100],varsem1[100][2],ii,jj,kk,i3,j3,k3,calincross[100],inc
ross[100],jmlincross,incross2[100];
int calinmut[100],inmut[100],jmlinmut,inmut2[100],c1,c2,d1,d2,cek1,cek2,penga
man;
int ancrosssem[3][100],ancross[50][100];
int anmut[25][100],mutsem;
int gabungsol[200][103],gabungbob[200][3],gabungbobur[200][3];
int tkr1,tkr2,solusi[103],matpopb[100][100];
float pm , pc, wkt[100][100],makespan[100][100],maksi[100],maksj[100],maksij,
fitness[100],bobot[100],tbobot,tfitness;
float fitnessr[100],fitnessk[100],bilran01[100],i4,j4,bobotancross[50],bobota
nmut[50];
//pm = probabilitas mutasi
//pc = probabilitas crossover
//---pil1=pilihan untuk memasukkan data atau gunakan data dlm program
//job=banyaknya job
//msn=banyaknya mesin
//wkt= matriks data waktu
//---i= variabel counter
//---j=variabel counter
//pops= banyaknya population size
//iter= banyaknya iterasi
//---it= counter banyak iterasi
//matpop = matriks populasi( berisi sol dan fitness value)
//---sol = solusi sementara matriks matpop (kunci 1)(berisi generate induk)
//---cek = counter untuk memastikan solusi visible (kunci 1)
//---p = variabel sementara hasil random (kunci 1)
//---p1 = variabel pengecekan sementara hasil random (kunci 1)
//---cont = counter visibilitas (kunci 1)
//---z=variabel penanda (kunci 1)
//---t=variabel penanda (kunci 1)
//matpop = matriks populasi , kumpulan generate solusi (kunci 2)
//--k= variabel counter
//--varsem= variabel sementara untuk menghitung makespan (kunci 3)
//--varsem1= tempat indeks solusi untuk mnghitung makespan
//--maksi = untuk menghitung tabel makespan (maksimal baris)
//--maksj = ujtuk menghitung tabel makespan (maksimal kolom)
//--ii = variabel counter pada pembuatan makespan
//--jj = variabel counter pada pembuatan makespan
//--kk = variabel counter pada pembuatan makespan
//--maksij= pembanding maksimal baris ke i dan maksimal kolom ke j

randomize();
cout<<"=====================================================================
\n";
cout<<"
Flow Shop Scheduling Problem\n";
cout<<"
dengan Algoritma Genetika\n";
cout<<"Menggunakan 'order crossover' dan 'resiprocal exchange mutation'\n";
cout<<"=====================================================================
\n\n\n";
keluar<<"====================================================================
= \n";
keluar<<"
Flow Shop Scheduling Problem\n";
keluar<<"
dengan Algoritma Genetika\n";
keluar<<"Menggunakan 'order crossover' dan 'resiprocal exchange mutation'\n";
keluar<<"====================================================================
= \n\n\n";
cout<<"Masukkan nilai Pm. . .\n";
cin>>pm;
if((pm<0)||(pm>1))
{
clrscr();
cout<<"maaf input anda salah... silahkan keluar\n";
cout<<"0<=pm<=1\n";
cin>>i;
}
cout<<"\nMasukkan nilai Pc. . .\n";
cin>>pc;
cout<<"\n\n";
keluar<<"Nilai Pm = "<<pm<<endl;
keluar<<"Nilai Pc = "<<pc<<endl;
keluar<<"\n\n";
if((pc<0)||(pc>1))
{
clrscr();
cout<<"maaf input anda salah... silahkan keluar\n";
cout<<"0<=pc<=1\n";
cin>>i;
}
//input data waktu proses
cout<<"-------------------------------\n";
cout<<"Pilihan 1 : \n";
cout<<"1. masukkan data\n";
cout<<"2. pakai data dalam program\n";
cout<<"-------------------------------\n";
cout<<"masukkan pilihan anda. . .\n";
cin>>pil1;
if (pil1==1)
{
cout<<"\n\nMasukkan banyaknya job. . .\n";
cin>>job;
cout<<"\nMasukkan banyaknya mesin. . .\n";
cin>>msn;

if (msn>500)
{
cout<<" mesin maksimal 500 , silahkan keluar\n";
}
if (job>500)
{
cout<<" job maksimal 500 , silahkan keluar\n";
}
//memasukkan data waktu
for(i=1;i<=job;i++)
{
for(j=1;j<=msn;j++)
{
cout<<"\nMasukkan waktu job ke-"<<i<<" dan mesin ke-"<<j
<<endl;
cin>>wkt[i][j];
}
}
cout<<"\n\nData yang anda masukkan adalah. . .\n";
for(i=1;i<=job;i++)
{
for(j=1;j<=msn;j++)
{
cout<<wkt[i][j]<<" ";
}
cout<<"\n";
}
}
if (pil1==2)
{
job=3;
msn=4;
wkt[1][1]=2;
wkt[1][2]=1;
wkt[1][3]=2;
wkt[1][4]=3;
wkt[2][1]=1;
wkt[2][2]=1;
wkt[2][3]=2;
wkt[2][4]=2;
wkt[3][1]=4;
wkt[3][2]=1;
wkt[3][3]=2;
wkt[3][4]=3;
cout<<"\n\nData dalam program :\n";
cout<<"jumlah job = "<<job<<endl;
cout<<"jumlah mesin = "<<msn<<endl;
cout<<"data waktu :\n";
for(i=1;i<=job;i++)
{
for(j=1;j<=msn;j++)
{
cout<<wkt[i][j]<<" ";
}
cout<<"\n";

}
}
if((pil1<1)||(pil1>2))
{
cout<<"\nMaaf pilihan anda salah, silahkan keluar\n";
}
//input popsize dan banyak iterasi
cout<<"\n\nMasukkan banyaknya PopSize. . .\n";
cin>>pops;
cout<<"\nMasukkan banyaknya iterasi. . .\n";
cin>>iter;
cout<<endl;
if(iter<=0)
{
clrscr();
cout<<"maaf input anda salah... silahkan keluar\n";
cout<<"iterasi minimal 1\n";
cin>>i;
}
if(pops<=0)
{
clrscr();
cout<<"maaf input anda salah... silahkan keluar\n";
cout<<"popsize minimal 1\n";
cin>>i;
}
if(pops>=100)
{
clrscr();
cout<<"maaf input anda salah... silahkan keluar\n";
cout<<"popsize maksimal 99\n";
cin>>i;
}
keluar<<"banyaknya
keluar<<"banyaknya
keluar<<"banyaknya
keluar<<"banyaknya
keluar<<"\n\n\n";

job = "<<job<<endl;
mesin = "<<msn<<endl;
popsize = "<<pops<<endl;
iterasi = "<<iter<<endl;

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//PROSES ALGORITMA GENETIKA
//for(it=1;it<=iter;it++) //banyaknya iterasi
//{
cout<<"\n--------------Iterasi ke-1 ----------------\n\n";
keluar<<"\n--------------Iterasi ke-1 ----------------\n\n";
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//membangkitkan matriks populasi sebanyak popsize(kunci 1)
for(k=1;k<=pops;k++)
{
/*for(i=1;i<=(job*msn);i++)
{
sol[i]=0;
}
*/

for(i=1;i<=job;i++)
{
cek[i]=0;
}
cont=0; // counter visibilitas
//for(k=1;k<=pops;k++)
//{
for(i=1;i<=(job*msn);i++)
{
p=rand()%job+1;
z=0;
while (z<=0)
{
for(j=1;j<=job;j++)
{
if(p==j)
{
if(cek[j]<msn)
{
cek[j]=cek[j]+1;
z=1;
}
else
{
t=0;
while(t<=0)
{
p1=p;
p=rand()%job+1;
if (p!=p1)
{
t=1;
}
}
}// penutup else
}// penutup p==j
}//penutup for j
}//penutup while z
matpop[k][i]=p;
}//penutup for i
}//penutup for k
/*for(i=1;i<=(job*msn);i++)
{
cout<<sol[i]<<" ";
}*/
//}//penutup for it
/*if(it>=2)
{
for(i=1;i<=pops;i++)

{
for(j=1;j<=(job*msn);j++)
{
matpop[i][j]=matpopb[i][j];
}
}
}
*/
cout<<"\n\n(kunci 2) matriks populasi : \n"; // kunci 2
keluar<<"\n\n(kunci 2) matriks populasi : \n";
for(i=1;i<=pops;i++)
{
keluar<<i<<"- ";
for(j=1;j<=(job*msn);j++)
{
cout<<matpop[i][j]<<" ";
keluar<<matpop[i][j]<<" ";
}
cout<<"\n";
keluar<<"\n";
}
keluar<<"\n\n";
//SELESAI BANGKITKAN MATRIKS POPULASI (KUNCI 1)
//******************************************************************************
*********iterasi kedua dimulai dari sini
for(it=1;it<=iter;it++) //banyaknya iterasi
{
if(it>1)
{
cout<<"\n--------------Iterasi ke-"<<it<<" ----------------\n\n"
;
keluar<<"\n--------------Iterasi ke-"<<it<<" ----------------\n\n";
keluar<<"\n\n(kunci 2) matriks populasi : \n";
cout<<"\n\n(kunci 2) matriks populasi : \n";
for(i=1;i<=pops;i++)
{
keluar<<i<<"- ";
for(j=1;j<=(job*msn);j++)
{
cout<<matpop[i][j]<<" ";
keluar<<matpop[i][j]<<" ";
}
cout<<"\n";
keluar<<"\n";
}
keluar<<"\n\n";
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
keluar<<"\n\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++\n";

keluar<<"Proses mencari makespan\n\n";


//MENCARI BOBOT
//mencari bobot
// membuat makespan (kunci 3)
cout<<"\nmembuat makespan\n";
for(i=1;i<=pops;i++)
{
for(z=1;z<=job;z++)
{
cek[z]=0;
}//penutup for z
for(j=1;j<=(job*msn);j++)
{
varsem[j]=matpop[i][j];
for(k=1;k<=job;k++)
{
if(k==varsem[j])
{
cek[k]=cek[k]+1;
varsem1[j][1]=varsem[j];
varsem1[j][2]=cek[k];
}
}//penutup for k
}//penutup for j
//----------------------------------------------------------------//SUB BOBOT 1
//nilai awal untuk elemen popsize yang berbeda
for(ii=1;ii<=job;ii++)
{
for(jj=1;jj<=msn;jj++)
{
makespan[ii][jj]=0;
}
}
for(ii=1;ii<=job;ii++)
{
maksi[ii]=0;
}
for(ii=1;ii<=msn;ii++)
{
maksj[ii]=0;
}
//---------------------------------------------------------//SUB BOBOT 2
for(k=1;k<=(job*msn);k++)
{
maksij=maksi[varsem1[k][1]];
if(maksij<=maksj[varsem1[k][2]])
{
maksij=maksj[varsem1[k][2]];
}
makespan[varsem1[k][1]][varsem1[k][2]]=maksij+wkt[varsem1[k
][1]][varsem1[k][2]];
//update nilai maksimal

/*for(ii=1;ii<=job;ii++)
{
maksi[ii]=makespan[ii][1];
}
for(ii=1;ii<=msn;ii++)
{
maksj[ii]=makespan[1][ii];
}
*/
for(ii=1;ii<=job;ii++)
{
for(jj=1;jj<=(msn);jj++)
{
maksi[ii]=max(makespan[ii][jj],maksi[ii]);
/*if(maksj[jj]<makespan[ii][jj])
{
maksj[jj]==makespan[ii][jj];
}*/
}
}
for(jj=1;jj<=msn;jj++)
{
for(ii=1;ii<=(job);ii++)
{
maksj[jj]=max(makespan[ii][jj],maksj[jj]);
/*if(maksj[jj]<makespan[ii][jj])
{
maksj[jj]==makespan[ii][jj];
}*/
}
}
}//for k

bobot[i]=maksj[msn];
keluar<<"\n\nMakespan popsize ke-"<<i<<" adalah :\n";
for(ii=1;ii<=job;ii++)
{
for(jj=1;jj<=msn;jj++)
{
keluar<<makespan[ii][jj]<<" ";
}
keluar<<"\n";
}
}//penutup for i
for(i=1;i<=(job*msn);i++)
{
for(j=1;j<=2;j++)
{
cout<<varsem1[i][j]<<" ";

}
cout<<"\n";
}
for(i=1;i<=job;i++)
{
for(j=1;j<=msn;j++)
{
cout<<makespan[i][j]<<" ";
}
cout<<"\n";
}
cout<<"maksi:\n";
for(i=1;i<=job;i++)
{
cout<<maksi[i]<<" ";
}
cout<<endl;
for(j=1;j<=msn;j++)
{
cout<<maksj[j]<<" ";
}
cout<<"bobot :\n";
keluar<<"\nbobot :\n";
tbobot=0;
for(i=1;i<=pops;i++)
{
cout<<bobot[i]<<" ";
keluar<<bobot[i]<<" ";
tbobot=tbobot+bobot[i];
}
cout<<"\n";
//SELESAI MENGHITUNG BOBOT
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//NILAI FITNESS
keluar<<"\n\n++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++\n";
keluar<<"Proses mencari fitness\n\n";
//menghitung nilai fitness (kunci 4)
tfitness=0;
keluar<<"nomor popsize :\n";
for(i=1;i<=pops;i++)
{
keluar<<i<<" ";
}
keluar<<"\n\nnilai Fitness : \n";
for(i=1;i<=pops;i++)
{
fitness[i]=tbobot-bobot[i];
tfitness=tfitness+fitness[i];//total fitness
keluar<<fitness[i]<<" ";
}
//menghitung nilai fitness relatif
keluar<<"\n\nnilai Fitness relatif: \n";
for(i=1;i<=pops;i++)
{

fitnessr[i]=fitness[i]/tfitness;
keluar<<fitnessr[i]<<" ";
}
//menghitung fitness kumulatif
keluar<<"\n\nnilai Fitness kumulatif: \n";
fitnessk[1]=fitnessr[1];
keluar<<fitnessk[1]<<" ";
for(i=2;i<=pops;i++)
{
fitnessk[i]=fitnessk[i-1]+fitnessr[i];
keluar<<fitnessk[i]<<" ";
}
//SELESAI NILAI FITNESS
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
keluar<<"\n\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++\n";
//keluar<<"Proses mencari induk crossover\n\n";
//MENCARI INDUK CROSSOVER
//random 0-1
cout<<"random ii dan jj:\n";
for(i=1;i<=pops;i++)
{
ii=rand()%100;
jj=rand()%100;
i4=ii;
j4=jj;
cout<<ii<<endl;
cout<<jj<<endl;
if((i4==0)&&(j4==0))
{
bilran01[i]=0;
}
else if((i4>0)||(j4>0))
{
bilran01[i]=(i4/(i4+j4));
}

}
cout<<"\n\nbilangan random\n";
keluar<<"\n\nbilangan random\n";
for(i=1;i<=pops;i++)
{
cout<<bilran01[i]<<endl;
keluar<<bilran01[i]<<" ";
}

latif

keluar<<"\n\n";
keluar<<"resum tabel :\n";
keluar<<"popsize
bobot
fitnesskumul
random\n";
for(i=1;i<=pops;i++)
{

fitness

fitness re

keluar<<i<<"
"<<bobot[i]<<"
"<<fitness[i]<<"
"<<fitnessk[i]<<"
"<<bilran01[i]<<endl;

nessr[i]<<"

"<<fit

}
keluar<<"\n\nProses mencari induk crossover\n\n";
//---------------------------------------------------------------//SUB MENCARI INDUK CROSSOVER 1
//mencari calon induk cross
for(i=1;i<=pops;i++)
{
for(j=1;j<=pops;j++)
{
if(bilran01[i]>=fitnessk[j])
{
calincross[i]=j+1;
}
if(bilran01[i]<fitnessk[1])
{
calincross[i]=1;
}
}
}
cout<<"\ncalon induk cross :\n";
for(i=1;i<=pops;i++)
{
cout<<calincross[i]<<endl;
}
//----------------------------------------------------------------//SUB MENCARI INDUK CROSSOVER 2
//mencari induk cross
cout<<"\ninduk cross over semntara dengan nol:\n";
keluar<<"\ninduk cross over semntara dengan nol:\n";
j=0;
for(i=1;i<=pops;i++)
{
if(bilran01[i]>=pc)
{
calincross[i]=0;
}
if(calincross[i]!=0)
{
j=j+1;
incross[j]=calincross[i];
}
cout<<calincross[i]<<endl;
keluar<<calincross[i]<<" ";
}
jmlincross=j;
cout<<"\ninduk cross over sementara tanpa nol :\n";
keluar<<"\ninduk cross over sementara tanpa nol :\n";
for(i=1;i<=jmlincross;i++)
{
cout<<incross[i]<<endl;
keluar<<incross[i]<<" ";
}
//menghapus double induk
i3=0;
for(i=1;i<=jmlincross;i++)
{

for(j=i;j<=jmlincross;j++)
{
if(i!=j)
{
if(incross[i]==incross[j])
{
incross[j]=0;
}
}
}
}
cout<<"\ninduk cross ga dobel :\n";
keluar<<"\ninduk cross ga dobel :\n";
for(i=1;i<=jmlincross;i++)
{
cout<<incross[i]<<endl;
keluar<<incross[i]<<" ";
}
i3=0;
for(i=1;i<=jmlincross;i++)
{
if(incross[i]!=0)
{
i3=i3+1;
incross2[i3]=incross[i];
}
}
jmlincross=i3;
if(jmlincross%2==1) //jika genap dikuraangi satu.
{
jmlincross=jmlincross-1;
}
cout<<"\ninduk cross beneran :\n";
keluar<<"\ninduk cross beneran :\n";
for(i=1;i<=jmlincross;i++)
{
cout<<incross2[i]<<endl;
keluar<<incross2[i]<<" ";
}
//SELESAI MENCARI INDUK CROSSOVER
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
keluar<<"\n\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++\n";
keluar<<"Proses mencari induk mutasi\n\n";
//MENCARI INDUK MUTASI
//proses Mutasi
//random 0-1
cout<<"random ii dan jj:\n";
for(i=1;i<=pops;i++)
{
ii=rand()%100;
jj=rand()%100;
i4=ii;

j4=jj;
cout<<ii<<endl;
cout<<jj<<endl;
if((i4==0)&&(j4==0))
{
bilran01[i]=0;
}
else if((i4>0)||(j4>0))
{
bilran01[i]=(i4/(i4+j4));
}

}
cout<<"\nbilangan random\n";
for(i=1;i<=pops;i++)
{
cout<<bilran01[i]<<endl;
}
//-----------------------------------------------------------------//SUB MENCARI INDUK MUTASI 1
//mencari calon induk mutasi
for(i=1;i<=pops;i++)
{
for(j=1;j<=pops;j++)
{
if(bilran01[i]>=fitnessk[j])
{
calinmut[i]=j+1;
}
if(bilran01[i]<fitnessk[1])
{
calinmut[i]=1;
}
}
}
cout<<"\ncalon induk mutasi :\n";
keluar<<"\n\ncalon induk mutasi :\n";
for(i=1;i<=pops;i++)
{
cout<<calinmut[i]<<endl;
keluar<<calinmut[i]<<" ";
}
//--------------------------------------------------------------//SUB MENCARI INDUK MUTASI 2
//mencari induk mutasi
cout<<"\ninduk mutasi sementara dengan nol :\n";
keluar<<"\ninduk mutasi sementara dengan nol :\n";
j=0;
for(i=1;i<=pops;i++)
{
if(bilran01[i]>=pm)
{
calinmut[i]=0;

}
if(calinmut[i]!=0)
{
j=j+1;
inmut[j]=calinmut[i];
}
cout<<calinmut[i]<<endl;
keluar<<calinmut[i]<<" ";
}
jmlinmut=j;
cout<<"\ninduk mutasi sementara tanpa nol :\n";
keluar<<"\ninduk mutasi sementara tanpa nol :\n";
for(i=1;i<=jmlinmut;i++)
{
cout<<inmut[i]<<endl;
keluar<<inmut[i]<<" ";
}
//menghapus double induk
i3=0;
for(i=1;i<=jmlinmut;i++)
{
for(j=i;j<=jmlinmut;j++)
{
if(i!=j)
{
if(inmut[i]==inmut[j])
{
inmut[j]=0;
}
}
}
}
cout<<"\ninduk mutasi ga dobel :\n";
keluar<<"\ninduk mutasi ga dobel :\n";
for(i=1;i<=jmlinmut;i++)
{
cout<<inmut[i]<<endl;
keluar<<inmut[i]<<" ";
}
i3=0;
for(i=1;i<=jmlinmut;i++)
{
if(inmut[i]!=0)
{
i3=i3+1;
inmut2[i3]=inmut[i];
}
}
jmlinmut=i3;
if(jmlinmut%2==1) //jika genap dikuraangi satu.
{
jmlinmut=jmlinmut-1;
}
cout<<"\ninduk mutasi beneran :\n";
keluar<<"\ninduk mutasi beneran :\n";

for(i=1;i<=jmlinmut;i++)
{
cout<<inmut2[i]<<endl;
keluar<<inmut2[i]<<" ";
}
//SELESAI MENCARI INDUK MUTASI
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//PROSES CROSSOVER
keluar<<"\n\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++\n";
keluar<<"Proses crossover\n\n";
//proses crossover
//mengenolkan ancross sebelum proses crossover
for(ii=1;ii<=(jmlincross-1);ii++)
{
for(jj=1;jj<=(job*msn);jj++)
{
ancross[ii][jj]=0;
}
}

for(i=1;i<=(jmlincross-1);i++)
{
c1=rand()%((job*msn)-2-1)+1;
t=-1;
while (t<0)
{
c2=rand()%((job*msn)-3)+3;
if(c2>c1)
{
t=1;
}
}
cout<<"\nrandoman untaian :\n";
keluar<<"\n\n\nrandoman untaian :\n";
cout<<c1<<endl;
cout<<c2<<endl;
keluar<<c1<<" ";
keluar<<c2<<endl;
d1=c1;
d2=c2;

//cout<<"\ncek ancrosssem[1]: ";


for(ii=1;ii<=(job*msn);ii++)
{
ancrosssem[1][ii]=matpop[incross2[i+1]][ii];
//cout<<ancrosssem[1][ii];
}
cout<<"\ncek untaian yg docopy: ";
keluar<<"\ncek untaian yg docopy: ";
for(j=d1;j<=d2;j++)

{
ancross[i][j]=matpop[incross2[i]][j];//mengcopy sub unta
ian yang sama pada induk 1
pengaman=0;
for(i3=1;i3<=(job*msn);i3++)
{
if((ancross[i][j]==ancrosssem[1][i3])&&(pengaman
==0))
{
ancrosssem[1][i3]=0; //mengkosongkan nilai lokus
dr induk 2 yg sama seperti induk 2
pengaman=1;
}
}
}
for(cek1=1;cek1<=(job*msn);cek1++)
{
cout<<ancross[i][cek1];
keluar<<ancross[i][cek1];
}
cout<<endl;
keluar<<endl;
for(cek1=1;cek1<=(job*msn);cek1++)
{
cout<<ancrosssem[1][cek1];
}
j3=0;
//cout<<"\ncek ancrosssem[1]: ";
for(ii=1;ii<=(job*msn);ii++)
{
//cout<<ancrosssem[1][ii];
if(ancrosssem[1][ii]!=0)
{
j3=j3+1;
ancrosssem[2][j3]=ancrosssem[1][ii];
}
}
k3=0;
for(ii=1;ii<=(job*msn);ii++)
{
if(ancross[i][ii]==0)
{
k3=k3+1;
ancross[i][ii]=ancrosssem[2][k3];
}
}
}//penutup for i
cout<<"\nhasil cross over :\n";
keluar<<"\nhasil cross over :\n";
for(i=1;i<=(jmlincross-1);i++)
{
for(ii=1;ii<=(job*msn);ii++)
{
cout<<ancross[i][ii]<<" ";
keluar<<ancross[i][ii]<<" ";

}
cout<<endl;
keluar<<endl;
}
//SELESAI PROSES CROSSOVER
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//MENCARI BOBOT HASIL PROSES CROSSOVER
//bobot anak crossover
//MENCARI BOBOT
//mencari bobot
// membuat makespan (kunci 3)
cout<<"\nmembuat makespan\n";
for(i=1;i<=(jmlincross-1);i++)
{
keluar<<"\nmembuat makespan anak ke-"<<i<<" \n";
for(z=1;z<=job;z++)
{
cek[z]=0;
}//penutup for z
for(j=1;j<=(job*msn);j++)
{
varsem[j]=ancross[i][j];
for(k=1;k<=job;k++)
{
if(k==varsem[j])
{
cek[k]=cek[k]+1;
varsem1[j][1]=varsem[j];
varsem1[j][2]=cek[k];
}
}//penutup for k
}//penutup for j
//----------------------------------------------------------------//SUB BOBOT anak cross 1
//nilai awal untuk elemen anak cross yang berbeda
for(ii=1;ii<=job;ii++)
{
for(jj=1;jj<=msn;jj++)
{
makespan[ii][jj]=0;
}
}
for(ii=1;ii<=job;ii++)
{
maksi[ii]=0;
}
for(ii=1;ii<=msn;ii++)
{
maksj[ii]=0;
}
//---------------------------------------------------------//SUB BOBOT anak cross 2

for(k=1;k<=(job*msn);k++)
{
maksij=maksi[varsem1[k][1]];
if(maksij<=maksj[varsem1[k][2]])
{
maksij=maksj[varsem1[k][2]];
}
makespan[varsem1[k][1]][varsem1[k][2]]=maksij+wkt[varsem1[k
][1]][varsem1[k][2]];
//update nilai maksimal
/*for(ii=1;ii<=job;ii++)
{
maksi[ii]=makespan[ii][1];
}
for(ii=1;ii<=msn;ii++)
{
maksj[ii]=makespan[1][ii];
}
*/
for(ii=1;ii<=job;ii++)
{
for(jj=1;jj<=(msn);jj++)
{
maksi[ii]=max(makespan[ii][jj],maksi[ii]);
/*if(maksj[jj]<makespan[ii][jj])
{
maksj[jj]==makespan[ii][jj];
}*/
}
}
for(jj=1;jj<=msn;jj++)
{
for(ii=1;ii<=(job);ii++)
{
maksj[jj]=max(makespan[ii][jj],maksj[jj]);
/*if(maksj[jj]<makespan[ii][jj])
{
maksj[jj]==makespan[ii][jj];
}*/
}
}
}//for k
for(ii=1;ii<=job;ii++)
{
for(jj=1;jj<=msn;jj++)
{
keluar<<makespan[ii][jj]<<" ";
}
keluar<<"\n";
}
bobotancross[i]=maksj[msn];
}//penutup for i

for(i=1;i<=(job*msn);i++)
{
for(j=1;j<=2;j++)
{
cout<<varsem1[i][j]<<" ";
}
cout<<"\n";
}
for(i=1;i<=job;i++)
{
for(j=1;j<=msn;j++)
{
cout<<makespan[i][j]<<" ";
}
cout<<"\n";
}
cout<<"maksi anak cross:\n";
for(i=1;i<=job;i++)
{
cout<<maksi[i]<<" ";
}
cout<<endl;
for(j=1;j<=msn;j++)
{
cout<<maksj[j]<<" ";
}
cout<<"\nbobot anak cross :\n";
keluar<<"\nbobot anak cross :\n";
tbobot=0;
for(i=1;i<=(jmlincross-1);i++)
{
cout<<bobotancross[i]<<" ";
keluar<<bobotancross[i]<<" ";
tbobot=tbobot+bobot[i];
}
cout<<"\n";
//SELESAI MENGHITUNG BOBOT anak cross
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
keluar<<"\n\n++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++\n";
keluar<<"Proses Mutasi\n\n";
//PROSES MUTASI
for(i=1;i<=jmlinmut;i++)
{
c1=rand()%((job*msn)-1)+1;
t=-1;
while (t<0)
{
c2=rand()%((job*msn)-1)+1;
if(c2!=c1)

{
t=1;
}
}
cout<<"\nrandoman untaian :\n";
cout<<c1<<endl;
cout<<c2<<endl;
keluar<<"\nrandoman untaian ke-"<<i<<" :\n";
keluar<<c1<<" ";
keluar<<c2<<endl;
d1=c1;
d2=c2;
cout<<"\nanak mutasi sementara :\n";
keluar<<"\nanak mutasi sementara ke-"<<i<<" :\n";
for(j=1;j<=(job*msn);j++)
{
anmut[i][j]=matpop[inmut2[i]][j];
cout<<anmut[i][j]<<" ";
keluar<<anmut[i][j]<<" ";
}
mutsem=anmut[i][d1];
anmut[i][d1]=anmut[i][d2];
anmut[i][d2]=mutsem;
}//penutup for i
cout<<"\n proses hasil mutasi :\n";
keluar<<"\n proses hasil mutasi :\n";
for(i=1;i<=jmlinmut;i++)
{
for(j=1;j<=(job*msn);j++)
{
cout<<anmut[i][j]<<" ";
keluar<<anmut[i][j]<<" ";
}
cout<<endl;
keluar<<endl;
}
//SELESAI PROSES MUTASI
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//MENCARI BOBOT ANAK MUTASI
//MENCARI BOBOT
//mencari bobot
// membuat makespan (kunci 3)
cout<<"\nmembuat makespan\n";
for(i=1;i<=jmlinmut;i++)
{
keluar<<"\nmembuat makespan anak mutasi ke-"<<i<<" \n";
for(z=1;z<=job;z++)
{
cek[z]=0;
}//penutup for z

for(j=1;j<=(job*msn);j++)
{
varsem[j]=anmut[i][j];
for(k=1;k<=job;k++)
{
if(k==varsem[j])
{
cek[k]=cek[k]+1;
varsem1[j][1]=varsem[j];
varsem1[j][2]=cek[k];
}
}//penutup for k
}//penutup for j
//----------------------------------------------------------------//SUB BOBOT anak mutasi 1
//nilai awal untuk elemen anak mutasi yang berbeda
for(ii=1;ii<=job;ii++)
{
for(jj=1;jj<=msn;jj++)
{
makespan[ii][jj]=0;
}
}
for(ii=1;ii<=job;ii++)
{
maksi[ii]=0;
}
for(ii=1;ii<=msn;ii++)
{
maksj[ii]=0;
}
//---------------------------------------------------------//SUB BOBOT anak mutasi 2
for(k=1;k<=(job*msn);k++)
{
maksij=maksi[varsem1[k][1]];
if(maksij<=maksj[varsem1[k][2]])
{
maksij=maksj[varsem1[k][2]];
}
makespan[varsem1[k][1]][varsem1[k][2]]=maksij+wkt[varsem1[k
][1]][varsem1[k][2]];
//update nilai maksimal
/*for(ii=1;ii<=job;ii++)
{
maksi[ii]=makespan[ii][1];
}
for(ii=1;ii<=msn;ii++)
{
maksj[ii]=makespan[1][ii];
}
*/
for(ii=1;ii<=job;ii++)
{
for(jj=1;jj<=(msn);jj++)

{
maksi[ii]=max(makespan[ii][jj],maksi[ii]);
/*if(maksj[jj]<makespan[ii][jj])
{
maksj[jj]==makespan[ii][jj];
}*/
}
}
for(jj=1;jj<=msn;jj++)
{
for(ii=1;ii<=(job);ii++)
{
maksj[jj]=max(makespan[ii][jj],maksj[jj]);
/*if(maksj[jj]<makespan[ii][jj])
{
maksj[jj]==makespan[ii][jj];
}*/
}
}
}//for k

bobotanmut[i]=maksj[msn];
for(ii=1;ii<=job;ii++)
{
for(jj=1;jj<=msn;jj++)
{
keluar<<makespan[ii][jj]<<" ";
}
keluar<<"\n";
}
}//penutup for i
for(i=1;i<=(job*msn);i++)
{
for(j=1;j<=2;j++)
{
cout<<varsem1[i][j]<<" ";
}
cout<<"\n";
}
for(i=1;i<=job;i++)
{
for(j=1;j<=msn;j++)
{
cout<<makespan[i][j]<<" ";
}
cout<<"\n";
}
cout<<"maksi anak mutasi:\n";
for(i=1;i<=job;i++)
{

cout<<maksi[i]<<" ";
}
cout<<endl;
for(j=1;j<=msn;j++)
{
cout<<maksj[j]<<" ";
}
cout<<"\nbobot anak mutasi :\n";
keluar<<"\nbobot anak mutasi :\n";
tbobot=0;
for(i=1;i<=jmlinmut;i++)
{
cout<<bobotanmut[i]<<" ";
keluar<<bobotanmut[i]<<" ";
tbobot=tbobot+bobot[i];
}
cout<<"\n";
//SELESAI MENGHITUNG BOBOT anak mutasi
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
keluar<<"\n\n++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++\n";
keluar<<"Proses penggabungan anak dan induk\n\n";
//menggabungkan anak dan induk (solusi dan bobot)
i3=1;
//matpop
for(i=1;i<=pops;i++)
{
for(j=1;j<=(job*msn);j++)
{
gabungsol[i][j]=matpop[i][j];
}
gabungbob[i][1]=bobot[i];
i3=i3+1;
}
//anak cross
for(i=1;i<=(jmlincross-1);i++)
{
for(j=1;j<=(job*msn);j++)
{
gabungsol[i3][j]=ancross[i][j];
}
gabungbob[i3][1]=bobotancross[i];
i3=i3+1;
}
//anak mutasi
for(i=1;i<=jmlinmut;i++)
{
for(j=1;j<=(job*msn);j++)
{
gabungsol[i3][j]=anmut[i][j];
}
gabungbob[i3][1]=bobotanmut[i];

i3=i3+1;
}
//counter
for(i=1;i<=(i3-1);i++)
{ k=i;
gabungsol[i][(job*msn)+1]=k;
gabungbob[i][2]=k;
}
cout<<"\n\ngabung solusi :\n";
keluar<<"\n\ngabung solusi :\n";
for(i=1;i<=(i3-1);i++)
{
for(j=1;j<=((job*msn)+1);j++)
{
cout<<gabungsol[i][j]<<" ";
keluar<<gabungsol[i][j]<<" ";
}
cout<<endl;
keluar<<endl;
}
cout<<"\n\ngabung bobot :\n";
keluar<<"\n\ngabung bobot :\n";
for(i=1;i<=(i3-1);i++)
{
for(j=1;j<=2;j++)
{
cout<<gabungbob[i][j]<<" ";
keluar<<gabungbob[i][j]<<" ";
}
cout<<endl;
keluar<<endl;
}
// SELESAI menggabungkan anak dan induk (solusi dan bobot)
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//membuat matpop baru dan merekam solusi yang terbaik
//mengurutkan
for(i=1;i<=(i3-1);i++)
{
for(j=1;j<=2;j++)
{
gabungbobur[i][j]=gabungbob[i][j];
}
}
cout<<"wis di urutno cilik-gede:\n";
keluar<<"pengurutan bobot dari kecil ke besar:\n";
k=0;
while(k<(i3-2))
{
k=0;
for(l=1;l<=(i3-2);l++)

{
if(gabungbobur[l][1]>=gabungbobur[l+1][1
])
{
tkr1=gabungbobur[l][1];
gabungbobur[l][1]=gabungbobur[l+1][1];
gabungbobur[l+1][1]=tkr1;
tkr2=gabungbobur[l][2];
gabungbobur[l][2]=gabungbobur[l+1][2];
gabungbobur[l+1][2]=tkr2;
}
}
for(l=1;l<=(i3-2);l++)
{
if(gabungbobur[l][1]<=gabungbobur[l+1][1
])
{
k=k+1;
}
}
}
for(i=1;i<=(i3-1);i++)
{
cout<<gabungbobur[i][1]<<" "<<gabungbobur[i][2]<<endl;
keluar<<gabungbobur[i][1]<<" "<<gabungbobur[i][2]<<endl;
}
//selesai mengurutkan bobot
//-----------------------------------------------------------//akan membuat solusi terbaik
for(i=1;i<=(job*msn);i++)
{
solusi[i]=gabungsol[gabungbobur[1][2]][i];
}
solusi[(job*msn)+1]=gabungbobur[1][1];
cout<<"\nsolusinya adalah :\n";
keluar<<"\nsolusinya adalah (iterasi ke-"<<it<<" :\n";
for(i=1;i<=(job*msn);i++)
{
cout<<solusi[i]<<" ";
keluar<<solusi[i]<<" ";
}
cout<<"\ndengan bobot : "<<solusi[(job*msn)+1];
keluar<<"\ndengan bobot(makespan) : "<<solusi[(job*msn)+1];
//selesai solusi terbaik
//------------------------------------------------------------//akan membuat matpop baru
for(i=1;i<=pops;i++)
{
for(j=1;j<=(job*msn);j++)
{
matpopb[i][j]=gabungsol[gabungbobur[i][2]][j];
}
}
cout<<"\nmatpop baru : \n";
keluar<<"\nmatpop baru : \n";
for(i=1;i<=pops;i++)
{

for(j=1;j<=(job*msn);j++)
{
cout<<matpopb[i][j]<<" ";
keluar<<matpopb[i][j]<<" ";
}
cout<<endl;
keluar<<endl;
}
keluar<<"\nselesai iterasi ke-"<<it;
//selesai membuat matpop baru dan merekam solusi terbaik
for(i=1;i<=pops;i++)
{
for(j=1;j<=(job*msn);j++)
{
matpop[i][j]=matpopb[i][j];
}
cout<<endl;
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
cout<<"\niterasi ke-"<<it;
}//penutup for it

keluar.close();
getch();
}

You might also like