Загадка про колпаки

А.В. Смирнов

Институт логики, Smi@logic.ru

Задача о мудрецах и колпаках.

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

Задача. Три мудреца поспорили, кто из них самый умный и обратились к четвертому, чтобы он их рассудил. Судья сообщил мудрецам, что у него есть три белых колпака и два черных, после чего надел каждому колпак на голову так, чтобы каждый видел только колпаки двух других мудрецов. Мудрецам требовалось угадать цвет колпака на собственной голове. Через некоторое время один из мудрецов сообщил, что у него на голове белый колпак и выиграл состязание. Как он смог догадаться?

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

Если мудрец видит на головах соперников черный и белый колпаки (ситуация 2), то он может рассудить так: «Если у меня на голове колпак черный, то мудрец в белом колпаке видит перед собой два черных колпака (находится в ситуации 1), и должен сообразить, что на нем колпак белый. Но он молчит, значит на мне белый колпак».

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

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

Всего случаев могло быть ровно три:

— на соперниках колпаки черные;

— на одном сопернике черный колпак, на другом – белый;

— на обоих соперниках колпаки белые.

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

Наша стройная конструкция рушится, как только мы осознаем, что перечисленные выше ситуация 1, ситуация 2 и ситуация 3 являются исчерпывающим списком возможных вариантов, то есть, действуя по описанному выше методу, мудрец в любом случае должен прийти к заключению, что колпак на нем белый. Значит, мудрец должен после начала испытания посмотреть на своих соперников и, независимо от увиденного, через некоторое время объявить, что на нем белый колпак. Правда, совершенно непонятно, через какой именно промежуток времени надо делать заявление.

В классическом решении неявно использованы очень сильные допущения, которые никак не вытекают из условий задачи:

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

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

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

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

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

Осмелюсь предложить несколько вариантов объяснения.

Решение 1. Победителю повезло (ситуация б). Но это ставит под сомнение добросовестность судьи (он должен был поставить всех в равное положение), а во-вторых, не свидетельствует о наличии мудрости у победителя, — ведь ему повезло, поэтому Решение 1 нельзя признать удовлетворительным.

Решение 2. Обдумав заблаговременно ситуации 1-3-г, победитель мог заметить, что в любом случае, вскоре после начала состязания, он должен заявить, что на нем белый колпак. И тут важно было произнести это раньше других, иначе он все равно проиграет. Поэтому лучшим решением было сразу же после начала состязания заявить, что он в белом колпаке, чтобы успеть сделать это раньше других.

Заметим, что это решение предполагает «одинаковомыслие» мудрецов (но большую предусмотрительность победителя).

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

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

Мне это решение кажется самым мудрым и справедливым.

Решение 4. Победитель определил цвет колпака по расположению звезд.

Такая способность несомненно доказывает его мудрость, но для меня остается непостижимой.

Логическое мышление требует постоянного развития. Если вам и вашему ребенку надоело «щелкать» обычные логические задачи, попробуйте разгадать парочку математических головоломок. Какие-то из них требуют реальных «академических» знаний, какие-то решаются при помощи находчивости и умения разбираться в причинных связях, а какие-то просто тренируют внимательность. Не упускайте шанс и устройте мозговой штурм прямо сейчас!

Что такое математические головоломки?

Головоломками принято называть задачи, требующие нестандартных решений, особенного подхода и взгляда «с другой стороны». Они тренируют разные навыки, развивают сообразительность и приносят пользу не только детям, но и взрослым.

Головоломки бывают сложные и простые, в картинках и текстовые, логические и механические (последние обычно представлены в виде «реальных» устройств: кубика Рубика, змейки Рубика и так далее). Математические головоломки традиционно считаются самым древним способом «размять» мозги и «прокачать» собственную интеллектуальную силу. Они также подразделяются по сложности и имеют приблизительный возрастной ценз: одни математические задачи дети решают самостоятельно, а другие – только при помощи взрослых.

Для чего решать головоломки?

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

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

7 математических головоломок

Давайте приступим к практике и попробуем решить первую головоломку из нашей сегодняшней подборки

Головоломка №1

Задание: Продавец фруктов на рынке решил взвесить яблоко, грушу и гранат. На первую чашу весов он поставил яблоко и гранат, на вторую – грушу: весы достигли равновесия. Затем продавец взвесил три яблока: весы показали цифру 21.

Потом он взвесил все три фрукта вместе: весы показали цифру 26. Как ты думаешь, какую цифру показали весы, когда продавец взвесил два граната?

