Теория игр - это не только об изучении стратегий в играх, таких как шахматы, го или других. Применять теорию игр уже сегодня пытаются в различных областях: в политике, в спорте, в кибернетике, в психологии и многих других местах. Данная наука выполняет математический анализ ситуаций (в которых сталкиваются интересы нескольких сторон, преследующих различные цели), пытаясь формализовать и описать данные ситуации в виде математической модели, определяющей некоторую игру.

Возникает логичный вопрос: а можно ли с помощью концепций теории игр смоделировать поведение индивидов в обществе?

Недавно я наткнулся на лекцию в интернете, где была поставлена интересная задача, и мне захотелось смоделировать подобную ситуацию (ссылка на видео).

P.S. В данной статье не хотелось бы зацикливаться на программировании, статья направлена на то, чтобы показать, как случайные (и не очень) ошибки могут повлиять на жизнь небольшого выдуманного поселения.

Постановка задачи

Пусть имеется некоторое поселение людей, которое живет вокруг болота. Всего в этом поселение есть 2 типа жителей, которые увлекаются разными хобби (будем раскрашивать таких жителей в разные цвета).

Каждый житель имеет свой уровень счастья, счастье жителя зависит от его соседей. Если сосед жителя увлекается другим хобби, то житель не получается счастья, а за каждого соседа с таким же хобби житель получает +1 очко счастья.

Задача состоит в следующем: как достичь максимального уровня счастья в поселении?

Максимальное счастье поселения может быть рассчитано по формуле: (n-4)*2 + 4. Для поселения из 16 человек: (16-4)*2 + 4 = 28, для 32: (32-4)*2 + 4 = 60. То есть нужно добиться такого состояния поселения, чтобы все жители с одним хобби жили в линию (тогда уровень счастья каждого жителя будет максимальным, как следствие и счастье всей колонии станет максимально возможным)

Каждый день 2 случайных жителя встречаются и обмениваются информацией о своем уровне жизни. А также они решают, стоит ли им поменяться местами. Они могут поменяться местами только в том случае, если уровень счастья хотя бы одного из жителей вырастет, а уровень счастья другого жителя не станет ниже после переезда.

Очевидное решение

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

Для тестирования рассмотрим наихудший вариант при котором все жители чередуются, в таком случае их уровень счастья изначально равен 0. Проведем тестирование и посмотрим, что произойдет спустя 15 итерацией.

Уже после первых 15 итераций счастье в колонии значительно увеличилось. Посмотрим, чего можно добиться за большее число итераций.

Как видим, образовались группы поселенцев по интересам, и эти жители более ни с кем не хотят меняться, так как ни одному из них не выгодно менять своё местоположение. Спустя время получается, что максимальное счастье в популяции составило 52, а необходимо достичь 60. Что делать в таком случае?

Добавляем случайность

Можно попробовать научить жителей ошибаться. Другими словами, при встрече можно заставить первого жителя говорить неправду о своих соседях второму жителю. Тогда второй житель будет неправильно оценивать обстановку, как следствие будет появляться вероятность того, что жители начнутся меняться даже если счастье населения будет оставаться таким же или даже станет меньше.

Назовем вероятность того, что житель говорит неправду о своих соседях “ложью”. Значение лжи будет задаваться параметром от 0 до 1 (где 0 - вариант из решения выше, все жители говорят только правду, 1 - каждый раз врут). Пусть в первый раз все жители лгут с вероятностью 10% (0.1). Посмотрим, чего смогут добиться жители.

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

Немного тестов

Тут мне стало интересно, а что будет, если вероятность лжи в группе будет меняться, при каком проценте получится максимально быстро достичь нужного уровня счастья. Было решено провести тестирование для 0.001, 0.0015, 0.005, 0.01, 0.015, 0.02, 0.05, 0.075, 0.1, 0.125, 0.175, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5 вероятностей лжи. Для каждой вероятности будет браться среднее значение из 100 испытаний. Важным условием будет следующее: если после 100000 итераций не было достигнуто максимального уровня счастья, то цикл завершался и переходил к следующему тесту (так как в некоторых случаях приходилось ждать по 1-2 млн итераций). Вот результаты:

