Mengalokasikan sumber daya
Bagus, saatnya menyelesaikan masalah berikutnya yang telah Anda lihat sebelumnya.
Seorang manajer mengalokasikan 120 tugas kepada software engineer senior (S), junior (J), dan intern (I) dan ingin meminimalkan biaya.
Intern memerlukan pelatihan senilai $500 sebelum mulai mengerjakan tugas. Biaya untuk menyelesaikan tiap tugas adalah c = [30, 40, 5] secara berurutan.
\(x\) menyatakan jumlah tugas yang ditetapkan dan \(o\) adalah biner yang menunjukkan apakah intern menerima pelatihan. Total biaya adalah
\(TC = 30x_S+40x_J+(5x_I+500)o\)
Gunakan metode Big-M untuk melinearkan masalah ini dengan variabel baru \(z\):
\(z = (5x_I+500)o\)
\(-oM\leq z \leq oM\)
\(-(1-o)M \leq z- (5x_I+500)o \leq (1-o)M\)
pulp, bersama dengan model, parameter c, M, dan names, serta variabel x, z, o sudah diimpor untuk Anda.
Latihan ini adalah bagian dari kursus
Pengantar Optimasi di Python
Petunjuk latihan
- Definisikan objektif dengan mengganti bagian rumus menggunakan
z. - Definisikan kendala dengan mengisi indeks untuk intern.
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
# Define the objective
model += c[0]*x[0] + c[1]*x[1] + ____
# Define the constraints
model += -o * M <= z
model += z <= o * M
model += -(1-o) * M <= z - (c[___]*x[____] + 500)
model += z - (c[____]*x[____] + 500) <= (1-o) * M
model += lpSum(x) >= 120
status = model.solve()
print(f"{'Optimal found' if status == 1 else 'Ignore solution'}")
for i in range(len(c)):
print(f"{names[i]} was assigned {x[i].varValue:.0f}")