Я заранее извиняюсь за длинный вопрос, я попытался обобщить его как можно больше.Алгоритм для поиска наиболее оптимального соответствия нескольких групп объектов
Я разрабатываю приложение для лиги единоборств.
первый модуль приложения. Требуется разработать сложный алгоритм для организации турнира, то есть организовать n
участников в скобки размером x
(например, 4 участника в каждой скобке).
Кронштейны должны быть расположены наиболее оптимальным образом против нескольких условий.
Каждый участник имеет несколько параметров:
- пояс (степень масштаба в боевое искусство, которое может быть переведено в числа)
- Весовая категория (например, 60-70 кг, 80-90 кг ...)
- Возрастная категория (например, 16-18, 18-25, 26-36 ...)
- название академии (цель этого параметра, чтобы максимальное отклонение внутри скобок)
- допускается к участию в отношении другого участника, который имеет один ранг ремня над ним (истина, ложь)
- допускается к участию в отношении участника, который один вес категория над ним (истина, ложь)
- Is к участию допускаются против участника, который один век категория над ним (правда, ложь)
условия:
Каждая «оптимальная» скобка имеет x
участников, которые имеют один и тот же пояс, весовую категорию, возрастную категорию, и все они должны иметь максимальную дисперсию параметра имени академии.
Если есть участники, которые не могут вписаться в условия выше, и они остались без скобки или они могут поместиться только в кронштейн размером x-y
, тогда алгоритм должен сделать наилучший («лучший») описанные ниже) и заменяет участников в «идеальных» скобках в соответствии с последними 3 булевыми параметрами.
Также после всех замен необходимо иметь место различие между именами академии.
Мой вопрос в том, что является лучшим подходом к решению этой проблемы? Буду благодарен за некоторые этапы или ссылку на какую-то математическую литературу, которая обсуждает такие проблемы (я не ожидаю, что кто-нибудь решит это для меня, просто руководствуясь).
моя общая точка зрения, как ее решить:
ранга всего кронштейн с сортом, а затем относятся к общей степени всех скобок.
, например, «совершенный» скобка 4 участников будет причислить Z
и вес отсутствия имени академии дисперсии будет причислить (см желтый заметный пункт для более подробного объяснения) –(17X<Z)
так что если 2 участника поделиться то же название академии будет Z-(17X<Z)
, и если у 3 участников будет одинаковое имя академии и т. д.
Если кронштейн будет или/не совпадает с отсутствием соответствия между их поясами, весовой категории или возрастной категорией, уменьшить с другим –(17X<Z)
.
важное правило о том, что дом с самым «плохим» класса предпочтительнее против не кронштейну на всех
(его 17X, поскольку максимальная разница с условием академии в кронштейне 4 является 4X и максимальная разница в возрастной категории - еще 4X и , остальные «плохие соединения» между участниками - 16, и я добавляю 1 , чтобы произвести оценку, превышающую 0 или меньше
Z
).
Это легкая часть, но я пришел к выводу, что если я хочу, «лучший» или оптимальный сорт мне нужно будет рекурсивно повторять огромное и невозможное количество раз для того, чтобы достигнуть большего общего класса всех скобок и, наконец, достичь оптимального общего класса.
Я совсем не уверен в этом, возможно, требуется другое мышление.
его не так важно, но для общих знаний язык разработки C#.
Большое спасибо за ваше время и внимание.
Вы почти наверняка более усложняет эту проблему. Я бы посоветовал вам сделать инъекцию в разных алгоритмах и начать с простого. – duffymo
Насколько велика вероятность 'N'? Я прошу, потому что, как только вы применяете ограничения выбора (связанные с поясом, весом, возрастом), проблема может быть поддающейся грубой силе. Если это так, вам просто нужна функция подсчета очков, чтобы присвоить номер любому заданному набору скобок. Затем просто перебирайте каждый законный набор и выбирайте лучший. – FMc
@ FMc tnx для вашего комментария, N ~ 400 в среднем, я понимаю, что вы имеете в виду, но задача состоит в том, чтобы найти наилучшую общую комбинацию. – jonathana