Materi
Metode grafik berhenti di dua variabel. Untuk soal yang lebih besar, SciPy menyediakan scipy.optimize.linprog, yang menurut dokumentasinya selalu meminimumkan c @ x dengan kendala A_ub @ x ≤ b_ub, A_eq @ x = b_eq, dan batas nilai tiap variabel. Bawaannya bounds=(0, None), jadi semua variabel sudah dianggap nonnegatif tanpa perlu ditulis. Solver bawaannya HiGHS; salah satu metodenya simpleks, yang menurut Sekhon dan Bloom (§4.2) berpindah dari satu titik sudut ke titik sudut tetangga sambil terus memperbaiki nilai tujuan.
Dua penyesuaian dicontohkan di panduan pengguna SciPy. Pertama, soal maksimasi diubah menjadi minimasi dengan menegasikan koefisien tujuan: memaksimumkan 29x₁ + 45x₂ sama dengan meminimumkan −29x₁ − 45x₂. Nilai res.fun yang keluar juga bertanda negatif, sehingga laba sebenarnya adalah −res.fun. Kedua, kendala ≥ dikalikan −1 supaya menjadi ≤, termasuk ruas kanannya.
Hasilnya berupa OptimizeResult: x berisi nilai variabel keputusan, fun nilai tujuan, status 0 bila optimum ditemukan, dan message penjelasannya. Dokumentasi menyarankan memeriksa status sebelum memakai isian lain.
from scipy.optimize import linprog
# toko roti: maks 25a + 30b; 3a + 2b <= 36; a + 2b <= 20; b >= 2
res = linprog([-25, -30], A_ub=[[3, 2], [1, 2], [0, -1]], b_ub=[36, 20, -2])
print(res.status, res.x, -res.fun) # 0 [8. 6.] 380.0