Analisis performansi algoritma knapsack untuk optimalisasi pemilihan proyek di PT.Gits Indonesia

(1)

Bahwa yang bertanda tangan dibawah ini, penulis dan pihak perusahaan tempat penelitian, bersedia :

“Bahwa hasil penelitian dapat didaringkan (online) sesuai dengan peraturan yang berlaku, untuk kepentingan riset dan pendidikan”.

Bandung, 18 Februari 2013

Penulis,

Bagja Gumelar NIM. 10108070

Perusahaan,

Rahmat Izwan Heroza


(2)

(3)

(4)

(5)

1. DATA PRIBADI

Nama : Bagja Gumelar

Jenis kelamin : Laki-laki

Tempat, tanggal lahir : Bandung, 11 Februari 1991

Agama : islam

Kewarganegaraan : indonesia

Status : belum kawin

Anak ke : dua dari dua bersaudara

Alamat : KOMP BSPI Sindang Panon RT 003 RW

012 Desa Sindang Panon Kecamatan

Banjaran Kabupaten Bandung 40377

Telepon : +62956 7203 63966

Email : gumelarbagja@gmail.com

2. RIWAYAT PENDIDIKAN

1. Sekolah Dasar : SD Nilem IV Bandung, Jawa Barat

1995 - 2002

2. Sekolah Menegah Pertama : SLTPN 1 Banjaran Bandung Jawa

Barat 2002 - 2005

3. Sekolah Menengah Atas : Sekolah Menengah Atas Negeri 1


(6)

Demikian riwayati hidup ini saya buat dengan sebenar-benarnya dalam keadaan

sadar dan tanpa paksaan.

Bandung,


(7)

INDONESIA

SKRIPSI

Diajukan untuk Menempuh Ujian Akhir Sarjana Program Strata Satu Jurusan Teknik Informatika

Fakultas Teknik dan Ilmu Komputer

Oleh:

BAGJA GUMELAR

10108070

PROGRAM STUDI S1

JURUSAN TEKNIK INFORMATIKA

FAKULTAS TEKNIK DAN ILMU KOMPUTER

UNIVERSITAS KOMPUTER INDONESIA

2013


(8)

iii Asalammu alaikum Wr. Wb

Alhamdulillah, segala Puji dan syukur penulis panjatkan bagi Allah SWT, karena atas segala rahmat dan karunia-Nya yang memberikan kesehatan dan hikmat kepada penulis sehingga penelitian ini dapat diselesaikan dengan baik sesuai dengan waktu yang direncanakan.

Skripsi yang berjudul “Analisis Performansi Algoritma Knapsack Untuk Optimalisasi Pemilihan Proyek Di PT. GITS Indonesia”, disusun untuk

memperoleh gelar Sarjana Teknik Informatika, Fakultas Teknik dan Ilmu Komputer Universitas Komputer Indonesia.

Pada kesempatan ini penulis hendak menyampaikan terima kasih kepada : 1. Allah SWT atas karunia-Nya sehingga penulis mampu menyelesaikan

tugas akhir ini.

2. Ibunda dan Almarhum Ayahanda, terima kasih yang tak terhingga atas segala kasih sayang, segala dukungan dan doa restu yang tidak henti-hentinya bagi penulis.

3. Keluarga besar penulis, terutama kakak yang selalu memberikan dukungan dan motivasi.

4. Bapak Adam Mukharil Bachtiar, S.Kom. selaku dosen pembimbing skripsi sekaligus dosen wali yang telah banyak memberikan bimbingan dan saran-saran kepada penulis sejak awal penelitian sampai dengan selesainya penulisan skripsi ini.

5. Ibu Tati Harihayati M., S.T., M.T. selaku dosen reviewer yang telah memberikan masukan dan saran-saran dalam penyusunan penelitian skripsi ini.

6. Segenap dosen dan staf jurusan Teknik Informatika.

7. Rekan-rekan mahasiswa jurusan Teknik Informatika khususnya IF-2 yang telah menjadi partner yang sangat baik selama masa perkuliahan.

8. Rekan-rekan di PT. GITS Indonesia, Rahmat Izwan Heroza, Ibnu Sina Wardy dan Imaduddin Amin, yang telah berkenan mengizinkan penulis


(9)

untuk melaksanakan penelitian di tempat tersebut dan telah berbagi pengalaman serta ilmunya.

9. Daeng Rosanda, Ami Rakhmiati, Andi Insanuddin dan Line yang membantu penulis dalam penyelesaian penyusunan penelitian ini.

10.Seluruh pihak yang telah memberikan kontribusi dan bantuannya bagi penulis, namun tidak sempat dicantumkan namanya satu per satu.

Penulis telah berupaya dengan semaksimal mungkin dalam penyelesaian skripsi ini, namun penulis menyadari masih banyak kelemahan baik dari segi isi maupun tata bahasa, untuk itu penulis mengharapkan kritik dan saran yang bersifat membangun dari pembaca demi kesempurnaan skripsi ini. Tak lupa penulis memohon maaf apabila dalam penulisan laporan tugas akhir ini, penulis telang menyinggung perasaan atau telah menyakiti hati semua orang baik yang disengaja maupun yang tidak disengaja. Kiranya isi skripsi ini bermanfaat dalam memperkaya khasanah ilmu pendidikan dan juga dapat dijadikan sebagai salah satu sumber referensi bagi peneliti selanjutnya yang berminat meneliti hal yang sama.

Wassalamu’alaikum Wr.Wb. Bandung, Februari 2013


(10)

v

ABSTRAK ... i

ABSTRACT ... ii

KATA PENGANTAR ... iii

DAFTAR ISI ... v

DAFTAR GAMBAR ... viii

DAFTAR TABEL... ix

DAFTAR SIMBOL ... xi

DAFTAR LAMPIRAN ... xiii

BAB I PENDAHULUAN ... 1

I.1 Latar Belakang Masalah ... 1

I.2 Perumusan Masalah ... 2

I.3 Maksud dan Tujuan ... 2

I.4 Batasan Masalah ... 3

I.5 Metodologi Penelitian ... 3

I.5.1 Metode Pengumpulan Data ... 3

I.5.2 Metode Pembangunan Perangkat Lunak ... 4

I.6 Sistematika Penulisan ... 6

BAB II TINJAUAN PUSTAKA ... 7

II.1 Profil Instansi ... 7

II.1.1Sejarah Instansi ... 7

II.1.2Visi dan Misi Instansi ... 7

II.1.3Struktur Organisasi Instansi ... 8

II.1.4Deskripsi Kerja Instansi ... 9


(11)

II.2.1 Optimalisasi ... 10

II.2.2 Algoritma ... 12

II.2.3 Tools Pemodelan ... 23

II.2.4 Tools Implementasi ... 26

II.2.4.1. Bahasa Pemrograman ... 26

II.2.4.2. Borland Delphi ... 27

II.2.5 Pengujian Perangkat Lunak ... 28

BAB III ANALISIS ALGORITMA ... 34

III.1 Analisis Sistem ... 34

III.1.1 Analisis Masalah ... 34

III.1.2 Analisis Struktur Data ... 35

III.1.3 Analisis Strategi... 35

III.1.4 Analisis Algoritma knapsack ... 39

III.1.5 Spesifikasi Kebutuhan Perangkat Lunak ... 47

III.1.6 Analisis Kebutuhan Non Fungsional ... 48

III.1.6.1 Analisis Kebutuhan Perangkat Keras ... 48

III.1.6.2 Analisis Kebutuhan Perangkat Lunak ... 49

III.1.6.3 Analisis Kebutuhan Perangkat Pikir ... 49

BAB IV IMPLEMENTASI DAN PENGUJIAN ... 51

IV.1 Implementasi Simulasi ... 51

IV.1.1 Implementasi Perangkat Keras ... 51

IV.1.2 Implementasi Perangkat Lunak ... 52

IV.1.3 Implementasi Antarmuka ... 52

IV.2 Pengujian Simulasi ... 53

IV.2.1 Rencana Pengujian ... 53


(12)

IV.2.3 Pengujian Black Box ... 61

IV.2.4 Kesimpulan Pengujian ... 65

BAB V KESIMPULAN DAN SARAN ... 66

V.1 Kesimpulan ... 66

V.2 Saran ... 66


(13)

67

[2] Muhamad Pramana Baharsyah, Sulistyo Unggul Wicaksono, Teguh Pamuji, and Rinaldi Munir, "Eksplorasi Algoritma Brute Force, Greedy, dan Dynamic Programming untuk Persoalan Integer Knapsack," 2005.

[3] David Pisinger, Alghoritm For Knapsack Problems. Copenhagen, Denmark, 1995.

[4] Ian Sommervile, Software Engineering, 8th ed.: Addison-Wesley., 2007. [5] Thomas Weise, Practical Optimization Algorithm Design. Anhui, China,

2012.

[6] Rinaldi Munir, Algoritma & Pemrograman Dalam Bahasa Pascal dan C. Bandung: Informatika Bandung, 2007.

[7] Eko Budi Purwanto, Perencanaan dan Analisis Algoritma, 1st ed.: Graha Ilmu, 2008.

[8] Leman, Metodologi Pengembangan Sistem Informasi. Jakarta, Indonesia: PT Elex Media Komputindo, 1998.

[9] Roger S. Pressman, Software Engineering: A practical Approach , 7th ed., Mcgraw-hill, Ed., 2009.

[10] Ir. Rinaldi Munir, Algoritma Greedy. Bandung, Indonesia: Departemen Teknik Informatika Institut Teknologi Bandung, 2004.


(14)

1

I.1 Latar Belakang Masalah

Masalah optimasi merupakan hal yang sering kita jumpai dalam pekerjaan sehari-hari, seperti optimasi pemilihan proyek, penjadwalan dan lain-lain. Menyelesaikan masalah optimasi dapat dilakukan dengan berbagai macam strategi, diantaranya adalah algoritma greedy, bruteforce, dynamic programming maupun genetika. Strategi algoritma greedy adalah yang paling populer diantara strategi algoritma yang lainnya, dikarenakan kesederhanaannya dan kemudahan penerapannya. Strategi algoritma greedy sering digunakan karena berguna untuk menghasilkan solusi yang menghampiri (approximation) optimum, dari pada menggunakan algoritma yang lebih rumit untuk menghasilkan solusi yang eksak [1].

Salah satu algoritma yang mengadopsi strategi algoritma greedy untuk diterapkan dalam penyelesaian kasus optimasi adalah algoritma knapsack. Knapsack dapat diilustrasikan seperti cara memasukkan beberapa barang ke dalam suatu kantong (knapsack). Kapasitas kantong ini memiliki keterbatasan ruang sehingga barang yang dimasukkan kedalam kantong tidak melebihi batas dan diperoleh keuntungan yang optimal. David Pisinger dalam Alghoritm for Knapsack Problems menyebutkan beberapa contoh penerapan kasus yang dapat diselesaikan dengan algoritma knapsack antara lain adalah masalah dalam muat barang kargo, pemotongan stok barang, pengkontrolan budget dan manajemen keuangan [3].

