8

मैं किसी को यह सत्यापित करने के लिए चाहूंगा कि निम्न समस्या एनपी-पूर्ण है या यदि सरल ब्रूट-फोर्स संयोजन जांच से वास्तव में बेहतर/आसान समाधान है।संभावित एनपी-पूर्ण समस्या?

हमारे पास हमारे सॉफ़्टवेयर में संसाधन आवंटन समस्या का एक प्रकार है, और मैं इसे एक उदाहरण के साथ समझाऊंगा।

मान लें कि हमें दिन-शिफ्ट के दौरान काम करने के लिए 4 लोगों की आवश्यकता है। यह संख्या, और तथ्य यह है कि यह एक "दिन-शिफ्ट" है हमारे डेटाबेस में दर्ज किया गया है।

हालांकि, हमें किसी भी व्यक्ति को उन स्थानों को भरने की आवश्यकता नहीं है, बिल को फिट करने के लिए कुछ आवश्यकताएं भरने की आवश्यकता है।

उन 4 में से, मान लें कि उनमें से 2 को नर्स होना है, और उनमें से 1 डॉक्टर होना चाहिए।

डॉक्टरों में से एक को भी एक विशेष टीम के हिस्से के रूप में काम करना पड़ता है।

डे-शिफ्ट: 4
      1 डॉक्टर
      1 डॉक्टर, टीम एक
      1 में काम करने की जरूरत

तो हम जानकारी के इस सेट है नर्स

उपर्युक्त समस्या नहीं है। समस्या तब आती है जब हम दिन-शिफ्ट करने के लिए लोगों को चुनना शुरू करते हैं और यह पता लगाने की कोशिश करते हैं कि क्या हमने अभी तक उठाए गए लोगों को मानदंड भर सकते हैं।

उदाहरण के लिए, मान लें कि हम जेम्स, जॉन, उर्सुला और मैरी को काम करने के लिए चुनते हैं, जहां जेम्स और उर्सुला डॉक्टर हैं, जॉन और मैरी नर्स हैं।

उर्सुला भी

टीम ए में काम करता है अब, क्रम हम बिल को फिट करने की कोशिश पर निर्भर करता है, हम बात का अनुमान लगाना हम सही लोगों, या नहीं है, जब तक कि हम विभिन्न संयोजनों की कोशिश कर रहा शुरू खत्म हो सकता है।

उदाहरण के लिए, यदि सूची में जाएं और पहले उर्सुला चुनें, तो हम उसे "1 डॉक्टर" मानदंड से मिलान कर सकते हैं। फिर हम जेम्स जाते हैं, और हम देखते हैं कि चूंकि वह टीम ए में काम नहीं करता है, इसलिए "1 डॉक्टर," टीम ए में काम करने की ज़रूरत है "के बारे में अन्य मानदंड उसके साथ नहीं भरे जा सकते हैं। चूंकि अन्य दो लोग नर्स हैं, इसलिए वे उस मानदंड को फिट नहीं करेंगे।

तो हम बैकट्रैक और पहले जेम्स को आजमाएं, और वह भी पहले मानदंडों को फिट कर सकता है, और फिर उर्सुला उन मानदंडों को फिट कर सकता है जिन्हें उस टीम की आवश्यकता है।

तो समस्या हमें देखती है क्योंकि हमें अलग-अलग संयोजनों को आजमाने की ज़रूरत है जब तक कि हमने उन सभी को आजमाया नहीं है, इस मामले में हमारे पास कुछ मानदंड हैं जो अभी तक भरे नहीं हैं, भले ही सिर की कुल संख्या काम कर रही हो आवश्यक सिर की कुल संख्या के समान, या हमें एक संयोजन मिला है जो काम करता है।

क्या यह एकमात्र समाधान है, क्या कोई बेहतर व्यक्ति के बारे में सोच सकता है?


संपादित: कुछ स्पष्टीकरण।

इस प्रश्न के लिए टिप्पणियां उल्लेख करती हैं कि इन कुछ लोगों के साथ, हमें क्रूर बल के साथ जाना चाहिए, और मैं मानता हूं कि शायद हम क्या कर सकते हैं, और हम ऐसा भी कर सकते हैं, उसी लेन में कि कुछ प्रकार के अनुकूलन दिखते हैं डेटा के आकार पर और डेटा आकार छोटा होने पर कम प्रारंभिक ओवरहेड के साथ अलग-अलग प्रकार के एल्गोरिदम चुनता है।

