Laporan Tugas Akhir
Universitas Kristen Maranatha
ABSTRAK
PT. Kerta Laksana adalah perusahaan manufaktur yang bergerak di bidang
pembuatan mesin, dimana pesanan pada perusahaan ini bersifat
Job Order
. Dalam
menjadwalkan pesanan yang diterima, perusahaan menerapkan metode
penjadwalan yang memprioritaskan pengerjaan
part
yang kritis artinya
part
yang
membutuhkan kepresisian yang tinggi pada saat dikerjakan. Dengan penerapan
metode penjadwalan tersebut, menyebabkan beberapa mesin menganggur, seperti
mesin plasma potong, mesin gerinda tangan, mesin bor, mesin scrap, mesin
gerinda potong, dan mesin bubut, sehingga utilisasi mesin menjadi rendah, dan
makespan
menjadi lebih lama.
Untuk mengatasi masalah yang dihadapi oleh perusahaan, diusulkan
metode penjadwalan
job shop
dengan menggunakan metode Algoritma Genetika,
Jadwal Aktif, dan Jadwal
Non-Delay
. Sebelum dilakukan pemecahan masalah
perusahaan, maka akan dilakukan pengembangan metode Algoritma Genetika
dengan menggunakan
software
Delphi, kemudian diuji validatas
software
dengan
perhitungan manual. Setelah itu dilakukan penentuan metode terbaik antara
Algoritma Genetika, Jadwal
Aktif
, dan Jadwal
Non-Delay
, dimana metode terbaik
antara ketiganya adalah Algoritma Genetika.
Laporan Tugas Akhir
Universitas Kristen Maranatha
DAFTAR ISI
ABSTRAK ... iv
KATA PENGANTAR DAN UCAPAN TERIMA KASIH... v
DAFTAR ISI ... viii
DAFTAR TABEL ... xi
DAFTAR GAMBAR ... xiii
DAFTAR LAMPIRAN ... xv
BAB 1 PENDAHULUAN
1.1 Latar Belakang Masalah ... 1 - 1
1.2 Identifikasi Masalah ... 1 - 2
1.3 Pembatasan Ruang Lingkup Penelitian dan Asumsi ... 1 - 2
1.4 Perumusan Masalah ... 1 - 3
1.5 Tujuan Penelitian ... 1 - 3
1.6 Sistematika Penulisan ... 1 - 3
BAB 2 TINJAUAN PUSTAKA
Laporan Tugas Akhir
Universitas Kristen Maranatha
DAFTAR ISI (LANJUTAN)
2.4 Peta Proses Operasi ... 2 - 31
BAB 3 METODOLOGI PENELITIAN
3.1 Metodologi Penelitian ... 3 - 1
3.2 Keterangan Metodologi Penelitian ... 3 - 4
3.3 Metodologi Penelitian untuk Pengolahan Data ... 3 - 7
3.4 Keterangan Metodologi Penelitian untuk Pengolahan Data .... 3 - 9
3.5 Metodologi Penelitian untuk
Inisialisasi
... 3 - 11
3.6 Keterangan Metodologi Penelitian untuk
Inisialisasi
... 3 - 12
3.7 Metodologi Penelitian untuk
Decoding
... 3 - 13
3.8 Keterangan Metodologi Penelitian untuk
Decoding
... 3 - 15
3.9 Metodologi Penelitian untuk
Crossover
... 3 - 17
3.10 Keterangan Metodologi Penelitian untuk
Crossover
... 3 - 19
3.11 Metodologi Penelitian untuk
Mutasi
... 3 - 21
3.12 Keterangan Metodologi Penelitian untuk
Mutasi
... 3 - 23
3.13 Metodologi Penelitian untuk
Seleksi
... 3 - 25
3.14 Keterangan Metodologi Penelitian untuk
Seleksi
... 3 - 26
BAB 4 PENGUMPULAN DATA
Laporan Tugas Akhir
Universitas Kristen Maranatha
DAFTAR ISI (LANJUTAN)
BAB 5 PENGOLAHAN DATA DAN ANALISIS
5.1 Penjadwalan Metode Perusahaan ... 5 - 1
5.2 Perhitungan Manual dengan Menggunakan Algoritma
Genetika ... 5 - 2
5.3 Perhitungan Metode Aktif dan
Non-delay
... 5 - 21
5.4 Analisis ... 5 - 27
5.4.1 Analisis Parameter Algoritma Genetika ... 5 - 27
5.4.2 Analisis Validasi
Software
... 5 - 28
5.4.3 Analisis Perbandingan Makespan Penjadwalan Perusahaan
dengan Metode Algoritma Genetika ... 5 - 28
5.4.4 Analisis Perbandingan Makespan Algoritma Genetika dengan
Jadwal Aktif dan
Non-Delay
... 5 - 29
5.4.5 Analisis Waktu Menganggur Metode Penjadwalan Perusahaan
dengan Algoritma Genetika ... 5 - 30
5.4.6 Analisis Waktu Menganggur Metode Aktif dan
Non Delay
Dengan Algoritma Genetika ... 5 - 31
5.4.7 Analisis Kelemahan Metode Perusahaan ... 5 - 32
5.4.8 Analisis Manfaat Metode Algoritma Genetika ... 5 - 33
BAB 6 KESIMPULAN DAN SARAN
Laporan Tugas Akhir
Universitas Kristen Maranatha
DAFTAR TABEL
Tabel
Judul
Halaman
[image:5.612.136.503.187.710.2]Laporan Tugas Akhir
Universitas Kristen Maranatha
DAFTAR TABEL (LANJUTAN)
5.24 Rangkuman Solusi Terbaik ... 5 - 27
5.25 Perhitungan Manual Algoritma Genetika ... 5 - 28
5.26 Hasil
Software
Algoritma Genetika ... 5 - 28
5.27 Perbandingan Nilai
Makespan
... 5 - 29
5.28 Perbandingan Nilai Makespan (metode genetika dan aktif non delay) 5 - 30
5.29 Perbandingan Waktu Menganggur ... 5 - 31
5.30 Perbandingan Waktu Menganggur Jadwal Aktif dan Genetika ... 5 - 31
5.31 Perbandingan Waktu Menganggur Jadwal
Non Delay
dan Genetika .. 5 - 32
5.32 Hasil Makespan dan Total Waktu Menganggur Metode Perusahaan
Laporan Tugas Akhir
Universitas Kristen Maranatha
DAFTAR GAMBAR
Gambar
Judul
Halaman
Laporan Tugas Akhir
Universitas Kristen Maranatha
DAFTAR GAMBAR (LANJUTAN)
Laporan Tugas Akhir
Universitas Kristen Maranatha
DAFTAR LAMPIRAN
Lampiran
Judul
Halaman
LAMPIRAN 1
TATA CARA PENGGUNAAN SOFTWARE
Langkah-langkah penggunaan Software Algoritma Genetika
Job Shop :
1. Buka program Algoritma Genetika
Job Shop
2. Masukkan data-data yang dibutuhkan dengan mengklik tombol input
yang tertera pada
software
seperti :
- Input Mesin
- Input job dan banyaknya operasi
- Input waktu proses pada setiap proses dan mesin
3. Keluar dari proses input dan masuk ke proses. Buka data yang sudah
disimpan kemudian masukkan nilai parameter yang dibutuhkan
yaitu generasi, populasi, probabilitas
crossover
, dan probabilitas
mutasi.
4. Setelah semua data lengkap, klik tombol proses dan lihat hasilnya.
LAMPIRAN 2
unit Proses;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
Operasi2: TEdit; Operasi3: TEdit; Operasi4: TEdit; SB: TScrollBar; CB: TComboBox; Label15: TLabel; Shape4: TShape; Shape5: TShape; Shape6: TShape; Label16: TLabel; Label17: TLabel; Label18: TLabel; Waktu1: TEdit; Waktu2: TEdit; Waktu3: TEdit; Waktu4: TEdit; Mulai1: TEdit; Mulai2: TEdit; Mulai3: TEdit; Mulai4: TEdit; Akhir1: TEdit; Akhir2: TEdit; Akhir3: TEdit; Akhir4: TEdit; Permutasi: TEdit; Label19: TLabel; Label20: TLabel;
procedure TCaseChange(Sender: TObject); procedure TParameterChange(Sender: TObject); procedure CButtonClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure TGenerasiChange(Sender: TObject); procedure TPopulasiChange(Sender: TObject); procedure TPcChange(Sender: TObject);
procedure TPmChange(Sender: TObject); procedure PButtonClick(Sender: TObject); procedure BExitClick(Sender: TObject); procedure BProsesClick(Sender: TObject); procedure CBChange(Sender: TObject); procedure SBChange(Sender: TObject); private
{ Private declarations } public
{ Public declarations } end;
Type
Assign : Real; End;
RMesinGenetic = Record Nama : String[30]; AssignJob : Integer; WaktuTotal : Real; ProbCross : Real; JumJob : Integer;
JobOperasi : Array[1..250] of RJobGenetic; End;
RKasusGenetic = Record MakesPan : Real;
Mesin : Array[1..100] of RMesinGenetic; End;
RParameter = Record Populasi : Integer; Generasi : Integer; Pc : Real;
Pm : Real; End;
ROperasi = Record Nama : String[30]; Waktu : Real; WaktuMulai : Real; WaktuAkhir : Real; Mesin : String[30]; Assign : Integer; End;
RJob = Record
Nama : String[30]; JumOperasi : Integer;
Operasi : Array[1..250] of ROperasi; End;
RCase = Record JumJob : Integer;
Job : Array[1..150] of RJob; End;
RMesin = Record
JumMesin : Integer;
Mesin : Array[1..100] of String[30]; End;
RParent = Record
Job : Array[1..1000] of String[30]; Pm : Array[1..1000] of Real;
End;
RSeleksi = Record Populasi : Integer; Makespan : Real; End;
var
FParameter : File Of RParameter; Kasus,KasusTemp : RCase;
FKasus : FIle of RCase; Mesin : RMesin;
FMesin : File of RMesin; pilih : Integer;
KasusGenetic,KasusGenetic2,KasusGeneticKsg,KasusGeneticDuo : RKasusGenetic;
FKasusGenetic,FKasusGeneticBest : File of RKasusGenetic; SummaryJob,SummaryJobTemp : Array[1..100] of RMesinGenetic;
RandomJob : Integer;
JumOperasiTotal : Integer; OperasiAssign: Integer;
RandomCross : Real;
ParentAsign,RandomParent : Integer;
CParent,Parent1,Parent2,OSpring1,OSpring2 : RKasusGenetic; FCParent,FParent : File Of RKasusGenetic;
OfSpringIteration : Integer;
Random1,Random2,Min,Max : Integer;
CekSama1,CekSama2, Sama1, Sama2 : Integer; Ubah1,Ubah2 : Array[1..1000] of String[30]; DumyJob : String[30];
MasukMutasi: Integer;
Seleksi : Array[1..100000] of RSeleksi; SeleksiTemp : RSeleksi;
i,j,k,l,m : integer; DumyJumJob : Integer; DumyString : String; n : integer;
PopulasiDumy, DumyMasuk : Integer; GenerasiTerbaik : Integer;
IterasiGenerasi : Integer; Lolos : Integer;
OperasiAssignAwal : Integer; z : integer;
readyjob, readymesin : real; TempJob : RJobGenetic;
NormalAssign : Array[1..1000] of integer;
CBPilih : Integer;
Click1,Click2 : Integer; Test : Text;
DumyText : String; Permutasix : Real;
implementation
{$R *.dfm}
begin
Close; end;
procedure TFormProses.BProsesClick(Sender: TObject); Procedure MakesPan;
Begin
OperasiAssign:=0; KasusTemp:=Kasus; Lolos :=1 ;
KasusGeneticDuo:=KasusGenetic;
while OperasiAssign<JumOperasiTotal do Begin
OperasiAssignAwal:=OperasiAssign; for i := 1 to Mesin.JumMesin do Begin
if
KasusGeneticDuo.Mesin[i].AssignJob<KasusGeneticDuo.Mesin[i].JumJob then
for k := 1 to Kasus.JumJob do if
KasusGeneticDuo.Mesin[i].JobOperasi[KasusGeneticDuo.Mesin[i].Assig nJob+1].Job=KasusTemp.Job[k].Nama then
Begin
for l := 1 to KasusTemp.Job[k].JumOperasi do if
KasusGeneticDuo.Mesin[i].JobOperasi[KasusGeneticDuo.Mesin[i].Assig nJob+1].Operasi=KasusTemp.Job[k].Operasi[l].Nama then
Begin
if l=1 then Begin
readyjob:=0;
readyMesin:=KasusGeneticDuo.Mesin[i].WaktuTotal; if Readyjob>ReadyMesin then ReadyMesin:=ReadyJob;
for z := 1 to KasusGeneticDuo.Mesin[i].AssignJob do Begin
ReadyMesin:=KasusGeneticDuo.Mesin[i].JobOperasi[z-1].WaktuAkhir; Break; End; End; OperasiAssign:=OperasiAssign+1; KasusGeneticDuo.Mesin[i].JobOperasi[KasusGeneticDuo.Mesin[i].Assig nJob+1].WaktuMulai:=ReadyMesin; KasusTemp.Job[k].Operasi[l].WaktuMulai:=KasusGeneticDuo.Mesin[i].J obOperasi[KasusGeneticDuo.Mesin[i].AssignJob+1].WaktuMulai; KasusGeneticDuo.Mesin[i].JobOperasi[KasusGeneticDuo.Mesin[i].Assig nJob+1].WaktuAkhir:=ReadyMesin+KasusGeneticDuo.Mesin[i].JobOperasi [KasusGeneticDuo.Mesin[i].AssignJob+1].Waktu; KasusTemp.Job[k].Operasi[l].WaktuAkhir:=KasusGeneticDuo.Mesin[i].J obOperasi[KasusGeneticDuo.Mesin[i].AssignJob+1].WaktuAkhir; KasusGeneticDuo.Mesin[i].JobOperasi[KasusGeneticDuo.Mesin[i].Assig nJob+1].Assign:=1; KasusTemp.Job[k].Operasi[l].Assign:=1; if ReadyMesin>=KasusGeneticDuo.Mesin[i].WaktuTotal then KasusGeneticDuo.Mesin[i].WaktuTotal:=KasusGeneticDuo.Mesin[i].JobO perasi[KasusGeneticDuo.Mesin[i].AssignJob+1].WaktuAkhir; KasusGeneticDuo.Mesin[i].AssignJob:=KasusGeneticDuo.Mesin[i].Assig nJob+1; Break; End;
if (l<>1) and (KasusTemp.Job[k].Operasi[l-1].Assign=1) Then Begin readyjob:=KasusTemp.Job[k].Operasi[l-1].WaktuAkhir; readyMesin:=KasusGeneticDuo.Mesin[i].WaktuTotal; if Readyjob>ReadyMesin then ReadyMesin:=ReadyJob;
for z := 1 to KasusGeneticDuo.Mesin[i].AssignJob do Begin
if z=1 then if
(KasusGeneticDuo.Mesin[i].JobOperasi[1].WaktuMulai-0)>=KasusGeneticDuo.Mesin[i].JobOperasi[KasusGeneticDuo.Mesin[i].A ssignJob+1].Waktu then
Begin
if 0>=readyjob then Begin
Break; End;
if (readyjob>0) and
KasusGeneticDuo.Mesin[i].WaktuTotal:=KasusGeneticDuo.Mesin[i].JobO perasi[KasusGeneticDuo.Mesin[i].AssignJob+1].WaktuAkhir; KasusGeneticDuo.Mesin[i].AssignJob:=KasusGeneticDuo.Mesin[i].Assig nJob+1; Break; End; End; Break; End;
if (OperasiAssignAwal<>OperasiAssign) and (lolos=0) then Break;
End;
if (OperasiAssignAwal<>OperasiAssign) and (lolos=1) then Begin
for z := 1 to Mesin.JumMesin do
NormalAssign[z]:=KasusGeneticDuo.Mesin[z].AssignJob; End
Else if (OperasiAssignAwal=OperasiAssign) and (lolos=1) then
Begin
for z := 1 to Mesin.JumMesin do Begin NormalAssign[z]:=KasusGeneticDuo.Mesin[z].AssignJob; KasusGeneticDuo.Mesin[z].AssignJob:=KasusGeneticDuo.Mesin[z].Assig nJob+1; End; lolos:=0; End
Else if (OperasiAssignAwal=OperasiAssign) and (lolos=0) then
Begin
for z := 1 to Mesin.JumMesin do
KasusGeneticDuo.Mesin[z].AssignJob:=KasusGeneticDuo.Mesin[z].Assig nJob+1;
End
Else if (OperasiAssignAwal<>OperasiAssign) and (lolos=0) then
Begin
KasusGeneticDuo.Mesin[z].JobOperasi[KasusGeneticDuo.Mesin[z].Assig nJob]:=TempJob;
End;
for z := 1 to Mesin.JumMesin do
KasusGeneticDuo.Mesin[z].AssignJob:=NormalAssign[z]; lolos:=1;
End;
if OperasiAssignAwal<>OperasiAssign then for i := 1 to Mesin.JumMesin do
for k := 1 to KasusGeneticDuo.Mesin[i].AssignJob-1 do for l := k+1 to KasusGeneticDuo.Mesin[i].AssignJob do
if
KasusGeneticDuo.Mesin[i].JobOperasi[l].WaktuMulai<KasusGeneticDuo. Mesin[i].JobOperasi[k].WaktuMulai then
Begin
TempJob:=KasusGeneticDuo.Mesin[i].JobOperasi[k];
KasusGeneticDuo.Mesin[i].JobOperasi[k]:=KasusGeneticDuo.Mesin[i].J obOperasi[l];
KasusGeneticDuo.Mesin[i].JobOperasi[l]:=TempJob; End;
End;
for i := 1 to Mesin.JumMesin do if
KasusGeneticDuo.MakesPan<KasusGeneticDuo.Mesin[i].WaktuTotal then KasusGeneticDuo.MakesPan:=KasusGeneticDuo.Mesin[i].WaktuTotal;
KasusGenetic.MakesPan:=KasusGeneticDuo.MakesPan; for i := 1 to Mesin.JumMesin do
for k := 1 to KasusGenetic.Mesin[i].JumJob do for l := 1 to KasusGeneticDuo.Mesin[i].JumJob do if
KasusGenetic.Mesin[i].JobOperasi[k].Job=KasusGeneticDuo.Mesin[i].J obOperasi[l].Job then
if
KasusGenetic.Mesin[i].JobOperasi[k].Urutan=KasusGeneticDuo.Mesin[i ].JobOperasi[l].Urutan then
Begin
KasusGenetic.Mesin[i].JobOperasi[k].WaktuMulai:=KasusGeneticDuo.Me sin[i].JobOperasi[l].WaktuMulai;
KasusGenetic.Mesin[i].JobOperasi[k].WaktuAkhir:=KasusGeneticDuo.Me sin[i].JobOperasi[l].WaktuAkhir;
End; begin CB.Items.Clear; CB.Text:=''; SB.Position:=1; SB.Enabled:=False; No1.Text:=''; No2.Text:=''; No3.Text:=''; No4.Text:=''; Job1.Text:=''; Job2.Text:=''; Job3.Text:=''; Job4.Text:=''; Operasi1.Text:=''; Operasi2.Text:=''; Operasi3.Text:=''; Operasi4.Text:=''; Waktu1.Text:=''; Waktu2.Text:=''; Waktu3.Text:=''; Waktu4.Text:=''; Mulai1.Text:=''; Mulai2.Text:=''; Mulai3.Text:=''; Mulai4.Text:=''; Akhir1.Text:=''; Akhir2.Text:=''; Akhir3.Text:=''; Akhir4.Text:=''; JumOperasiTotal:=0;
for i := 1 to Kasus.JumJob do
JumOperasiTotal:=JumOperasiTotal+Kasus.Job[i].JumOperasi;
for i := 1 to Mesin.JumMesin do Begin
SummaryJob[i].JumJob:=0;
SummaryJob[i].Nama:=Mesin.Mesin[i]; for j := 1 to Kasus.JumJob do
SummaryJob[i].JobOperasi[SummaryJob[i].JumJob].Urutan:=k; End; End; End; System.Assign(FKasusGenetic,'Temp\Temp.POP'); Rewrite(FKasusGenetic); PopulasiDumy:=0;
{Pembuatan Populasi Awal}
while PopulasiDumy<>Parameter.Populasi do Begin
KasusGenetic := KasusGeneticKsg; SummaryJobTemp:=SummaryJob;
for i := 1 to Mesin.JumMesin do Begin
DumyJumJob:=SummaryJobTemp[i].JumJob;
KasusGenetic.Mesin[i].Nama:=SummaryJobTemp[i].Nama; KasusGenetic.Mesin[i].JumJob:=SummaryJobTemp[i].JumJob; for j := 1 to SummaryJobTemp[i].JumJob do
Begin
RandomJob := Random(DumyJumJob)+1; KasusGenetic.Mesin[i].JobOperasi[j].Job:=SummaryJobTemp[i].JobOper asi[RandomJob].Job; KasusGenetic.Mesin[i].JobOperasi[j].Operasi:=SummaryJobTemp[i].Job Operasi[RandomJob].Operasi; KasusGenetic.Mesin[i].JobOperasi[j].Waktu:=SummaryJobTemp[i].JobOp erasi[RandomJob].Waktu; KasusGenetic.Mesin[i].JobOperasi[j].Urutan:=SummaryJobTemp[i].JobO perasi[RandomJob].Urutan; SummaryJobTemp[i].JobOperasi[RandomJob]:=SummaryJobTemp[i].JobOper asi[DumyJumJob]; DumyJumJob:=DumyJumJob-1; End; End;
for i := 1 to Mesin.JumMesin do
SummaryJobTemp[1].JobOperasi[1].Operasi:=KasusGenetic.Mesin[i].Job Operasi[j].Operasi; SummaryJobTemp[1].JobOperasi[1].Waktu:=KasusGenetic.Mesin[i].JobOp erasi[j].Waktu; SummaryJobTemp[1].JobOperasi[1].Urutan:=KasusGenetic.Mesin[i].JobO perasi[j].Urutan; KasusGenetic.Mesin[i].JobOperasi[j].Job:=KasusGenetic.Mesin[i].Job Operasi[k].Job; KasusGenetic.Mesin[i].JobOperasi[j].Operasi:=KasusGenetic.Mesin[i] .JobOperasi[k].Operasi; KasusGenetic.Mesin[i].JobOperasi[j].Waktu:=KasusGenetic.Mesin[i].J obOperasi[k].Waktu; KasusGenetic.Mesin[i].JobOperasi[j].Urutan:=KasusGenetic.Mesin[i]. JobOperasi[k].Urutan; KasusGenetic.Mesin[i].JobOperasi[k].Job:=SummaryJobTemp[1].JobOper asi[1].Job; KasusGenetic.Mesin[i].JobOperasi[k].Operasi:=SummaryJobTemp[1].Job Operasi[1].Operasi; KasusGenetic.Mesin[i].JobOperasi[k].Waktu:=SummaryJobTemp[1].JobOp erasi[1].Waktu; KasusGenetic.Mesin[i].JobOperasi[k].Urutan:=SummaryJobTemp[1].JobO perasi[1].Urutan; End; MakesPan;
for i := 1 to System.FileSize(FKasusGenetic) do Begin
DumyMasuk:=JumOperasiTotal; System.Seek(FKasusGenetic,i-1); Read(FKasusGenetic,KasusGenetic2);
for j:=1 to Mesin.JumMesin do
for k := 1 to KasusGenetic.Mesin[j].JumJob do if
(kasusGenetic2.Mesin[j].JobOperasi[k].Job=kasusGenetic.Mesin[j].Jo bOperasi[k].Job) and
(kasusGenetic2.Mesin[j].JobOperasi[k].Operasi=kasusGenetic.Mesin[j ].JobOperasi[k].Operasi) then DumyMasuk:=DumyMasuk-1
else Break;
if DumyMasuk=0 then Break; End;
if (System.FileSize(FKasusGenetic)=0) or (DumyMasuk>0) then Begin
PopulasiDumy:=PopulasiDumy+1;
End; End;
System.Assign(Test,'Solusi\Solusi.TXT'); Rewrite(Test);
for k := 1 to System.FileSize(FKasusGenetic) do Begin
System.Seek(FKasusGenetic,k-1); Read(FKasusGenetic,KasusGenetic); Str(0,DumyString);
DumyText:='Generasi ke-'+DumyString+' Populasi ke-'; Str(k,DumyString);
DumyText:=DumyText+DumyString+', Makespan = '; Str(KasusGenetic.Makespan:0:2,DumyString); DumyText:=DumyText+DumyString;
System.Append(Test); Writeln(Test,DumyText);
for i := 1 to Mesin.JumMesin do
for j := 1 to KasusGenetic.Mesin[i].JumJob do Begin DumyText:=KasusGenetic.Mesin[i].Nama+';'+KasusGenetic.Mesin[i].Job Operasi[j].Job+';'+KasusGenetic.Mesin[i].JobOperasi[j].Operasi+';' ; Str(KasusGenetic.Mesin[i].JobOperasi[j].Waktu:0:2,DumyString); DumyText:=DumyText + DumyString+';';
Str(KasusGenetic.Mesin[i].JobOperasi[j].WaktuMulai:0:2,DumyString) ;
DumyText:=DumyText + DumyString+';';
Str(KasusGenetic.Mesin[i].JobOperasi[j].WaktuAkhir:0:2,DumyString) ;
DumyText:=DumyText + DumyString; System.Append(Test); Writeln(Test,DumyText); End; Writeln(Test); Writeln(Test); End; IterasiGenerasi:=0; GenerasiTerbaik:=0;
while IterasiGenerasi<>Parameter.Generasi do Begin
{Proses CrossOver} if Mesin.JumMesin>2 then Begin
System.Assign(FCParent,'Temp\Temp.CPR'); Rewrite(FCParent);
for i := 1 to System.FileSize(FKasusGenetic) do Begin
RandomCross:=Random(1001)/1000; if RandomCross<=Parameter.Pc then Begin
for j := 1 to Mesin.JumMesin do Begin
CParent.Mesin[j].Nama:=KasusGenetic.Mesin[j].Nama;
CParent.Mesin[j].JumJob:=KasusGenetic.Mesin[j].JumJob;
for k := 1 to KasusGenetic.Mesin[j].JumJob do Begin CParent.Mesin[j].JobOperasi[k].Job:=KasusGenetic.Mesin[j].JobOpera si[k].Job; CParent.Mesin[j].JobOperasi[k].Operasi:=KasusGenetic.Mesin[j].JobO perasi[k].Operasi; CParent.Mesin[j].JobOperasi[k].Urutan:=KasusGenetic.Mesin[j].JobOp erasi[k].Urutan; CParent.Mesin[j].JobOperasi[k].Waktu:=KasusGenetic.Mesin[j].JobOpe rasi[k].Waktu; End; End; System.Seek(FCParent,System.FileSize(FCParent)); Write(FCParent,CParent); End; End;
ParentAsign:=(System.FileSize(FCParent) Div 2)*2;
System.Assign(FParent,'Temp\Temp.PRT'); Rewrite(FParent);
while ParentAsign<>0 do Begin RandomParent:=Random(ParentAsign)+1; System.Seek(FCParent,RandomParent-1);Read(FCParent,CParent); System.Seek(FParent,System.FileSize(FParent)); Write(FParent,CParent); System.Seek(FCParent,ParentAsign-1);Read(FCParent,CParent); System.Seek(FCParent,RandomParent-1);Write(FCParent,CParent); ParentAsign:=ParentAsign-1; End; System.Close(FCParent);
for OfSpringIteration := 1 to System.FileSize(FParent) Div 2 do
Begin
System.Seek(FParent,(2*(OfSpringIteration-1))+1); Read(FParent,Parent2);
Random1:=Random(Mesin.JumMesin-2)+2; Random2:=Random(Mesin.JumMesin-2)+2; if Random1<=Random2 then
Begin
Min:=Random1; Max:=Random2; End;
if Random2<Random1 then Begin
Min:=Random2; Max:=Random1; End;
for i := 1 to Min-1 do Begin
OSpring1.Mesin[i]:=Parent1.Mesin[i]; OSpring2.Mesin[i]:=Parent2.Mesin[i]; End;
for i := Min to Max do Begin
OSpring1.Mesin[i]:=Parent2.Mesin[i]; OSpring2.Mesin[i]:=Parent1.Mesin[i]; End;
for i := Max+1 to Mesin.JumMesin do Begin OSpring1.Mesin[i]:=Parent1.Mesin[i]; OSpring2.Mesin[i]:=Parent2.Mesin[i]; End; KasusGenetic:=OSpring1; MakesPan; System.Seek(FKasusGenetic,System.FileSize(FKasusGenetic)); Write(FKasusGenetic,KasusGenetic); KasusGenetic:=OSpring2; MakesPan; System.Seek(FKasusGenetic,System.FileSize(FKasusGenetic)); Write(FKasusGenetic,KasusGenetic); End; System.Close(FParent); End; {Proses Mutasi} System.Assign(FParent,'Temp\Temp.PRT'); Rewrite(FParent);
for i := 1 to System.FileSize(FKasusGenetic) do Begin
System.Seek(FKasusGenetic,i-1); Read(FKasusGenetic,KasusGenetic);
MasukMutasi:=0;
CParent.Mesin[j].Nama:=KasusGenetic.Mesin[j].Nama;
CParent.Mesin[j].JumJob:=KasusGenetic.Mesin[j].JumJob;
for k := 1 to KasusGenetic.Mesin[j].JumJob do Begin CParent.Mesin[j].JobOperasi[k].Job:=KasusGenetic.Mesin[j].JobOpera si[k].Job; CParent.Mesin[j].JobOperasi[k].Operasi:=KasusGenetic.Mesin[j].JobO perasi[k].Operasi; CParent.Mesin[j].JobOperasi[k].Urutan:=KasusGenetic.Mesin[j].JobOp erasi[k].Urutan; CParent.Mesin[j].JobOperasi[k].Waktu:=KasusGenetic.Mesin[j].JobOpe rasi[k].Waktu; CParent.Mesin[j].JobOperasi[k].ProbMut:=Random(1001)/1000; if CParent.Mesin[j].JobOperasi[k].ProbMut<=Parameter.Pm then MasukMutasi:=1; End; End;
If MasukMutasi=1 Then Begin
System.Seek(FParent,System.FileSize(FParent)); Write(FParent,CParent);
End; End;
for OfSpringIteration := 1 to System.FileSize(FParent) do Begin
System.Seek(FParent,OfSpringIteration-1); Read(FParent,Cparent);
for j := 1 to Mesin.JumMesin do
for k := 1 to CParent.Mesin[j].JumJob do if
CParent.Mesin[j].JobOperasi[k].ProbMut<=Parameter.Pm Then Begin
OSpring1.Mesin[1].JobOperasi[1].Urutan:=CParent.Mesin[j].JobOperas i[k].Urutan; CParent.Mesin[j].JobOperasi[k].Job:=CParent.Mesin[j].JobOperasi[k+ 1].Job; CParent.Mesin[j].JobOperasi[k].Operasi:=CParent.Mesin[j].JobOperas i[k+1].Operasi; CParent.Mesin[j].JobOperasi[k].Waktu:=CParent.Mesin[j].JobOperasi[ k+1].Waktu; CParent.Mesin[j].JobOperasi[k].Urutan:=CParent.Mesin[j].JobOperasi [k+1].Urutan; CParent.Mesin[j].JobOperasi[k+1].Job:=OSpring1.Mesin[1].JobOperasi [1].Job; CParent.Mesin[j].JobOperasi[k+1].Operasi:=OSpring1.Mesin[1].JobOpe rasi[1].Operasi; CParent.Mesin[j].JobOperasi[k+1].Waktu:=OSpring1.Mesin[1].JobOpera si[1].Waktu; CParent.Mesin[j].JobOperasi[k+1].Urutan:=OSpring1.Mesin[1].JobOper asi[1].Urutan; End;
CParent.Mesin[j].JobOperasi[k].Urutan:=CParent.Mesin[j].JobOperasi [1].Urutan; CParent.Mesin[j].JobOperasi[1].Job:=OSpring1.Mesin[1].JobOperasi[1 ].Job; CParent.Mesin[j].JobOperasi[1].Operasi:=OSpring1.Mesin[1].JobOpera si[1].Operasi; CParent.Mesin[j].JobOperasi[1].Waktu:=OSpring1.Mesin[1].JobOperasi [1].Waktu; CParent.Mesin[j].JobOperasi[1].Urutan:=OSpring1.Mesin[1].JobOperas i[1].Urutan; End; End; KasusGenetic:=CParent;
for i := 1 to Mesin.JumMesin do
KasusGenetic.Mesin[i].JobOperasi[k].Operasi:=SummaryJobTemp[1].Job Operasi[1].Operasi;
KasusGenetic.Mesin[i].JobOperasi[k].Waktu:=SummaryJobTemp[1].JobOp erasi[1].Waktu;
KasusGenetic.Mesin[i].JobOperasi[k].Urutan:=SummaryJobTemp[1].JobO perasi[1].Urutan;
End;
MakesPan;
System.Seek(FKasusGenetic,System.FileSize(FKasusGenetic)); Write(FKasusGenetic,KasusGenetic);
End;
System.Close(FParent);
{Proses Seleksi}
for i := 1 to System.FileSize(FKasusGenetic) do Begin
System.Seek(FKasusGenetic,i-1); Read(FKasusGenetic,KasusGenetic);
Seleksi[i].Populasi:=i;
Seleksi[i].Makespan:=KasusGenetic.MakesPan; End;
for i := 1 to System.FileSize(FKasusGenetic) - 1 do for j := i+1 to System.FileSize(FKasusGenetic) do if Seleksi[i].Makespan>Seleksi[j].Makespan then Begin
SeleksiTemp:=Seleksi[i]; Seleksi[i]:=Seleksi[j]; Seleksi[j]:=SeleksiTemp; End;
if Seleksi[1].Populasi>Parameter.Populasi then GenerasiTerbaik:=IterasiGenerasi+1;
System.Assign(FKasusGeneticBest,'Temp\Temp.SLK'); Rewrite(FKasusGeneticBest);
for i := 1 to Parameter.Populasi do Begin
System.Seek(FKasusGenetic,Seleksi[i].Populasi-1); Read(FKasusGenetic,KasusGenetic);
System.Seek(FKasusGeneticBest,i-1); Write(FKasusGeneticBest,KasusGenetic);
End;
System.Close(FKasusGenetic);
System.Assign(FKasusGenetic,'Temp\Temp.POP'); Rewrite(FKasusGenetic);
for i := 1 to Parameter.Populasi do Begin
System.Seek(FKasusGenetic,i-1); Write(FKasusGenetic,KasusGenetic);
End;
System.Close(FKasusGeneticBest);
for k := 1 to System.FileSize(FKasusGenetic) do Begin
System.Seek(FKasusGenetic,k-1); Read(FKasusGenetic,KasusGenetic); Str(IterasiGenerasi+1,DumyString);
DumyText:='Generasi ke-'+DumyString+' Populasi ke-'; Str(k,DumyString);
DumyText:=DumyText+DumyString+', Makespan = '; Str(KasusGenetic.Makespan:0:2,DumyString); DumyText:=DumyText+DumyString;
System.Append(Test); Writeln(Test,DumyText);
for i := 1 to Mesin.JumMesin do
for j := 1 to KasusGenetic.Mesin[i].JumJob do Begin DumyText:=KasusGenetic.Mesin[i].Nama+';'+KasusGenetic.Mesin[i].Job Operasi[j].Job+';'+KasusGenetic.Mesin[i].JobOperasi[j].Operasi+';' ; Str(KasusGenetic.Mesin[i].JobOperasi[j].Waktu:0:2,DumyString); DumyText:=DumyText + DumyString+';';
Str(KasusGenetic.Mesin[i].JobOperasi[j].WaktuMulai:0:2,DumyString) ;
DumyText:=DumyText + DumyString+';';
Str(KasusGenetic.Mesin[i].JobOperasi[j].WaktuAkhir:0:2,DumyString) ;
DumyText:=DumyText + DumyString; System.Append(Test); Writeln(Test,DumyText); End; Writeln(Test); Writeln(Test); End; IterasiGenerasi:=IterasiGenerasi+1; End; System.Close(Test);
{Penulisan Solusi Terbaik}
System.Assign(Test,'Solusi\SolusiTerbaik.TXT'); Rewrite(Test);
System.Seek(FKasusGenetic,0); Read(FKasusGenetic,KasusGenetic); Str(GenerasiTerbaik,DumyString);
DumyText:=DumyText+DumyString; System.Append(Test);
Writeln(Test,DumyText);
for i := 1 to Mesin.JumMesin do
for j := 1 to KasusGenetic.Mesin[i].JumJob do Begin DumyText:=KasusGenetic.Mesin[i].Nama+';'+KasusGenetic.Mesin[i].Job Operasi[j].Job+';'+KasusGenetic.Mesin[i].JobOperasi[j].Operasi+';' ; Str(KasusGenetic.Mesin[i].JobOperasi[j].Waktu:0:2,DumyString); DumyText:=DumyText + DumyString+';';
Str(KasusGenetic.Mesin[i].JobOperasi[j].WaktuMulai:0:2,DumyString) ;
DumyText:=DumyText + DumyString+';';
Str(KasusGenetic.Mesin[i].JobOperasi[j].WaktuAkhir:0:2,DumyString) ;
DumyText:=DumyText + DumyString; System.Append(Test); Writeln(Test,DumyText); End; System.Close(Test); System.Close(FKasusGenetic); Str(KasusGenetic.MakesPan:0:2,DumyString); TMakesPan.Text:=DumyString; Str(GenerasiTerbaik,DumyString); TGenBest.Text:=DumyString;
for i := 1 to Mesin.JumMesin do
CB.Items.Append(KasusGenetic.Mesin[i].Nama); CB.Enabled:=True;
end;
procedure TFormProses.CBChange(Sender: TObject); begin
for i := 1 to Mesin.JumMesin do
if CB.Text=KasusGenetic.Mesin[i].Nama then CBPilih:=i; if KasusGenetic.Mesin[CBPilih].JumJob=1 then
Operasi3.Text:=''; Operasi4.Text:=''; Str(KasusGenetic.Mesin[CBPilih].JobOperasi[1].Waktu:0:2,DumyString ); Waktu1.Text:=DumyString; Waktu2.Text:=''; Waktu3.Text:=''; Waktu4.Text:=''; Str(KasusGenetic.Mesin[CBPilih].JobOperasi[1].WaktuMulai:0:2,DumyS tring); Mulai1.Text:=DumyString; Mulai2.Text:=''; Mulai3.Text:=''; Mulai4.Text:=''; Str(KasusGenetic.Mesin[CBPilih].JobOperasi[1].WaktuAkhir:0:2,DumyS tring); Akhir1.Text:=DumyString; Akhir2.Text:=''; Akhir3.Text:=''; Akhir4.Text:=''; End;
Str(KasusGenetic.Mesin[CBPilih].JobOperasi[1].WaktuMulai:0:2,DumyS tring); Mulai1.Text:=DumyString; Str(KasusGenetic.Mesin[CBPilih].JobOperasi[2].WaktuMulai:0:2,DumyS tring); Mulai2.Text:=DumyString; Mulai3.Text:=''; Mulai4.Text:=''; Str(KasusGenetic.Mesin[CBPilih].JobOperasi[1].WaktuAkhir:0:2,DumyS tring); Akhir1.Text:=DumyString; Str(KasusGenetic.Mesin[CBPilih].JobOperasi[2].WaktuAkhir:0:2,DumyS tring); Akhir2.Text:=DumyString; Akhir3.Text:=''; Akhir4.Text:=''; End;
Str(KasusGenetic.Mesin[CBPilih].JobOperasi[1].WaktuMulai:0:2,DumyS tring); Mulai1.Text:=DumyString; Str(KasusGenetic.Mesin[CBPilih].JobOperasi[2].WaktuMulai:0:2,DumyS tring); Mulai2.Text:=DumyString; Str(KasusGenetic.Mesin[CBPilih].JobOperasi[3].WaktuMulai:0:2,DumyS tring); Mulai3.Text:=DumyString; Mulai4.Text:=''; Str(KasusGenetic.Mesin[CBPilih].JobOperasi[1].WaktuAkhir:0:2,DumyS tring); Akhir1.Text:=DumyString; Str(KasusGenetic.Mesin[CBPilih].JobOperasi[2].WaktuAkhir:0:2,DumyS tring); Akhir2.Text:=DumyString; Str(KasusGenetic.Mesin[CBPilih].JobOperasi[3].WaktuAkhir:0:2,DumyS tring); Akhir3.Text:=DumyString; Akhir4.Text:=''; End;
Str(KasusGenetic.Mesin[CBPilih].JobOperasi[2].Waktu:0:2,DumyString ); Waktu2.Text:=DumyString; Str(KasusGenetic.Mesin[CBPilih].JobOperasi[3].Waktu:0:2,DumyString ); Waktu3.Text:=DumyString; Str(KasusGenetic.Mesin[CBPilih].JobOperasi[4].Waktu:0:2,DumyString ); Waktu4.Text:=DumyString; Str(KasusGenetic.Mesin[CBPilih].JobOperasi[1].WaktuMulai:0:2,DumyS tring); Mulai1.Text:=DumyString; Str(KasusGenetic.Mesin[CBPilih].JobOperasi[2].WaktuMulai:0:2,DumyS tring); Mulai2.Text:=DumyString; Str(KasusGenetic.Mesin[CBPilih].JobOperasi[3].WaktuMulai:0:2,DumyS tring); Mulai3.Text:=DumyString; Str(KasusGenetic.Mesin[CBPilih].JobOperasi[4].WaktuMulai:0:2,DumyS tring); Mulai4.Text:=DumyString; Str(KasusGenetic.Mesin[CBPilih].JobOperasi[1].WaktuAkhir:0:2,DumyS tring); Akhir1.Text:=DumyString; Str(KasusGenetic.Mesin[CBPilih].JobOperasi[2].WaktuAkhir:0:2,DumyS tring); Akhir2.Text:=DumyString; Str(KasusGenetic.Mesin[CBPilih].JobOperasi[3].WaktuAkhir:0:2,DumyS tring); Akhir3.Text:=DumyString; Str(KasusGenetic.Mesin[CBPilih].JobOperasi[4].WaktuAkhir:0:2,DumyS tring); Akhir4.Text:=DumyString; End;
procedure TFormProses.CButtonClick(Sender: TObject); begin System.Assign(FKasus,'Case\'+TCase.Text+'.JOB'); {$I-} Reset(FKasus); {$I+} n:=IORESULT; Reset(FKasus); System.Seek(FKasus,0); Read(FKasus,Kasus); System.Close(FKasus); System.Assign(FMesin,'Case\'+TCase.Text+'.MSN'); Reset(FMesin); System.Seek(FMesin,0); Read(FMesin,Mesin); System.Close(FMesin);
if n=0 then Begin LCase.Caption:=TCase.Text; Str(Mesin.JumMesin,DumyString); TMesin.Text:=DumyString; Str(Kasus.JumJob,DumyString); TJob.Text:=DumyString; Click1:=1;
for i := 1 to Mesin.JumMesin do Begin
SummaryJob[i].JumJob:=0;
SummaryJob[i].Nama:=Mesin.Mesin[i]; for j := 1 to Kasus.JumJob do
for k := 1 to Kasus.Job[j].JumOperasi do Begin if Kasus.Job[j].Operasi[k].Mesin=mesin.Mesin[i] then Begin SummaryJob[i].JumJob:=SummaryJob[i].JumJob+1; End; End; End; Permutasix:=1;
for i := 1 to Mesin.JumMesin do
for j := 1 to SummaryJob[i].JumJob do Permutasix:=Permutasix*j;
Str(Permutasix:0:0,DumyString); Permutasi.Text:=DumyString; End;
TCase.Text:='';
if (Click1+Click2)= 2 then BProses.Enabled:=True; if (Click1+Click2)< 2 then BProses.Enabled:=False; end;
begin
Randomize; Click1:=0; Click2:=0; end;
procedure TFormProses.PButtonClick(Sender: TObject); begin System.Assign(FParameter,'Parameter\'+TParameter.Text+'.PRM'); {$I-} Reset(FParameter); {$I+} n:=IORESULT; Reset(FParameter); System.Seek(FParameter,0); Read(FParameter,Parameter); System.Close(FParameter);
if n=0 then Begin Click2:=1; Str(Parameter.Populasi,DumyString); TPopulasi.Text:=DumyString; Str(Parameter.Generasi,DumyString); TGenerasi.Text:=DumyString; Str(Parameter.Pc:0:2,DumyString); TPc.Text:=DumyString; Str(Parameter.Pm:0:2,DumyString); TPm.Text:=DumyString; End; TParameter.Text:='';
if (Click1+Click2)= 2 then BProses.Enabled:=True; if (Click1+Click2)< 2 then BProses.Enabled:=False; end;
Job4.Text:=KasusGenetic.Mesin[CBPilih].JobOperasi[SB.Position+4-1].Job; Operasi1.Text:=KasusGenetic.Mesin[CBPilih].JobOperasi[SB.Position+ 1-1].Operasi; Operasi2.Text:=KasusGenetic.Mesin[CBPilih].JobOperasi[SB.Position+ 2-1].Operasi; Operasi3.Text:=KasusGenetic.Mesin[CBPilih].JobOperasi[SB.Position+ 3-1].Operasi; Operasi4.Text:=KasusGenetic.Mesin[CBPilih].JobOperasi[SB.Position+ 4-1].Operasi; str(KasusGenetic.Mesin[CBPilih].JobOperasi[SB.Position+1-1].waktu:0:2,DumyString); Waktu1.Text:=DumyString; str(KasusGenetic.Mesin[CBPilih].JobOperasi[SB.Position+2-1].waktu:0:2,DumyString); Waktu2.Text:=DumyString; str(KasusGenetic.Mesin[CBPilih].JobOperasi[SB.Position+3-1].waktu:0:2,DumyString); Waktu3.Text:=DumyString; str(KasusGenetic.Mesin[CBPilih].JobOperasi[SB.Position+4-1].waktu:0:2,DumyString); Waktu4.Text:=DumyString; str(KasusGenetic.Mesin[CBPilih].JobOperasi[SB.Position+1-1].WaktuMulai:0:2,DumyString); Mulai1.Text:=DumyString; str(KasusGenetic.Mesin[CBPilih].JobOperasi[SB.Position+2-1].WaktuMulai:0:2,DumyString); Mulai2.Text:=DumyString; str(KasusGenetic.Mesin[CBPilih].JobOperasi[SB.Position+3-1].WaktuMulai:0:2,DumyString); Mulai3.Text:=DumyString; str(KasusGenetic.Mesin[CBPilih].JobOperasi[SB.Position+4-1].WaktuMulai:0:2,DumyString); Mulai4.Text:=DumyString; str(KasusGenetic.Mesin[CBPilih].JobOperasi[SB.Position+1-1].WaktuAkhir:0:2,DumyString); Akhir1.Text:=DumyString; str(KasusGenetic.Mesin[CBPilih].JobOperasi[SB.Position+2-1].WaktuAkhir:0:2,DumyString); Akhir2.Text:=DumyString; str(KasusGenetic.Mesin[CBPilih].JobOperasi[SB.Position+3-1].WaktuAkhir:0:2,DumyString); Akhir3.Text:=DumyString; str(KasusGenetic.Mesin[CBPilih].JobOperasi[SB.Position+4-1].WaktuAkhir:0:2,DumyString); Akhir4.Text:=DumyString; end;
procedure TFormProses.TCaseChange(Sender: TObject); begin
if TCase.Text='' then CButton.Enabled:=False; end;
procedure TFormProses.TGenerasiChange(Sender: TObject); begin
Val(TGenerasi.Text,Parameter.Generasi,i);
if (TGenerasi.Text<>'') and (TPopulasi.Text<>'') and (TPC.Text<>'') and (TPm.Text<>'') then CLick2:=1;
if (TGenerasi.Text='') or (TPopulasi.Text='') or (TPC.Text='') or (TPm.Text='') then CLick2:=0;
if (Click1+Click2)= 2 then BProses.Enabled:=True; if (Click1+Click2)< 2 then BProses.Enabled:=False; end;
procedure TFormProses.TParameterChange(Sender: TObject); begin
if TParameter.Text<>'' then PButton.Enabled:=True; if TParameter.Text='' then PButton.Enabled:=False; end;
procedure TFormProses.TPcChange(Sender: TObject); begin
Val(TPc.Text,Parameter.Pc,i);
if (TGenerasi.Text<>'') and (TPopulasi.Text<>'') and (TPC.Text<>'') and (TPm.Text<>'') then CLick2:=1;
if (TGenerasi.Text='') or (TPopulasi.Text='') or (TPC.Text='') or (TPm.Text='') then CLick2:=0;
if (Click1+Click2)= 2 then BProses.Enabled:=True; if (Click1+Click2)< 2 then BProses.Enabled:=False; end;
procedure TFormProses.TPmChange(Sender: TObject); begin
Val(TPm.Text,Parameter.Pm,i);
if (TGenerasi.Text<>'') and (TPopulasi.Text<>'') and (TPC.Text<>'') and (TPm.Text<>'') then CLick2:=1;
if (TGenerasi.Text='') or (TPopulasi.Text='') or (TPC.Text='') or (TPm.Text='') then CLick2:=0;
if (Click1+Click2)= 2 then BProses.Enabled:=True; if (Click1+Click2)< 2 then BProses.Enabled:=False; end;
procedure TFormProses.TPopulasiChange(Sender: TObject); begin
Val(TPopulasi.Text,Parameter.Populasi,i);
if (TGenerasi.Text<>'') and (TPopulasi.Text<>'') and (TPC.Text<>'') and (TPm.Text<>'') then CLick2:=1;
if (TGenerasi.Text='') or (TPopulasi.Text='') or (TPC.Text='') or (TPm.Text='') then CLick2:=0;
if (Click1+Click2)= 2 then BProses.Enabled:=True; if (Click1+Click2)< 2 then BProses.Enabled:=False; end;
LAMPIRAN 3
Gantt Chart Perusahaan
Keterangan :
11 UNP
10 PLAT PENUTUP 9 PLAT DUDUKAN ROL 8 PLAT PENGUAT 7 PLAT HALANGAN KECIL 6 PLAT HALANGAN PANJANG 5 PLAT PAGAR
LAMPIRAN 4
HASIL PENGOLAHAN STUDI KASUS ALGORITMA
Kasus 1 : Penjadwalan 4 Job 4 mesin
Matriks Routing Proses
1 2 3 4
1 1 2 3 2
2 1 3 4 2
3 4 3 2 3
4 1 4 2 4
Operasi ke-Job
Matriks Routing Waktu (menit)
1 2 3 4
1 20 30 60 35
2 30 60 35 40
3 35 65 25 80
4 15 45 40 70
Operasi ke-Job
Pc
Makespan
0,1
295
0,2
300
0,3
295
0,4
295
0,5
295
0,6
295
0,7
300
0,8
295
0,9
295
0,95
295
Pm Makespan 0,001 295 0,005 295 0,01 295 0,015 295 0,02 295 0,025 295 0,03 295 0,035 295 0,04 295 0,045 295 Populasi Makespan 1 390 5 295 10 295 15 295 20 295 25 295 30 295 35 295Variansi Parameter Pc
292 294 296 298 300 302
0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,95
Variansi parameter Pm
0 100 200 300 400
0,001 0,005 0,01 0,015 0,02 0,025 0,03 0,035 0,04 0,045
Pm
M
a
k
e
s
p
a
n
Varians i Populasi
0 100 200 300 400 500
1 5 10 15 20 25 30 35
Populasi
M
a
k
e
s
p
a
n
Kasus 2 : Penjadwalan 5 Job 6 mesin
Matriks Routing Proses
1 2 3 4 5 6
1 1 2 3 4 6 1
2 5 6 2 1 6
-3 2 4 3 1 4 6
4 4 2 6 2 1
-5 5 1 2 4 1 6
Job Operasi
ke-Matriks Routing Waktu (menit)
1 2 3 4 5 6
1 20 15 25 35 30 10
2 30 15 25 35 30
-3 25 35 40 40 30 10
4 35 40 25 25 30
-5 15 25 40 25 30 10
ke-Pc Makespan 0,1 230 0,2 230 0,3 230 0,4 230 0,5 230 0,6 230 0,7 230 0,8 230 0,9 230 0,95 230 Pm Makespan 0,001 230 0,005 230 0,01 230 0,015 230 0,02 230 0,025 230 0,03 230 0,035 230 0,04 230 0,045 230 Populasi Makespan 1 290 5 230 10 230 15 230 20 230 25 230 30 230 35 230
Variansi Parameter Pc
0 50 100 150 200 250 300
0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,95
Pc M a k e s p a n
Variansi Parameter Pm
0 50 100 150 200 250 300
0,001 0,005 0,01 0,015 0,02 0,025 0,03 0,035 0,04 0,045
Variansi Populasi
0 50 100 150 200 250 300
1 5 10 15 20 25 30 35
Populasi
M
a
k
e
s
p
a
n
Kasus 3 : Penjadwalan 5 Job 6 mesin (KL)
Matriks Routing Proses
1 2 3
1 1 2
2 1 2
3 1 3 4
4 1 3 4
5 5 6 2
Job Operasi
ke-Matriks Routing Waktu (menit)
1 2 3
1 90 180
2 120 120
3 180 120 240
4 60 120 180
5 90 540 180
ke-Pc Makespan 0,1 810 0,2 810 0,3 810 0,4 810 0,5 810 0,6 810 0,7 810 0,8 810 0,9 810 0,95 810 Pm Makespan 0,001 810 0,005 810 0,01 810 0,015 810 0,02 810 0,025 810 0,03 810 0,035 810 0,04 810 0,045 810 Populasi Makespan 1 810 5 810 10 810 15 810 20 810 25 810 30 810 35 810
Variansi Parameter Pc
250 350 450 550 650 750 850
0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,95
Pc M a k e s p a n
Variansi Parameter Pm
250 350 450 550 650 750 850
0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,95
Variansi Populasi
250 350 450 550 650 750 850
1 5 10 15 20 25 30 35
Populasi
M
a
k
e
s
p
a
n
Kasus 4 : Penjadwalan 7 Job 4 mesin
Matriks Routing Proses
1 2 3 4
1 2 3 4 3
2 1 4
3 1 4 3
4 2 4 3
5 2 3 2 4
6 1 3 4
7 1 4 3 3
Job Operasi
ke-Matriks Routing Waktu (menit)
1 2 3 4
1 20 32 60 40
2 75 50
3 40 80 40
4 30 50 35
5 60 70 30 40
6 30 50 75
7 20 40 40 25
ke-Pc Makespan 0,1 415 0,2 415 0,3 430 0,4 425 0,5 435 0,6 415 0,7 420 0,8 415 0,9 417 0,95 415 Pm Makespan 0,001 415 0,005 417 0,01 415 0,015 415 0,02 415 0,025 417 0,03 415 0,035 425 0,04 415 0,045 415 Populasi Makespan 1 482 5 447 10 427 15 425 20 420 25 415 30 415 35 415
Variansi Parameter Pc
400 410 420 430 440
0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,95
Pc M a k e s p a n
Variansi parameter Pm
410 415 420 425 430
0,001 0,005 0,01 0,015 0,02 0,025 0,03 0,035 0,04 0,045
Variansi Populasi
380 400 420 440 460 480 500
1 5 10 15 20 25 30 35
Populasi
M
a
k
e
s
p
a
n
Kasus 5 : Penjadwalan 8 Job 6 mesin
Matriks Routing Proses
1 2 3 4 5 6
1 1 2 3 4 3 6
2 3 4 5 6 4 3
3 3 2 1 4 5 2
4 4 2 4 2 1 5
5 2 3 4 2 3 4
6 1 2 3 6 5 4
7 3 5 6 2 1 3
8 3 5 6 1 3 2
Job Operasi
ke-Matriks Routing Waktu (menit)
1 2 3 4 5 6
1 21 23 24 25 25 30
2 35 34 30 12 32 34
3 23 24 25 32 24 45
4 25 30 32 31 33 35
5 35 30 25 31 30 25
6 30 35 20 25 21 20
7 21 25 31 35 30 25
8 24 27 30 31 40 25
ke-Pc Makespan 0,1 361 0,2 347 0,3 334 0,4 343 0,5 335 0,6 331 0,7 342 0,8 331 0,9 331 0,95 331 Pm Makespan 0,001 331 0,005 331 0,01 331 0,015 331 0,02 331 0,025 331 0,03 331 0,035 331 0,04 331 0,045 331 Populasi Makespan 1 335 5 331 10 331 15 331 20 331 25 331 30 331 35 331
Variansi Parameter Pc
100 150 200 250 300 350 400 450 500
0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,95
Pc M a k e s p a n
Variansi Parameter Pm
100 150 200 250 300 350 400 450 500
0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,95
Variansi Populasi
100 150 200 250 300 350 400 450 500
1 5 10 15 20 25 30 35
Populasi
M
a
k
e
s
p
a
n
Kasus 6 : Penjadwalan 11 Job 6 mesin
Matriks Routing Proses
1 2 3 4
1 4 6
2 1 6
3 4 6
4 4 2
5 1 5 3
6 4 2
7 4 2
8 1 5
9 1 5 3
10 1 2
11 1 2 3 3
Job Operasi
Ke-Matriks Routing Waktu (menit)
1 2 3 4
1 72 95
2 120 190
3 30 36
4 10 20
5 20 80 80
6 20 20
7 20 20
8 30 30
9 30 40 120
10 20 20
11 20 20 240 120
Ke-Pm Makespan 0,001 295 0,005 295 0,01 295 0,015 295 0,02 295 0,025 295 0,03 295 0,035 295 0,04 295 0,045 295 Pm Makespan 0,001 600 0,005 600 0,01 600 0,015 600 0,02 600 0,025 600 0,03 600 0,035 600 0,04 600 0,045 600 Populasi Makespan 1 710 5 600 10 600 15 600 20 600 25 600 30 600 35 600
Variansi Parameter Pc
580 590 600 610 620 630 640
0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 0,95
Pc M a k e s p a n
Variansi parameter Pm
0 200 400 600 800
0,001 0,005 0,01 0,015 0,02 0,025 0,03 0,035 0,04 0,045
Variansi Populas i
500 550 600 650 700 750
1 5 10 15 20 25 30 35
Populasi
M
a
k
e
s
p
a
1-1
BAB 1
PENDAHULUAN
1.1 Latar Belakang Masalah
Perusahaan manufaktur dewasa ini telah berkembang dengan pesat
baik dari segi teknologi yang digunakan oleh perusahaan maupun metode
kerja. Makin banyak perusahaan manufaktur yang berkembang, maka akan
mendorong timbulnya persaingan. Persaingan yang terjadi dalam hal kualitas
dari produk yang dibuat, harga dari produk tersebut, dan ketepatan pemenuhan
pesanan produk.
PT. Kerta Laksana adalah perusahaan manufaktur yang membuat
berbagai jenis mesin, dimana pesanan pada perusahaan ini disesuaikan dengan
keinginan konsumen atau sering disebut dengan
Job Order
. Pesanan yang
diterima oleh PT. Kerta Laksana tidak hanya dari dalam negeri saja, tetapi
banyak juga pesanan yang diterima dari luar negeri, terutama Jerman. Masalah
yang dihadapi oleh perusahaan yaitu masih terdapat
delay
benda kerja pada
tiap mesin yang menyebabkan tingkat utilisasi mesin rendah. Sistem
Penjadwalan yang dilakukan oleh PT. Kerta Laksana saat ini yaitu
menjadwalkan berdasarkan part kritis atau menjadwalkan berdasarkan skala
prioritas perakitan. Bila job yang dikerjakan terdapat part kritis yaitu
part
yang menuntut kepresisian manufaktur yang tinggi, maka dilakukan
penjadwalan berdasarkan part kritis terlebih dahulu, akan tetapi bila job yang
dikerjakan tidak terdapat part kritis, maka penjadwalan dilakukan berdasarkan
skala prioritas perakitan. Pada kasus pengerjaan komponen rol depan terdapat
part-part yang kritis sehingga penjadwalan dilakukan berdasarkan part-part
yang kritis terlebih dahulu. Part kritis artinya part yang membutuhkan tingkat
kepresisian manufaktur yang tinggi seperti as pejal, flans tutup, dan pipa rol.
Bab 1 Pendahuluan
1-2
Laporan Tugas Akhir
Universitas Kristen Maranathapengerjaan komponen. Penulis hanya menjadwalkan komponen rol depan
sebagai usulan menyelesaikan permasalahan pada perusahaan untuk
meminimasi
makespan
sehingga
delay
pada tiap mesin berkurang dan utilisasi
dari mesin menjadi lebih tinggi.
1.2 Identifikasi Masalah
Masalah yang dihadapi oleh PT. Kerta Laksana adalah masih
terdapatnya
delay
yang besar pada mesin plasma potong, mesin gerinda
tangan, mesin bor, mesin scrap, mesin gerinda potong, dan mesin bubut yang
menyebabkan
makespan
pada pengerjaan komponen rol depan menjadi lama
dan tingkat utilisasi mesin menjadi rendah. Penjadwalan yang dilakukan oleh
perusahaan saat ini yaitu menjadwalkan part kritis terlebih dahulu. Oleh
karena itu perusahaan menyarankan penulis untuk membantu menyelesaikan
permasalahan penjadwalan pengerjaan komponen rol depan dari mesin
bamboo crusher
agar nilai
makespan
yang diperoleh menjadi lebih singkat
sehingga
delay
pada tiap mesin menjadi berkurang dan tingkat utilisasi mesin
menjadi tinggi.
1.3 Pembatasan Ruang Lingkup Penelitian dan Asumsi
1.3.1
Pembatasan Ruang Lingkup Penelitian
1. Penulis hanya mengamati proses pengerjaan komponen rol depan pada
mesin
bamboo crusher
.
2. Penulis hanya menjadwalkan sampai pada bagian produksi, tidak
sampai pada bagian perakitan.
1.3.2
Asumsi
1. Mesin dalam kondisi baik.
2. Bahan baku dan bahan pendukung dianggap cukup tersedia untuk
produksi.
3. Tidak adanya job sisipan.
4. Waktu transport diabaikan karena waktu perpindahan
part
dari satu
Bab 1 Pendahuluan
1-3
Laporan Tugas Akhir
Universitas Kristen Maranatha1.4 Perumusan Masalah
1. Apa kelemahan sistem penjadwalan rol depan dari mesin
bamboo crusher
yang dilakukan perusahaan saat ini ?
2. Bagaimana usulan penjadwalan komponen rol depan dari mesin
bamboo
crusher
yang seharusnya diterapkan oleh PT. Kerta Laksana ?
3. Manfaat apa yang dapat diperoleh perusahaan dengan menerapkan metode
usulan tersebut ?
1.5 Tujuan Penelitian
1. Untuk mengidentifikasi kelemahan sistem penjadwalan rol depan pada
perusahaan saat ini.
2. Untuk mengusulkan metode penjadwalan pembuatan rol depan pada mesin
bamboo crusher
.
3. Untuk mengetahui manfaat yang dapat diperoleh PT. Kerta Laksana dari
penerapan metode usulan tersebut.
1.6 Sistematika Penulisan
Bab 1 Pendahuluan
Bab ini berisi latar belakang masalah, identifikasi masalah, pembatasan
masalah dan asumsi, perumusan masalah, tujuan penelitian, dan
sistematika penulisan.
Bab 2 Landasan Teori
Bab ini berisi teori-teori yang berhubungan dengan penelitian ini. Selain
itu terdapat juga keuntungan dari penggunaan metode ini, serta teori
lainnya yang berhubungan dengan penelitian ini.
Bab 3 Metodologi Penelitian
Bab ini berisi diagram alir atau
flowchart
mengenai langkah-langkah
Bab 1 Pendahuluan
1-4
Laporan Tugas Akhir
Universitas Kristen Maranatha
Bab 4 Pengumpulan Data
Bab ini berisi data-data yang diperlukan untuk menyelesaikan
permasalahan pada perusahaan yang diamati.
Bab 5 Pengolahan Data dan Analisis
Bab ini berisi pengolahan data dari data-data yang dikumpulkan pada bab
4 dan menganalisis hasil yang diperoleh.
Bab 6 Kesimpulan dan Saran
Bab ini berisi kesimpulan dari hasil penelitian yang dilakukan oleh penulis
dan saran yang diberikan untuk perusahaan dalam menerapkan metode
6-1
BAB 6
KESIMPULAN DAN SARAN
6.1 Kesimpulan
1. Kelemahan Sistem Penjadwalan Perusahaan
Penjadwalan yang dilakukan perusahaan pada saat ini yaitu
menjadwalkan part yang kritis terlebih dahulu. Part yang kritis
merupakan part yang membutuhkan tingkat kepresisian yang tinggi
dalam pengerjaannya. Metode penjadwalan yang dilakukan
perusahaan saat ini menyebabkan waktu akhir pengerjaan part-part
komponen rol depan menjadi lama yaitu sebesar 780 menit dan
total waktu menganggur mesin menjadi lebih tinggi yaitu sebesar
3157 menit.
2. Usulan Penjadwalan Komponen Rol Depan dari Mesin
bamboo
crusher
yang seharusnya diterapkan oleh PT. Kerta Laksana
Metode penjadwalan yang sebaiknya digunakan perusahaan
untuk membantu menyelesaikan masalah penjadwalan adalah
dengan menggunakan metode Algoritma Genetika, karena metode
usulan tersebut dapat menghasilkan urutan penjadwalan part-part
komponen rol depan yang baik sehingga
makespan
yang dihasilkan
lebih kecil yaitu sebesar 600 menit.
3. Manfaat yang Diperoleh Perusahaan dengan Metode Usulan
Manfaat yang diperoleh dengan menggunakan metode
penjadwalan Algoritma Genetika yaitu :
1. Waktu penyelesaian pengerjaan part-part komponen rol depan
Bab 6 Kesimpulan dan Saran
6-2
Laporan Tugas Akhir
Universitas Kristen Maranatha2. Meminimasi waktu menganggur pada tiap mesin, ini
dikarenakan metode Algoritma Genetika mencari semua
kemungkinan solusi dengan mengacak urutan part pada tiap
mesin sehingga total
delay
dapat diminimasi sampai 1080
menit.
6.2 Saran
1. Perusahaan sebaiknya menggunakan metode Algoritma Genetika
sebagai salah satu alternatif untuk menyelesaikan masalah
penjadwalan.
2. Mengadakan penelitian lebih lanjut untuk pengembangan Algoritma
Laporan Tugas Akhir
Universitas Kristen MaranathaDAFTAR PUSTAKA
1. Baker, Kenneth R.;
“Introduction to Sequencing and Scheduling
”, John
Wiley and Sons Inc., New York, 1974.
2. Conway, Richard W., et al.;
“Theory of Scheduling”,
Addison Wesley
Publishing Company, Massachusetts, 1976.
3. Elsayed A. Elsayed.;
“Analysis and Control of Production Systems”
,
Elsayed A. Elsayed and Thomas O., Prentice Hall, New Jersey, 1985.
4. Gen Mitsuo and Cheng Runwei.;
“Genetic Algorithms and Engineering
Design”,
John Wiley and Sons Inc., New York, 1997.
5. Gen Mitsuo and Cheng Runwei.;
“Genetic Algorithms and Engineering
Optimization”,
John Wiley and Sons Inc., New York, 2000.
6. Goldberg, David E.;
“Genetic Algorithm in Search Optimization and
Machine Learning”
, Addison-Wesley Publishing Company,Inc., United
States, 1987.
7. Kusuma, Hendra, Ir.;
“Perencanaan dan Pengendalian Produksi I”
,
Universitas Kristen Maranatha, Bandung, 1992
8. Parker R Gary.;
“Deterministic Scheduling Theory”
, Chapman and Hall.,
London, 1995.
9. Sutalaksana, I.Z., Anggawisastra R., Tjakraatmadja, J.H.; “