Menyelesaikan masalah penganggaran modal
Ingat kembali masalah penganggaran modal.
Manajer Anda menyusun strategi perusahaan dan mempertimbangkan proyek \(A\), \(B\), \(C\), serta \(A\) merupakan prasyarat untuk \(B\). Keuntungan masing-masing adalah \(V = [250, 200, 300]\), investasi yang diperlukan adalah I = [2000, 1900, 2500] dan hanya tersedia $4600. \(o\) adalah variabel biner yang menyatakan apakah sebuah proyek dipilih.
Manajer Anda memberikan masalah berikut:
\(\max\ \ o_AV_A + o_{AB}V_B + o_CV_C\) \(s.t.\ o_AI_A + o_{AB}I_B + o_CI_C\leq 4600\)
Tugas Anda adalah melinearisasi dan menyelesaikan masalah keuntungan.
Kami sudah mengimpor pulp dan mendefinisikan sebuah model dengan parameter V, I, names untuk nama proyek (A, B, C, dan AB diindeks dalam urutan tersebut), serta o yang merepresentasikan keputusan biner dengan pengindeksan yang sama.
Latihan ini adalah bagian dari kursus
Pengantar Optimasi di Python
Petunjuk latihan
- Definisikan fungsi objektif yang telah dilinearisasi dengan melengkapi fungsi untuk proyek B dan C, dengan mempertimbangkan prasyarat untuk B.
- Definisikan kendala menggunakan variabel AB yang telah diperbarui.
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
# Define the objective
model += o[0]*V[0] + ____*V[1] + ____*V[2]
# Define the constraints
model += o[0]*I[0] + ____*I[1] + o[2]*I[2] <= 4600, 'budget constraint'
model += o[____] <= o[0]
model += o[____] <= o[1]
model += o[____] >= o[0] + o[1] - 1
status = model.solve()
print(f"{'Optimal found' if status == 1 else 'Ignore solution'}")
for i, name in enumerate(names):
print(f"{name}: {'accepted' if o[i].varValue == 1 else 'rejected'}")
print(f'Total profit = ${value(model.objective)}')