2010-06-11 12 views
5

कंपनी में बदलावों के परिणामस्वरूप, हमें अपनी बैठती योजना को पुनर्व्यवस्थित करना होगा: इसमें 10 डेस्क वाला एक कमरा है। कारणों से कई डेस्क दूसरों की तुलना में अधिक लोकप्रिय हैं। एक समाधान टोपी से एक डेस्क नंबर खींचना होगा। हमें लगता है कि ऐसा करने का एक बेहतर तरीका है।ओपन स्पेस बैटिंग ऑप्टिमाइज़ेशन एल्गोरिदम

हमारे पास 10 डेस्क और 10 लोग हैं। आइए डेस्क पर बोली लगाने के लिए इस प्रतियोगिता में प्रत्येक व्यक्ति को 50 काल्पनिक टोकन दें। एक डेस्क पर आप कितनी बोली लगाते हैं इसकी कोई सीमा नहीं है, आप सभी 50 डाल सकते हैं, जो कहेंगे "मैं केवल यहां, अवधि बैठना चाहता हूं"। आप प्रत्येक डेस्क 5 टोकन देकर "मुझे परवाह नहीं है" भी कह सकते हैं।

महत्वपूर्ण नोट: कोई भी नहीं जानता कि अन्य लोग क्या कर रहे हैं। हर कोई केवल उसकी/उसके हित के आधार पर तय करने के लिए है (परिचित लगता है?)

अब कहते हैं कि हम इन काल्पनिक परिणाम प्राप्त कर सकते हैं:

# | Desk# >| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 
1 | Alise | 30 | 2 | 2 | 1 | 0 | 0 | 0 | 15 | 0 | 0 | = 50 
2 | Bob | 20 | 15 | 0 | 10 | 1 | 1 | 1 | 1 | 1 | 0 | = 50 
    ... 
10 | Zed | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | = 50 

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

चूंकि केवल 10 लोग हैं, मुझे लगता है कि हम सभी संभावित विन्यासों को देखकर मजबूर कर सकते हैं, लेकिन मैं सोच रहा था कि इस तरह की समस्याओं को हल करने के लिए एक बेहतर एल्गोरिदम है?

+1

http://en.wikipedia.org/wiki/Stable_marriage_problem – polygenelubricants

+2

से संबंधित हो सकता है मुझे लगता है कि अभ्यास में आप अधिकतम संतुष्टि के बजाय न्यूनतम-निराशा की तरह कुछ और चाहते हैं। या कम से कम कुछ संयोजन। –

+0

@ डॉउग: संकेत के लिए धन्यवाद :)। यह संभव है –

उत्तर

3

आप Assignment Problem पर देख रहे हैं जिसे Hungarian Algorithm का उपयोग करके हल किया जा सकता है। यह एक अच्छी तरह से शोध की गई समस्या है और आपको शायद वेब पर कोड मिलेगा, जो उपयोग करने के लिए तैयार है।

अपने मामले में आप लागत = 50 - बोली का उपयोग कर सकते हैं और उपर्युक्त (असाइनमेंट समस्या के लिए कोई समाधान) का उपयोग कर सकते हैं।

+1

मैं आपकी संस्कृति से आश्चर्यचकित हूं। ऐसा लगता है कि हर बार एल्गोरिदम में एक प्रश्न पूछा जाता है कि आप समस्या का नाम जानना चाहते हैं! –

+0

@Matthieu: मैं इसे तारीफ के रूप में ले जाऊंगा :-) धन्यवाद! मुझे लगता है कि कारण यह है कि मैं वास्तव में एल्गोरिदम में रूचि रखता हूं। उम्मीद है कि मैं अभी भी 5 साल में यह सब याद रख पाऊंगा। इसके अलावा, लोग आमतौर पर यहां पहले से हल की गई समस्या के कुछ संस्करण पूछते हैं, जिससे मदद मिलती है। –

+0

@Matthieu: कोई भी इस तरह की समस्याओं को गूगल कर सकता है। यह जवाब है [यह (लिंक)] (http://stackoverflow.com/questions/2955318/creating-combinations-that-have-no-more-one-intersecting-element/2955527#2955527) जो वास्तव में प्रभावशाली हैं। –

0

यहां तक ​​कि तेज़, यदि आपके पास एक्सेल है तो आपके पास सॉल्वर का संस्करण भी उपलब्ध होना चाहिए। बस अपनी बोली मैट्रिक्स (बोलियों के साथ 10x10), असाइनमेंट मैट्रिक्स (0/1 असाइनमेंट के साथ 10x10) सेट करें, असाइनमेंट के मान की गणना करने के लिए sumproduct (बोलियां, असाइनमेंट) का उपयोग करें, अपना उद्देश्य कार्य करें, और बाधाएं जोड़ें ताकि वहां लोगों को डेस्क और डेस्क के लिए लोगों का केवल एक ही असाइनमेंट। सुनिश्चित करें कि आपके पास विकल्प हैं> "रैखिक मॉडल" बॉक्स चेक किया गया है और "गैर-नकारात्मक मानें" और हल हो जाएं! मैंने बस नमूना 10x10 समस्या स्थापित की है - ठीक काम करने लगता है।

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