Hasil studi literatur tentang penelitian algoritma knapsack mengindikasikan, dari beberapa contoh kasus diselesaikan dengan algoritma knapsack ditemukan kesamaan karateristik parameter dengan kasus pemilihan proyek yang dimiliki oleh PT. GITS Indonesia. Pemilihan proyek yang dilakukan oleh PT. GITS dilakukan oleh seorang kepala kepegawaian selaku analist project (penentu proyek-proyek yang masuk ke perusahaan). Proyek-proyek ini kemudian dipilih oleh analis dengan pertimbangan-pertimbangan tertentu. Beberapa hal yang menjadi penentu pertimbangan antara lain profit dan resources (jumlah sumber


(15)

daya manusia). Jumlah sumber daya manusia yang terdapat di perusahaan ini dapat diibaratkan dengan kantong (knapsack) yang memiliki keterbatasan jumlah. Profit dan resources atau sumber daya manusia dalam kasus pemilihan proyek di PT. GITS Indonesia ini akan menjadi parameter dalam analisis algoritma knapsack yang dilakukan. Kemiripan karateristik kasus ini akan menjadi lebih baik ketika algoritma yang digunakan dianalisis performansinya terlebih dahulu, sehingga keoptimalannya dapat dibuktikan.

Analisis performansi algoritma dilakukan agar diketahui efisiensi dan kelayakan algoritma pada kasus yang sedang diuji. Tanpa dilakukannya analisis algoritma maka akan terjadi masalah terhadap pengimplementasian algoritma pada kebutuhan dan masalah yang dihadapi. Algoritma yang akan digunakan tidak harus mewah atau canggih namun menggunakan sebuah algoritma sebaiknya tepat dan cocok pada kasus yang sedang diuji. Sebagai contoh jika kita membutuhkan algoritma yang tepat untuk diterapkan dalam kasus pemilihan proyek maka algoritma yang dapat diterapkan dengan baik adalah algoritma knapsack.

Berdasarkan dari permasalahan yang telah dipaparkan pada paragraf sebelumnya maka diperlukan analisis performansi algoritma knapsack terhadap kasus pemilihan proyek. Penerapan algoritma terhadap perangkat lunak merupakan salah satu cara yang dapat digunakan untuk menganalisis dan mengetahui performansi algoritma knapsack terhadap kasus pemilihan proyek ini.

I.2 Perumusan Masalah

Berdasarkan latar belakang masalah maka perumusan masalah pada penelitian ini adalah bagaimana mengoptimalkan hasil pemilihan proyek dengan menganalisis performansi algoritma Knapsack.

I.3 Maksud dan Tujuan

Maksud dari penelitian skripsi ini adalah untuk melakukan analisis performansi algoritma knapsack pada kasus pemilihan proyek.

Adapun tujuan dari pembuatan skripsi ini adalah :

1. Mengetahui performansi algoritma knapsack pada kasus pemilihan proyek di PT. GITS Indonesia.


(16)

2. Mendapatkan hasil yang optimal dari kasus pemilihan proyek menggunakan strategi algoritma greedy by density dengan jenis algoritma fractional knapsack.

I.4 Batasan Masalah

Batasan masalah yang ditentukan dalam penelitian ini adalah sebagai berikut :

1. Strategi algoritma yang digunakan untuk menyelesaikan permasalahan yang sedang diuji menggunakan stretegi algoritma greedy dengan pendekatan greedy by density.

2. Jenis algoritma yang dianalisis adalah fractional Knapsack.

3. Model analisis yang digunakan adalah model kompleksitas waktu (Tn).

4. Notasi asimtotik yang digunakan adalah O (big oh).

5. Sumber data proyek yang akan diuji berasal dari PT. GITS Indonesia. 6. Simulasi yang dilakukan untuk pengujian performansi algoritma

knapsack menggunakan perangkat lunak berbasis desktop.

I.5 Metodologi Penelitian

Metodologi penelitian yang akan digunakan dalam pembuatan skripsi ini menggunakan metodologi Analisis deskriptif. Analisis deskriptif adalah metode analisis dengan mendeskripsikan atau menggambarkan data yang telah terkumpul sebagaimana adanya tanpa membuat kesimpulan yang berlaku untuk umum. Metodologi ini terbagi menjadi dua metode yaitu metode pengumpulan data dan metode pembangunan perangkat lunak.

I.5.1 Metode Pengumpulan Data

Metode pengumpulan data yang digunakan terdiri dari dua cara, diantaranya :

1. Studi literatur

Studi literatur adalah metode pengumpulan data dengan cara mengumpulkan pustaka yang menunjang penelitian yang akan dikerjakan. Pustaka tersebut dapat berupa e-book, buku, artikel, jurnal, laporan akhir, dan sebagainya.


(17)

2. Studi Lapangan

Studi lapangan adalah metode pengumpulan data dengan cara berinteraksi langsung dengan orang-orang yang berada di lingkungan tempat studi kasus. Studi lapangan yang dilakukan adalah dengan melakukan wawancara atau tanya jawab dengan kepala kepegawaian.

I.5.2 Metode Pembangunan Perangkat Lunak

Pengembangan perangkat lunak dalam penelitian ini mengadopsi metode pengembangan classic life style atau waterfall. Metode pembangunan perangkat lunak waterfall dapat dilihat pada Gambar I-1. Tahapan yang ada pada metode pengembangan waterfall adalah sebagai berikut :

a. Requirements analysis and definition

Tahap Requirements analysis and definition merupakan tahap pengumpulan kebutuhan secara lengkap kemudian dianalisis dan didefinisikan kebutuhan yang harus dipenuhi oleh program yang akan dibangun. Fase ini harus dikerjakan secara lengkap untuk bisa menghasilkan desain yang lengkap.

b. System and software design

Tahap System and software design merupakan tahap mendesain perangkat lunak yang dikerjakan setelah kebutuhan selesai dikumpulkan secara lengkap.

c. Implementation and unit testing

Tahap Implementation and unit testing merupakan tahap hasil desain program diterjemahkan ke dalam kode-kode dengan menggunakan bahasa pemrograman yang sudah ditentukan. Program yang dibangun langsung diuji baik secara unit.

d. Integration and system testing

Tahap Integration and system testing merupakan tahap penyatuan unit-unit program kemudian diuji secara keseluruhan (system testing).


(18)

Tahap Operation and maintenance merupakan tahap mengoperasikan program dilingkungannya dan melakukan pemeliharaan, seperti penyesuaian atau perubahan karena adaptasi dengan situasi sebenarnya.

Gambar I-1 Model Proses Waterfal [3]

Requirements definition

System and Software Design

Implementation and unit testing

Integration and sytem testing

Operation and maintenance


(19)

I.6 Sistematika Penulisan

Sistematika penulisan skripsi ini disusun untuk memberikan gambaran umum tentang penelitian yang dijalankan. Adapun sistematika penulisan skripsi ini adalah sebagai berikut :

BAB I PENDAHULUAN

Bab I merupakan proses yang menguraikan tentang latar belakang permasalahan, mencoba merumuskan inti permasalahan yang dihadapi, menentukan maksud dan tujuan penelitian, yang kemudian diikuti dengan pembatasan masalah, metodologi penelitian, dan sistematika penulisan.

BAB II TINJAUAN PUSTAKA

Bab II membahas tentang berbagai konsep dasar dan teori-teori yang berkaitan dengan topik yang diangkat dan hal-hal yang berguna dalam proses analisis permasalahan serta tinjauan terhadap penelitian-penelitian serupa yang pernah dilakukan sebelumnya termasuk sintesisnya.

BAB III ANALISIS ALGORITMA

Bab III berisi tentang analisis algoritma, pendekatan strategi algoritma, dan kebutuhan untuk alat simulasi berupa perangkat lunak yang dibangun sesuai dengan metode pengembangan perangkat lunak yang digunakan.

BAB 4 IMPLEMENTASI DAN PENGUJIAN

Bab 4 berisi hasil implementasi analisis dan perancangan simulasi yang dilakukan, serta hasil pengujian simulasi untuk mengetahui apakah aplikasi yang dibangun sudah memenuhi kebutuhan. Pengujian yang diakukan dalam penelitian ini adalah dengan menggunakan white box testing dan black box testing.

BAB V KESIMPULAN DAN SARAN

Bab V berisi kesimpulan hasil pengujian dari perangkat lunak yang telah dibangun berdasarkan tujuan yang ingin dicapai dan saran yang dapat diberikan untuk perangkat lunak ini untuk kemudian dapat dikembangkan kembali.


(20)

7

II.1 Profil Instansi

GITS Indonesia adalah perusahaan pengembang aplikasi Android. Berpengalaman selama hampir 3 tahun mengembangkan aplikasi, membuat GITS Indonesia dikenal sebagai developer Android paling produktif di Indonesia saat ini. Selain Android, hingga saat ini GITS Indonesia juga banyak mengembangkan aplikasi di berbagai platform mobile seperti iOS, Symbian, JavaME, Nokia Seri 40 dan Blackberry.

II.1.1 Sejarah Instansi

GITS Indonesia pertama kali berdiri pada September 2008 dengan nama Ganesha IT Solution (GITS). Akhir 2009 GITS memutuskan untuk memfokuskan pada pengembangan teknologi mobile terutama Android. Pada Juli 2011, GITS resmi menjadi badan usaha yang terdaftar dengan nama PT. GITS Indonesia. Sejak masa awal berdirinya, GITS telah menjalin kerja sama dengan berbagai instansi swasta maupun pemerintah di antaranya Departemen Pekerjaan Umum, Telkom Indonesia, Sarihusada, Nokia Indonesia serta Samsung Elektronik Indonesia. Beberapa produk mobile yang telah dikembangkan di antaranya adalah Toresto, Kosakata, Bahasa Dictionary, KoranDroid, dan Imsakiyah. Selain produk sendiri, terdapat juga beberapa aplikasi hasil kerja sama dengan kliennya seperti MindSocial for Mindtalk, Telkom H!Bandung, dan SGM Babies Doctor. Tagline GITS Indonesia adalah “get it simple”. Tagline tersebut menunjukan keinginan besar untuk menjadi pioneer teknologi mobile terutama Android yang selalu produktif mengembangkan aplikasi untuk membantu penggunanya menjalankan aktivitasnya sehari-hari.

II.1.2 Visi dan Misi Instansi

Visi yang dijalankan perusahaan adalah menjadi pioneer teknologi mobile di Indonesia dalam membantu penggunanya menjalankan aktivitasnya sehari-hari. Misi perusahaan memiliki tiga jenis yaitu :


(21)

1. Produktif

Meningkatkan produktivitas perusahaan dan sumber daya manusianya untuk terus aktif dalam pengembangan aplikasi.

2. Estetis

Mengutamakan estetika dan ergonomi pada setiap aplikasi yang dikembangkan demi kemudahan pengguna.

3. Solutif

Tidak berhenti untuk mencari solusi terbaik menggunakan teknologi mobile yang memudahkan aktivitas penggunanya.

II.1.3 Struktur Organisasi Instansi

Struktur organisasi instansi adalah gambar bagan yang menjelaskan posisi dan hierarki struktur kerja pegawai di dalam perusahaan. Struktur organisasi perusahaan dapat dilihat padaGambar II-1 Struktur Organisasi PT. GITS Indonesia.

CEO

SEKRETARIS

VP OF HR CFO CMO CTO


(22)

II.1.4 Deskripsi Kerja Instansi

