PHP随机团队调度生成器-循环调度程序

PHP随机团队调度生成器-循环调度程序,php,scheduler,round-robin,Php,Scheduler,Round Robin,在一个新问题中问这个问题得到负面反馈后。。。这是我修改过的问题。是的,这是我正在做的同一个项目,但我不清楚我是否需要一个循环式的调度器 我正在做一个循环式的曲棍球联盟计划,需要一些帮助 总体目标是最终管理员用户能够输入3个变量,并让其执行循环式计划,直到达到周计数器为止。下面是球队数量和比赛周数的示例 $Teams = array('team1','team2','team3','team4','team5','team6','team7','team8'); $Weeks = 16; 目标是

在一个新问题中问这个问题得到负面反馈后。。。这是我修改过的问题。是的,这是我正在做的同一个项目,但我不清楚我是否需要一个循环式的调度器

我正在做一个循环式的曲棍球联盟计划,需要一些帮助

总体目标是最终管理员用户能够输入3个变量,并让其执行循环式计划,直到达到周计数器为止。下面是球队数量和比赛周数的示例

$Teams = array('team1','team2','team3','team4','team5','team6','team7','team8');
$Weeks = 16;
目标是让它循环16次,每周打4场比赛,每个队每周打1次。循环算法应该让团队每周进行不同的团队比赛,直到所有可能的组合完成,但不超过16周。如果我们只有4支球队或少于可能组合的球队,我们需要重新开始循环赛,直到达到周数


编辑:

我大约90%的投入到我需要这个脚本做的事情中。。。但有一件事我被卡住了。我需要帮助合并多维数组

首先是层次。接下来是几周(都是第一周)。然后是球队的比赛

Array
(
[1] => Array
    (
        [1] => Array
            (
                [1] => Array
                    (
                        [home] => Whalers
                        [visitor] => Lumberjacks
                    )

                [2] => Array
                    (
                        [home] => Team America
                        [visitor] => Wolfpack
                    )

            )

    )

[2] => Array
    (
        [1] => Array
            (
                [1] => Array
                    (
                        [home] => Warriors
                        [visitor] => Litchfield Builders
                    )

                [2] => Array
                    (
                        [home] => Icemen
                        [visitor] => Nighthawks
                    )

            )

    )

[3] => Array
    (
        [1] => Array
            (
                [1] => Array
                    (
                        [home] => The Freeze
                        [visitor] => Devils Rejects
                    )

                [2] => Array
                    (
                        [home] => Cobras
                        [visitor] => New Haven Raiders
                    )

                [3] => Array
                    (
                        [home] => Crusaders
                        [visitor] => Whalers
                    )

                [4] => Array
                    (
                        [home] => Blizzard
                        [visitor] => CT Redlines
                    )

            )

    )
)

我希望最终的结果是删除该层并将所有相同周的游戏合并到一起,如下所示:

Array
    (
        [1] => Array
            (
                [1] => Array
                    (
                        [home] => Whalers
                        [visitor] => Lumberjacks
                    )

                [2] => Array
                    (
                        [home] => Team America
                        [visitor] => Wolfpack
                    )

                [3] => Array
                    (
                        [home] => Warriors
                        [visitor] => Litchfield Builders
                    )

                [4] => Array
                    (
                        [home] => Icemen
                        [visitor] => Nighthawks
                    )

                [5] => Array
                    (
                        [home] => The Freeze
                        [visitor] => Devils Rejects
                    )

                [6] => Array
                    (
                        [home] => Cobras
                        [visitor] => New Haven Raiders
                    )

                [6] => Array
                    (
                        [home] => Crusaders
                        [visitor] => Whalers
                    )

                [8] => Array
                    (
                        [home] => Blizzard
                        [visitor] => CT Redlines
                    )

            )

    )

也许是这样的

<?php
$teams = array(
    'Team 1',
    'Team 2',
    'Team 3',
    'Team 4',
    'Team 5',
    'Team 6',
    'Team 7',
    'Team 8'
);

function getMatches($teams) {
    shuffle($teams);
    return call_user_func_array('array_combine', array_chunk($teams, sizeof($teams) / 2));
}

for ($i = 0; $i < 14; $i += 1) {
    print_r(getMatches($teams));
}