समस्या यह है कि यह एक रोस्टर योजना प्रणाली का हिस्सा है, जिसमें आपके पास बहुत से लोगों को शामिल किया जा सकता है, दोनों "हमें दिन में शिफ्ट की जरूरत है" और साथ ही "हमारे पास यह है वाई लोगों का पूल जो यह कर रहा है ", साथ ही साथ बड़े पैमाने पर संभावित" हमारे पास उन एक्स लोगों के लिए जेड मानदंडों की यह सूची है जिन्हें किसी भी तरह से इन लोगों के साथ मिलना होगा ", और फिर आप इस तथ्य को जोड़ते हैं कि वास्तविक समय में, वही गणना करने के लिए हमारे पास कई दिन होंगे, क्योंकि नेता रोस्टर को समायोजित करता है, और फिर एक त्वरित समाधान की आवश्यकता आ गई है।

असल में, नेता स्क्रीन पर एक लाइव योग जानकारी देखेंगे जो कहता है कि पूरे दिन दिन में बदलाव के साथ-साथ कितने लोग विभिन्न मानदंडों को फिट कर रहे हैं, और कैसे हमारे पास वास्तव में बहुत से लोग हैं जो हमारे पास हैं। इस डिस्प्ले को सेमी-लाइव अपडेट करना होगा, जबकि नेता रोस्टर को समायोजित करेगा "क्या होगा अगर जेम्स उर्सुला के बजाय दिन-शिफ्ट लेता है, और उर्सुला रात-शिफ्ट लेता है"।

लेकिन अब तक इसका उत्तर देने वाले लोगों के लिए बहुत धन्यवाद, बाधा संतुष्टि समस्या हमें जिस तरह से जाना है, वैसे ही लगता है, लेकिन हम निश्चित रूप से यहां सभी लिंक और एल्गोरिदम नामों पर कड़ी मेहनत करेंगे।

यही कारण है कि मैं StackOverflow :) प्यार

+0

4 और 2 जैसी संख्याओं के साथ, मुझे नहीं लगता कि क्यों * नहीं * सबसे आसान संभव ब्रूट-फोर्स खोज का उपयोग करना है। – ShreevatsaR

+0

मैं मानता हूं कि अगर आप हमेशा छोटे होंगे तो आपको केवल बलपूर्वक बल देना चाहिए। यदि नहीं, तो आपको एक ह्युरिस्टिक का उपयोग करने की आवश्यकता है। मेरा अनुमान है कि यह Knapsack समस्या का एक बदलाव है। मुझे नहीं पता कि इस सवाल से यह जवाब क्यों हटा दिया गया था। –

+0

मैं मानता हूं, मैं सवाल संपादित करूंगा, लेकिन मुझे लगता है कि पहले दिए गए उत्तरों से हमें इस पर एक प्रमुख शुरुआत करने का कोई तरीका मिलेगा। –

उत्तर

11

आपके पास constraint satisfaction problem है; एनपी के साथ उनका रिश्ता दिलचस्प है, क्योंकि वे आम तौर पर एनपी होते हैं लेकिन अक्सर एनपी-पूर्ण नहीं होते हैं, यानी वे बहुपद-समय समाधानों के लिए व्यवहार्य हैं।

जैसा कि ईबो टिप्पणी में नोट किया गया है, आपकी स्थिति की तरह लगता है कि इसे exact cover problem के रूप में तैयार किया जा सकता है, जिसे आप Knuth's Algorithm X पर लागू कर सकते हैं। यदि आप यह काम करते हैं, तो कृपया हमें बताएं कि यह आपके लिए कैसे काम करता है।

+0

आपने मुझे इसे हराया। – Pesto

+4

यदि आप समस्या को सटीक कवर समस्या में फिर से लिखते हैं, तो आप इसे हल करने के लिए Knuth के एल्गोरिदम एक्स (या नृत्य लिंक) का उपयोग कर सकते हैं। यह तुच्छ बैकट्रैकिंग से बहुत तेज़ है और नेट पर बहुत सारे उदाहरण हैं। – ebo

+0

@ebo: मैं जो कुछ भी साथ आ रहा था उससे ज्यादा फलदायी लगता है। मैं इसे अपने उत्तर में शामिल करने जा रहा हूं। धन्यवाद। – chaos

1

क्या आप का वर्णन कर रहे हैं 'रूममेट समस्या' यह हल्के से this thesis में वर्णन किया गया है।

मेरे साथ भालू, मैं बेहतर लिंक खोज रहा हूं।

संपादित

यहाँ एक और काफी घने thesis है।