Deskripsi kerja Struktur Organisasi adalah penjelasan tentang bagian kerja. Deskripsi kerja dapat dilihat pada Tabel II-1 Deskripsi Kerja PT. GITS Indonesia.

Tabel II-1 Deskripsi Kerja PT. GITS Indonesia

No Jabatan Deskripsi Kerja

1 CFO (Chief Executive Officer)

Komunikator, pengambil keputusan, pemimpin, pengelola dan eksekutor 2 Sekertaris Meliputi pengetikan, pembuatan surat

menyurat, membuat laporan, pengaturan jadwal dan absensi.

3 VP (Vice President) of HR (Human Resources)

Manajemen sumber daya manusia (MSDM) dalam memberikan kontribusi pada pencapaian efektivitas organisasi. Melakukan pemilihan SDM untuk melaksanakan proyek.

4 CFO (Chief Financial Officer)

CFO bertanggung jawab untuk mengelola keuangan risiko

perusahaan. Petugas ini juga bertanggung jawab untuk perencanaan keuangan dan pencatatan, serta pelaporan keuangan kepada manajemen yang lebih tinggi. 5 CMO (Chief Marketing

Officer

CMO adalah seorang eksekutif perusahaan bertanggung jawab atas kegiatan

pemasaran dalam suatu organisasi. Dengan tanggung jawab utamanya

adalah pengembangan produk, manajemen saluran distribusi, komunikasi pemasaran (termasuk iklan dan promosi), harga, riset pasar dan layanan pelanggan


(23)

Officer) dalam sebuah perusahaan atau badan lain yang penghuni difokuskan pada isu-isu ilmiah dan teknologi dalam sebuah organisasi.

II.2 Landasan Teori

Bab ini akan memaparkan tentang landasan teori yang digunakan untuk melakukan penelitian skripsi. Adapun landasan teori yang akan dibahas adalah tentang algoritma, bahasa pemrograman yang digunakan dan tools pembangunan perangkat lunak simulasi.

II.2.1 Optimalisasi

Optimasi adalah salah satu disiplin ilmu dalam matematika yang fokus untuk mendapatkan nilai minimum atau maksimum secara sistematis dari suatu fungsi, peluang, maupun pencarian nilai lainya dalam berbagai kasus. Optimasi global adalah algoritma optimasi yang menggunakan ukuran atau rentang yang luas daerah pencariannya tidak terbatas atau global. Kelebihan dari penggunaan optimasi global ini menurut Weise, Thomas (2008) adalah untuk mencegah tindakan fokus pada daerah masalah saja akan tetapi lebih meningkatkan kemungkinan untuk mencari sebuah global optimum pada daerah yang lebih luas. [5] Jadi, optimasi global adalah optimasi yang bertujuan untuk mencari solusi terbaik secara global atau menyeluruh pada sebuah model permasalahan. Pada optimasi global ini, batasannya adalah waktu, dimana rentang waktunya bersifat global, sehingga daerah penyelesaiannya lebih luas. Optimasi sangat berguna di hampir segala bidang dalam rangka melakukan usaha secara efektif efisien untuk mencapai target hasil yang ingin dicapai. Tentunya hal ini akan sangat sesuai dengan prinsip ekonomi yang berorientasikan untuk senantiasa menekan pengeluaran untuk menghasilkan outputan yang maksimal. Optimasi ini juga penting karena persaingan saat ini sudah benar benar sangat ketat.

Seperti yang dikatakan di awal, bahwasanya optimasi sangat berguna bagi hamper seluruh bidang yang ada, maka berikut ini adalah contoh contoh bidang yang sangat terbantu dengan adanya teknik optimasi tersebut. Bidang tersebut, antara lain : Arsitektur, Data Mining, Jaringan Komputer, Signal And Immage


(24)

Processing, Telekomunikasi, Ekonomi, Transportasi, Perdagangan, Pertanian, Perikanan, Perkebunan, Perhutanan, dan sebagainya.

Teknik optimasi secara umum dapat dibagi menjadi dua bagian, yang pertama adalah Mathematical Programming, dan yang kedua adalah Combinatorial Optimatimization. Dalam bidang mathematical programming dapat dibagi menjadi dua kembali, yaitu support vector machines dan gradient descent. Dan pada bidang Combinatorial Optimization kembali difokuskan lagi ke dalam dua bidang, yaitu Graph Theory dan Genetic Algorithm. Pemfokusan pemfokusan bidang tersebut dikarenakan beberapa parameter, diantaranya, Restoration, Feature selection, Classification, Clustering, RF assignment, Compression, dan sebagainya.

Adapun hal lain secara global yang penting untuk diperhatikan adalalh fokus terhadap model dan masalah serta cara berfikir yang analitis. Kita harus fokus terhadap model dan masalah agar tujuan utama dari kasus tersebut tercapai, jangan sampai terlalu konsen pada optimasi tetapi goalnya sendiri malah tidak tercapai. Sedangkan berfikir analitis dimaksudkan agar kita peka terhadap keadaan dan mampu berfikir secara bebas untuk menemukan solusi solusi yang diperlukan.

Sebagai contoh implementasi teknik optimasi ini, kita lihat ambil cara mudah untuk mengoptimalkan performance computer pada saat memakai suatu program agar berjalan lebih lancer. Caranya adalah dengan mematikan program program yang running namun sebenarnya tidak diperlukan. Jika computer kita tidak sedang membutuhkan koneksi dengan jaringan, sebaiknya semua service yang mendukung ataupun berhubungan dengan jaringan, ada baiknya dimatikan. Selain itu, jika kita pun tidak terkoneksi dengan ‘jalan masuknya virus’, ada baiknya sekalian mematikan anti virus yang sedang bekerja. Hal ini akan membuat performance computer kita lebih optimal, dengan mematikan program program yang tidak sedang dipakai dan memakan memory.


(25)

II.2.2 Algoritma

Algoritma adalah Urutan langkah-langkah untuk memecahkan suatu masalah. Terdapat beberapa definisi lain dari algoritma tetapi pada prinsipnya senada dengan definisi yang diungkapkan diatas yang kita kutip dari berbagai literatur, antara lain [6]:

1. Algoritma adalah deretan langkah-langkah komputasi yang mentransformasikan data masukan menjadi keluaran.

2. Algoritma adalah deretan instruksi yang jelas untuk memecahkan masalah, yaitu untuk memperoleh keluaran yang diinginkan dari suatu masukan dalam jumlah waktu yang terbatas.

3. Algoritma adalah Prosedur komputasi yang terdefinisi dengan baik yang menggunakan beberapa nilai sebagai masukan dan menghasilkan beberapa nilai yang disebut keluaran. Jadi, algoritma adalah deretan langkah komputasi yang mentransformasikan masukan menjadi keluaran.

Algortima adalah jantung ilmu computer atau informatika. Banyak cabang dari ilmu komputer yang diacu dalan terminologi algoritma, misalnya algoritma perutean (routing) pesan di dalam jaringan komputer, algoritma Brensenham untuk menggambar garis lurus (bidang grafik kumputer), algoritma Knuth-Morris-Pratt untuk mencari suatu pola di dalam teks (bidang information retrievel), dan sebagainya.

Ditinjau dari asal usul kata, kata “algoritma” sendiri mempunyai sejarah yang cukup aneh. Kata ini tidak muncul di dalam kamus Webster sampai akhir tahun 1957. Orang hanya menemukan kata algorism yang berarti proses menghitung dengan angka Arab. Anda dikatakan algorist jika Anda menggunakan angka Arab. Para ahli bahasa berusaha menemukan asal kata algorism ini, namun hasilnya kurang memuaskan. Akhirnya para ahli sejarah matematika menemukan asal mula kata tersebut. Kata algorism berasal dari nama penulis buku arab yang

terkenal, yaitu Abu Ja’afarMuhammad Ibnu Musa al-Khuwarizmi (al-Khuwarizmi

dibaca orang barat menjadi algorism). Al-Khuwarizmi menulis buku yang berjudul Kital al jabar wal-muqabala, yang artinya “Buku pemugaran dan pengurangan” (The book of restoration and reduction). Dari judul buku ini kita


(26)

menjadi algoritm muncul karena kata algorism sering dikelirukan dengan arithmetic, sehingga akhiran –sm beubah menjadi –thm. Karena perhitungan dengan angka Arab sudah menjadi hal yang biasa/lumrah, maka lambat laun kata algorithm berangsur-angsur dipakai sebagai metode perhitungan (komputasi) secara umum, sehingga kehilangan makna aslinya. Dalam bahasa Indonesia, kata algorithm diserap menjadi “algoritma”.

Kata algoritma perama kali digunakan pada tahun 1950 dalam kata “algoritma Euclidean” (Euclid’s algorithm). Euclid, seorang matematikawan Yunani (lahir pada tahun 350 M), dalam bukunya yang berjudul Element menuliskan langkah-langkah untuk menemukan pembagi bersama terbesar (common greatest divisor atau gcd), dari dua buah bilangan bulat, m dan n (tapi Euclid tidak menyebut metodenya itu sebagai algoritma, baru abad modernlah ornag-orang menybut metodenya itu sebagai “algoritma Euclidean”), Pembagi terbesar dari dua buah bilangan bulat tak-negatif adalah bilangan bulat positif terbesar yang habis membagi kedua bilangan tersebut. [6]

II.2.2.1. Analisis Algoritma

Analisis algoritma dilakukan untuk mengetahui seberapa baik sebuah algoritma diimplementasikan untuk menyelesaikan suatu kasus. Penilaian terhadap algoritma melibatkan analisis algoritma sehingga terdapat 2 (dua) tipe analisis algoritma yaitu:

1. Aspek kualitatif

Aspek kualitatif yaitu analisis untuk memeriksa kebenaran algoritma. Analisis dengan aspek kualitatif dilakukan dengan penelusuran algoritma, dilakukan penelusuran logik menggunakan teknik matematika untuk membuktikan kebenaran atau implementasi algoritma atau mengujinya dengan data. Sebagai contoh adalah algoritma pengurutan data (sorting) tidak dapat disebut sebagai algoritma pengurutan jika algoritma tidak dapat mengurutkan sembarang masukan barisan data.

2. Aspek kuantitatif

Aspek kuantitatif yaitu analisis terhadap efisiensi algoritma. Aspek kuantitatif dilakukan dengan melakukan perhitungan kompleksitas komputasi (waktu) dan ruang. Aspek kuantitatif mencoba mengukur seberapa besar sumber


(27)

daya yang diperlukan suatu algoritma 2 (dua) sumber daya yang diukur adalah kecepatan bekerja algoritma dan ruang yang diperlukan untuk bekerja. Notasi untuk menyatakan kinerja antara lain adalah big-oh (O) yaitu waktu komputasi algoritma berbanding terhadap satu fungsi tertentu. Big-O biasanya hanya dinyatakan dengan suku yang paling berarti dan menghilangkan konstanta pengalinya. Jadi O((n2-n)/2) hanya dinyatakan dengan O(n2).

Terdapat tiga cara yang dapat dilakukan dalam melakukan analisis algoritma yaitu :

1. Analisis untuk memeriksa kebenaran algoritma.

2. Analisis efisiensi algoritma (kompleksitas komputasi dan ruang). 3. Analisis optimalitas algoritma.

1. Analisis Kebenaran Algoritma

Beberapa hal yang dapat dilakukan dalam menguji kebenaran suatu algoritma antara lain adalah:

