लीग शेड्यूलिंग एल्गोरिदम की पहचान करने में मदद की आवश्यकता है


9

मैं एक स्पोर्ट्स लीग शेड्यूलर बनाने की कोशिश कर रहा हूं। मुझे प्रत्येक स्लॉट में कुशलतापूर्वक भरने में मदद करने के लिए एक एल्गोरिथ्म की पहचान करने में समस्या हो रही है।

अनुसूची बनाने के लिए नमूना डेटा होगा:

  1. 10 टीमें
  2. प्रत्येक टीम 1 बार एक दूसरे से खेलती है (45 कुल खेल आवश्यक)
  3. प्रत्येक टीम प्रति दिन 1 से अधिक बार नहीं खेलती है
  4. अपने परीक्षण में मैं प्रति दिन 5 स्लॉट के साथ 9 दिनों का उपयोग कर रहा हूं।

कॉम्बो टेबल (45 कम्बोस शामिल हैं)

ID
Team1ID
Team2ID
bitAssign

अनुसूची तालिका (45 समय स्लॉट शामिल हैं)

scheduleID
homeTeamID
awayTeamID
GameDate
GameTime

अभी मेरी मौजूदा प्रक्रियाएँ ऊपर के नियमों के आधार पर शेड्यूलिंग संघर्ष के लिए मेरे स्लॉट्स के १०% को खाली करते हुए ९ ०% स्लॉट्स भरती हैं।

मैं अपने शेड्यूल टेबल पर आरोही तिथि / समय क्रम में लूप करता हूं।
मेरा पहला स्लॉट शनिवार को सुबह 8 बजे हो सकता है।
मैं उन टीमों की सूची को क्वेरी करता हूं जो अभी तक अनुसूचित नहीं हुई हैं। मैं फिर उन टीमों के संभावित संयोजनों की एक सरणी बनाता हूं। फिर मैं अपने संयोजन तालिका से 1 यादृच्छिक रिकॉर्ड खींचने के लिए उस सरणी का उपयोग करता हूं जो अभी तक निर्धारित नहीं किया गया है और मैं उन टीमों को अनुसूची पर रखता हूं। मैंने तब उस संयोजन का उपयोग किया।

मैं लूप को बार-बार दोहराता हूं और हर बार उपलब्ध टीमों की मेरी सूची छोटी हो जाती है और परिणामस्वरूप मेरा सरणी भी छोटा होता है।

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

केवल एक चीज जिसे मैंने अभी तक कोशिश की है वह संघर्ष के दिनों को "रीसेट" करने और उन्हें फिर से कोशिश करने के लिए है कि क्या मुझे बेहतर प्लेसमेंट मिले।

क्या किसी के पास कोई सुझाव है?


5
राउंड-रॉबिन टूर्नामेंट शेड्यूलिंग
केविन क्लाइन

केविन धन्यवाद। आपका अधिकार। मुझे लगता है कि अभी मेरा सरणी हर समय एक ही स्थान पर शुरू होता है और कोई रोटेशन नहीं होता है इसलिए टीमों को बाँधने के लिए कोई क्रमिक प्रवाह नहीं होता है।
स्टीव

1
मैं पूरी तरह से यादृच्छिक दृष्टिकोण का उपयोग करता हूं। बेतरतीब ढंग से एक स्लॉट और दो टीमें। यदि नियम संतुष्ट हैं तो गेम शेड्यूल करें। यदि त्याग न करें और पुनः प्रयास करें। मैंने कुल प्रयासों पर एक सीमा निर्धारित की है और यदि सीमा पूरी हो गई है तो पूरे कार्यक्रम को छोड़ दें और शुरू करें। यह वास्तव में अभ्यास में काफी अच्छा काम करता है।
20

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

जवाबों:


5

यहाँ एक एल्गोरिथ्म है जिसका मैंने स्वयं आविष्कार किया था। मुझे नहीं पता कि यह पहले से मौजूद है या वास्तव में राउंड रॉबिन कार्यान्वयन है:

1 4    1 5   1 6   1 3   1 2
2 5    4 6   5 3   6 2   3 4
3 6    2 3   4 2   5 4   6 5

मूल रूप से आप के साथ शुरू करते हैं

रोटेशन की तस्वीर

और हमेशा 1 को उसी स्थिति में रखें और बाकी को घुमाएं।

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


2
आप घर बनाम दूर संतुलन कैसे प्रबंधित करते हैं?
एरिक कोप

यह वास्तव में काम नहीं करता है - इस सरल रोटेशन एल्गोरिथ्म में, घूमने वाली टीमें जो 2 स्लॉट्स अलग हैं (2/4, 3/5) कभी नहीं खेलेंगे।
mdryden

@mdryden यह काम करता है। इसे बेहतर तरीके से देखें और कृपया अपनी टिप्पणी हटा दें।
पीटर बी

@PieterB मैं सोच रहा था कि यह काम करेगा, लेकिन यह वास्तव में काम नहीं करता है अगर विषम संख्या में टीमें हों, क्योंकि जो एक दूसरे के ठीक बगल में हैं (जैसे 4 और 5) कभी एक-दूसरे को नहीं खेलेंगे। आप इसे 1 के साथ अंत में बहुत आसानी से देख सकते हैं, और दूसरे छोर पर भी क्योंकि आपके पास झूलने वाली टीम है (बाय के साथ) यहां एक अच्छी प्रतिक्रिया है जो विषम संख्या से भी निपटती है: stackoverflow.com/a/6649732/ ६४
२२:३० पर रैगिंगसियनकोडर