математическая головоломка с весами
Подсказка: Смотри на картинку — так тебе будет легче справиться с первой задачей.

Показать ответ

Ответ: Весы показали цифру 12.

Разбираемся подробнее.

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

Смотрим на вторую строчку. Если три яблока весят 21 единицу, то одно яблоко весит 7 единиц: 21/3=7.

Смотрим на третью строчку. Если мы заменим яблоко и гранат на одну грушу (из п.1 мы помним, что они равны по весу), мы узнаем, что две груши весят 26 единиц. Следовательно, одна груша весит 13 единиц.

Теперь мы можем узнать, сколько единиц весит один гранат. Мы знаем, что вес груши равен весу яблока и граната, вместе взятых. Если груша весит 13 единиц, а одно яблоко – 7, то один гранат весит 6 единиц (13 – 7 = 6).

Смотрим на последнюю строчку. Когда продавец взвесил два граната, весы показали цифру 12, потому что 6+6=12.

Мы надеемся, что ты быстро справился с заданием! Тебя уже ждет следующая головоломка.

Головоломка №2

Задание: Петя Чайников склеил кубик. Он несколько раз подкидывал кубик и фотографировал его на столе. А потом пришла Петина младшая сестра Галя и кубик сломала.
Петя сначала расстроился, но потом решил сделать новый кубик, точно такой же. Посмотри на развёртку кубика и на фотографии, которые успел сделать Петя. Можешь ли ты правильно раскрасить все грани кубика? Выбери из вариантов решений правильное.

Показать ответ

Ответ: Для того, чтобы решить эту задачку, тебе нужно представить, как будет выглядеть фигура, если склеить развертку (соединить все грани). Правильный ответ – рисунок Б.

Головоломка №3

Эту задачу, которая называется «Трудное наследство», придумал итальянец по имени Тарталья. Он первым открыл способ решения кубического уравнения.

головоломка с лошадями

Задание: Отец оставил трем наследникам-сыновьям следующее завещание: «Поделите семнадцать лошадей, которые есть у нас в хозяйстве, в отношении 1/2 к 1/3 к 1/9». Как выполнить это условие?

Показать ответ

Ответ: Сам Тарталья предложил следующее решение.
Для того чтобы можно было разделить всех имеющихся в хозяйстве лошадей, нужно взять взаймы еще одну лошадь. После этого лошадей у братьев станет не семнадцать, а восемнадцать, и их можно будет разделить согласно завещанию: 18/2=9 лошадей одному брату; 18/3=6 лошадей другому брату, 18/9=2 лошади третьему брату.

Парадокс решения заключается в том, что после такого «деления» останется одна лишняя лошадь, которую братья вначале позаимствовали у другого владельца. Эту лошадь нужно вернуть после раздела имущества. (9+6+2=17, а не 18).

Какой хитрый этот итальянец Тарталья! Но мы-то знаем, что ты его перехитрил вместе с взрослыми. Скорей приступай к решению четвертой головоломки.

Головоломка №4

Задание: Посмотри на ряд букв и продолжи его:

«Р, Д, Т, Ч, П, Ш, С, …».

Показать ответ

Ответ: Этот ряд – простая последовательность. Перед тобой первые буквы счета (Раз, Два, Три, Четыре, Пять, Шесть, Семь). Соответственно, следующими в ряду будут буквы В (Восемь), Д (Девять) и так далее.

Устал? Предлагаем тебе немного отдохнуть и прочитать парочку интересных фактов о головоломках.
Первая книга головоломок в Европе появилась в конце IX века. Автором сборника «Задачи для развития молодого ума» стал ирландский просветитель Алкуин.

Оказывается, умение решать головоломки может пригодиться не только в повседневной жизни, но и на настоящих соревнованиях! С 1992 года проводятся чемпионаты мира по пазлспорту — это интеллектуальный вид состязаний, в котором участники решают задачи на время.

Делу – время, а потехе – час. Сегодня тебе осталось решить две головоломки. Вперед!

Головоломка №5

Задание: Тебе нужно выбрать одну из трех дверей для того, чтобы спастись. За первой дверью – страшный пожар. За второй дверью – голодный лев, который ничего не ел целый год. За третьей дверью – безумный убийца. Какую дверь ты выберешь?

головоломка с дверями

Показать ответ

Ответ: Для того чтобы выжить, нужно выбрать вторую дверь. За ней должен сидеть лев, который не ел целый год. Но это невозможно – «царь зверей» не протянет без пищи и нескольких недель, а уж год — тем более.