1. Penelusuran algoritma

2. Penelusuran logik (assertion) 3. Implementasi algoritma 4. Pengujian dengan data

5. Teknik pengujian matematis untuk pembuktian kebenaran

Analisis kebenaran algoritma juga sering dimasukkan sebagai proses validasi algoritma.

2. Analisis Efisiensi Algoritma

Fase dalam analisis efisiensi algoritma terdapat dua hal yaitu a priori analysis dan a priori testing.

1. A priori analysis

Fase a priori analysis bertujuan untuk menemukan fungsi beserta parameter-parameter yang relevan yang membatasi waktu komputasi algoritma. Adapun notasi matematika yang digunakan untuk menunjukkan hasil adalah O-notation (Big-O), Ω-notation dan Θ-notation.


(28)

2. A posteriori testing

Pada fase ini dikumpulkan statistik nyata konsumsi waktu dan ruang suatu algoritma pada mesin dan bahasa pemrograman tertentu.

Tujuan dari dilakukannya fase ini dalah untuk :

Menentukan jumlah waktu dan ruang penyimpanan yang diperlukan program. Kegunaan dari fase ini adalah untuk memvalidasi a priori analysis.

3. Analisis Optimalitas Algoritma

Algoritma disebut optimal jika tidak terdapat algoritma lain di kelas persoalan itu yang mempunyai jumlah operasi yang lebih sedikit dibanding algoritma itu. Harus ditemukan lower bound jumlah operasi minimum yang perlu dilakukan untuk penyelesaian masalah. Jika algoritma menyelesaikan masalah dengan jumlah operasi yang sama dengan lower bound maka algoritma disebut optimal.

4. Kompleksitas Waktu Asimptotik

Kompleksitas waktu asimptotik merupakan waktu yang dibutuhkan suatu Algoritma menyelesaikan tiap langkahnya. Setiap Algoritma memiliki kompleksitas waktu yang berbeda-beda. Komplesitas waktu asimptotik diperlukan untuk menghitung performansi suatu Algoritma. Untuk menghitung kompleksitas

waktu asimptotik suatu Algoritma digunakanlah notasi “O-Besar” (Big-O) yang

merupakan notasi kompleksitas waktu asimptotik.

Perhitungan kompleksitas waktu asimptotik dilakukan dengan menghitung nilai O-besar dari setiap instruksi di dalam Algoritma. Aturan dalam perhitungan teorema O-Besar adalah sebagai berikut [6] :

1. Pengisian nilai (assignment), perbandingan, operasi aritmetik, read, write membutuhkan waktu O(1).

2. Pengaksesan elemen larik atau memilih field tertentu dari sebuah record membutuhkan waktu O(1).

Kompleksitas waktu di atas adalah O(1), didapat dari read(x); O(1)

x:=x+a[k]; O(1)+ O(1)+ O(1)= O(1) writeln(x); O(1)


(29)

= O(1)+ O(1)+ O(1) = O(max(1,1))+ O(1) = O(1)+ O(1)

= O(max(1,1)) = O(1)

3. If c then s1 else s2. Membutuhkan waktu Tc + max(Ts1,Ts2).

Kompleksitas waktu di atas adalah O(1), didapat dari = O(1) + O(1) max (O(1)+ O(1), O(1))

= O(1) + max(O(1), O(1)) = O(1)

4. Kalang for. Kompleksitas waktu kalang for adalah jumlah pengulangan dikali dengan kompleksitas waktu badan kalang.

Kompleksitas waktu di atas adalah O(n), didapat dari = O(n) . O(1)

= O(n.1) = O(n)

5. While c do s; dan repeat s until c; untuk kedua buah kalang, kompleksitas waktunya adalah jumlah pengulangan dikali dengan waktu badan c dan s.

read(x); O(1) if x mod 2=0 then O(1) begin

x:=x+1; O(1) writeln(x); O(1) end

else

writeln(x); O(1)

For i=1 to n do O(n) Jumlah:= jumlah +a[i]; O(1)


(30)

Kompleksitas waktu di atas adalah O(1), didapat dari = O(1)+ O(n){O(1)+O(1)}

= O(1)+ O(n) O(1) = O(1)+ O(n.1) = O(1)+ O(n) = O(n)

II.2.2.2. Strategi Algoritma

Strategi algoritmik adalah kumpulan metode atau teknik untuk memecahkan masalah guna mencapai tujuan yang ditentukan, yang dalam hal ini deskripsi metode atau teknik tersebut dinyatakan dalam suatu urutan langkah-langkah penyelesaian.

Secara umum, strategi pemecahan masalah dapat dikelompokan menjadi: 1. Strategi solusi langsung, metode yang termasuk ke dalam strategi ini

adalah Algoritma Brute Force dan Algoritma Greedy

2. Strategi berbasis pencarian pada ruang status, metode yang termasuk ke dalam strategi ini adalah Algoritma Backtracking dan Algoritma Brach and Bound.

3. Strategi solusi atas-bawah, metode yang termasuk ke dalam strategi ini adalah Algoritma Divide and Conquer.

4. Strategi solusi bawah-atas, metode yang termasuk ke dalam strategi ini adalah Dynamic Programming.

Algoritma Greedy merupakan salah satu metode yang paling populer untuk menyelesaikan persoalan optimasi. Yang dimaksud dengan persoalan optimasi adalah persoalan yang mencari solusi optimal, baik yang bersifat maksimal (maksimalisasi), atau minimal (minimalisasi). Dalam bahasa inggris,

i:=2; O(1) while i<=n do O(n) begin

jumlah:=jumlah+a[i]; O(1) i:= i +1; O(1) end;


(31)

Greedy berarti rakus atau tamak. Hal ini mencerminkan prinsip dari algoritma ini,

yaitu “take what you can get now!”. Algoritma ini akan membentuk solusi

langkah per langkah. Pada setiap langkah, algoritma ini akan mengeksplorasi segala kemungkinan pilihan yang ada. Dari seluruh kemungkinan pilihan tersebut, akan diambil pilihan yang paling baik untuk setiap langkahnya. Pilihan terbaik ini disebut solusi optimal lokal.

Harapannya, dengan terus menerus mengambil pilihan optimal terbaik untuk tiap langkahnya, akan dihasilkan solusi global (solusi dari keseluruhan langkah) yang juga optimal. Kekurangan dari algoritma ini adalah tidak adanya perhatian terhadap konsekuensi dari tiap langkah yang diambil, sehingga bisa saja rangkaian langkah yang dihasilkan bukan merupakan solusi optimal global.

Algoritma greedy banyak digunakan dalam berbagai penyelesaian masalah, antara lain adalah :

1. Optimal Storage on Tapes Problem. 2. Knapsack Problem.

3. Minimum Spanning Tree Problem 4. Shortest Path Problem

Ada tiga pendekatan algoritma greedy dalam menyelesaikan persoalan Integer Knapsack, dimana salah satu pendekatan ini akan digunakan untuk cara memasukkan objek ke dalam knapsack [2]. Adapun tiga jenis pendekatannya yaitu :

1. Greedy byprofit (Pi)

Greedy by profit memprioritaskan objek dengan keuntungan paling besar. Cara ini digunakan untuk mengoptimalkan keuntungan dengan memilih objek yang memiliki keuntungan terbesar terlebih dahulu. Diketahui sebuah kapasitas knapsack W = 41, kemudian akan dimasukkan barang dengan bobot dan profit sebagai berikut :

w1 = 5; p1 = 30; w2 = 15; p2 = 36; w3 = 25; p3 = 125; w4 = 15; p4 = 27;


(32)

Dari properti objek diatas maka perhitungan dengan menggunakan greedy by profit akan ditunjukkan pada Tabel II-2 Contoh Kasus dan Pemilihan Objek Dengan Greedy By Profit.

Tabel II-2 Contoh Kasus dan Pemilihan Objek Dengan Greedy By Profit

Properti Proyek Greedy by profit

I wi pi Knapsack 0/1 Fractional Knapsack

1 5 30 0 0,2 atau 20%

2 15 36 1 1

3 25 125 1 1

4 15 27 0 0

Total bobot 40 41

Total keuntungan 161 167

Pada tabel baris greedy by profit, angka 1 (satu) menunjukkan bahwa kolom tersebut terpilih sebagai nilai paling optimal sedangkan angka 0 (nol) menunjukkan bahwa kolom tidak dipilih sebagai objek yang optimal dengan menggunakan cara greedy by profit.

2. Greedybyweight (Wi)

Greedy by weight memprioritaskan objek dengan berat paling ringan. Cara ini dimaksudkan untuk memaksimumkan keuntungan dengan memasukkan objek sebanyak mungkin ke dalam knapsack. Contoh kasus dengan menggunakan greedy by weight akan ditunjukkan dalam Tabel II-3 Contoh Kasus dan Pemilihan Objek Dengan Greedy By Weight. Properti objek yang digunakan masih dari contoh kasus sebelumnya.


(33)

Tabel II-3 Contoh Kasus dan Pemilihan Objek Dengan Greedy By Weight

Properti Proyek Greedy By Weight

I wi pi Knapsack 0/1

Fracrtional Knapsack

1 5 30 1 1

2 15 36 1 1

3 25 125 0 0,24 atau 24%

4 15 27 1 1

Total bobot 35 41

Total keuntungan 93 123

Pada Tabel II-3 untuk pemilihan proyek dengan knapsack 0/1 solusi optimalnya adalah (1, 1, 0, 1) dengan total keuntungan 93 dimana nilai 1 (satu) adalah terpilih dan nilai 0 (nol) adalah tidak terpilih sebagai solusi optimal. Pemilihan proyek dengan fractional knapsack solusi optimalnya adalah (1, 1, 24%, 1) dengan total keuntungannya 123.

3. Greedybydensity (Pi/Wi)

Greedy by density memprioritaskan objek dengan densitas (pi / wi) terbesar. Cara ini digunakan untuk memaksimumkan keuntungan dengan memilih objek yang memiliki keuntungan per unit berat terbesar. Contoh kasus dengan menggunakan greedy by density akan ditunjukkan dalam Tabel II-4 Contoh Kasus dan Pemilihan Objek Dengan Greedy By Density. Properti objek yang digunakan masih dari contoh kasus sebelumnya.


(34)

Tabel II-4 Contoh Kasus dan Pemilihan Objek Dengan Greedy By Density

Properti Proyek Greedy By Density

I wi pi pi /wi Knapsack 0/1

Fractional Knapsack

1 5 30 6 0 0,2 atau 20%

2 15 36 2,4 1 1

3 25 125 5 1 1

4 15 27 1,8 0 0

Total bobot 40 41

Total keuntungan 161 167

Tabel II-4 menunjukkan solusi optimal untuk pemilihan dengan greedy by density dengan knapsack 0/1 adalah (0, 1, 1, 0) dengan total keuntungan adalah 161. Nilai 0 (nol) berarti proyek ke-i tidak terpilih sebagai solusi optimal dan nilai 1 (satu) berarti proyek ke-i dinyatakan terpilih sebagai solusi optimal.

Pemilihan dengan fractional knapsack menunjukkan solusi optimalnya adalah (20%, 1, 1, 0) dengan total keuntungan 167. Nilai 20% atau 0,2 mengindikasikan bahwa proyek ke-i memenuhi solusi optimal dengan besar pertimbangan sebesar 20%.

