2016-11-17 1 views
2

zur Zeit bin ich eigentlich auf der Suche nach einem Begriff spezifisch für mein Problem:Liga Scheduling ohne Roundrobin

ich eine Liga von> 4 Teams Die Liga erstellt haben dauert 3 Runden (Zahlen aus Gründen der Einfachheit) Matchups wird zufällig aus Teams vergeben, gegen die ein Team noch nicht gespielt hat.

Ich habe Mühe, meinen aktuellen Code mit jedem Randfall laufen zu lassen, also würde ich gerne nach 'Standard' algorythm suchen, der für solche Fälle entwickelt wurde, aber ich kann den Begriff nicht finden, nach dem ich suche.

Ein Schedule Beispiel wäre:

TeamA: C,E,B 
TeamB: F,H,A 
TeamC: A,D,H 
TeamD: G,C,F 
TeamE: H,A,G 
TeamF: B,G,D 
TeamG: D,F,G 
TeamH: E,B,C 

ich nichts in dieser Hinsicht finden kann, da es ein sehr, sehr unwahrscheinlich, was zu sein scheint in Ligen/Turnieren verwendet werden - jedoch, dass meine Forderung ist .

Dies ist mein aktueller Code, der eine Runde erstellt. Es kann vorkommen, dass dieser Code nicht die jeweils einem Team einen Gegner in Runde geben 3 als ihre möglichen Gegner haben bereits eine matchup in dieser Runde zugewiesen (mit 6 Teams getestet, in Round3 auftreten kann)

public function CalculateDivision() 
{ 
    $teams = Division::find(1)->teams()->get(); 
    $diffs = array(); 
    foreach($teams as $team) 
    { 
//Get possible Opponents 
     $opp = Division::find(1)->teams()->where('id','!=',$team->id)->lists('id'); 
     $matches = $team->matches()->get(); 
     $plyd = array(); 
     foreach($matches as $match) 
     { 
//Find Opponents a team already has played against 
      $plyd[] = $match->teams()->where('id','!=',$team->id)->pluck('id');  

     } 
//Substract Opponents already played against from possible Opponents 
     $TBP = array_diff($opp,$plyd); 
     $diffs[$team->id] = $TBP; 
    } 
//Order By Least possible Opponents possible 
    asort($diffs); 
    $this->CalculateMatches($diffs); 
} 

private function CalculateMatches($teams) 
{ 
//$teams equals $teams[teamID] = [Opponent1ID,Opponent2ID ...] 
    $setTeams = array(); 
    foreach($teams as $key => $team) 
    { 
//If Team hasn't already a new matchup find opponent from their possible opponent array 
     if(!in_array($key,$setTeams)) 
     { 
      shuffle($team); 
      foreach($team as $opponent) 
      { 
//If possible opponent hasn't already a matchup create one, add both teams to 'has already a match' so the loop doesn't evaluate them again 
       if(!in_array($opponent,$setTeams)) 
       { 
        $this->CreateMatch($key,$opponent); 
        $setTeams[] = $key; 
        $setTeams[] = $opponent; 
        break;  
       } 
      } 
     } 
    } 
} 

Jede Hilfe für das, was ich würde google werde

Antwort

3

A Swiss system „ist ein nicht-Beseitigung Turnier-Format, das verfügt über eine vorgegebene Anzahl von runden des Wettbewerbs, aber deutlich weniger als in einem Round-Robin-Turnier“ geschätzt.

Es ist weit verbreitet in Schach und anderen Spielen. Laut Wikipedia:

Schweizer Systeme sind in Schach, Bridge, eSports, Morabaraba, Scrabble, Backgammon, Squash, Pétanque (Boule), Quiz Schüssel, Magie häufig verwendet: The Gathering, Policy Debate, Warhammer, acht- Ball, Reversi, Dominion, Pokémon Sammelkartenspiel, Yu-Gi-Oh, Blood Bowl, Guild Wars 2, Star Wars: X-Wing Miniaturen Spiel, Pfad des Exils und Android: Netrunner.

Es kann Ihren Bedürfnissen entsprechen, und Sie können einige gebrauchsfertige Implementierung finden.

+0

Also bin ich im Grunde auf der Suche nach einem Schweizer System _without_ the Score Sache. Ich werde versuchen, etwas in dieser Hinsicht zu finden, danke :) – user1021605