Ура! Мы на финишной прямой. Скорее читай осталось всего 2 головоломки.

Головоломка №6

Задание: На стоянке для автомобилей шесть мест. Одно место занято, все остальные места свободны. Каждое парковочное место имеет свой номер. Слева направо идут следующие номера: 16, 06, 68, 88, следующий номер закрывает автомобиль, 98. Какой номер у того парковочного места, на котором стоит автомобиль?

головоломка про номер парковочного места

Подсказка: схематично изобрази условие задачи на листочке – так тебе будет проще прийти к правильному ответу.
Источник

Показать ответ

Ответ: номер парковочного места – 87. На самом деле все номера идут по порядку, просто они перевернуты.

Головоломка №7

Перед тобой несколько рядов цифр:

  • 6636 / 3
  • 8118 / 4
  • 2242 / 0
  • 3316 / ?

Как ты думаешь, что должно стоять на месте знака вопроса?

Показать ответ

Ответ: На месте знака вопроса должна стоять цифра 1. Для того чтобы получить правильный ответ, тебе нужно посчитать количество кружочков в цифрах слева от линии и написать полученный результат справа.

Мы сегодня отлично позанимались, «поломали» мозги и «прокачали» логику. Теперь ты точно справишься с самыми сложными математическими задачами.

А если возникнут трудности – приходи в Умназию и продолжай развиваться вместе с нами!

blogArticleAd-image
blogArticleAd-image
Математика и логика для детей 7-13 лет
Развиваем логическое мышление через решение сюжетных математических задач в интерактивном игровом формате

«Предположим, — сказал мудрец-победитель, — на мне белый колпак. Как тогда должен вести себя мудрец, который стоит от меня по правую руку? Мудрец, стоящий от меня по правую руку, может высказать два предположения:
предположение 1 (стоящего справа) — на мне белый колпак
предположение 2 (стоящего справа) — на мне чёрный колпак
Как должен рассматривать свои два предположения мудрец стоящий справа от меня?
Рассматривая своё предположение 1, мудрец стоящий от меня справа, должен сделать вывод, что третий наш мудрец должен просто кричать: «На мне чёрный колпак!». Но он же этого не кричит. Значит, мудрец, стоящий справа от меня должен отбросить своё предположение 1.
Тогда мудрец, стоящий справа от меня должен подумать так: «Наше предположение 1 неверно, значит, верно предположение 2, как отрицание предположения 1, значит, на мне чёрный колпак!!!»
Таким образом, мудрец, стоящий справа от меня, должен кричать: «На мне чёрный колпак!!!»
Но он же этого не кричит. Значит, наше предпложение о том, что на мне белый колпак, неверно.
Значит, на мне чёрный колпак!»

Три мудреца поспорили, кто из них самый мудрый. Чтобы выяснить правду, каждый надел на голову колпак случайного цвета. Каждый мудрец видит цвета колпаков своих оппонентов, но не видит свой собственный. Побеждает тот, кто сможет определить цвет своего колпака.
Так получилось, что все трое вытянули колпаки белого цвета. Мимо проходящий прохожий сообщает им: «на одном из вас надет белый колпак». Через некоторое время самый умный из мудрецов воскликнул: «на мне белый колпак!!!».
Как он об этом догадался?

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

Как же он об этом догадался?

Эту задачу можно сформулировать для любого количества мудрецов. Давайте рассмотрим самый простой вариант.
Сидят два мудреца, на каждом надет белый колпак. Оба знают, что существует, как минимум, один колпак белого цвета. Тогда один из мудрецов рассуждает: «если бы на мне был колпак любого не белого цвета, то мой оппонент уже бы догадался, что белый колпак на нем. Но он молчит. Значит белый колпак на мне!»
Когда мудрецов трое, то один из них рассуждает так: «Если на мне колпак не белого цвета, то второй мудрец будет думать так. … (далее идут рассуждения из задачи про двух мудрецов) … один из них бы догадался, что белый колпак на нем. Но они оба молчат. Значит мое первое предположение не верно, и на мне белый колпак!»
По индукции мы можем распространить данные рассуждения на любое количество мудрецов. Далее в статье, мы будем моделировать ситуацию с тремя мудрецами.

Формулировка задачи

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