Ketiga contoh pendekatan algoritma pada Tabel II-2, Tabel II-3 dan Tabel II-4 mengindikasikan bahwa yang selalu menghasilkan solusi yang paling optimum adalah algoritma fractional knapsack dengan menggunakan pendekatan greedy by density. Diperkuat dengan teori dari Rinaldi Munir bahwa Algoritma greedy untuk persoalan fractional knapsack dengan strategi pemilihan objek berdasarkan pi /wi terbesar akan selalu memberikan solusi optimal.

Berdasarkan atas kesimpulan tersebut maka peneliti akan menggunakan algoritma fractional knapsack dengan pendekatan greedy by density untuk menyelesaikan pemilihan proyek di PT. GITS Indonesia. Selain itu dengan


(35)

menggunakan fractional knapsack, objek yang tidak muat ke dalam pilihan (dikarenakan melebihi total constraint) masih dapat dipertimbangkan dengan satuan persentase sehingga keuntungan dapat dioptimalkan.

Pencarian solusi algoritma greedy melibatkan pencarian sebuah himpunan bagian S, dari himpunan kandidat, C; yang dalam hal ini, S harus memenuhi beberapa kriteria yang ditentukan, yaitu menyatakan suatu solusi dan S dioptimisasi oleh fungsi obyektif.

Berikut akan dijelaskan apa itu himpunan-himpunan atau elemen yang terdapat dalam algoritma greedy :

1. Himpunan kandidat

Himpunan yang berisi elemen-elemen pembentuk solusi. 2. Himpunan solusi

Himpunan yang berisi kandidat-kandidat yang terpilih sebagai solusi. 3. Fungsi seleksi

Memilih kandidat yang paling memungkinkan mencapai solusi optimal. 4. Fungsi kelayakan

Memeriksa apakah himpunan kandidat yang telah terpilih dapat menjadi solusi yang layak, yaitu tidak melanggar constraint yang ada. Kandidat yang layak dimasukkan ke dalam himpunan solusi, sedangkan kandidat yang tidak layak dibuang dan tidak pernah dipertimbangkan lagi.

5. Fungsi objektif

Fungsi yang memaksimumkan atau meminimumkan nilai soulsi (misalkan keuntungan, panjang lintasan, dan lain-lain).

II.2.2.3. Algoritma Knapsack

Knapsack telah dipelajari secara intensif sejak karya perintis Dantzig yaitu abad ke pada 50-an. Pada saat itu algoritma Knapsack diimplementasikan baik untuk aplikasi langsung dalam industri maupun manajemen keuangan, tetapi lebih sering digunakan untuk penelitian dan hal yang bersifat teoritis. Sebagai sebuah masalah, knapsack yang sering terjadi dengan relaksasi berbagai masalah integer programming [3].

Knapsack problem atau rucksack problem adalah masalah optimasi kombinatorial. Namanya berasal dari masalah maksimasi untuk pilihan paling


(36)

tepat dari barang-barang yang akan dibawa dalam sebuah tas pada sebuah perjalanan. Sejumlah barang yang tersedia ini, masing-masing memiliki berat dan nilai, yang menentukan jumlah barang yang dapat dibawa sehingga total berat tidak melebihi kapasitas tas dan dengan total nilai yang sebesar mungkin.

Terdapat beberapa jenis knapsack problem antara lain adalah :

1. 0/1 Knapsack

Pada knapsack 0/1 setiap barang hanya tersedia 1 unit, take it or leave it. Cara pemilihan solusi optimumnya hanya tidak atau ya (0 atau 1) atau dengan kata lain objek lain yang tidak memenuhi aturan constraint tidak dapat dipertimbangkan lagi. Contoh kasus knapsack 0/1 dapat dilihat dalam Tabel II-2, Tabel II-3 dan Tabel II-4 pada sub bab sebelumnya.

2. Fractionalknapsack

Barang boleh dibawa sebagian saja (unit dalam pecahan). Versi problem ini menjadi masuk akal apabila barang yang tersedia dapat dibagi-bagi misalnya gula, tepung, dan sebagainya. Pada algoritma fractional knapsack cara pemilihan solusi optimumnya bisa tidak, ya, dan dipertimbangkan dalam pecahan (0 atau 1 atau 1/x) sehingga bobot totalnya dapat dioptimalkan dengan total nilai constraintnya. Contoh pemilihan objek yang optimal fractional knapsack dapat dilihat dalam Tabel II-2, Tabel II-3, dan Tabel II-4 pada subbab sebelumnya.

II.2.3 Tools Pemodelan

Tools pemodelan adalah alat atau pernagkat dan metode yang digunakan untuk memodelkan perancangan perangkat lunak simulasi. Adapun tools pemodelan yang digunakan dalam penelitian ini adalah :

1. Basis Data 2. Flow Chart 3. Diagram Konteks

4. DFD (Data Flow Diagram)

II.2.3.1. Basis Data

Data merupakan fakta mengenai suatu objek seperti manusia, benda, peristiwa, konsep, keadaan dan sebagainya yang dapat dicatat dan mempunyai arti


(37)

secara implisit. Data dapat dinyatakan dalam bentuk angka, karakter atau simbol, sehingga bila data dikumpulkan dan saling berhubungan maka dikenal dengan istilah basis data (database). Sedangkan menurut George Tsu-der Chou basis data merupakan kumpulan informasi bermanfaat yang diorganisasikan ke dalam aturan yang khusus. Informasi ini adalah data yang telah diorganisasikan ke dalam bentuk yang sesuai dengan kebutuhan seseorang. Menurut Encyclopedia of Computer Science and Engineer, para ilmuwan di bidang informasi menerima definisi standar informasi yaitu data yang digunakan dalam pengambilan keputusan.

Definisi lain dari basis data menurut Fabbri dan Schwab adalah sistem berkas terpadu yang dirancang terutama untuk meminimalkan duplikasi data. Menurut Ramez Elmasri mendefinisikan basis data lebih dibatasi pada arti implisit yang khusus, yaitu:

1. Basis data merupakan penyajian suatu aspek dari dunia nyata (real world).

2. Basis data merupakan kumpulan data dari berbagai sumber yang secara logika mempunyai arti implisit. Sehingga data yang terkumpul secara acak dan tanpa mempunyai arti, tidak dapat disebut basis data.

3. Basis data perlu dirancang, dibangun dan data dikumpulkan untuk suatu tujuan. Basis data dapat digunakan oleh beberapa user dan beberapa aplikasi yang sesuai dengan kepentingan user.

Dari beberapa definisi-definisi tersebut, dapat dikatakan bahwa basis data memounyai berbagai sumber data dalam pengumpulan data, bervariasi derajat interaksi kejadian dari dunia nyata, dirancang dan dibangun agar dapat digunakan oleh beberapa user untuk berbagai kepentingan.

II.2.3.2. Flowchart

Flowchart adalah penggambaran secara grafik dari langkah-langkah dan urut-urutan prosedur dari suatu program. Flowchart menolong analis dan programmer untuk memecahkan masalah kedalam segmen-segmen yang lebih kecil dan menolong dalam menganalisis alternatif-alternatif lain dalam pengoperasian. Ada beberapa petunjuk yang harus diperhatikan bagi seseorang analis atau programmer dalam membuat flowchart yaitu :


(38)

1. Flowchart digambarkan dari halaman atas ke bawah dan dari kiri ke kanan. 2. Aktivitas yang digambarkan harus didefinisikan secara hati-hati dan definisi

ini harus dapat dimengerti oleh pembacanya.

3. Kapan aktivitas dimulai dan berakhir harus ditentukan secara jelas.

4. Setiap langkah dari aktivitas harus diuraikan dengan menggunakan deskripsi kata kerja, misalkan “Menghitung Pajak Penjualan”.

5. Setiap langkah dari aktivitas harus berada pada urutan yang benar.

6. Lingkup dan range dari aktifitas yang sedang digambarkan harus ditelusuri dengan hati-hati. Percabangan-percabangan yang memotong aktivitas yang sedang digambarkan tidak perlu digambarkan pada flowchart yang sama. Simbol konektor harus digunakan dan percabangannya diletakan pada halaman yang terpisah atau hilangkan seluruhnya bila percabangannya tidak berkaitan dengan sistem.

7. Gunakan simbol-simbol flowchart yang standar.

Flowchart terbagi dalam lima jenis yaitu : 1. Flowchart Sistem (System Flowchart)

2. Flowchart Paperwork / Flowchart Dokumen (Document Flowchart) 3. Flowchart Skematik (Schematic Flowchart)

4. Flowchart Program (Program Flowchart) 5. Flowchart Proses (Process Flowchart)

Simbol-simbol flowchart yang biasanya dipakai adalah simbol-simbol flowchart standar yang dikeluarkan oleh ANSI dan ISO. Simbol-simbol ini dapat dilihat pada Gambar simbol standar flowchart.

II.2.3.3. Diagram Konteks

Jenis pertama Context Diagram, adalah data flow diagram tingkat atas (DFD Top Level), yaitu diagram yang paling tidak detail, dari sebuah sistem informasi yang menggambarkan aliran-aliran data ke dalam dan ke luar sistem dan ke dalam dan ke luar entitas-entitas eksternal. (CD menggambarkan sistem dalam satu lingkaran dan hubungan dengan entitas luar. Lingkaran tersebut menggambarkan keseluruhan proses dalam sistem). Diagram konteks adalah arus data yang berfungsi untuk menggambarkan keterkaitan aliran-aliran data antara


(39)

sistem dengan bagian-bagian luar (kesatuan luar). Kesatuan luar ini merupakan sumber arus data atau tujuan data yang berhubungan dengan sistem informasi tersebut. Diagram konteks bisa disebut dengan “Model sistem pokok (fundamental system model) mewakili keseluruhan elemen software dengan masukan (input) dan keluaran (output) yang diidentifikasi dengan anak panah masuk dan keluar memperlihatkan sumber data”.

II.2.3.4. Data Flow Diagram (DFD)

Data Flow Diagram (DFD) adalah representasi grafik dari sebuah sistem. DFD menggambarkan komponen-komponen sebuah sistem, aliran-aliran data di mana komponen-komponen tersebut, dan asal, tujuan, dan penyimpanan dari data tersebut [8]. Data Flow Diagram digunakan untuk menggambarkan suatu sistem yang telah ada atau sistem baru yang akan dikembangkan secara logika tanpa mempertimbangkan lingkungan fisik dimana data tersebut mengalir atau lingkungan fisik dimana data tersebut akan disimpan. Data Flow Diagram juga digunakan pada metodologi pengembangan sistem yang terstruktur.

II.2.4 Tools Implementasi

Tools implementasi adalah alat-alat atau metode yang digunakan untuk mengimplementasikan perangkat lunak simulasi yang dibangun. Tools implementasi perangkat lunak yang dibangun antara lain adalah :

1. Bahasa Pemrograman 2. Borland Delphi

II.2.4.1. Bahasa Pemrograman

