2014-06-27 4 views
5

अनिवार्य रूप से मेरे पास 3 या 6 और एन आवेदकों की एक निश्चित संख्या के साथ नौकरी है।आवेदकों के संयोजन को उनके कौशल के आधार पर नौकरी की स्थिति में मिलान करना

नौकरी के लिए कई कौशल की आवश्यकता होती है कौशल, ए, बी, सी, ... जेड।

आवेदकों के पास कुछ कौशल हैं जिनके लिए नौकरी की आवश्यकता है लेकिन संभवतः सभी कौशल नहीं हैं।

जो मैं करने के लिए संघर्ष कर रहा हूं वह 3 या 6 आवेदकों से मेल खाने के लिए एक एल्गोरिदम का निर्माण कर रहा है जैसे कि उनके संयुक्त कौशल सभी स्थितियों के लिए नौकरी के लिए आवश्यक कौशल को पूरा करते हैं। आशावादी रूप से उन सभी को पूरा करना, लेकिन उनमें से अधिकतर

यदि यह समान है या किसी भी प्रकार के एल्गोरिदम के समान है, तो मुझे यह बताना है कि मैं इसका शोध कैसे कर सकता हूं।

मैंने उस व्यक्ति को जोड़ने की कोशिश करने की कोशिश की है जिसकी नौकरी की आवश्यकता है, उस व्यक्ति को खोजने की कोशिश कर रहा है जिसके पास सबसे अधिक कौशल व्यक्ति है, जिसकी नौकरी की आवश्यकता नहीं है। लेकिन यह समाधान अलग हो जाता है अगर समाधान "मध्यम" कौशल वाले लोगों का संयोजन है।

मैंने प्रत्येक आवेदकों के कौशल को बाइनरी 1 या 0 में बदलने के बारे में सोचा कि अगर उनके पास यह संकेत है कि मैं इसे उपयोगी बनाने के लिए संघर्ष कर रहा हूं। मुझे लगता है कि ऐसा करना सही रास्ते पर हो सकता है।

उत्तर

1

यह एक विशिष्ट एल्गोरिदम नहीं है, लेकिन इन प्रकार की समस्याओं के लिए एक दृष्टिकोण एक बाधा सॉल्वर/ऑप्टिमाइज़र का उपयोग करना है। उदाहरण के लिए, जावा में आप OptaPlanner का उपयोग कर सकते हैं।

ये मूल रूप से घोषणात्मक सिस्टम हैं, इसलिए एल्गोरिदम को समझाने के बजाय आपको समस्या है कि समस्या क्या है। मूल रूप से राज्य की जगह का वर्णन करें, और समाधान के लिए बाधाएं क्या हैं या नहीं। फिर आप इसे चलाते हैं, और यह आपको बताएगा कि क्या यह एक समाधान मिला है और यह किस समाधान को मिला।

0

नोट: यह एक पूर्ण समाधान नहीं है, लेकिन मैं कुछ विचार साझा करना चाहता था। कृपया एक बेहतर समाधान आज़माएं और ढूंढें।

तो, हमारे पास n आवेदक हैं और m कौशल S = {s(1),s(2),...,s(m)} का एक सेट है।
प्रत्येक आवेदक, हमारे उद्देश्यों के लिए, S का एक सबसेट A है जो उसके कौशल को दर्शाता है।
t आवेदकों की संख्या चुनने की संख्या है (उदाहरण के लिए 3, या 6)।

के रूप में ओ पी ने कहा, हम लंबाई m के एक स्ट्रिंग है, जहां स्थिति i पर चरित्र 1 है अगर s(i)A के अंतर्गत आता है, और 0 यदि ऐसा नहीं होता है के रूप में प्रत्येक आवेदक के कौशल का प्रतिनिधित्व कर सकते हैं।

उदाहरण:

S = {Programming, Accounting} 

      Programming Accounting 
Applicant1  0   1 
Applicant2  1   1 

आवेदकों

हम आवेदकों पर निम्न क्रम परिभाषित कर सकते हैं की संख्या कम: दो आवेदकों A1 और A2 को देखते हुए, हम कहते हैं कि a1 <= a2 केवल और केवल तभी करता है, तो निम्नलिखित कथन सत्य है: if a1 has a skill, then a2 also has it। उपर्युक्त उदाहरण में, हमारे पास Applicant1 <= Applicant2 है।

अब हम इस आदेश का उपयोग करके हमारे आवेदकों के सेट को फ़िल्टर कर सकते हैं: यदि कोई आवेदक ए 1 हमारे आदेश में एक अन्य आवेदक ए 2 "नीचे" है, तो ए 1 को चुनौती दे सकता है, क्योंकि ए 2 चुनने से कम से कम एक ही परिणाम मिलेगा। यह O(n^2) चरणों में किया जा सकता है।

गैर इष्टतम, लालची एल्गोरिथ्म

एक बार जब हम समाप्त कर दिया है, मैं इस तरह से आगे बढ़ना होगा:

r = string of lenght m filled with zeros 

choose an applicant a 
r = skills(a) 
best_applicant = null 

APPLICANT_LIST = new LIST 
APPLICANT_LIST.add(a) 
for(counter=0; counter < (t-1); counter ++) 
{ 
    foreach applicant b not in APPLICANT_LIST 
    { 
    if (count(skills(b) OR r) > count(r)) 
    then 
     r = (skills(b) OR r) 
     best_applicant = b 
    } 
    APPLICANT_LIST.add(b) 
} 

अनिवार्य रूप से, मैं एक आवेदक a चुनें और उसकी/उसके कौशल r सेट के साथ शुरू होता है, और उसके बाद आवेदक b खोजें जो इसे अधिकतम करने के लिए मेरे मौजूदा सेट r पर सबसे अधिक कौशल जोड़ देगा। मैं अपनी सूची में b जोड़ूंगा, और प्रक्रिया को तब तक दोहरा दूंगा जब तक कि मेरे पास t आवेदकों का सेट न हो। यह सब O(n^2) चरणों में किया जाता है (चूंकि t स्थिर है, मैं इसे अनदेखा कर रहा हूं)। यह छद्म कोड प्रोग्रामिंग उद्देश्य से गलत हो सकता है (भाषा के आधार पर, आप निकास की स्थिति, शून्य पॉइंटर्स इत्यादि की जांच करना चाहेंगे), लेकिन मुझे यकीन है कि आपको यह विचार मिल जाएगा।

t = 3 

a1 000000001111 
a2 000011110000 
a3 111100000000 
a4 110111001101 

एक अगर a4 साथ शुरू करने के लिए थे, वह इष्टतम समाधान {a1,a2,a3} के लिए कभी नहीं मिलेगा:

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

नोट: ऊपर दिए गए उदाहरण में, एक अलग प्रारंभिक आवेदक चुनने में मदद नहीं करेगा, क्योंकि ए 4 अभी भी शामिल होगा। शायद पूरी तरह से लालची हो और हमारे पहले आवेदक के रूप में सबसे बड़ी संख्या में कौशल के साथ आवेदक का चयन करें।

+0

यदि कोई ** ** इष्टतम ** समाधान ढूंढने का प्रबंधन करता है जो n^2 में भी चलता है तो मुझे मेरा हटाना खुशी होगी। – Numbers

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