2011-03-03 11 views
7

सकल स्तर पर, समस्या सरल है: किसी भी दिन एक व्यक्ति के प्रति दिन कवरेज के लिए कर्मचारियों की एक सेना निर्धारित करें, कर्मचारियों को 3 पूल में विभाजित किया जाता है, प्रत्येक कर्मचारी के पास छुट्टी की आवश्यकता होती है , प्रत्येक स्टाफ में प्रति सप्ताह 2 बदलाव होते हैं, आदिएल्गोरिदमिक स्टाफ शेड्यूलिंग समाधान

मैं इसे मैन्युअल रूप से ऐसा करने से नफरत करता हूं क्योंकि यह सदियों से मेरे संगठन में किया गया है। मुझे जेनेटिक एल्गोरिदम की तरह कुछ अच्छा करना अच्छा लगेगा (उदाहरण के लिए [1] http://www.sersc.org/journals/IJAST/vol14/1.pdf)।

क्या वहां कोई विश्वसनीय ओपन सोर्स/फ्री विकल्प हैं? यह एक अनुकूलन समस्या की तरह लगता है, क्या मैं इसके लिए कुछ ऑप्टिमाइज़ेशन लाइब्रेरी में प्लग करने के लिए सी ++, आर, आदि को फायर कर सकता हूं?

धन्यवाद

उत्तर

6

आप OptaPlanner (जिसे पहले Drools Planner कहा जाता था) का प्रयास कर सकता था, यह जावा और ओपन सोर्स पर आधारित है।

+0

Drools प्लानर सही उपकरण की तरह दिखता है, धन्यवाद! हालांकि यह स्थापित करने के लिए बहुत जटिल लग रहा है। इस समय इसे एक साथ रखने की कोशिश करने में कुछ कठिनाई हो रही है, लेकिन भगवान यहां मेरे लिए अज्ञात कई घटक हैं। –

+0

@Ming आप किस तरह की समस्याओं का सामना कर रहे हैं? मुझे जानना है, इसलिए हम अनुभव को बेहतर बना सकते हैं। इसे आजमाने का सबसे आसान तरीका प्लानर ज़िप डाउनलोड करना और runExamples.bat/.sh चलाने के लिए है। रेफरेंस मैनुअल पर इसका इस्तेमाल कैसे करें मैवेन इत्यादि से इसका इस्तेमाल कैसे करें। –

7

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

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

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

+0

डोलॉल्स प्लानर को देखते हुए, कुछ महीने पहले दिखाई देता है, उन्होंने बीटा से अपने अनुरूपित एनीलिंग एल्गोरिदम को स्थानांतरित कर दिया है। –

+0

बहुत अच्छा लग रहा है! हालांकि यह नौकरी के लिए थोड़ा बड़ा नहीं है? –

0

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

3

तुम भी बाधा प्रोग्रामिंग चौखटे, जिनमें से कई खुला स्रोत ऐसे Choco (जावा), Gecode (C++) और दूसरों के रूप में जो समस्याओं के इन प्रकार के लिए भी इस्तेमाल किया गया है, हालांकि मैं ravloony से सहमत हैं में रुचि हो सकती है कि यह सार्थक जांच हो सकता है कि क्या उन्होंने वर्णित शैली में एक एल्गोरिदम आपके द्वारा वर्णित समस्या के लिए चाल कर सकता है।

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