MulaiMulai sekarang secara gratis

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

Lihat Kursus

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}")
Edit dan Jalankan Kode