Представьте, что у вас есть куча людей, которые все хотят найти партнера из этой группы людей. Каждый человек может сделать объявление для всей группы или любому конкретному человеку. Цель состоит в том, чтобы все они попадали в пары, где это возможно.
Новые пользователи могут войти в группу, пока процесс сопряжения продолжается. Как только два человека спариваются максимально оптимально, они выпадают из группы.
У каждого человека есть "оценка" для каждого другого человека. По возможности, люди должны быть вместе с партнерами с более высокими показателями. Тем не менее, более важно, чтобы люди находили пары вообще, чем эти пары были строго оптимальными. Таким образом, разумно, например, иметь двух человек "условно спаренных", а затем немного подождать, чтобы увидеть, подходит ли лучший партнер для обоих; если этого не делать, тогда правильно соедините два и они выпадают из группы.
Нет центрального элемента управления: вся работа должна выполняться путем передачи сообщений между людьми (или трансляции для всей группы).
Какой лучший алгоритм для этого?
Очевидно, проблема, которую я пытаюсь избежать, заключается в том, что A случайно выбирает B и говорит "эй, будь моим партнером", и в то же время B говорит C "эй, будь моим партнером". Кроме того, A не может просто объявить, что "кто-то будет моим партнером!" потому что A получит ответы от всех, и если B также объявил, что "кто-то будет моим партнером", B должен ответить на объявление или нет?
Это похоже на isa http://en.wikipedia.org/wiki/Stable_roommates_problem, но (а), что о поиске "стабильного" (строго оптимального) решения, которое полезно, но не требуется в моей проблеме, и (б) он предполагает, что группа фиксирована по размеру и не изменяется, тогда как моя проблема позволяет новым участникам группы участвовать в "выборах в парные".