Имеется трое мудрецов. На каждом надет колпак либо черного, либо белого цвета. Каждый знает цвета своих оппонентов, но не знает свой собственный.
В первый день им сообщают, что существует, как минимум, один белый колпак. Они весь день думают и в конце дня независимо друг от друга голосуют. Они выдают один из двух возможных результатов: «я знаю свой цвет», «я не знаю свой цвет».
На второй день они знакомятся с «результатами голосования» каждого из оппонентов. Затем они снова весь день думают и в конце дня снова голосуют.
и так далее.
Вопрос. Как проголосует каждый из мудрецов в каждый из дней при различных начальных условиях?

Код

Для начала опишем наши основные типы, с которыми мы будем работать.

data Color = Black | White deriving (Show, Eq)type State = fullState :: fullState = do c1 <-  c2 <-  c3 <-  return type StateInfo a = State -> astateInfoColor :: Int -> StateInfo ColorstateInfoColor i state = state !! i stateInfoAnyWhite :: StateInfo Bool stateInfoAnyWhite state = or $ map (\c -> c == White) state 

Состояние нашего мира (какой колпак на ком надет) описывается с помощью типа State. В переменной fullState мы храним список всех возможных состояний.
Тип StateInfo описывает некоторые сведения, которые мы можем вычислить из состояния мира. Например, с помощью stateInfoColor мы можем вычленить цвет колпака для конкретного мудреца. А с помощью stateInfoAnyWhite мы вычисляем, верно ли для данного состояния утверждение, что все колпаки белые.
Далее идут более сложные конструкции.

type Knowledge = State -> (State -> Bool)knowledgeAbout :: (Eq a) => StateInfo a -> Knowledge knowledgeAbout stateInfo state = let info = stateInfo state in \s -> stateInfo s == info knowledgeIsTrue :: StateInfo Bool -> Knowledge knowledgeIsTrue si _ state = si state knowledgeAboutColor1 :: Knowledge knowledgeAboutColor1 = knowledgeAbout $ stateInfoColor 0knowledgeAboutColor2 :: Knowledge knowledgeAboutColor2 = knowledgeAbout $ stateInfoColor 1knowledgeAboutColor3 :: Knowledge knowledgeAboutColor3 = knowledgeAbout $ stateInfoColor 2

Тип Knowledge описывает некоторое «знание» о мире. Как мы увидим дальше, тип Knowledge будет по-разному комбинироваться с типом StateInfo. Это очень важный тип. Остановлюсь на нем поподробнее.
Как видно из определения Knowledge, это функция, которая из состояния мира вычисляет некоторую фильтрующую функцию. Т.е. мы передаем «настоящее» состояние мира, а она выдает некоторое подмножество возможных состояний, которые не противоречат нашим знаниям.
Например, функция knowledgeAboutColor1 представляет собой знание о цвете первого мудреца. Если я передам состояние , в котором цвет первого мудреца белый, то она вернет функцию, которая отфильтрует все состояния, в котором первый мудрец имеет другой цвет.
У нас не будет специальных структур, обозначающих мудреца. Мы будем рассуждать в терминах «знаний». Вот пример таких рассуждений.
знания первого мудреца в первый день = знание о втором цвете + знание о третьем цвете + знание о том, что один из колпаков белый
знания мудреца на следующий день = знания мудреца в предыдущий день + новые знания

Вот еще несколько вспомогательных функций в терминах Knowledge и StateInfo.

knowledgeAnd ::  -> KnowledgeknowledgeAnd list stateTrue = \s -> and $ map (\f -> f stateTrue s) list stateInfoList ::  -> StateInfo stateInfoList sil state = map (\si-> si state) sil knowledgeImply :: Knowledge -> Knowledge -> StateInfo BoolknowledgeImply knowledge1 knowledge2 state = and $ map (\(b1, b2) -> not $ and ) $ map (\s -> (knowledge1 state s, knowledge2 state s)) fullState 

Функция knowledgeAnd просто комбинирует знания в одно.
Действие функции stateInfoList очевидно из её типа.
Третья функция knowledgeImply поинтересней. Это некоторое утверждение о том, что из первого знания вытекает второе знание.
Далее пойдет код, относящийся непосредственно к задаче.

type KnowledgeList = insightList :: KnowledgeList -> StateInfo insightList knowledgeList = stateInfoList $ map knowledgeInsight knowledgeList knowledgeInsight :: (Knowledge, Knowledge) -> StateInfo BoolknowledgeInsight (currentKnowledge, targetKnowledge) = knowledgeImply currentKnowledge targetKnowledgemanStart_1 = knowledgeAnd manStart_2 = knowledgeAnd manStart_3 = knowledgeAnd knowledgeList_1 :: KnowledgeListknowledgeList_1 = insightList_1 :: StateInfo insightList_1 = insightList knowledgeList_1 