@ragingasiancoder यदि टीमों की एक विषम संख्या है, तो एक डमी टीम जोड़ें। आपके द्वारा जोड़ा गया उत्तर ठीक उसी समाधान का वर्णन करता है जैसा मैंने प्रस्तुत किया था।
पीटर बी

1

मुझे लगता है कि आप इसे पीछे की ओर कर रहे हैं। अनुसूची तालिका के साथ शुरू मत करो , एक तालिका / सरणी / सभी खेल संयोजनों (45 गेम) में से जो भी हो, से शुरू करें। वहां से, एक दिन में केवल एक बार खेल रही टीम के आधार पर, गेम को एक दिन में असाइन करना एक सरल प्रक्रिया है। और चूंकि मैचअप केवल एक बार होता है (टीम ए केवल एक बार टीम बी खेलती है) शेड्यूलिंग आसान है क्योंकि आपको केवल यह सुनिश्चित करने की आवश्यकता है कि मैचअप पहले से ही नहीं हुआ है (प्रविष्टियां इस तरह "अद्वितीय" हैं)।


1

मैंने नीचे 10 टीम सिंगल राउंड रॉबिन शेड्यूल तैयार किया। मुझे लगभग 3 मिनट लगे।

अनुसूची जानकारी:

10 टीमों - 1 राउंड रॉबिन (केवल पहले 6 सप्ताह प्रदर्शित किए जाते हैं)
सीजन की शुरुआत की तारीख 1/6/15 - अंतिम तिथि 3/5/15
2 खेल प्रत्येक मंगलवार, 3 खेल प्रत्येक गुरुवार, 5 खेल प्रत्येक सप्ताह कोई तारीखें छोड़ें

  • सभी टीमों को 5 टाइम स्लॉट में समान रूप से खेलने के लिए वितरित किया जाता है।
  • सभी 9 गेम खेलते हैं।
  • सभी एक-दूसरे को एक बार खेलते हैं।
  • सभी को समान रूप से घर और आगंतुक (या तो 5/4, या 4/5) के रूप में वितरित किया जाता है। नोट: राउंड रॉबिन 2 के अंत में सभी टीमें 18 गेम खेलती हैं (9 घर में और 9 आगंतुक के रूप में) और सभी टीमों में 2 बाय हैं।
  • सभी को प्रत्येक सप्ताह 5 टाइम स्लॉट में समान रूप से खेलने के लिए वितरित किया जाता है।

हमने इस पूरे काम को एक साथ करने के लिए एक पुराने हनीवेल मुख्य फ्रेम कंप्यूटर का इस्तेमाल किया और सिर्फ 3 साल के भीतर। एक बार जब हमारे शेड्यूलिंग सॉफ़्टवेयर को डीबग किया गया था, तो 4 से 22 टीमों के लिए संतुलित पैटर्न की गणना करने और बनाने के लिए कई घंटों के क्रमों और संयोजनों की खोज में मुख्य फ्रेम कंप्यूटर को कई घंटे लगे।

10 Team Division Schedule   DATE 12/20/14

DATE   DAY TIME    LOCATION  GM  HOME vs VISITOR

Jan  6 Tue 6:00pm  Field #1   1  # 1 vs #10 
Jan  6 Tue 6:00pm  Field #2   1  # 2 vs # 9 
Jan  8 Thu 6:30pm  Field #3   1  # 3 vs # 8 
Jan  8 Thu 6:30pm  Field #4   1  # 4 vs # 7 
Jan  8 Thu 6:30pm  Field #5   1  # 5 vs # 6

Jan 13 Tue 6:00pm  Field #1   2  # 6 vs # 3 
Jan 13 Tue 6:00pm  Field #2   2  #10 vs # 8 
Jan 15 Thu 6:30pm  Field #3   2  # 7 vs # 2 
Jan 15 Thu 6:30pm  Field #4   2  # 9 vs # 1 
Jan 15 Thu 6:30pm  Field #5   2  # 4 vs # 5

Jan 20 Tue 6:00pm  Field #1   3  # 7 vs # 9 
Jan 20 Tue 6:00pm  Field #2   3  # 5 vs # 2 
Jan 22 Thu 6:30pm  Field #3   3  # 6 vs #10 
Jan 22 Thu 6:30pm  Field #4   3  # 3 vs # 4 
Jan 22 Thu 6:30pm  Field #5   3  # 8 vs # 1

Jan 27 Tue 6:00pm  Field #1   4  # 9 vs # 5 
Jan 27 Tue 6:00pm  Field #2   4  # 1 vs # 7 
Jan 29 Thu 6:30pm  Field #3   4  # 2 vs # 3 
Jan 29 Thu 6:30pm  Field #4   4  # 8 vs # 6 
Jan 29 Thu 6:30pm  Field #5   4  #10 vs # 4

Feb  3 Tue 6:00pm  Field #1   5  # 4 vs # 8 
Feb  3 Tue 6:00pm  Field #2   5  # 7 vs # 5 
Feb  5 Thu 6:30pm  Field #3   5  # 1 vs # 6 
Feb  5 Thu 6:30pm  Field #4   5  #10 vs # 2 
Feb  5 Thu 6:30pm  Field #5   5  # 3 vs # 9

Feb 10 Tue 6:00pm  Field #1   6  # 3 vs # 7 
Feb 10 Tue 6:00pm  Field #2   6  # 6 vs # 4 
Feb 12 Thu 6:30pm  Field #3   6  # 5 vs # 1 
Feb 12 Thu 6:30pm  Field #4   6  # 9 vs #10 
Feb 12 Thu 6:30pm  Field #5   6  # 8 vs # 2 

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

मुझे उम्मीद है कि इससे आपको और दूसरों को यह समझने में मदद मिलेगी कि हमें यह पता लगाने में 3 साल का समय क्या लगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.