Pascal merupakan salah satu bahasa pemrograman tingkat tinggi. Pemrograman tingkat tinggi menandakan bahwa Pascal banyak menggunakan bahasa manusia dalam penulisan sintaksnya. Beberapa bahasa pemrograman tingkat tinggi lainnya yang ada yaitu BASIC dan DELPHI. Sedangkan bahasa pemrograman tingkat rendah yaitu bahasa pemrograman yang masih banyak menggunakan tanda-tanda sehingga bahasa ini cenderung lebih “kotor”. Beberapa bahasa pemrograman tingkat rendah yang sering digunakan adalah C, C++ dan Java.


(40)

Turbo Pascal dan C merupakan program compiler. Compiler sendiri berarti program yang menerjemahkan tulisan berupa kode program menjadi bahasa mesin yang dapat dimengerti oleh komputer. Proses yang dilakukan disebut compile atau compiling. Suatu program dapat di-compile dengan menggunakan kombinasi tombol Alt + F9. Sedangkan untuk menjalankan program, tombol yang dapat digunakan adalah Ctrl + F9. Bila selama proses compile terdapat error atau kesalahan dalam penulisan program, maka Turbo Pascal atau C akan memberitahukan letak kesalahan tersebut sehingga pengguna dapat memperbaikinya di halaman editor. Turbo Pascal merupakan bahasa yang case insensitive yang berarti penulisan dalam huruf kapital maupun huruf kecil tidak dipermasalahkan. Akan tetapi pada C yang case sensitive, maka penulisan huruf kapital atau kecil harus benar-benar diperhatikan.

Pada setiap kode pemrograman, terdapat aturan yang harus dipatuhi agar program tersebut dapat menjalankan (compile) suatu program dengan baik tanpa error. Struktur utama pada Turbo Pascal adalah sebagai berikut :

program ... ; {deklarasi nama program} uses ... ; {deklarasi penggunaan unit} label ... ; {deklarasi label}

const ... ; {deklarasi konstant} type ... ; {deklarasi tipe data} var ... ; {deklarasi variabel} procedure ... ; {deklarasi procedure} function ... ; {deklarasi function} begin

statement; {program ditulis di sini} ...

end.

II.2.4.2. Borland Delphi

Borland Delphi 7 adalah paket bahasa pemrograman yang bekerja dalam sistem operasi windows. Delphi merupakan bahasa pemrograman yang mempunyai cakupan kemampuan yang luas dan sangat canggih. Berbagai jenis


(41)

aplikasi dapat dibuat dengan Delphi, termasuk aplikasi untuk mengolah teks, grafik, angka, database dan aplikasi web.

Secara umum, kemampuan Delphi adalah menyediakan komponen-komponen dan bahasa pemrograman yang andal, sehingga memungkinkan untuk dapat membuat program aplikasi sesuai dengan keinginan, dengan tampilan dan kemampuan yang canggih.

Untuk mempermudah programer dalam membuat program aplikasi, Delphi menyediakan fasilitas pemrograman yang sangat lengkap. Fasilitas pemrograman tersebut dibagi dalam 2 kelompok, yaitu object dan bahasa pemrograman. Secara ringkas, object adalah suatu komponen yang mempunyai bentuk fisik dan biasanya dapat dilihat (visual). Object biasanya dipakai untuk melakukan tugas tertentu dan mempunyai batasan-batasan tertentu. Sedangkan bahasa pemrograman secara singkat dapat disebut sebagai sekumpulan teks yang mempunyai arti tertentu dan disusun dengan aturan tertentu serta untuk menjalankan tugas tertentu. Delphi menggunakan struktur bahasa pemrograman Object Pascal yang sudah sangat dikenal di kalangan pemrogram profesional. Gabungan dari object dan bahasa pemrograman ini sering disebut sebagai bahasa pemrograman berorientasi object atau Object Oriented Programing (OOP).

Delphi telah memberikan komponen-komponen yang mudah dalam membangun aplikasi. Dalam grafis pun delphi dapat mengolah data yang membuat tampilan gambar seperti grafik equalizer dengan menggunakan komponen khsus. Secara matematis delphi 7 telah menyediakan operator untuk mengolah data sehingga dalam membuat aplikasinya pun lebih mudah, adapun tingkatan operator dalam delphi 7 sehingga jika muncul fungsi matematis maka akan diolah secara otomatis.

II.2.5 Pengujian Perangkat Lunak

Pengujian adalah Proses menelusuri dan mempelajari sebuah program dalam rangka menemukan kesalahan pada perangkat lunak sebelum diserahkan kepada pengguna [9]. Pengujian perangkat lunak dalam penelitian ini dibagi menjadi dua metode pengujian yaitu metode pengujian white-box dan metode pengujian black-box.


(42)

.

II.2.5.1. Metode Pengujian White-box

Merupakan metode perancangan test case yang menggunakan struktur kontrol dari perancangan prosedural untuk mendapatkan test case. Dengan menggunakan metode white box, analis sistem akan dapat memperoleh test case yang:

1. Menjamin seluruh independent path di dalam modul yang dikerjakan sekurang-kurangnya sekali

2. Mengerjakan seluruh keputusan logikal

3. Mengerjakan seluruh loop yang sesuai dengan batasannya

4. Mengerjakan seluruh struktur data internal yang menjamin validitas

Dua teknik dalam metode pengujian white-box adalah dengan uji coba basis path dan pengujian loop.

II.2.5.1.1. Basis Path

Merupakan teknik uji coba white box yang diusulkan Tom McCabe. Metode ini memungkinkan perancang test case mendapatkan ukuran kekompleksan logical dari perancangan prosedural dan menggunakan ukuran ini sebagai petunjuk untuk mendefinisikan basis set dari jalur pengerjaan. Test case yang didapat digunakan untuk mengerjakan basis set yang menjamin pengerjaan setiap perintah minimal satu kali selama uji coba. Test case dapat dilakukan dengan membuat diagram alir dari suatu algortima. Jenis notasi diagram alir dapat dilihat pada Gambar II-2.

Gambar II-2 Notasi Diagram Alir Pengujian

Lingkaran (node), menggambarkan satu/lebih perintah prosedural. Urutan proses dan keputusan dapat dipetakan dalam satu node. Tanda panah (edge),


(43)

menggambarkan aliran kontrol. Setiap node harus mempunyai tujuan node. Region adalah daerah yang dibatasi oleh edge dan node. Termasuk daerah diluar grafik alir.

Gambar II-3 Contoh Diagram Alir (Flow Graph) dan Predicate Node

Node dibuat terpisah untuk masing-masing kondisi A dan B dari pernyataan IF A OR B. Masing-masing node berisi kondisi yang disebut pridicate nodedan mempunyai karakteristik dua atau lebih edge darinya.

Cyclomatic complexity adalah metrik software yang menyediakan ukuran kuantitatif dari kekompleksan logikal program. Apabila digunakan dalam konteks metode uji coba basis path, nilai yang dihitung untuk cyclomatic complexity menentukan jumlah jalur independen dalam basis set suatu program dan memberi batas atas untuk jumlah uji coba yang harus dikerjakan untuk menjamin bahwa seluruh perintah sekurang-kurangnya telah dikerjakan sekali. Jalur independent adalah jalur yang melintasi atau melalui program dimana sekurang-kurangnya terdapat proses perintah yang baru atau kondisi yang baru.


(44)

Gambar II-4 Contoh Diagram Alir

Dari gambar Gambar II-4 Contoh Diagram Alir maka langkah perhitungannya adalah sebagai berikut :

Path 1 = 1 - 11

Path 2 = 1 - 2 - 3 - 4 - 5 - 10 - 1 - 11 Path 3 = 1 - 2 - 3 - 6 - 8 - 9 ...: 10 - 1 - 11 Path 4 = 1 - 2 - 3 - 6 - 7 - 9 - 10 - 1 - 11

Path 1,2,3,4 yang telah didefinisikan diatas merupakan basis set untuk diagram alir.

1. Cyclomatic complexity

Cyclomatic complexity digunakan untuk mencari jumlah path dalam satu flowgraph. Dapat dipergunakan rumusan sebagai berikut :

1. Jumlah region grafik alir sesuai dengan cyclomatic complexity.

2. Cyclomatix complexity V(G) untuk grafik alir dihitung dengan rumus: V(G) = E - N + 2

Dimana:

E = jumlah edge pada grafik alir N = jumlah node pada grafik alir

3. Cyclomatix complexity V(G) juga dapat dihitung dengan rumus: V(G) = P + 1


(45)

Pada Gambar dapat dihitung cyclomatic complexity: 1. Flowgraph mempunyai 4 region

2. V(G) = 11 edge - 9 node + 2 = 4 3. V(G) = 3 predicate node + 1 = 4

Jadi cyclomatic complexity untuk flowgraph adalah 4.

2. Graph Metrik

Graph metrik merupakan software yang dikembangkan untuk membantu uji coba basis path atau struktur data. Graph metrik adalah matrik empat persegi yang mempunyai ukuran yang sama dengan jumlah node pada flowgraph. Masing-masing baris dan kolom mempunyai hubungan dengan node yang telah ditentukan dan pemasukan data matrik berhubungan dengan hubungan (edge) antar node.

Hubungan bobot menyediakan tambahan informasi tentang aliran kontrol. Secara simpel hubungan bobot dapat diberi nilai 1 jika ada hubungan antara node atau nilai 0 jika tidak ada hubungan. Dapat juga hubungan bobot diberi tanda dengan:

1. Kemungkinan link (edge) dikerjakan

2. Waktu yang digunakan untuk proses selama traversal dari link

3. Memori yang diperlukan selama traversal link

4. Sumber daya yang diperlukan selama traversal link

II.2.5.1.2. Pengujian Loop

Loop merupakan kendala yang sering muncul untuk menerapkan algoritma dengan tepat. Uji coba loop merupakan teknik pengujian white box yang fokusnya pada validitas dari loop. Kelas loop yaitu : loop sederhana, loop tersarang, loop terangkai, loop tidak terstruktur.

II.2.5.2. Metode Pengujian Black-Box

Metode ujicoba blackbox memfokuskan pada keperluan fungsional dari software. Karna itu ujicoba blackbox memungkinkan pengembang software untuk membuat himpunan kondisi input yang akan melatih seluruh syarat-syarat fungsional suatu program. Ujicoba blackbox bukan merupakan alternatif dari


(46)

ujicoba whitebox, tetapi merupakan pendekatan yang melengkapi untuk menemukan kesalahan lainnya, selain menggunakan metode whitebox.

Ujicoba blackbox berusaha untuk menemukan kesalahan dalam beberapa kategori, diantaranya :

1. Fungsi-fungsi yang salah atau hilang 2. Kesalahan interface

3. Kesalahan dalam struktur data atau akses database eksternal 4. Kesalahan performa

5. kesalahan inisialisasi dan terminasi

Tidak seperti metode whitebox yang dilaksanakan diawal proses, ujicoba blackbox diaplikasikan dibeberapa tahapan berikutnya. Karena ujicoba blackbox dengan sengaja mengabaikan struktur kontrol, sehingga perhatiannya difokuskan pada informasi domain. Ujicoba didesain untuk dapat menjawab pertanyaanpertanyaan berikut :

1. Bagaimana validitas fungsionalnya diuji.

2. Jenis input seperti apa yang akan menghasilkan kasus uji yang baik. 3. Apakah sistem secara khusus sensitif terhadap nilai input tertentu. 4. Bagaimana batasan-batasan kelas data diisolasi.

5. Berapa rasio data dan jumlah data yang dapat ditoleransi oleh sistem. 6. Apa akibat yang akan timbul dari kombinasi spesifik data pada operasi

