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 merupakan bagian dari kursus
Pengantar Optimasi di Python
Instruksi latihan
- Definisikan objektif dengan mengganti bagian rumus menggunakan
z. - Definisikan kendala dengan mengisi indeks untuk intern.
Latihan interaktif langsung praktik
Cobalah latihan ini dengan melengkapi kode contoh ini.
# 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}")