+0

एक और संभावित समाधान! अच्छा, धन्यवाद :) –

3

ऐसा लगता है कि आपके पास constraint satisfaction problem है।

आपके मामले में मैं विशेष रूप से पहले बाधा प्रचार तकनीकों को देखता हूं - आप इस तरह से एक प्रबंधित आकार में समस्या को कम करने में सक्षम हो सकते हैं।

यदि कोई भी मानदंड फिट बैठता है तो क्या होता है?

+0

धन्यवाद, यह निश्चित रूप से हमें क्या चाहिए की तरह लगता है! –

1

मेरे लिए मैं सबसे अधिक संभावना bipartite graph matching समस्या में कमी खोजने की कोशिश कर रहा हूं। यह भी साबित करने के लिए कि समस्या एनपी आमतौर पर रहने से कहीं अधिक जटिल है, आपको बहुपद समाधान नहीं मिल रहा है।

+0

यह इस प्रकार के ग्राफ के लिए मेरे ज्ञान के स्तर से ऊपर है, लेकिन मैं इसे पढ़ूंगा! धन्यवाद! –

1

मुझे यकीन नहीं है कि आपकी समस्या एनपी है, यह इस तरह से गंध नहीं करता है, लेकिन अगर मैं था तो आप क्या करेंगे यदि आप थे तो आप पदों के लिए आवश्यकताओं को ऑर्डर करना चाहते हैं जैसे कि आप कम से कम सबसे विशिष्ट को भरने का प्रयास करते हैं लोग इन पदों को भरने के लिए उपलब्ध होंगे, इसलिए आपको बहुत पीछे हटने की संभावना कम है। ऐसा कोई कारण नहीं है कि आपको इसे शुद्ध न्यूथ-नेस के एल्गोरिदम एल्गोरिदम एक्स के साथ संयोजित नहीं करना चाहिए।

+0

मैं सहमत हूं, यही वह मूल रूप से हमने कल्पना की है, लेकिन समस्या यह है कि "टीम ए एसोसिएशन" की आवश्यकता केवल 3 में से एक है, जो संयोजन में हो सकती है या नहीं। "टीम ए, और आग बुझाने वाले यंत्रों के साथ-साथ एक नर्स होने के साथ सक्षम हो", और उन 3 प्रकार स्वयं या एक साथ हो सकते हैं, जिसका अर्थ है कि कुछ मामलों में, वजन एक और से अधिक विशिष्ट वजन का कोई तरीका नहीं है। –

1

मैं सिद्धांत को दूसरों के पास छोड़ दूंगा, क्योंकि मेरी गणितीय समझदार इतनी महान नहीं है, लेकिन आपको एक समस्या जैसे कैसौरी/कैसोवरी.net या एनएसओल्वर उपयोगी हो सकता है जो आपकी समस्या का प्रतिनिधित्व करने के लिए उपयोगी है क्योंकि एक बाधा संतुष्टि समस्या है और फिर हल करें बाधाएं

ऐसे उपकरणों में, बाधा प्रचार के साथ संयुक्त सरल विधि को अक्सर समाधान स्थान को निर्धारित करने के लिए नियोजित किया जाता है और फिर एक लागत समारोह के बाद एक इष्टतम समाधान मिलता है। बड़े समाधान रिक्त स्थान (जो आपके द्वारा निर्दिष्ट समस्या के आकार में लागू नहीं होते हैं) के लिए, कभी-कभी जेनेटिक एल्गोरिदम नियोजित होते हैं।

यदि मुझे सही याद है, तो एनएसओल्वर में नमूना कोड में वास्तविक नर्स-रोस्टरिंग समस्या का एक सरलीकरण भी शामिल है जो डॉ चुन ने हांगकांग में काम किया था। और वहाँ है a paper on the work he did.

+0

ओह, अच्छा, टूल्स और सॉफ़्टवेयर बूट करने के लिए! धन्यवाद! –

1

यह मेरे लिए लगता है कि आप वियोज्य समस्याओं की एक जोड़ी है कि एक बहुत आसान होगा हल करने के लिए:

- टीम एक से एक डॉक्टर का चयन - किसी भी टीम से दूसरे डॉक्टर का चयन - दो नर्सों का चयन करें

तो आपके पास तीन स्वतंत्र समस्याएं हैं।

हालांकि एक स्पष्टीकरण, क्या आपको दो डॉक्टर (निर्दिष्ट टीम से एक) और दो नर्स, या निर्दिष्ट टीम के एक डॉक्टर, दो नर्स और एक अन्य डॉक्टर होना चाहिए जो डॉक्टर या नर्स हो सकता है?

