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
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