इतिहास के आधार पर निष्पक्ष टीमों को विभाजित करने के लिए रणनीति / एल्गोरिदम


20

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

तो स्वचालित रूप से टीमों को चुनने के लिए एक आवेदन से बेहतर क्या होगा?

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

कोई विचार?

संपादित करें: यह स्पष्ट करने के लिए, जिस डेटा को मुझे लेने का आधार बनाना है, वह कुछ इस तरह होगा:

[{ team1: ["playerA", "playerB", "playerC"],
   team2: ["playerD", "playerE", "playerF"],
   goals_team1: 10,
   goals_team2:  8 
 },
 { team1: ["playerD", "playerB", "playerC"],
   team2: ["playerA", "playerE", "playerG"],
   goals_team1:  2,
   goals_team2:  5
 },
 { team1: ["playerD", "playerB", "playerF"],
   team2: ["playerA", "playerE", "playerC"],
   goals_team1:  4,
   goals_team2:  2
 }]

4
फ्लोरबॉल क्या है?
डायनामिक

1
मुझे लगता है कि आपके पास केवल टीम स्कोर है, और कोई व्यक्तिगत योगदान स्कोर नहीं है?
रोबोट

1
@ डायनामिक: मैं यह अनुमान लगाने जा रहा हूं कि यह फ्लोर हॉकी के लिए एक और नाम है - हॉकी एक जिम के फर्श पर एक छोटी सी रबर की गेंद के साथ खेला जाता है, जिसमें बर्फ पर पंक (और कोई स्केट्स) नहीं होता है।
FrustratedWithFormsDesigner

2
आप स्पष्ट करना चाह सकते हैं कि इस एल्गोरिथम में उपयोग की जाने वाली एकमात्र जानकारी यह है कि प्रत्येक खिलाड़ी पर कितनी विजेता / हारने वाली टीमें हैं।
टिहरी

