Lompat ke konten utama
←

Riset Operasi Dasar

Pelajaran 11 dari 20

Transportasi, penugasan, dan bilangan bulat

Pemrograman bilangan bulat dengan milp

Setelah pelajaran ini kamu bisa menyelesaikan program linear bilangan bulat dengan scipy.optimize.milp dan menjelaskan kenapa membulatkan hasil relaksasi linear tidak bisa diandalkan.

±13 menitDiperiksa 28 Sep 2026

Materi

Program linear bilangan bulat adalah program linear dengan syarat tambahan bahwa variabelnya harus bernilai bulat; bila hanya sebagian variabel yang wajib bulat, namanya program linear bilangan bulat campuran (MILP). Kamus algoritma NIST mencatat bahwa menyelesaikan kedua jenis soal ini termasuk NP-hard, jauh lebih berat daripada program linear biasa. Coffelt dan Hendrickson (§5.3) menjelaskan akibat geometrisnya: optimum tidak lagi pasti di titik sudut, karena titik sudut umumnya berkoordinat pecahan.

SciPy menyediakan scipy.optimize.milp(c, integrality=..., bounds=..., constraints=...). Seperti linprog, milp meminimumkan, jadi maksimasi memakai c yang dinegasikan. Kendala ditulis dengan LinearConstraint(A, lb, ub), yaitu lb ≤ A @ x ≤ ub, dan integrality berisi 1 untuk variabel bulat dan 0 untuk variabel kontinu. Menurut dokumentasinya, batas nonnegatif sudah berlaku bila bounds tidak diisi.

Panduan pengguna SciPy memperlihatkan jebakannya pada soal knapsack: solusi relaksasi (tanpa syarat bulat) mengandung pecahan; dibulatkan ke atas melanggar kapasitas, dibulatkan ke bawah menjadi tidak optimum. Nilai relaksasi tetap berguna sebagai batas atas bagi soal maksimasi bulat.

import numpy as np
from scipy.optimize import milp, LinearConstraint
# maks 5x + 4y; 6x + 4y <= 24; x + 2y <= 6; x, y bulat
kendala = LinearConstraint([[6, 4], [1, 2]], -np.inf, [24, 6])
res = milp(c=[-5, -4], constraints=kendala, integrality=[1, 1])
print(res.x, -res.fun)   # x = 4, y = 0, laba 20.0
# tanpa syarat bulat: x = 3, y = 1,5 dengan nilai 21

Latihan

0/3 lulus

Jawaban diperiksa di server. Lulus berarti kamu memahami contohnya, bukan penilaian seluruh pekerjaanmu.

Latihan 2 dari 3

Soal lemari dan meja yang sama diselesaikan tanpa syarat bulat (relaksasi linear): optimumnya di perpotongan x + y = 6 dan 9x + 5y = 45. Berapa laba relaksasinya, dalam juta rupiah? Tulis dengan dua desimal.

Latihan 3 dari 3

Relaksasi soal lemari dan meja memberi x = 3,75 dan y = 2,25. Kenapa membulatkannya tidak bisa diandalkan?

Pilih satu jawaban

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Luluskan semua latihan dulu untuk menandai pelajaran ini selesai.

Lanjutkan ke