Я пишу приложение, которое делит совокупность пользователей на пары с целью совместного выполнения задачи.Каждый пользователь может указать различные предпочтения своего партнера, например,
- пол
- язык
- возраст
- местоположение (обычно в пределах X миль / километров)откуда живет пользователь)
В идеале я бы хотел, чтобы пользователь мог указать, является ли каждое из этих предпочтений «хорошим» или «обязательным», например «Я хотел бы»Предпочитаю, чтобы меня подбирали носителем английского языка, но я не должен совпадать с женщиной ".
Моя цель - максимально повысить общее среднее качество матчей.Например, предположим, что в системе 4 пользователя, A, B, C, D. Эти пользователи могут быть сопоставлены тремя способами:
Option 1 Match Score
A-B 5
C-D 4
---
Average 4.5
Option 2 Match Score
A-C 2
B-D 3
---
Average 2.5
Option 3 Match Score
A-D 1
B-C 9
---
Average 5
Так что в этом надуманном примере будет выбран третий вариантпотому что он имеет самое высокое общее качество совпадения, хотя A и D. не очень хорошо сопоставлены.
Существует ли алгоритм, который может помочь мне:
- вычислить "«оценки совпадений», показанные выше
- , выберите пары, которые максимизируют среднюю оценку совпадений (при соблюдении абсолютных ограничений каждого пользователя)
Не обязательно, чтобы сопоставлялся каждый пользователь, поэтомуучитывая выбор между значительным снижением общего качества совпадений и оставлением нескольких пользователей без совпадения, я бы выбрал второе.
Очевидно, я бы хотел, чтобы алгоритм, который вычисляет совпадения, выполнялся так быстро, каквозможно, потому что число пользователей в системе может быть довольно большим.
Наконец, эта система вычисления результатов матчей имаксимизация общего среднего - это просто эвристика, которую я придумал сам.Если есть намного лучший способ для расчета пар, пожалуйста, дайте мне знать.
Обновление
Описанная мной проблема похожа на проблема стабильного брака для которого есть известное решение.Однако в этой задаче я не требую, чтобы выбранные пары были стабильными.Моя цель состоит в том, чтобы выбрать пары так, чтобы средний «матч-результат» был максимальным