Каков наилучший способ оптимально подобрать рейтинговые пары?

Допустим, у меня есть список мужчин и женщин. Каждый мужчина (x) оценивает каждую женщину, а каждая женщина (y) оценивает каждого мужчину по шкале 0-9.

например

x1: {y1: 0, y2: 5, y3: 9}

x2: {y1: 1, y2: 0, y3: 9}

х3: {у1: 5, у2: 5, у3: 8}

у1: {х1: 3, х2: 3, х3: 5}

у2: {х1: 8, х2: 2, х3: 2}

у3: {х1: 9, х2: 5, х3: 9}

Я ищу алгоритм, который объединяет все x & y, чтобы максимизировать общий рейтинг.

В этом случае оптимальные пары будут x2:y3 = 9+9 = 18, x1:y2 = 5+8 = 13, x3:y1 = 5+9 = 14. для общего рейтинга 45. По крайней мере, я так думаю на глаз.

Я думаю, что это упрощенная версия задачи о максимальном независимом множестве, которая не является проблемой оптимизации NP-hard.

1 ответ

Эта проблема известна как проблема стабильного брака, и за ее решение была присуждена Нобелевская премия по экономике. Алгоритм подробно описан в википедии:

http://en.wikipedia.org/wiki/Stable_marriage_problem

Псевдокод вырезан / вставлен из википедии:

function stableMatching {
    Initialize all m ∈ M and w ∈ W to free
    while ∃ free man m who still has a woman w to propose to {
       w = m's highest ranked woman to whom he has not yet proposed
       if w is free
         (m, w) become engaged
       else some pair (m', w) already exists
         if w prefers m to m'
           (m, w) become engaged
           m' becomes free
         else
           (m', w) remain engaged
    }
}
Другие вопросы по тегам