संसाधनों का आवंटन
बहुत बढ़िया, अब उस अगले समस्या को हल करने का समय है जिससे आप परिचित हुए थे.
एक मैनेजर 120 टास्क एक सीनियर (S), एक जूनियर (J) और एक इंटर्न (I) सॉफ्टवेयर इंजीनियर को सौंपता है और कुल लागत कम से कम रखना चाहता है.
इंटर्न को काम शुरू करने से पहले प्रशिक्षण चाहिए, जिसकी लागत $500 है. हर टास्क की लागत क्रमशः c = [30, 40, 5] है.
\(x\) असाइन किए गए टास्क की संख्या दर्शाता है और \(o\) एक बाइनरी वैरिएबल है जो बताता है कि इंटर्न को प्रशिक्षण मिला या नहीं. कुल लागत है
\(TC = 30x_S+40x_J+(5x_I+500)o\)
BigM मेथड का उपयोग करके इस समस्या को नए वैरिएबल \(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, साथ में model, पैरामीटर c, M, और names, तथा वैरिएबल x, z, o आपके लिए पहले से इम्पोर्ट किए गए हैं.
यह अभ्यास पाठ्यक्रम का हिस्सा है
Python में Optimization परिचय
अभ्यास निर्देश
zके साथ फ़ॉर्मूला के हिस्से को बदलकर objective परिभाषित करें.- constraints परिभाषित करें और इंटर्न के इंडेक्स को भरें.
इंटरैक्टिव व्यावहारिक अभ्यास
इस अभ्यास को इस नमूना कोड को पूरा करके आज़माएँ।
# 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}")