कंस्ट्रेंट ऑप्टिमाइज़ेशन या कंस्ट्रेंट प्रोग्रामिंग(सीपी) को यह नाम दिया जाता है, ताकि उम्मीदवारों के एक बहुत बड़े ग्रुप में से, संभव समाधानों की पहचान की जा सके. यहां समस्या को किसी भी तरह की दिक्कतों के हिसाब से मॉडल किया जा सकता है. सीपी से जुड़ी समस्याएं, विज्ञान और इंजीनियरिंग से जुड़े कई विषयों में पैदा होती हैं. ("प्रोग्रामिंग" शब्द एक तरह का ग़लत नाम है. यह ठीक वैसे ही है जैसे "कंप्यूटर" का मतलब "एक व्यक्ति जो कंप्यूट करता है" होता है. यहां "प्रोग्रामिंग" का मतलब, कंप्यूटर की भाषा में प्रोग्रामिंग के बजाय, किसी प्लान के दिखाए जाने के तरीके से है.)
सीपीआर, ऑप्टिमाइज़ेशन (सबसे बेहतर समाधान ढूंढने) के बजाय, संभावित समाधान पर आधारित होता है. साथ ही, मकसद फ़ंक्शन के बजाय कंस्ट्रेंट और वैरिएबल पर फ़ोकस करता है. असल में, हो सकता है कि सीपी से जुड़ी समस्या का कोई मकसद न हो. समस्या को लेकर सीमाएं जोड़कर, ज़्यादा मैनेजमेंट वाले सबसेट के लिए संभावित समाधानों को छोटा किया जा सकता है.
कर्मचारियों को शेड्यूल करना एक ऐसी समस्या का उदाहरण है जो सीपी के लिए सबसे ज़्यादा कारगर है.
समस्या तब आती है, जब लगातार काम करने वाली कंपनियों, जैसे- फ़ैक्ट्री को अपने कर्मचारियों के लिए, हर हफ़्ते का शेड्यूल बनाना पड़ता है. यहां एक बहुत ही आसान उदाहरण दिया गया है: एक कंपनी हर दिन तीन आठ घंटों की शिफ़्ट करती है और अपने चार में से तीन कर्मचारियों को हर दिन अलग-अलग शिफ़्ट में काम करती है और चौथे दिन छुट्टी भी देती है. छोटे मामलों में भी, संभावित शेड्यूल की संख्या बहुत ज़्यादा होती है: हर दिन, 4! = 4 * 3 * 2 * 1 = 24
कर्मचारी असाइन होते हैं, इसलिए हर हफ़्ते के शेड्यूल की संख्या 247 करोड़ से ज़्यादा है.
आम तौर पर, कुछ अन्य पाबंदियां भी होती हैं, जिनसे संभावित समाधानों की संख्या
कम हो जाती है. उदाहरण के लिए, हर कर्मचारी, हर हफ़्ते कम से कम
कम से कम दिन काम करता है. जब नई सीमाएं जोड़ी जाती हैं, तब सीपी वाला तरीका इस बात को ट्रैक करता है कि
कौनसे समाधान बेहतर रहेंगे. इससे, शेड्यूल करने से जुड़ी बड़ी और असल समस्याओं को हल करने के लिए यह एक बेहतर टूल बन जाता है.
पूरी दुनिया में सीपी का काम बहुत बड़ा और ऐक्टिव है. इसके लिए, खास वैज्ञानिक जर्नल, कॉन्फ़्रेंस, और समस्या हल करने की अलग-अलग तकनीकों का संग्रह है. सीपी को प्लानिंग, शेड्यूल करने, और कई अन्य डोमेन में लागू कर दिया गया है. हालांकि, ये काम अलग-अलग शर्तों के हिसाब से किए गए हैं.
टूल
Google, CP से जुड़ी समस्याओं को हल करने के कुछ तरीके उपलब्ध कराता है:
- CP-SAT सॉल्वर: एक कंस्ट्रेंट प्रोग्रामिंग सॉल्वर, जो SAT (सतुष्टि) तरीकों का इस्तेमाल करता है.
- ओरिजनल सीपी सॉल्वर: रूटिंग लाइब्रेरी में इस्तेमाल किया जाने वाला कंस्ट्रेंट प्रोग्रामिंग सॉल्वर.
अगर आपकी समस्या को लीनियर मकसद और लीनियर कंस्ट्रेंट के हिसाब से मॉडल किया जा सकता है, तो आपके पास लीनियर प्रोग्रामिंग से जुड़ी एक समस्या है. इसलिए, आपको MPSolver का इस्तेमाल करना चाहिए. हालांकि, रूटिंग की समस्याओं को आम तौर पर वाहन की रूटिंग लाइब्रेरी की मदद से हल किया जाता है. भले ही, उन्हें लीनियर मॉडल की मदद से दिखाया जा सकता हो.
उदाहरण
अगले सेक्शन में CP-SAT सॉल्वर के बारे में बताया गया है. यह कंस्ट्रेंट प्रोग्रामिंग के लिए OR-टूल सॉल्वर है. (SAT का मतलब है संतुष्टि: सॉल्वर, सीपीआई के साथ-साथ SAT से जुड़ी समस्याओं को हल करने के लिए तकनीकों का इस्तेमाल करता है.)
यहां शेड्यूल करने से जुड़ी समस्याओं के कुछ उदाहरण दिए गए हैं, जो CP-SAT सॉल्वर के लिए बहुत कारगर होती हैं:
सीपी से जुड़ी दो क्लासिक समस्याएं, एन-क्वींस समस्या और क्रिप्टारिथमेटिक पहेलियां.