sistem.

Dengan mengaplikasikan ujicoba blackbox, diharapkan dapat menghasilkan sekumpulan kasus uji yang memenuhi kriteria berikut :

1. Kasus uji yang berkurang, jika jumlahnya lebih dari 1, maka jumlah dari ujikasus tambahan harus didesain untuk mencapai ujicoba yang cukup beralasan.

2. Kasus uji yang memberitahukan sesuatu tentang keberadaan atau tidaknya suatu jenis kesalahan, daripada kesalahan yang terhubung hanya dengan suatu ujicoba yang spesifik.


(47)

34

III.1 Analisis Sistem

Bab ini akan membahas tentang analisis dan perancangan sistem algoritma knapsack dengan data proyek yang digunakan bersumber dari PT. GITS Indonesia. Terdapat langkah-langkah yang dilakukan dalam analisis sistem yaitu :

1. Analisis masalah 2. Analisis struktur data 3. Analisis strategi 4. Analisis algoritma

III.1.1 Analisis Masalah

Analisis algoritma knapsack dilakukan karena ditemukannya masalah dalam penggunaan algoritma knapsack. Masalah yang ditemukan saat analisis dilakukan antara lain adalah belum ditemukannya analisis performansi algoritma knapsack terhadap kasus pemilihan proyek yang terjadi di PT. GITS Indonesia. Hal ini menyebabkan hanya pada kasus-kasus tertentu saja mungkin suatu algoritma lebih efektif dari yang lainnya. Penerapan Algoritma knapsack terhadap pemilihan proyek ini di PT. GITS Indonesia ini memiliki kesamaan karateristik dengan kasus uji yang dilakukan peneliti lain terhadap algoritma knapsack terutama pada parameter yang digunakan. Kapasitas knapsack (W) diasumsikan dengan jumlah sumber daya manusia yang tersedia di perusahaan, bobot (wi) diasumsikan dengan jumlah sumber daya manusia yang dibutuhkan untuk menangani sebuah proyek dan profit (pi) diasumsikan dengan keuntungan dari sebuah proyek.

Hasil penelitian yang dilakukan terhadap beberapa literatur ditemukan bahwa algoritma knapsack rata-rata digunakan untuk menemukan solusi optimal yaitu maksimasi atau minimasi. Solusi yang dihasilkan dari algoritma knapsack untuk kasus pemilihan proyek di PT. GITS Indonesia adalah optimalitas pemilihan proyek. Pada kasus pemilihan proyek di PT. GITS Indonesia dapat ditentukan constraintnya, yaitu berupa jumlah sumber daya manusia yang tersedia di PT. GITS Indonesia, sedangkan parameter uji lainnya adalah jumlah sumber


(48)

daya manusia yang dibutuhkan per proyek dan profit proyek yang ditangani. Berdasarkan analisis masalah yang dipaparkan diatas maka diperlukan analisis performansi terhadap algoritma knapsack.

III.1.2 Analisis Struktur Data

Struktur data yang digunakan didalam penelitian ini adalah struktur data array dinamis. Parameter yang menggunakan array dinamis antara lain adalah :

1. Parameter profit (profit : Larik Of Int)

2. Parameter sumber daya manusia (SDM : Larik Of Int) 3. Parameter density (density : Larik Of Double)

4. Parameter status proyek (optimum : Larik Of Double)

Parameter diatas menggunakan array dinamis dengan jumlah elemen sebesar max, dimana max ini adalah parameter yang dapat dirubah pada saat runtime program. Banyaknya elemen dipanggil dan ditentukan dengan menggunakan setlength. Pemanggilan setLength untuk setiap parameter dalam potongan program adalah sebagai berikut :

1. setLength(SDM,max) 2. setLength(profit,max) 3. setLength(density,max) 4. setlength(optimum,max)

III.1.3 Analisis Strategi

Persoalan pemilihan proyek dalam penelitian ini akan diselesaikan dengan strategi algoritma Greedy. Sebelum kita menganalisis algoritma knapsack maka kita harus menganalisis algoritma greedy terlebih dahulu. Adapun karateristik algoritma Greedy yaitu :

1. Tidak melihat masalah secara global.

2. Mengambil langkah terbaik pada setiap langkah pencariannya untuk segera mendapatkan solusi.

3. Berguna dalam banyak kasus dimana tujuan atau kendala tidak diketahui secara pasti.


(49)

5. Mudah untuk menerapkan dan penginterprestasikan hasil.

Seperti yang telah dijelaskan pada bab tinjauan pustaka strategi algoritma greedy memiliki tiga pendekatan yang berbeda, yaitu greedy by weight, greedy by profit dan greedy by density. Percobaan perhitungan pendekatan strategi algoritma greedy dilakukan untuk menentukan pemilihan pendekatan yang akan digunakan dalam kasus pemilihan proyek. perbandingan perbandingan pendekatan algoritma greedy akan disajikan dalam Tabel III-1. Diketahui data proyek sebagai berikut :

1) Jumlah sumber daya manusia yang tersedia di perusahaan ( W ) = 10. 2) Jumlah projek yang akan dikerjakan ( i ) = 6

3) (wi) = weight atau jumlah SDM yang dibutuhkan untuk pengerjaan proyek.

4) (pi) = profit.

Tabel III-1 Perhitungan Perbandingan Pendekatan Algoritma Greedy

dengan Fractional Knapsack Ke-1

Properti Proyek Fractional Knapsack With Greedy by

i wi pi pi /wi profit Weight density

1 2 50000 25000 1/2 or 50% 1 1

2 3 51000 17000 1 2/3 or 66% 0

3 2 45000 22500 0 1 1

4 4 123000 30750 1 0 1

5 2 40000 20000 0 1 0

6 2 56000 28000 1 1 1

Total SDM Terpakai 10 10 10

Total keuntungan 255000 225000 274000

Pada Tabel III-1 dapat dibandingkan bahwa pendekatan strategi algoritma greedy by density menghasilkan keuntungan paling baik. Total keuntungan untuk greedy by density adalah 274000. Angka 0 (nol) pada kolom tabel fractional knapsack diatas menunjukkan proyek ke-i tidak terpilih sebagai solusi. Angka 1 (satu) menunjukkan proyek ke-i terpilih sebagai solusi sedangkan


(50)

angka pecahan ( / ) atau persen (%) menunjukkan proyek ke-i terpilih sebagai solusi optimal dengan pertimbangan pecahan atau persentase tersebut.

Perhitungan perbandingan algoritma greedy akan dilakukan sekali lagi untuk memastikan kebaikan strategi algoritma yang akan digunakan untuk pemilihan proyek. perhitungan perbandingan algoritma greedy ke-2 dapat dilihat pada tabel Tabel III-2.

Tabel III-2 Perhitungan Perbandingan Pendekatan Algoritma Greedy

dengan Fractional Knapsack Ke-2

Properti Proyek Fractional Knapsack With Greedy by

i wi pi pi /wi profit weight density

1 2 10000 5000 0 1 1

2 3 45000 15000 1 1 1

3 2 37250 18625 1 1 1

4 3 12500 4166,66667 67% 1 0

5 3 41600 13866,6667 1 0 1

Total SDM Terpakai 10 10 10

Total keuntungan 50269,44 42791,67 52491,67

Hasil perhitungan pada Tabel III-2 menunjukkan bahwa pendekatan strategi algoritma greedy by density lagi-lagi menghasilkan keuntungan paling optimal. Total keuntungan untuk pendekatan strategy algoritma greedy by density adalah 52491,67. Berdasarkan hasil percobaan tersebut maka pendekatan strategi algoritma yang akan digunakan dalam pemilihan proyek di PT GITS Indonesia adalah dengan menggunakan greedy by density. Teori ini diperkuat dengan teori yang dikemukkan Rinaldi Munir yaitu algoritma greedy untuk persoalan fractional knapsack dengan strategi pemilihan objek berdasarkan density (pi /wi)

terbesar akan selalu memberikan solusi optimal [8].

Penjelasan langkah atau proses algoritma greedy dalam mencari solusi akan dijelaskan untuk mempermudah pemahaman langkah algoritma. Proses diilustrasikan dengan penukaran uang W=500 yang akan ditukar dengan himpunan nilai uang 100, 50, 100, 200, 100, 50.


(51)

2. Langkah pertama yang dilakukan algoritma greedy adalah menyusun himpunan-himpunan yang mempresentasikan solusi optimal. Contoh himpunan koin yang mempresentasikan solusi optimal adalah K={50, 50, 100, 100, 100, 200}.

3. Langkah kedua yang dilakukan adalah memilih solusi yang nilainya mendekati atau sama dengan solusi optimal. Contoh himpunan yang mendekati solusi optimal adalah S={200, 100, 100, 100} atau S={200, 100, 100, 50, 50}.

4. Langkah berikutnya yaitu menyeleksi himpunan yang nilainya paling tinggi dari himpunan kandidat yang tersisa.

5. Langkah keempat yaitu memeriksa total nilai himpunan solusi yang diseleksi. Total nilai himpunan solusi harus lebih kecil atau sama dengan constrain yang telah ditentukan.

Jika hasil nilai diatas true maka himpunan proyek terpilih akan diseleksi menjadi solusi optimal.

6. Langkah terakhir adalah menyusun nilai solusi yang paling optimal. Algoritma greedy mencari solusi terbaik dengan cara memilih himpunan yang dianggap paling baik, sehingga pilihan ini disebut sebagai solusi lokal. Solusi lokal yang dipilih diharapkan dapat mengarah ke solusi global.

III.1.4 Analisis Algoritma knapsack

Algoritma fractional knapsack merupakan algoritma yang digunakan untuk menyelesaikan permasalahan pemilihan proyek. Pada Gambar III-1 Flowchart Algoritma Knapsack dapat dilihat alur proses algoritma Knapsack.

Adapun langkah-langkah algoritma fractional knapsack dalam mencari solusi optimal yaitu :


(52)

1. Memasukkan harga ke dalam SDM[ i ], profit[ i ] dan k.

SDM [i] adalah jumlah SDM yang dibutuhkan untuk sebuah proyek, p[i] adalah profit proyek dan k adalah constraint atau jumlah SDM yang tersedia di perusahaan.

2. Hitung rasio density atau Pi/Wi (keuntungan per unit) untuk setiap proyek. 3. Urutkan proyek secara menurun berdasarkan rasio density proyek.

4. Inisialisasi opt_sol = 0 dan i=1.

5. Pilih proyek dengan keuntungan terbesar tanpa melampaui jumlah SDM yang tersedia di perusahaan.

for i  to n do if SDM[i] > k then eof

else

optimum[i]  1 kk-SDM[i] endif

if i<= n then optimum[i]  k/SDM[i] else opt_sol0

6. Tampilkan daftar proyek dengan solusi yang terbaik.

Ketika proses pemilihan solusi, algoritma knapsack menginisialisasikan jumlah SDM yang dibutuhkan untuk proyek, keuntungan proyek dan jumlah SDM yang tersedia di perusahaan. Setelah inisialisasi himpunan penyusun solusi algoritma knapsack akan menghitung rasio density (pi / wi) proyek. Proses berikutnya algoritma akan malakukan pengurutan secara descending (menurun) berdasarkan density.