график скорости получения максимального счастья
график скорости получения максимального счастья
количество итераций на % лжи
количество итераций на % лжи

Вывод

Даже несмотря на то, что случайные отклонения приводили в некоторых моментах к понижению счастья в поселении, но в конечном итоге умеренные отклонения от нормы приводили к стабилизации ситуации и достижению нужной цели. Это наводит на мысль о том, что ошибаясь в реальной жизни, мы не всегда получаем только негативные последствия, а иногда наши ошибки могут приводить к чему-то новому, к более значимому результату.

ссылочка на гитхаб с проектом.

Комментарии (10)


  1. NightShad0w
    30.08.2021 13:58
    +2

    Интересная статья, спасибо.


    Как на скорость достижения максимального счастья скажется динамический рост или убыль населения? Допустим, если тренд счастья восходящий, то в поселение приходят новые жители, со своими хобби. А если тренд отрицательный, то жители покидают поселение.
    Есть гипотеза, что при проценте лжи, поселение может выродиться из-за колебаний тренда счастья и непредсказуемости срока ожидания.


    1. daniilgorbenko Автор
      30.08.2021 14:24

      Спасибо!
      Да, было бы интересно посмотреть, как будет себя вести поселение, если учитывать некоторые демографические показатели
      В ближайшее время я реализую что-то подобное, где жизнь в поселении уже не будет зависеть от одного параметра


  1. sergyalosovetsky
    30.08.2021 18:04
    +1

    Тут слишком много допущений, которые множат ценность этой теории на 0.

    Важнейшее из неучтенных допущений - деньги

    Из за отсутствия денег гражданин с хобби а не сможет переехать в район а, а будет страдать в районе ё

    Также важным является возраст гражданин, pr , и прочее


    1. daniilgorbenko Автор
      30.08.2021 18:26
      +1

      Это задача носит чисто познавательный характер: посмотреть и промоделировать поведение выдуманного (это важно!) поселения
      В реальной жизни используются более сложные и продуманные модели, где данные берутся не просто с помощью random.randint() и учитываются самые важные факторы жизни, а не просто хобби
      Такие сверхпростые модели можно использовать для моделирования поведения в каких-нибудь простеньких играх


      1. alliumnsk
        01.09.2021 14:17
        -2

        В общем, "дядя, не бейте, я лишь учусь программировать"


  1. Goerging
    30.08.2021 19:55
    -1

    Также есть немного более познавательное видео по этой же теме, причем с той же лекции)


  1. ciubotaru
    31.08.2021 03:13
    +2

    Случайные ошибки ценой небольшого ухудшения сдвигают расклад в сторону глобального оптимума. Возможно, этого же эффекта можно добиться, просто разрешив обмены, при которых никто ничего не приобретает и не теряет.

    Интересно, есть ли алгоритм кратчайшего пути -- достижение оптимума из случайной начальной комбинации за наименьшее число обменов...


    1. daniilgorbenko Автор
      31.08.2021 09:12

      Есть различные алгоритмы поиска экстремумов, которые работают в тысячи раз быстрее, чем просто алгоритмы полного поиска, например, генетические, муравьиные, алгоритмы роя частиц, иммунные и другие. В них происходят также случайные отклонения. Например, в алгоритме роя частиц никто ничего не теряет, там просто все частицы получают информацию друг о друге и немного смещают свой вектор поиска экстремума.
      Я по подобному тоже делал небольшую статейку


      1. ciubotaru
        31.08.2021 13:10

        Кажется, я слишком неясно выразился. В этой задаче не требуется искать экстремум. Он известен -- это т.н. ожерелье (всё комбинации, получаемые путём вращения исходной). Пути, как такового, здесь нет -- последовательность парных перестановок не играет роли.

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


  1. blindmen
    07.09.2021 23:19

    Слушаю Азимова серию академия, там была наука психоИстория, с помощью нею можно было "математически предсказать/рассчитать" будущее на основе поведения общества.

    Хм, кто знает какие нибудь нейронки для теории игр?)