Статья по результатам работы от классического результата Аксельрода 1984 года до пары фишек, которые я защищал на конкурсах этой зимой.Теория игр иногда дает совершенно предсказуемые ответы, а иногда нетривиальные вопросы, которые, сильно прищурившись, может задать даже школьник, способный дать забавные и довольно доказательные картинки отношений между… да кем угодно! Это и мотивировало меня взять в качестве первой проектной работы математическую игру «Дилемма заключенных».
Зачастую в повседневной жизни мы видим проявление эгоизма. Да, на самом деле эгоизм – выгодная «стратегия». Стараться для личной выгоды куда проще и прибыльнее, чем для коллективной. Согласны?
Посмотрим на эту ситуацию с другой стороны. Если все общество будет состоять из эгоистов, общество умрет. Доказательства? Факты?
Представим себе некий остров. На нем живут разные животные, среди которых есть конкретный вид птичек. На острове весна — появилась проблема с клещами. Вообще, птички ловкие и легко чистят себя от клещей, но не могут дотянуться до макушки. Естественно, они просят помощи у сородичей, взамен на взаимную услугу.
А теперь отвлечемся: в диком мире, как и у нас, время — это ресурс. От количества времени зависит, сколько пищи сможет добыть особь, соответственно, и вероятность ее выживания.
Птички это понимают и некоторые, после того, как «сосед» почистил ему макушку, быстро отправляются добывать себе пищу. Таким образом, вероятность выживания эгоистов увеличивается, а добросовестных птичек — сильно уменьшается. Популяция эгоистов растет, а добрых — падает.
И вот отношение популяций двух типов особей достигает такого значения, что уже почти некому чистить эгоистов: почти все добрые птички умерли. Из-за этого эгоисты тоже умирают. Доказали.
Что же такое «Дилемма заключенных»?
На самом деле, это игра: два игрока, два типа хода: кооперация (1) и предательство (0). Баллы за разные шаги распределяются так:
В игре рандомное количество шагов.
Создадим 4 стратегии, по которым могут действовать игроки:
- Рандомный ход
- Только кооперация
- Только предательство
- Око за око
У стратегий говорящие названия. Я лишь поясню: «Око за око» — это стратегия, по которой игрок будет предавать только лишь в том случае, если его предали на прошлом шаге.
Создадим 4 команды. Игроки каждой команды будут придерживаться одной из этих стратегий. Распределим 40 игроков по 10 в каждую команду. Заставим каждого игрока сыграть со всеми остальными. После прохождения всех игр, изменим количество игроков пропорционально набранным ими баллам. Получается, прошел тур, а на следующий этап популяции каждой команды изменяются в зависимости от очков, набранных ими. Некий естественный отбор.
Создадим такой турнир на 20 туров. Смотрим популяцию:
«Око за око» и «Кооперация» лидируют. Это обуславливается тем, что хоть эгоисты и пытаются эксплуатировать конкурентов, все равно «око за око» успевает быстро дать отпор. Почему же лидирует и «Кооперация»? Когда «Кооперацию» предает «Предатель», то он получает 40 баллов, в то время, как при игре «Кооперация» — «Кооперация» или «Кооперация» — «Око за око», они получают в сумме 70 баллов.
Да, ребят, коллективная выгода выигрывает!
Теперь создадим некое подобие реальности. Внедрим фильтр помех. То есть с заданной вероятностью ответ каждого игрока меняется на противоположный. Запускаем турнир с фильтром в 7%.
Картина изменилась. Почему «Око за око» не лидирует? Суть в том, что когда «Око за око» играет с таким же «Око за око», то срабатывает фильтр, и они начинают давить друг друга. Как этого избежать? Ведь они не хотели предавать! Они друг друга неверно поняли! А что, если игроки научатся прощать?
Создадим турнир, где будут играть только «Око за око» с разными вероятностями прощения при фильтре 7%.
После 20 туров будет такая картина:
Явно видно, что прощение — классная штука. Посмотрим, как каждая из этих стратегий сможет заменить стандартную «Око за око» в изначальной среде.
Круто! «Око за око с прощением в 20%» лидирует! Вывод: нужно уметь прощать.
В ходе исследования этой интересной задачи, я разработал некую программу, которая может прогонять такие турниры и показывать выходные данные после каждого тура.
Эта работа выставлялась на «Балтийском научно-инженерном конкурсе» в г. Санкт-Петербург и получила там 3 место и на конкурсе «Юниор» в г. Москва.
Посмотреть работу программы можно на сайте http://ppdx.ru/(Не забываем про хабраэффект, заходите только если действительно интересно посмотреть)
Я вполне могу открыть исходный код (PHP + CodeIgniter), если это кого-то заинтересует.
P.S. Статья моего друга, но я решил что всем будет интересно. Если я не ошибся, можете отблагодарить его инвайтом (alexeev.corp@gmail.com)
Автор: Fiesta