Tahapan berikutnya adalah inisialisasi nilai solusi optimal dan inisialisasi iterasi. Setelah itu baru algoritma kapsack mulai menyeleksi proyek dengan nilai density terbaik, penyeleksian akan dilakukan tanpa melebihi jumlah SDM yang tersedia di perusahaan. Jika jumlah total SDM telah memenuhi atau kurang dari sama dengan constraint maka himpunan proyek yang telah diseleksi akan disusun dan ditampilkan dalam output algoritma knapsack. Proses algoritma knapsack tersebut dapat dilihat pada Gambar III-1 Flowchart Algoritma Knapsack.


(53)

Mulai

SDM[ i ] < k

Ya

Selesai

Tidak Density[ i ] = profit[ i ] / SDM[ i ]

Inisialisasi Opt_sol = 0

i = 1

K = K - SDM[ i ] SDM[ i ], Profit[ i ],

k

SDM[ i ], profit[ i ], density[ i ], optimum[ i ], opt_sol Mengurutkan density[ i ]

Gambar III-1 Flowchart Algoritma Knapsack

Prosedur mengurutkan nilai berdasarkan density akan dipanggil dalam pseudo-code algoritma knapsack untuk mengurutkan nilai density proyek secara menurun (denscending). Alur proses pengurutan dapat dilihat pada Gambar III-2 Flowchart Prosedur Mengurutkan Nilai Berdasarkan Density.


(54)

Mulai

Mengurutkan density[ i ]

for l = i + 1 to n do

temp = density[ l ] Density[ l ] = density[ i ]

Density[ i ] = temp density[ i ] < desity[ l ] ?

ya

Selesai

Mengurutkan density[ i ]

tidak

Data density[ i ] yang terurut secara descending

Gambar III-2 Flowchart Prosedur Mengurutkan Nilai Berdasarkan Density

Prosedur pengurutan nilai density dapat dilihat dalam Tabel III-3. Pengurutan dilakukan untuk parameter array density. Prosedur pengurutan ini akan dipanggil dalam badan algoritma utama pseudo-code algoritma knapsck. Pseudo-code algoritma fractional knapsack dapat dilihat pada Tabel III-4. Dari Pseudo-code tersebut ditandai algoritma inti knapsacknya untuk kemudian dilakukan perhitungan kompleksitas waktunya.


(55)

Tabel III-3 Pseudo-Code Pengurutan Algoritma Knapsack 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

procedure PengurutanNilaiBerdasarkanDensity(input density[i]:Larik of double)

{mengurutkan nilai proyek berdasarkan density proyek secara menurun}

{I.S : nilai density telah terdefinisi sebelumya} {F.S : menampilkan pengurutan density proyek}

Algoritma :

//Pengurutan berdasarkan density i1

for li+1 to n do

if (density[i]<density[l]) then tempdensity[l]

density[l]density[i] density[i]temp

endif endfor

write(density[i])

Tabel III-4 Pseudo-code Utama Algoritma Fractional Knapsack

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

procedure FractionalKnapsack(input SDM:Larik of Int, profit:Larik of Int, output density:Larik of Double, optimum:Larik of Double)

{IS:Penyelesaian persoalan fractional knapsack dengan algoritma greedy menggunakan strategi pemilihan proyek berdasarkan density (pi/wi)

FS:Menghasilkan output berupa list proyek yang memiliki keuntungan terbesar dan total bobot proyek tidak boleh melebihi kapasitas knapsack}

Kamus

opt_sol : real {total profit optimal}

k,n,i,temp, temp2 : integer {k=constraint/jumlah sdm yang tersedia di perusahaan, n=data ke-n, i=iterasi}

procedure PengurutanNilaiBerdasarkanDensity(input Larik Of Double : density[i])

Algoritma:

read (SDM[i], profit[i], k) density[i]profit[i]/SDM[i]

PengurutanNilaiBerdasarkanDensity(density[i]) Opt_sol0

i1

for i1 to n do optimum[i]  0 endfor

for i  to n do O(n) if SDM[i] > k then O(1)


(56)

33 34 35 36 37 38 39 40 41 42 43 44 45 46 47

eof O(1) else O(1) optimum[i]  1 O(1) kk-SDM[i] O(1) endif O(1)

if i<= n then optimum[i]  k/SDM[i] O(1) else opt_sol0 O(1) for i0 to n do

opt_solopt_sol+(profit[i]*optimum[i]) endfor

endif endfor

write (SDM[i], profit[i], density[i], optimum[i], opt_sol)

Perhitungan kompleksitas waktu dengan perhitungan Big-O dilakukan dengan menghitung algoritma inti pemilihan knapsack dan mengabaikan proses pengurutan yang dilakukan algoritma. Adapun algoritma inti ditandai dengan kotak yang terdapat di dalam tabel pseudo-code. Perhitungan kompleksitas waktu ditunjukkan dalam Tabel III-5 Perhitungan Big-O Algoritma Fractional Knapsack.

Tabel III-5 Perhitungan Big-O Algoritma Fractional Knapsack

Pseudo-code Nilai

Big-O

1 for i  to n do O(n) 2 if SDM[i] > k then O(1)

3 eof O(1)

4 Else O(1)

5 optimum[i]  1 O(1) 6 kk-SDM[i] O(1)

7 Endif O(1)

8 if i<= n then optimum[i]  k/SDM[i] O(1) 9 Else opt_sol  0 O(1)

10 Jumlah O(n)

Berdasarkan hasil perhitungan performansi algoritma fractional knapsack dengan menggunakan notasi Big-O didapat kompleksitas waktunya yaitu O(n), dengann adalah ukuran inputan.

Contoh data proyek dapat dilihat dalam Tabel III-6 Sample Data Proyek 1. Data dikategorikan berdasarkan nama projek. Data sample yang didapat memiliki


(57)

atribut jumlah sumber daya manusia yang dibutuhkan untuk projek tersebut dan budget dari tiap projek.

Tabel III-6 Sample Data Proyek 1

No Nama Proyek Kebutuhan

SDM

Profit (By Rasio)

1 Proyek A 2 15300

2 Proyek B 2 23000

3 Proyek C 2 10500

4 Proyek D 4 26950

5 Proyek E 2 24650

6 Proyek F 2 12425

Kolom nama proyek pada sample data menunjukkan nama-nama proyek syang akan dikerjakan, sedangkan pada kebutuhan SDM terdapat bobot atau dalam kasus ini adalah banyak SDM yang diperlukan untuk mengerjakan proyek. Sedangkan untuk kolom profit terdapat nilai keuntungan per proyek dalam satuan rasio proyek.

Setelah data diatas didapat kemudian dilakukan penentuan pemilhan projek menggunakan algoritma Fractional Knapsack dengan pendekatan greedy by density. Diketahui properti knapsack dengan ketentuan sebagai berikut :

1) Kapasitas knapsack (W) = 9.

2) Jumlah projek yang akan dikerjakan (i) = 6

3) (wi) = weight atau jumlah SDM yang dibutuhkan untuk pengerjaan proyek.

4) (pi) = profit.

W diilustrasikan sebagai sumber daya manusia yang tersedia di perusahaan.

Berdasarkan Tabel III-6 Sample Data Proyek 1 dan ketentuan diatas maka fractional knapsack akan menghasilkan perhitungan pemilihan proyek yang dapat dilihat dalam Tabel III-7 Sample Data Proyek 1, Pemilihan Proyek dengan Menggunakan Fractional Knapsack dan Pendekatan Greedy By Density.


(58)

Tabel III-7 Sample Data Proyek 1, Pemilihan Proyek dengan Menggunakan

Fractional Knapsack dan Pendekatan Greedy By Density

Properti proyek Greedy by

density

i wi pi pi /wi

1 2 15300 7650 1

2 2 23000 11500 1

3 2 10500 5250 0

4 4 26950 6737,5 0,75 or 75%

5 2 24650 12325 1

6 2 12425 6212,5 0

Total bobot (Total SDM yang terpakai) 9

Total keuntungan 83.163

Kapasitas knapsack (jumlah SDM yang

tersedia) 9

Pada Tabel III-7 dilakukan percobaan perhitungan fractional knapsack dengan pendekatan greedy by density dan telah berhasil memberikan solusi optimal. Nilai 1 (satu) dalam kolom greedy by density berarti proyek pada baris ke-i terpilih sebagai solusi optimal untuk kemudian dimasukkan ke dalam knapsack. Nilai 0 (nol) dalam kolom greedy by weight berarti proyek tidak terpilih sebagai solusi, sedangkan nilai 0,75 atau 75% berarti proyek dengan baris ke i=4 dipilih dengan pertimbangan 75% dapat memberikan keuntungan optimal.

Solusi optimal permasalahan ini adalah S = (1, 1, 0, 75%, 1, 0) dengan total keuntungan = 83.163. Agar hasil uji dengan sample data yang didapatkan lebih baik dan akurat maka diperlukan percobaan kedua. Salah satu cara agar hasil uji yang didapatkan lebih baik maka pengolahan sample yang dilakukan pada data kedua dilakukan dengan jumlah proyek yang berbeda. Sample data uji kedua disajikan dalam tabel Tabel III-8.

Tabel III-8 Sample Data Proyek 2

No Proyek (Project yang dikerjakan)

Weight (SDM)

Profit (By Ratio)

1 Proyek G 2 10000

2 Proyek H 3 45000


(59)

4 Proyek J 3 12500

5 Proyek K 3 41600

Data diatas adalah data sample proyek ke-2 kemudian dilakukan penentuan pemilhan projek menggunakan algoritma Fractional Knapsack dengan pendekatan greedy by density. Diketahui sumber daya manusia yang tersedia (kapasitas knapsack) adalah W = 9, kemudian jumlah proyek (project) yang akan dikerjakan sebanyak i = 5 dengan properti proyeknya adalah weight atau jumlah SDM yang dibutuhkan untuk pengerjaan proyek (wi) dan profit (pi). Maka dari Tabel III-8 Sample Data Proyek 2 akan menghasilkan perhitungan pemilihan proyek yang dapat dilihat dalam Tabel III-9.

Tabel III-9 Sample Data Proyek 2 Pemilihan Proyek dengan Menggunakan Fractional Knapsack dan Pendekatan Greedy By Density

Properti proyek Greedy by

i wi pi pi /wi density

1 2 10000 5000 0,5 or 50%

2 3 45000 15000 1

3 2 37250 18625 1

4 3 12500 4166,66667 0

5 3 41600 13866,6667 1

Total bobot 9

Total keuntungan 128.850

Kapasitas knapsack (jumlah SDM yang

tersedia) 9

Percobaan perhitungan fractional knapsack dapat dilihat pada Tabel III-9. Hasil percobaan dilakukan dengan pendekatan greedy by density dan telah berhasil memberikan solusi optimal. Solusi optimal permasalah ini adalah S = (50%, 1, 1, 0, 1) dengan total keuntungan = 128.850.

III.1.5 Spesifikasi Kebutuhan Perangkat Lunak

Spesifikasi kebutuhan perangkat lunak dilakukan berdasarkan kebutuhan perangkat lunak pemilihan proyek untuk penerapan analisis agoritma serta hasil observasi. Spesifikasi kebutuhan perangkat lunak akan dibagi kedalam dua bagian


(1)

(2)

(3)

(4)

(5)

(6)