TUGAS BESAR PRA UTS
ALGORITMA STRATEGIS
Disusun Oleh :
Fembri Haris Hafiludin
(22533712)
PROGRAM STUDI TEKNIK INFORMATIKA
FAKULTAS TEKNIK
UNIVERSITAS MUHAMMADIYAH PONOROGO
TAHUN AJARAN 2023/2024
BAB I PENDAHULUAN
1.1. Latar Belakang
Knapsack adalah suatu permasalahan dalam menentukan pemilihan
objek dari sekumpulan objek yang masing-masing mempunyai bobot/berat
(weight) dan nilai/profit (value) untuk dimuat dalam sebuah media
penyimpanan tanpa melebihi kapasitas mendia penyimpanan tersebut
sehingga diperoleh hasil yang optimum. Sering kali hasil tersebut berupa
keuntungan maksimum.
Terkadang keterbatasan manusia dalam menyelesaikan masalah
knapsack tanpa menggunakan alat bantu merupakan salah satu kendala
dalam pencarian solusi optimum. Apalagi jika dihadapkan dengan jumlah
objek yang terlampau banyak. Efisiensi waktu juga sering menjadi
pertimbangan. Oleh karena itu, dibutuhkan suatu metode sekaligus
program aplikasi penerapan metode tersebut yang dapat membantu
menyelesaikan masalah knapsack.
Algoritma brute force merupakan salah satu pendekatan untuk
menyelesaikan masalah knapsack. Meskipun sederhana, algoritma ini
efektif dalam menemukan solusi optimal dengan mencoba setiap
kombinasi.[7]
BAB II LANDASAN TEORI
2.1. Knapsack Problem
Knapsack adalah tas atau karung yang digunakan untuk memuat
sesuatu yang tentunya tidak semua objek dapat ditampung di dalam karung
tersebut. Karung tersebut hanya dapat menyimpan beberapa objek dengan
total ukuran (weight) lebih kecil atau sama dengan ukuran kapasitas
karung.
Masalah knapsack merupakan masalah yang nyata dalam
kehidupan sehari-hari. Permasalahan knapsack ini sering digunakan pada
bidang jasa pengangkutan barang seperti pengangkutan peti kemas dalam
sebuah media pengangkut. Dalam kegiatan tersebut, diinginkan
keuntungan yang maksimal untuk mengangkut semua barang dengan tidak
melebihi kapasitas yang ada. Knapsack sendiri terdiri dari beberapa
persoalan, yaitu:
Knapsack 0-1 (integer knapsack) yaitu, objek yang dimasukkan ke
dalam media penyimpanan, dimana dimensinya harus dimasukkan
semua atau tidak sama sekali.
Bounded Knapsack, yaitu objek yang dimasukkan ke dalam media
penyimpanan, dimana dimensinya bisa dimasukkan sebagian atau
seluruhnya.
Unbounded knapsack, yaitu jumlah objek yang dimasukkan ke
dalam media penyimpanan yang macamnya tidak terbatas. [1]
Gambar. 1. Ilustrasi Knapsack Problem
Misalkan Diberikan n buah objek dan sebuah knapsack dengan
kapasitas berat K. Setiap objek memiliki properti berat (weigth) w i dan
keuntungan(profit) pi . Bagaimana memilih memilih objek-objek yang
dimasukkan ke dalam knapsack sedemikian sehingga diperoleh
keuntungan yang maksimal. Total berat objek yang dimasukkan ke dalam
knapsack tidak boleh melebihi kapasitas knapsack. Persoalan 0/1
Knapsack dapat kita pandang sebagai mencari himpunan bagian (subset)
dari keseluruhan objek yang muat ke dalam knapsack dan memberikan
total keuntungan terbesar. Solusi persoalan dinyatakan sebagai: X = {x1 ,
x2 , …, xn} xi = 1, jika objek ke-i dipilih, xi = 0, jika objek ke-i tidak
dipilih.
Formulasi secara matematis
n
:
Maksimasi 𝐹 = 𝑃i 𝑋𝑖
i=1
Dengan kendala (constraint)
∑ W i Xi≤ K
i=1
Yang dalam hal ini, Xi = 0 atau 1, i = 1, 2, ...., n [2]
2.2. Brute Force
Algoritma brute force adalah algoritma yang bekerja dengan cara
mencoba semua kemungkinan solusi secara sistematis dan secara
berurutan untuk menyelesaikan suatu masalah. Metode ini seringkali
digunakan dalam permasalahan optimasi, pencarian, dan pengujian
kebenaran.
Istilah "brute force" mengacu pada kekuatan kasar yang diperlukan
untuk menyelesaikan suatu masalah dengan cara ini. Dalam kasus yang
sangat kompleks, algoritma brute force dapat memerlukan waktu yang
sangat lama untuk menyelesaikan masalahnya, terutama ketika ada banyak
kemungkinan solusi.
Meskipun begitu, algoritma brute force memiliki kelebihan yaitu
mudah dipahami dan diimplementasikan, serta dapat memberikan solusi
yang akurat dalam beberapa kasus. Algoritma ini juga sering digunakan
sebagai algoritma dasar dalam mengembangkan algoritma yang lebih
canggih dan efisien.
Algoritma brute force atau sering kali disebut sebagai exhaustive
search merupakan salah satu pendekatan dalam penyelesaian masalah yang
paling sederhana. Algoritma brute force secara sistematis mencoba seluruh
kemungkinan pada himpunan kandidat solusi dan melakukan pengecekan
apakah kandidat tersebut memenuhi kriteria solusi permasalahan.
Contohnya adalah dalam pencarian nilai dari a^b, algoritma brute force
akan mengkalikan a sebanyak b kali untuk mendapatkan hasil, padahal
terdapat banyak cara lainnya yang dapat mendapatkan hasil dengan lebih
efisien. Algoritma brute force sering kali dipakai karena sifatnya yang
sangat sederhana dan mudah diimplementasikan sehingga dapat digunakan
sebagai implementasi awal untuk mengecek apakah solusi dapat
ditemukan. Selain itu, algoritma brute force juga sering digunakan untuk
keperluan benchmarking algoritma sebagai base solution untuk
dibandingkan dengan algoritma lainnya.[3]
BAB III PEMBAHASAN
3.1. Langkah-langkah/algoritma dari algoritma Brute Force dalam
menyelesaikan Knapsack Problem
Untuk menyelesaikan knapsack problem dengan menggunakan
algoritma brute force, Anda dapat mengikuti langkah-langkah berikut:
a. Enumerasi Himpunan Kandidat Solusi: Buat semua kombinasi
kemungkinan pengambilan barang. Ini berarti Anda akan membuat
daftar dari semua subset barang yang mungkin, di mana setiap barang
bisa diambil atau tidak (dinyatakan sebagai 1 atau 0).
b. Hitung Keuntungan dari Setiap Kandidat Solusi: Untuk setiap
kombinasi yang Anda buat, hitung total nilai dan total berat. Jika total
berat melebihi kapasitas ransel (knapsack), maka kombinasi tersebut
tidak layak dan tidak diperhitungkan.
c. Pilih Solusi Optimal: Dari semua kombinasi yang layak, pilih
kombinasi yang memberikan nilai total maksimum tanpa melebihi
batas berat ransel.[4]
3.2. Contoh simulasi dari algoritma Brute Force dalam menyelesaikan
permasalahan Knapsack Problem
a. Inisialisasi: Tentukan n sebagai jumlah barang, weights[] sebagai array
yang berisi berat barang, values[] sebagai array yang berisi nilai
barang, dan capacity sebagai kapasitas maksimum ransel.
b. Pembuatan Kombinasi: Gunakan loop untuk menghasilkan semua
kombinasi barang yang mungkin. Ini dapat dilakukan dengan
menggunakan loop bersarang atau rekursi untuk menelusuri setiap
kombinasi dari 0 (tidak mengambil barang) dan 1 (mengambil
barang).
c. Evaluasi Kombinasi: Untuk setiap kombinasi, hitung total berat dan
total nilai. Jika total berat melebihi capacity, maka kombinasi tersebut
tidak layak.
d. Penyimpanan Solusi Optimal: Simpan kombinasi yang memiliki total
nilai tertinggi tanpa melebihi kapasitas ransel. Ini akan menjadi solusi
optimal.
e. Output: Tampilkan solusi optimal yang ditemukan beserta total nilai
dan beratnya.
Berikut adalah representasi tabel untuk knapsack problem dengan
algoritma brute force. menggunakan contoh data berikut:
Barang Berat Nilai
1 2 3
2 3 4
3 4 5
4 5 6
Kapasitas maksimum Knapsack adalah 8.
Kombinasi Barang Total Berat Total Nilai
{} 0 0
{1} 2 3
{2} 3 4
{3} 4 5
{4} 5 6
{1, 2} 5 7
{1, 3} 6 8
{1, 4} 7 9
{2, 3} 7 9
{2, 4} 8 10
{3, 4} 9 11
{1, 2, 3} 9 12
{1, 2, 4} 10 13
{1, 3, 4} 11 14
{2, 3, 4} 12 15
{1, 2, 3, 4} 14 18
Dari tabel di atas, kita dapat melihat bahwa kombinasi barang {2,4}
memberikan nilai total maksimum sebesar 10 tanpa melebihi kapasitas
ransel.[5]
3.3. Source Code dalam bentuk C++
#include <iostream>
#include <vector>
using namespace std;
// Struktur untuk merepresentasikan sebuah barang
struct Barang {
int berat;
int nilai;
};
// Fungsi untuk menghitung total nilai dari solusi
int totalNilai(const vector<Barang>& barang, const
vector<int>& barangTerpilih) {
int total = 0;
for (size_t i = 0; i < barang.size(); ++i) {
if (barangTerpilih[i])
total += barang[i].nilai;
}
return total;
}
// Fungsi untuk mencetak solusi
void cetakSolusi(const vector<Barang>& barang, const
vector<int>& barangTerpilih) {
cout << "Barang yang Dipilih:" << endl;
for (size_t i = 0; i < barang.size(); ++i) {
if (barangTerpilih[i])
cout << "Barang " << i + 1 << " (nilai: "
<< barang[i].nilai << ", berat: " << barang[i].berat
<< ")" << endl;
}
}
// Fungsi untuk mencari solusi knapsack dengan
pendekatan brute force
void knapsackBruteForce(const vector<Barang>& barang,
int kapasitas) {
int n = barang.size();
vector<int> barangTerpilih(n, 0);
vector<int> seleksiSaatIni(n, 0);
int nilaiMaksimal = 0;
for (int i = 0; i < (1 << n); ++i) {
int totalBerat = 0;
int totalNilai = 0;
for (int j = 0; j < n; ++j) {
if (i & (1 << j)) {
totalBerat += barang[j].berat;
totalNilai += barang[j].nilai;
seleksiSaatIni[j] = 1;
}
}
if (totalBerat <= kapasitas && totalNilai >
nilaiMaksimal) {
nilaiMaksimal = totalNilai;
barangTerpilih = seleksiSaatIni;
}
fill(seleksiSaatIni.begin(),
seleksiSaatIni.end(), 0);
}
cout << "Total nilai: " << nilaiMaksimal << endl;
cetakSolusi(barang, barangTerpilih);
}
int main() {
int jumlahBarang;
cout<< "Nama : Fembri Haris Hafiludin" << endl;
cout<< "Nim : 22533712" << endl;
cout << "Masukkan jumlah barang: ";
cin >> jumlahBarang;
vector<Barang> barang(jumlahBarang);
cout << "Masukkan berat dan nilai setiap barang:"
<< endl;
for (int i = 0; i < jumlahBarang; ++i) {
cout << "Barang " << i + 1 << ":" << endl;
cout << "Berat: ";
cin >> barang[i].berat;
cout << "Nilai: ";
cin >> barang[i].nilai;
}
int kapasitas;
cout << "Masukkan kapasitas dari knapsack: ";
cin >> kapasitas;
cout << endl;
cout << "Daftar barang:" << endl;
for (size_t i = 0; i < barang.size(); ++i) {
cout << "Barang " << i + 1 << " (nilai: " <<
barang[i].nilai << ", berat: " << barang[i].berat <<
")" << endl;
}
cout << "Kapasitas knapsack: " << kapasitas <<
endl;
knapsackBruteForce(barang, kapasitas);
return 0;
}
[6]
3.4. Screenshot dari Output Program
BAB IV PENUTUP
4.1. Kesimpulan
Algoritma brute force merupakan pendekatan sederhana namun
efektif untuk menyelesaikan masalah knapsack. Pendekatan ini mencoba
setiap kombinasi barang yang mungkin dan memilih kombinasi dengan
nilai total terbesar yang sesuai dengan kapasitas knapsack.
Meskipun efektif dalam menemukan solusi optimal, pendekatan
brute force memiliki kompleksitas waktu yang eksponensial, terutama
untuk jumlah barang yang banyak.
Daftar Pustaka
[1] Devita, R. N. and Wibawa, A. P. (2020). Teknik-teknik Optimasi
Knapsack Problem, Sains, Aplikasi, Komputasi dan Teknologi
Informasi. Diakses pada 10 Mei 2024. Di: https://e-
journals.unmul.ac.id/index.php/jsakti/article/view/3299/0
[2] Rinaldi Munir. (2016). Bahan Kuliah IFF2211: Algoritma Brute Force.
Diakses pada 10 Mei 2024. Di: https://slidetodoc.com/algoritma-
brute-force-oleh-rinaldi-munir-bahan-kuliah-2/
[3] Izzan, A. (2018). Analisis Algoritma Dalam Penyelesaian Permasalahan
0/1 Knapsack. Diakses pada 10 Mei 2024.
Di:https://informatika.stei.itb.ac.id/~rinaldi.munir/Stmik/2017-
2018/Makalah/Makalah-IF2211-2018-039.pdf
[4] Yenigün, O. (2023) Knapsack Problem: Brute Force Solution,
Medium. Towards Dev. Diakses pada 10 Mei 2024. Di:
https://towardsdev.com/knapsack-problem-brute-force-solution-
40d2e2deaacd
[5] Copilot. Langkah-langkah simulasi algoritma brute force .Diakses pada
10 Mei 2024. Di: https://copilot.microsoft.com/sl/h7Teix8Fqp2
[6] ChatGPT. Contoh Program Sederhana Dalam Bahasa C++ Yang
Mengimplementasikan Algoritma Brute Force Untuk
Menyelesaikan Permasalahan Knapsack Problem. Diakses pada
10 Mei 2024. Di: https://chat.openai.com/share/69187ea7-c69c-
4650-b111-d4b059ac7b72
[7] Kusumo, S. (no date) BAB I PENDAHULUAN. Knapsack adalah suatu
permasalahan dalam menentukan pemilihan objek - PDF Free
Download, adoc.pub. ADOC.PUB. Diakses pada 10 Mei 2024.
Di: https://adoc.pub/bab-i-pendahuluan-knapsack-adalah-suatu-
permasalahan-dalam-m.html