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, kursun bir parçasıdır

Python ile Optimizasyona Giriş

Kursa Göz Atın

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ı etkileşimli egzersiz

Bu egzersizi bu örnek kodu tamamlayarak deneyin.

# 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