परिचय
पूर्णांक रैखिक प्रोग्रामिंग के लिए एक सॉल्वर लिखें ।
चुनौती
आपका कार्य पूर्णांक रैखिक प्रोग्रामिंग (ILP) के लिए एक सॉल्वर लिख रहा है। ILP में, अज्ञात के एक सेट की रैखिक असमानताएं (जिनमें से सभी पूर्णांक हैं) दिए गए हैं, और लक्ष्य एक रैखिक फ़ंक्शन का न्यूनतम या अधिकतम पता लगाना है।
उदाहरण के लिए, असमानताओं के लिए (मिसाल इंटेर्गर लीनियर प्रोग्रामिंग से लिया गया उदाहरण )
4x+2y-15≤0
x+2y- 8≤0
x+ y- 5≤0
- x ≤0
- y ≤0
और वस्तुनिष्ठ फ़ंक्शन 3x+2y
, वस्तुनिष्ठ फ़ंक्शन का अधिकतम 12
( x=2,y=3
) होना चाहिए , जबकि न्यूनतम होना चाहिए 0
( x=y=0
)।
इनपुट को 2d सरणी (या मानक विनिर्देशों का पालन करने वाला कोई भी समकक्ष) के रूप में दिया जाता है, प्रत्येक पंक्ति अंतिम पंक्ति के अपवाद के साथ एक असमानता से मेल खाती है। सरणी में संख्याएँ गुणांक हैं, और ≤0
भाग हमेशा छोड़ा जाता है। यदि n
प्रत्येक पंक्ति में तत्व हैं , तो इसका मतलब है कि n-1
अज्ञात हैं।
सरणी की अंतिम पंक्ति रैखिक फ़ंक्शन के अनुरूप है। गुणांक सूचीबद्ध हैं।
उदाहरण के लिए, ऊपर की समस्या के लिए इनपुट सरणी है
[[4,2,-15],[1,2,-8],[1,1,-5],[-1,0,0],[0,-1,0],[3,2,0]].
आउटपुट न्यूनतम और अधिकतम होना चाहिए, जो किसी भी उचित रूप में दिया गया हो।
निम्नलिखित समस्या के लिए (दो प्रतिबंध ऊपर की समस्या से दूर ले जाते हैं):
[[4,2,-15],[1,2,-8],[1,1,-5],[3,2,0]].
अधिकतम अभी भी है 12
, लेकिन न्यूनतम मौजूद नहीं है और उद्देश्य फ़ंक्शन में नकारात्मक मान (पूर्ण मूल्य के अर्थ में) नकारात्मक मान हो सकते हैं। इस मामले में, प्रोग्रामर को आउटपुट करना चाहिए 12
, उत्तरदाता द्वारा तय किए गए एक मिथ्या मूल्य के बाद। एक और मामला यह है कि इसका कोई हल नहीं है, उदाहरण के लिए,
[[4,2,-15],[-1,-2,7],[-1,0,3],[0,1,0],[3,2,0]].
इस मामले में, मिथ्या मूल्यों का उत्पादन भी होना चाहिए। ऐसे मामले को समझना अच्छा होगा जहां उद्देश्य फ़ंक्शन के लिए "इष्टतम मूल्य" अनंत है और ऐसा मामला जहां कोई समाधान नहीं हैं, लेकिन यह आवश्यक नहीं है।
इनपुट में केवल असमानताओं के लिए और उद्देश्य फ़ंक्शन के लिए पूर्णांक गुणांक होते हैं। सभी अज्ञात भी पूर्णांक हैं। असमानताओं के गुणांक मैट्रिक्स को पूर्ण रैंक की गारंटी है।
परीक्षण के मामलों
इसका श्रेय @KirillL को है। मूल परीक्षण सूट में बग ढूंढने और ILP समस्याओं के बारे में मेरी समझ को गहरा करने के लिए।
Input
Output
[[4,2,-15],[1,2,-8],[1,1,-5],[-1,0,0],[0,-1,0],[3,2,1]]
[1,13]
[[4,2,-15],[1,2,-8],[1,1,-5],[3,2,0]]
[-inf, 12]
[[4,2,-15],[-1,-2,7],[-1,0,3],[0,1,0],[3,2,0]]
[NaN, NaN]
[[-1,-1,-1,-1,-1,8],[1,1,1,1,0,0],[5,5,5,5,6,7]]
[55, inf]
[[-1,-1,-1,-1,-1,8],[1,1,1,1,0,0],[0,0,0,0,0,4]]
[4, 4]
[[4,2,-15],[-1,-2,7],[-1,0,3],[0,1,0],[0,0,4]]
[NaN, NaN]
चश्मा
अपवाद हैंडलिंग के बारे में चिंता करने की कोई जरूरत नहीं है।
यह कोड-गोल्फ है , सबसे कम संख्या में बाइट्स जीतती हैं।
अज्ञात की अधिकतम संख्या
9
:। विषमताओं की अधिकतम संख्या12
:।आप इनपुट ले सकते हैं और किसी भी मानक फॉर्म के माध्यम से आउटपुट प्रदान कर सकते हैं , और आप प्रारूप चुनने के लिए स्वतंत्र हैं।
हमेशा की तरह, डिफ़ॉल्ट कमियां यहां लागू होती हैं।