Я намагаюся створити планувальник спортивної ліги. У мене виникають проблеми з визначенням алгоритму, який допоможе мені ефективно заповнити кожен слот.
Приклад даних для складання розкладу буде:
- 10 команд
- Кожна команда грає одна з одною (потрібно 45 ігор)
- Кожна команда грає не більше 1 разу на день
- Для мого тестування я використовую 9 днів із 5 слотами на день.
Таблиця комбо (містить 45 комбо)
Ідентифікатор
Team1ID
Team2ID,
біт, призначений
Таблиця розкладу (містить 45 часових інтервалів)
scheduleID
homeTeamID
awayTeamID
GameDate
GameTime
Наразі мої існуючі процедури заповнюють близько 90% слотів, залишаючи 10% моїх слотів порожніми для конфлікту планування, виходячи з вищезазначених правил.
Я перебираю свою таблицю розкладу у порядку зростання дати / часу.
Мій перший слот міг бути в суботу о 8 ранку.
Я запитую список команд, які ще не заплановані. Потім я складаю масив можливих комбінацій цих команд. Потім я використовую цей масив, щоб витягнути 1 випадковий запис із таблиці моїх комбінацій із комбінацій, які ще не були заплановані, і я розміщую ці команди за розкладом. Потім я встановив цю комбінацію як використану.
Я повторюю цикл знову і знову, і кожен раз мій список доступних команд стає меншим, і мій масив як результат також менший.
Я вважаю, що деякі дні проходять нормально, а в інші дні мої останні 2 останні команди вже грали на попередньому тижні, тому їх знову не додавали до розкладу.
Єдине, що я ще не намагався - це "скинути" дні конфлікту та спробувати їх ще раз, щоб побачити, чи я отримаю кращі місця розташування.
Хтось має якісь пропозиції?