弹出一个,随机化,弹出另一个。这是你的游戏。如果剩下一个,一些随机的球队必须是主力,本周打两场比赛:

for ($week=1; $i<=$totalWeeksPlayed; $i++)
{

  $games = 0;
  $temp = $teams;

  while (count($temp) > 1)
  {
    $team = array_shift($temp);  
    shuffle($temp);
    $opponent = array_shift($temp);
    $game[$week][$games] = $team . ' vs' . $opponent;
    $games++;
  }

  if (count($temp) == 1)
  {
    $workhorses = $teams;
    unset($workhorses[array_search($temp[0], $teams));
    shuffle($workhorses);
    $team = $temp[0];
    $opponent = array_shift($workhorses);
    $game[$week][$games] = $team . ' vs' . $opponent;
    $games++;
  }

}
($week=1;$i 1)的

{
$team=阵列_班次($temp);
洗牌($temp);
$oppost=阵型移动($temp);
$game[$week][$games]=$team.'vs'.$对手;
$games++;
}
如果(计数($temp)==1)
{
$workhorse=$teams;
未设置($workhorses[array_search($temp[0],$teams));
洗牌(工作马);
$team=$temp[0];
$oppost=阵法轮班($workhorse);
$game[$week][$games]=$team.'vs'.$对手;
$games++;
}
}

给定一个团队表,比如 团队( 团队名称 ))

还有一张桌子

固定装置( 日期; ))

通过“玩”分解关系

演奏( 这是你的生日。 团队名称 ))

然后简单地迭代每个日期,然后随机选择一个没有该日期赛程的球队,以及没有参加所选球队(或最近没有参加所选球队)的球队


虽然更简单的解决方案是让团队[n](其中n为0…团队数量-1)对不同的X值使用团队[(n+(团队数量))%X]。

下面的问题从上面复制过来


如果我弄错了,请纠正我,但如果所有球队都必须在相同的常规基础上比赛,那么如果球队数量奇数,是否有可能让所有球队都打相同数量的比赛呢


米歇尔

您尝试配对的团队数量(在本例中为8个团队,为期16周)可能是一项艰巨的任务,这只是“计划过程”的开始。一旦确定了正确、平衡的团队配对,这只是制定分发时间表的开始。接下来,列出4个每周时段,包括整个16周赛季中每个时段的;星期几、开始时间和地点名称。备注:对您最有帮助的是什么就是要得到一个8队调度矩阵,该矩阵具有平衡对手主客场状态。这对调度的质量有很大的影响。重要的是要均匀分配早、晚时段,主客场状态相等,以及与对手的团队分布相等。大部分平衡都是实现的d通过使用平衡团队对矩阵

在波士顿地区从事了35年的体育教学、教练和赛程安排工作后,我可以提供以下信息。为体育组织制定联赛或比赛赛程似乎是许多人共同承担的一项永无止境的任务,随着参与者年龄的增长和联赛管理者的变化,学习曲线会不断重复e与创建时间表相关的活动对于接手的人来说意义重大

话虽如此,我还是惊讶于有多少受过高等教育的数学奇才参与到试图找到完美的解决方案(算法)来解决一个人的日程安排问题中来在3年的时间里,我们创建了一个软件,在为4到22个团队创建时间表时,它完美地平衡了所有重要的组件。我们学到的是,没有一种算法可以处理所有可能的变量,这些变量被添加到正常变量中,以创建平衡的时间表。我要说的是,有同样多的“假设”因为有数学排列和组合,处理的只是创建一个团队矩阵,列出对手和主场及客场比赛的状态

例如:让我们为一个9队分区每周打4场比赛创建一个完美平衡的时间表。9周后,所有球队都打了8场比赛,所有球队都有1次告别,所有球队在4个时间段中各打了2次,所有球队都被安排为主队4次,客队4次

任何人还想要什么?好吧,现在是乐趣。因为你选择的4个时段每周六有2场比赛,每个周日有2场比赛,第一个问题会出现(在制定、发布和分发赛程表后,当来自两个不同球队的2名教练打电话说他们周六工作时,你能把我们的比赛改到周日吗?当然,我可以。我会做一些更改,重新发布和分发赛程表

在新的时间表被修改之后