2
@TehShrike प्रत्येक मिलान किए गए मैच के लिए, मुझे इस बात की जानकारी है कि कौन किस टीम पर खेलता है, और अंतिम स्कोर क्या है। उदाहरण के लिए। {Team1: ["a", "b", "c"], Team2: ["d", "e", "f"], स्कोर: "१०-५" "}
Vegar

जवाबों:


6

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

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

बहुत अधिक सरल दृष्टिकोण लेते हुए, प्रत्येक खिलाड़ी को उन अंकों के अनुपात का स्कोर मिलता है जो उनकी टीम ने खेल के लिए बनाए हैं। गेम 1 के लिए खिलाड़ी A को 1.25 (10/8) जबकि खिलाड़ी D को 0.8 अंक (8/10) मिलेंगे। सभी नंबरों का मतलब निकालें और यह खिलाड़ी का स्कोर है।

वर्णित खेलों के सेट के लिए, यह प्रदान करता है:

  A 1.42
  B 1.22
  C 0.72
  D 1.07
  E 1.27
  F 1.40
  G 2.50

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


खिलाड़ियों की एक ही संख्या, या जैसे ही यह करीब हो जाता है अगर यह एक विषम संख्या में खिलाड़ियों को
दिखाता है

विभाजन की समस्या के संदर्भ के लिए धन्यवाद ! आप रॉक, @ user40980
एरिक गोपक

3

त्वरित और गंदा दृष्टिकोण:

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


यह दृष्टिकोण काम कर सकता है, भले ही लोगों का दिया गया संयोजन बिलकुल नया हो।
वीगर

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

इस लालची दृष्टिकोण को इष्टतम समाधान (विकिपीडिया) के लिए 4/3-सन्निकटन देने के लिए जाना जाता है
Radek

3

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

खिलाड़ियों की क्रमबद्ध सूची (सबसे खराब से खराब) लें और उन्हें अपने सूचकांक में 1 बिट्स की संख्या (0 पर शुरू) के आधार पर टीमों और यहां तक ​​कि अलग करें। यह निम्नलिखित वितरण देता है:

  • 0000 (सर्वोत्तम) - सम
  • 0001 - विषम
  • 0010 - विषम
  • 0011 - यहां तक ​​कि
  • 0100 - विषम
  • 0101 - यहां तक ​​कि
  • 0110 - यहां तक ​​कि
  • 0111 - अजीब

...आदि।

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

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

बड़े कौशल अंतराल की भरपाई करने के लिए, आप इस सूची में क्रमपरिवर्तन लागू कर सकते हैं। उदाहरण के लिए, एक बहुत ही मजबूत शीर्ष खिलाड़ी 0000 का मुकाबला करने के लिए, आप खिलाड़ी 0011 को निचले स्तर के अजीब खिलाड़ी के साथ स्वैप कर सकते हैं, जैसे 0100। यह वह जगह है जहाँ चीजें हाथ में लहराती हैं, लेकिन कम से कम यह एक अच्छा शुरुआती बिंदु प्रदान करता है जो नहीं पूर्ण कौशल की सटीक माप की आवश्यकता होती है, लेकिन सापेक्ष कौशल के आधार पर बस एक आदेश।


2

आपके पास कितना समय है, इसके आधार पर, टीम के कप्तानों को बेतरतीब ढंग से चुनकर पहले कुछ सत्र शुरू करें, और प्रत्येक खेल से पहले एक मसौदा तैयार करें। खिलाड़ियों को कौन सा जाना जाता है, इसका ध्यान रखें। पहले के पिक्स को उच्च रेटिंग मिलती है:

Round #1 = 8 pts, Round #2 = 6 pts, Round #3 = 4 pts, etc

Winning a game = 5 pts

यह सब प्रति टीम खिलाड़ियों की संख्या पर निर्भर करेगा। कुल अंक अगर वहाँ की भागीदारी में एक बड़ी विसंगति है एक दैनिक या खेल औसत करने के लिए परिवर्तित किया जा करना पड़ सकता है। आप एक टीम को जीत के बड़े अंतर के लिए पुरस्कृत भी कर सकते हैं।

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

फिर कंप्यूटर को प्रत्येक टीम के लिए पॉवर पॉइंट्स को संतुलित करके और एक दूसरे के साथ समान रेटिंग वाली टीमों को लगाकर ड्राफ्टिंग (टीमों का चयन) करने दें। ऐसे खिलाड़ी जो जल्दी चुने जाते हैं, लेकिन हारने वाली टीमों के लिए खेलना जारी रखते हैं, रैंकिंग में गिरावट आएगी।


बहुत बढ़िया जवाब! यह औसत टीम के लिए काम कर सकता है, लेकिन कुछ टीम रणनीतिक हैं। उदाहरण के लिए, यदि आप चाहते हैं कि आप पूरी टीम के डिफेंडर्स हों, तो आपके पास उच्च दौर में जाने वाले कुल खिलाड़ी होंगे। लेकिन, मुझे लगता है कि मैंने विहित के लिए नहीं पूछा: पी। धन्यवाद!
डायनामिक

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

1

सबसे आसान समाधान अनुमानित कौशल का एक ग्रेड / वजन प्रदान करना और प्रत्येक टीम के लिए स्कोर को संतुलित करने का प्रयास करना होगा।

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

मेरी ओर से रुचि के बिंदु के रूप में: Infer.NET इसे लागू करने और संभावित रूप से लागू करने के लिए अपेक्षाकृत आसान बनाता है, और यह एक दिए गए टीम मैचअप की बाधाओं की भविष्यवाणी कर सकता है। Infer.NET कुछ है जो मैं हाल ही में प्राप्त करना शुरू कर रहा हूं।


क्या आपके पास सार्थक होने के लिए पर्याप्त डेटा होगा जो कि केवल कुछ मुट्ठी भर खेल होंगे?
रोबोट

मैं जावास्क्रिप्ट या रूबी के साथ इसे हल करने की उम्मीद कर रहा था, लेकिन infer.net वैसे भी दिलचस्प लग रहा है।
वगेरह 29’12

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

1

आइए चर्चा के लिए मान लें कि आप प्रत्येक खिलाड़ी को एक पूर्णांक मान दे सकते हैं और उन मानों को जोड़ सकते हैं, जो कि स्कोर X वाला खिलाड़ी उतना ही मूल्यवान है जितना कि A, B और C =, अगर स्कोर A, B और C के साथ तीन खिलाड़ी हैं। X. लक्ष्य तब समूह को दो टीमों में अलग करना है ताकि दोनों टीमों के पास समान मूल्य के बराबर हो।

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

एक उदाहरण स्टीवन प्रस्ताव के समान एक लालची दृष्टिकोण है । यह एक 4/3-सन्निकटन है, यह सबसे मजबूत टीम है, जो कि इष्टतम विभाजन में 33% से अधिक मजबूत नहीं है।

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


1
आप जिम के फर्श पर बहुत सारे खिलाड़ियों को फिट नहीं कर सकते। 20 से अधिक खिलाड़ियों के साथ, यह मानते हुए कि आप एक तरफ 10 चाहते हैं, जाँचने के लिए केवल 92378 संयोजन हैं। लेकिन यह बहुत से खिलाड़ियों को नहीं लेता है इससे पहले कि संयोजनों की संख्या अव्यवस्थित खोज को अव्यवहारिक बनाती है।
केविन क्लाइन

@kevincline: सही है। मैंने स्पष्ट रूप से मान लिया था कि पाशविक बल एक विकल्प नहीं था (अन्यथा, क्यों पूछें?)।
राफेल

प्रत्येक टीम में कभी भी छह से अधिक व्यक्ति नहीं होंगे। अधिक बार चार।
वीगर

@Vegar: तो फिर आपका सवाल यह है कि टीम के स्कोर को मॉडल प्लेयर वैल्यू और एल्गोरिदम के बारे में कम करने के लिए कैसे सही है?
राफेल

1
जब तक आप अपनी प्रतिभा से लोगों को वास्तव में स्कोर करने का एक तरीका समझ नहीं सकते, एल्गोरिथ्म में सटीकता संभवतः महत्वपूर्ण नहीं है। हाथ में समस्या के साथ, हमारे पास केवल टीम स्कोर और मुट्ठी भर परीक्षण हैं। किसी भी खिलाड़ी की रेटिंग एक जंगली अनुमान होने जा रहा है।
रोबोट

0

आप कितना हास्यास्पद चाहते हैं? आप पिछले खेलों में अपनी टीमों के स्कोर के आधार पर प्रत्येक खिलाड़ी के लिए गुणांक उत्पन्न करने के लिए हमेशा कई रैखिक प्रतिगमन का उपयोग कर सकते हैं। फिर सूची को क्रमबद्ध करें और चुनें।

वास्तव में यह शायद काम नहीं करेगा क्योंकि यह खिलाड़ियों के बीच गतिशील मॉडल नहीं करता है, लेकिन यह आपको आर के साथ खेलने का एक कारण देगा । (<- देखें, मैंने इसे संबंधित प्रोग्रामिंग रखा)


1
मैं सप्ताह में दो बार 2 मिनट के कार्य से बचने के लिए एक आवेदन करने पर विचार कर रहा हूं, जिससे मुझे भविष्य की गणनाओं के लिए परिणाम रिकॉर्ड करने की लगभग समान राशि खर्च करने के लिए मजबूर होना पड़ता है। इतना हास्यास्पद कि मुझे लगता है ...
वेगा

-1

यदि आप चाहते हैं कि आपका एल्गोरिथ्म यथोचित हो, सरल एल्गोरिदम बस इसे नहीं काटेंगे। वे अक्सर आपको अजीब परिणाम देंगे

आपको ईएलओ या ट्रूस्किल सिस्टम जैसी किसी चीज़ के साथ जाना होगा (ईएलओ बिना संशोधनों के टीमों के लिए काम नहीं करता है, हालांकि)।


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