BaşlayınÜcretsiz Başlayın

Kaynak tahsisi

Harika iş, şimdi tanıtılan bir sonraki problemi çözme zamanı.

Bir yönetici 120 görevi bir kıdemli (S), bir orta düzey (J) ve bir stajyer (I) yazılım mühendisine dağıtıyor ve maliyetleri en aza indirmek istiyor.

Stajyer, görevlere başlamadan önce 500 $ tutarında eğitim gerektiriyor. Her bir görevi çözme maliyeti sırasıyla c = [30, 40, 5].

\(x\) atanan görev sayısını, \(o\) ise stajyerin eğitim alıp almadığını gösteren ikili değişkeni tutar. Toplam maliyet

\(TC = 30x_S+40x_J+(5x_I+500)o\)

Bu problemi yeni değişken \(z\) kullanarak BigM yöntemiyle doğrusal hale getir:

\(z = (5x_I+500)o\)

\(-oM\leq z \leq oM\)

\(-(1-o)M \leq z- (5x_I+500)o \leq (1-o)M\)

pulp, bir model, parametreler c, M ve names, ayrıca değişkenler x, z, o senin için zaten içe aktarıldı.

Bu egzersiz

Python ile Optimizasyona Giriş

kursunun bir parçasıdır
Kursu Görüntüle

Egzersiz talimatları

  • Amaç fonksiyonunu, formülün bir kısmını z ile değiştirerek tanımla.
  • Kısıtları, stajyerin indeksini doldurarak tanımla.

Uygulamalı interaktif egzersiz

Bu örnek kodu tamamlayarak bu egzersizi bitirin.

# 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}")
Kodu Düzenle ve Çalıştır