+0

बाद वाला, वास्तव में किसी भी प्रकार का कर्मचारी हो सकता है, अन्यथा एक आवश्यकता होगी। यह वास्तव में खुला नहीं है क्योंकि यद्यपि जो व्यक्ति यहां बदलाव करने के लिए लोगों को मानचित्र बनाने का प्रयास करता है, उसके पास उसके लिए काम करने वाले कर्मचारियों का एक निश्चित पूल होता है, जिसका अर्थ है कि आमतौर पर वहां एक समरूप प्रकार का कर्मचारी होगा (यानी ज्यादातर डॉक्टर, या नर्स , या चिकित्सा कर्मचारी, या ...)। आपके पास आमतौर पर एक ही पूल में गार्डनर्स, जेनिटर, मेडिकल स्टाफ और रोड वर्कर्स नहीं होंगे। –

1

कुछ सवाल:

  1. बाधाओं बिल्कुल, या केवल लगभग (लेकिन जितना संभव हो उतना) को पूरा करने के लक्ष्य है?
  2. क्या कोई व्यक्ति कई टीमों का सदस्य बन सकता है?
  3. सभी संभावित बाधाएं क्या हैं? (उदाहरण के लिए, हम एक डॉक्टर जो कई टीमों का एक सदस्य है की जरूरत सकता है?)

आप बाधाओं बिल्कुल को संतुष्ट करना चाहते हैं, तो मैं, बाधाओं decreasingly कड़ाई से आदेश होता है कि, लोगों को है जो हासिल करने के लिए सबसे कठिन हैं (उदाहरण के लिए उपरोक्त आपके उदाहरण में डॉक्टर और टीम ए) पहले की जांच की जानी चाहिए!

आप बाधाओं लगभग को संतुष्ट करना चाहते हैं, तो इसके लिए एक अलग कहानी ... आप भार/महत्व-समारोह के कुछ प्रकार निर्दिष्ट करने के लिए जो निर्धारित करता है हम नहीं बल्कि, क्या होता है जब हम से मेल नहीं कर सकते हैं के लिए होता है बिल्कुल, और चुनने के लिए कई संभावनाएं हैं।

+1

एक व्यक्ति केवल एक ही टीम का हिस्सा हो सकता है, और उस संदर्भ में कंपनी में एक ही स्थिति हो सकती है, लेकिन अंतिम मानदंड, जो व्यक्ति को प्रमाणित करने के लिए प्रमाणित किया जाता है (यानी एक कक्षा में भाग लिया और पास किया है आग लगाना, या सीपीआर का उपयोग करना, या ...), उस व्यक्ति में से कई हो सकते हैं। सिस्टम का उद्देश्य एक ड्यूटी रोस्टर भरने का प्रयास करना है जो कहता है, "हमें दिन शिफ्ट पर कम से कम 2 डॉक्टरों की आवश्यकता होती है, और उनमें से कम से कम उनमें से एक को एक्स-रे मशीन का उपयोग करने के लिए प्रमाणीकरण की आवश्यकता होती है", आदि –

+0

खुद को दोहराने के लिए खेद है, लेकिन जब मामले में बाधाओं को पूरा करने का कोई तरीका नहीं है, और हमें कुछ समझौता करना है, तो क्या यह ब्याज का मामला है? क्या यह अक्सर होता है? (मुझे अस्पतालों के बारे में बहुत कुछ पता नहीं है ...) :-) – jacob

1

यदि आपके पास कई या कई बाधाएं हैं, तो Drools Planner (ओपन सोर्स, जावा) पर एक नज़र डालें।

ब्रूट फोर्स, शाखा और बाध्य और इसी तरह की तकनीकों का समय लगता है। जैसे निर्धारित अल्गोरिदम पहले सबसे बड़े बदलावों को भरते हैं बहुत उप-स्थानिक हैं। मेटा-हेरिस्टिक्स इस से निपटने का एक बहुत अच्छा तरीका है।

असली दुनिया की नर्स ड्रॉल्स प्लानर के उदाहरण रोस्टिंग उदाहरण पर एक विशिष्ट नज़र डालें। कई बाधाओं को जोड़ना आसान है, जैसे "युवा नर्स शनिवार की रात काम नहीं करना चाहते हैं" या "कुछ नर्सें लगातार कई दिनों तक काम नहीं करना चाहती हैं"।

संबंधित मुद्दे