Я пытаюсь создать планировщик спортивной лиги. У меня проблемы с определением алгоритма, который поможет мне эффективно заполнить каждый слот.
Пример данных для построения графика будет:
- 10 команд
- Каждая команда играет друг с другом 1 раз (требуется 45 игр)
- Каждая команда играет не более 1 раза в день
- В своем тестировании я использую 9 дней с 5 слотами в день.
Комбинированный стол (содержит 45 комбинаций)
ID
Team1ID
Team2ID
bitAssigned
Таблица расписаний (содержит 45 временных интервалов)
scheduleID
homeTeamID
awayTeamID
GameDate
GameTime
Прямо сейчас мои существующие процедуры заполняют около 90% слотов, оставляя 10% моих слотов пустыми из-за конфликта планирования, основанного на правилах выше.
Я перебираю таблицу расписания в порядке возрастания даты / времени.
Мой первый слот может быть в субботу в 8 утра.
Я запрашиваю список команд, которые еще не запланированы. Затем я делаю множество возможных комбинаций этих команд. Затем я использую этот массив для извлечения 1 случайной записи из моей таблицы комбинаций из комбинаций, которые еще не были запланированы, и помещаю эти команды в расписание. Затем я установил эту комбинацию как использованную.
Я повторяю цикл снова и снова, и каждый раз мой список доступных команд уменьшается, и мой массив в результате также уменьшается.
Я обнаружил, что некоторые дни проходят хорошо, а в другие дни мои последние две оставшиеся команды уже играли на предыдущей неделе, поэтому они больше не добавляются в расписание.
Единственное, что я еще не пробовал, - это «перезагрузить» дни конфликта и перепробовать их снова, чтобы посмотреть, получу ли я лучшие места размещения.
У кого-нибудь есть предложения?