алгоритм сопоставления

Я пишу приложение, которое делит пользователей на пары для совместного выполнения задачи. Каждый пользователь может указать различные предпочтения в отношении своего партнера, например

  • пол
  • язык
  • возраст
  • местоположение (обычно в пределах X миль / километров от места проживания пользователя)

В идеале, я бы хотел пользователь, чтобы иметь возможность указать, является ли каждое из этих предпочтений «желательным» или «обязательным», например: «Я бы предпочел, чтобы меня сравнивали с носителем английского языка, но я не должен сочетаться с женщиной».

Моя цель - максимизировать общее среднее качество матчей. Например, предположим, что в системе 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

Итак, в этом надуманном примере, эта система подсчета очков совпадений и максимизации общего среднего - это всего лишь эвристика, которую я придумал сам. Если есть способ лучше рассчитать пары, дайте мне знать.

Обновление

Описанная мною проблема похожа на проблему стабильного брака , для которой существует известное решение. Однако в этой задаче я не требую, чтобы выбранные пары были стабильными. Моя цель - выбрать пары так, чтобы средний «балл совпадения» был максимальным

8
задан Nubok 8 April 2012 в 10:37
поделиться