Ваша задача – усадить пары и семьи вместе, друзей, насколько возможно, – за одним столом, а врагов – как можно дальше друг от друга, чего бы это ни стоило. Это типичная задача оптимизации. Проблемы оптимального распределения – подобные той, о которой идет речь, – существуют во многих областях. Всякий раз, когда вы слышите, что нечто оказалось “наилучшим”, “самым дешевым”, “самым эффективным”, это, как правило, результат оптимизации. И те же самые алгоритмы оптимизации, которые используются самыми разнообразными структурами – от правительств до хедж-фондов и сетевых супермаркетов, – помогут вам избежать ссоры из-за мест за столом на вашей свадьбе.
Чтобы выбрать лучший план рассадки, нужно сначала определиться, что вы подразумеваете под “лучшим”, то есть какова ваша главная цель. Хотите ли вы, скажем, по большей части угодить
Всего этого (по отдельности) можно добиться (хотя последний пункт я бы не рекомендовала), но предположим, что вы задались целью достичь максимально высокого общего уровня удовлетворенности.
Теперь надо определиться с тем, что мы считаем “удовлетворенностью”. Самый простой способ сделать это – составить таблицу совместимости каждого гостя со всеми остальными, оценив определенным баллом их предполагаемые чувства в том случае, если они окажутся рядом друг с другом. Ставьте положительный балл, если два человека знакомы и были бы рады оказаться соседями. Чем выше балл у пары, тем важнее, чтобы эти люди оказались за одним столом.
Если два гостя не знакомы друг с другом, то их пара получает ноль, а те, которых лучше разделить, – отрицательную оценку. Самый низкий балл получают люди, которых нужно любой ценой держать подальше друг от друга.
Попробуем проверить этот метод на особенно сложном примере свадьбы всего с двумя столами. Имена мы, как обычно, придумали, причем совершенно случайным образом.
В данном случае решение очевидно: посадите Люка, Брюса и Щенка Далматинца за один стол, а тех, кто всегда всем портит настроение – Дарта, Джокера и Круэллу, – за второй.
Глядя на колонку Люка, мы видим, что он получает 20 “очков счастья” за удовольствие сидеть рядом с Брюсом и 60 – за Щенка, что в сумме дает ему 80 баллов.
По аналогичной системе Брюс получает 60 баллов, а Щенок будет абсолютно счастлив со своими новыми друзьями, получив в сумме 100 баллов.
За столом “ворчунов” Дарт получает 45 “очков счастья”, Джокер – 50, Круэлла – 35. По крайней мере, им будет приятно побрюзжать вместе. Если сложить баллы всех гостей, то в целом такой план дает нам 370 баллов. Для начала неплохо.
Но стоит нам поменять местами двух гостей, как разразится катастрофа. Если Щенок Далматинца поменяется с Дартом (и за первым столом окажутся Люк, Брюс и Дарт, а за вторым – Щенок, Джокер и Круэлла), сумма баллов обрушится до 120.
Конечно, это достаточно простой пример, и в данном случае идеальный план рассадки очевиден с самого начала, однако в принципе такой метод подсчета баллов для пар гостей действительно дает возможность рационально рассчитать гораздо более сложные и жизненные планы рассадки на многолюдных торжествах.
Основной принцип будет таким же, и теоретически проверить все возможные комбинации рассадки можно и вручную. Итак, проблема решена… если не считать того, что даже для совсем скромной свадьбы (17 приглашенных, два десятиместных стола) существует 131 702 различных вариантов рассадки!
Ох…
Компьютерная программа, способная обработать один вариант в секунду, будет перебирать все возможные комбинации свыше двух недель. На то, чтобы сделать это с помощью карандаша и бумаги, уйдут десятилетия (не отпугнет ли это одного из будущих супругов?). Чем больше гостей, тем больше нужно времени на вычисления. Свадьба на сто гостей и десять столов имеет 65 триллионов триллионов триллионов триллионов триллионов триллионов триллионов возможных вариантов рассадки. Если вы решите проверить их все в предвидении великого дня – желаю удачи, она вам понадобится…
И вот здесь и начинается собственно оптимизация.
Существует множество остроумных математических методов[13]
, которые позволяют исключить, не проверяя, огромные массивы ненужных комбинаций. Это означает, что вместо подсчета общего количества баллов для каждого возможного плана рассадки вы можете быстро и эффективно пройтись по комбинациям и определить лучшую – без необходимости проверять все.