Я пишу приложение, которое делит пользователей на пары для совместного выполнения задачи. Каждый пользователь может указать различные предпочтения в отношении своего партнера, например
В идеале, я бы хотел пользователь, чтобы иметь возможность указать, является ли каждое из этих предпочтений «желательным» или «обязательным», например: «Я бы предпочел, чтобы меня сравнивали с носителем английского языка, но я не должен сочетаться с женщиной».
Моя цель - максимизировать общее среднее качество матчей. Например, предположим, что в системе 4 пользователя: A, B, C, D. Этих пользователей можно сопоставить 3 способами:
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
Итак, в этом надуманном примере, эта система подсчета очков совпадений и максимизации общего среднего - это всего лишь эвристика, которую я придумал сам. Если есть способ лучше рассчитать пары, дайте мне знать.
Описанная мною проблема похожа на проблему стабильного брака , для которой существует известное решение. Однако в этой задаче я не требую, чтобы выбранные пары были стабильными. Моя цель - выбрать пары так, чтобы средний «балл совпадения» был максимальным