Формулировка как общая задача оптимизации
Будет полезно формализовать ограничения и параметры.Предположим, что для 1 <= i <= 8 у нас есть n_i комнат размером i.Теперь давайте наложим жесткое ограничение на то, что в конкретной комнате S на каждые два студента a, b \ in S мы имеем следующее: </p>
|Grade(a) - Grade(b)| <= 2 (1)
Теперь мы заинтересованы в оптимизации функции «разнообразия», которая интуитивнопредставляет идею, что мы хотим, чтобы комнаты были как можно более смешанными.Таким образом, мы можем представить эту цель в виде:
max over all arrangements {{ Sum over all rooms S of DiversityScore(S) }}
where we have DiversityScore(S) = # of Different Nationalities in the Room
Формулировка в виде задачи о графике
Это наиболее общий параметр, но, очевидно, максимальное значение по всем схемам неосуществимо в вычислительном отношении.Теперь давайте представим это как своего рода графическую проблему с жесткими ограничениями на оценку.Обозначим всех студентов как вершину в графе G. Соедините две вершины, если студенты удовлетворяют ограничению (1).Теперь клика на этом графике представляет группу студентов, которых можно разместить в одной комнате.Теперь действуйте в жадной манере.Выберите самую большую клику размера 4, которая имеет наибольшую оценку разнообразия.Затем поместите их в комнату и продолжайте, пока все комнаты не будут заполнены.Этот метод поиска клики может также включать в себя гендерные ограничения, что полезно, но не так, чтобы определение клики было трудной задачей NP.
Теперь, прежде чем пытаться придумать что-то, что может быть быстрее, давайте подумаем, как ослабитьжесткое ограничение (1).Мы можем помассировать нашу графическую формулировку, включив граничные веса в изображение.Поэтому, если жесткое ограничение выполнено, обозначим граничный вес от i до j как 1. Если два ученика i и j отклоняются на возраст более 2, обозначим граничный вес как 1 / (разница в возрасте) ^ 2 или что-то еще.Тогда оценка клики должна быть произведением весов края клики с некоторой оценкой разнообразия.Однако становится ясно, что теперь проблема заключается в полном графе, который является лишь общей оптимизацией, которую мы надеялись избежать, поэтому нам необходимо наложить некоторые жесткие ограничения для уменьшения связности нашего графа.
Базовая сортировкаАлгоритм аппроксимации
Сортировка всех учеников по возрасту, поэтому у нас есть отсортированный массив, в котором все ученики в [i] имеют одинаковый возраст, и все ученики в [i] старше всех учеников в [i]j] для всех j