Тип KnowledgeList — это что-то вроде списка мудрецов. Для каждого мудреца у нас определена пара знаний. Первый элемент — это его текущие знания. Второй элемент — это то, что он пытается выяснить, а именно, цвет своей шляпы.
Функция knowledgeInsight вычисляет, смог ли конкретный мудрец определить свой цвет. Другими словами, вытекают ли знания, к которым он стремится, из тех знаний, которыми он обладает. Используется наша волшебная функция knowledgeImply.
Переменные manStart_1, manStart_2, manStart_3 — это начальные знания соответствующих мудрецов.
Переменная knowledgeList_1 — это список всех мудрецов на первый день (их знания).
Переменная insightList_1 — это результаты голосования в первый день.
Имея результаты голосования, мы можем составить новый список знаний мудрецов.

addNewKnowledge :: Knowledge -> KnowledgeList -> KnowledgeList addNewKnowledge newKnowledge knowledgeList = flip map knowledgeList $ \(oldKnowledge, targetKnowledge) -> (knowledgeAnd , targetKnowledge) knowledgeList_2 :: KnowledgeListknowledgeList_2 = addNewKnowledge (knowledgeAbout insightList_1) knowledgeList_1 insightList_2 :: StateInfo insightList_2 = insightList knowledgeList_2knowledgeList_3 :: KnowledgeListknowledgeList_3 = addNewKnowledge (knowledgeAbout insightList_2) knowledgeList_2 insightList_3 :: StateInfo insightList_3 = insightList knowledgeList_3

С помощью функции addNewKnowledge мы пробегаемся по всем мудрецам и добавляем им новые знания (результаты голосования за предыдущий день).
Повторяя процедуру несколько раз, получаем переменные insightList_1, insightList_2 и insightList_3 — результаты голосований за три дня.
Последний штрих — это вывести результат для конкретного начального состояния.

startState =  main = do putStr $ "day 1 result: " ++ (show $ insightList_1 startState) ++ "\n" putStr $ "day 2 result: " ++ (show $ insightList_2 startState) ++ "\n"putStr $ "day 3 result: " ++ (show $ insightList_3 startState) ++ "\n"

Результат

Для начала рассмотрим самый сложный и интересный вариант, когда все колпаки белые.

startState =  {- result:day 1 result: day 2 result: day 3 result: -}

В первые два дня мудрецы думали. А на третий день они втроем заявили, что знают свой цвет.
К сожалению, выявить «самого умного» не удалось. Мы предполагаем, что все мудрецы максимально умные и используют всю имеющуюся информацию по полной. В своих рассуждениях они все используют тот факт, что другие мудрецы тоже максимально умные.
Что будет, если один из колпаков будет черным?

startState =  {- result:day 1 result: day 2 result: day 3 result: -}

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

startState =  {- result:day 1 result: day 2 result: day 3 result: -}

Как видим, мудрец в белом колпаке на первый же день смог определить свой цвет. И это четкий сигнал для остальных мудрецов, что у них черные колпаки.

Заключение

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

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

Долго думали мудрецы, наконец один из них воскликнул: «На мне белый колпак!»

Как он решил задачу? Традиционный ответ на эту старинную задачу таков. Мудрец рассуждал: «Я вижу перед собой два белых колпака. Допустим, на мне черный колпак. Тогда любой из моих соперников должен рассуждать: «Передо мной черный и белый колпаки. Если на мне также черный, то сопернику в белом колпаке уже не стоит никакого труда решить задачу». Но никто из них все еще не догадывается о цвете своего колпака. Следовательно, на мне белый колпак». Если же принять во внимание варианты с начальным «допустим, на мне белый колпак», ход рассуждений существенно удлиняется.

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

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

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

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

Современный мудрец мог бы рассуждать так: «Судья должен быть человеком беспристрастным. Тогда он постарается поставить нас в равные условия. Но это возможно сделать только одним способом: надеть на нас по белому колпаку. Допустим, однако, что он не таков. Но не настолько же глуп, чтобы надеть два черных колпака, подсказав третьему очевидный ответ. Отбросим этот вариант как маловероятный. Вариант использования одного черного колпака оценим вероятностью в одну вторую. А вероятность того, что именно на меня он надет, равняется одной трети. Следовательно, с вероятностью не менее пяти шестых на мне должен быть белый колпак».

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

А. Коновалов, г. Ижевск, профессор
«Техника – Молодежи», №12, 1990 г.

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *