• Tidak ada hasil yang ditemukan

Usulan Penjadwalan Proses Manufaktur Rol Depan Pada Mesin Bamboo Crusher Dengan Menggunakan Metode Genetic Algorithm Untuk Meminimasi Makespan (Studi Kasus Di PT. Kerta Laksana).

N/A
N/A
Protected

Academic year: 2017

Membagikan "Usulan Penjadwalan Proses Manufaktur Rol Depan Pada Mesin Bamboo Crusher Dengan Menggunakan Metode Genetic Algorithm Untuk Meminimasi Makespan (Studi Kasus Di PT. Kerta Laksana)."

Copied!
76
0
0

Teks penuh

(1)

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.

(2)

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

(3)

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

(4)

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

(5)

Laporan Tugas Akhir

Universitas Kristen Maranatha

DAFTAR TABEL

Tabel

Judul

Halaman

[image:5.612.136.503.187.710.2]
(6)

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

(7)
[image:7.612.131.502.194.675.2]

Laporan Tugas Akhir

Universitas Kristen Maranatha

DAFTAR GAMBAR

Gambar

Judul

Halaman

(8)

Laporan Tugas Akhir

Universitas Kristen Maranatha

DAFTAR GAMBAR (LANJUTAN)

(9)

Laporan Tugas Akhir

Universitas Kristen Maranatha

DAFTAR LAMPIRAN

Lampiran

Judul

Halaman

(10)

LAMPIRAN 1

TATA CARA PENGGUNAAN SOFTWARE

(11)

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

(12)

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.

(13)

LAMPIRAN 2

(14)

unit Proses;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls;

type

(15)

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

(16)

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

(17)

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}

(18)

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

(19)

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

(20)

Break; End;

if (readyjob>0) and

(21)

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

(22)

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;

(23)

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

(24)

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

(25)

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;

(26)

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

(27)

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

(28)

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;

(29)

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

(30)

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;

(31)

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

(32)

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

(33)

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);

(34)

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

(35)

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;

(36)

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;

(37)

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;

(38)

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;

(39)

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;

(40)

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;

(41)

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

(42)

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;

(43)

LAMPIRAN 3

(44)

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

(45)
(46)
(47)
(48)
(49)
(50)
(51)
(52)
(53)
(54)
(55)
(56)
(57)

LAMPIRAN 4

HASIL PENGOLAHAN STUDI KASUS ALGORITMA

(58)

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 295

Variansi 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

(59)

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

(60)

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

(61)

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

(62)

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

(63)

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

(64)

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

(65)

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

(66)

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

(67)

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

(68)

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

(69)

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

(70)

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.

(71)

Bab 1 Pendahuluan

1-2

Laporan Tugas Akhir

Universitas Kristen Maranatha

pengerjaan 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

(72)

Bab 1 Pendahuluan

1-3

Laporan Tugas Akhir

Universitas Kristen Maranatha

1.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

(73)

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

(74)

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

(75)

Bab 6 Kesimpulan dan Saran

6-2

Laporan Tugas Akhir

Universitas Kristen Maranatha

2. 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

(76)

Laporan Tugas Akhir

Universitas Kristen Maranatha

DAFTAR 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.; “

Teknik Tata

Gambar

Tabel Judul
Gambar

Referensi

Dokumen terkait

Selain itu, Direktorat Jenderal Sumber Daya Iptek dan Dikti melalui Direktorat Kualifikasi SDM juga telah mengalokasikan dana DIPA Tahun Anggaran 2017 guna memberikan

.ddsd da &amp;F dje hidup

Ilma N, Tjahyadi D, Judistiani TD, The relationship of age, parity, and body mass index as risk factors to the incidence of uterine myoma in Dr.. Hasan Sadikin General

Berdasarkan observasi terhadap proses implementasi Pengembangan Pembelajran ASSURE dalam mengimplementasikan pendekatan saintifik ditemukan beberapa hal antara lain

Hasil sidik ragam terhadap Berat Kering tanaman sawi hijau menunjukkan bahwa semua perlakuan memberikan pengaruh yang sama atau tidak berbeda nyata karena kombinasi

Pada tahap ini peserta didik mengevaluasi hasil belajar tentang materi yang telah dipelajari melalui diskusi kelas untuk menganalisis hasil pemecahan masalah

Terkait dengan Siwa-Budha di Pura Pegulingan akan dimulai dengan membahas komponen ritus dan upacara berupa tempat pemujaan yakni stupa dan berbagai palinggih yang bersifat

PR sebagai pendengar setia dan broker informasi. Mereka sebagai penghubung, interpreter dan mediator antara organisasi dan publiknya. Mereka mengelola