Угадать число от 0 до 100 за 7 попыток — математический трюк
Этот математический фокус не так сложен, как может показаться на первый взгляд. Более того, решение мы реализуем программно на языке Java. Приступим?
Условие
Если расписать весь процесс поэтапно, выглядит это следующим образом:
- Вы загадываете число от 0 до 100.
- Программа выводит целое число в рамках данного диапазона.
- Вы отвечаете, ваше число больше, меньше или равно тому, что вывела программа.
- Если число больше либо меньше, программа продолжает предлагать варианты.
- За 7 или менее попыток число гарантированно угадывается.
Решение
На самом деле, никакого особого секрета здесь нет, и решение строится на бинарном поиске. Это простая алгоритмическая задача, смысл которой в том, чтобы каждый раз делить оставшийся диапазон на 2. Таким образом мы с каждой попыткой вдвое сокращаем область поиска, увеличивая шансы на успех. Вот и весь математический фокус.
Допустим, первой догадкой алгоритма будет число 50, после чего становится понятно, в какую сторону исходного диапазона «шагать» дальше: это будет область 0–50 либо 51–100. Если первый вариант, то далее алгоритм предложит число 25 и так далее. Математические законы предполагают, что если число 100 делить вдвое 7 раз, мы гарантированно получим результат в районе единицы.
Можно найти число и в диапазоне побольше — от 0 до 127 или от 1 до 128. Всё потому, что 2 7 =128. Соответственно, если у нас будет 8 попыток, область можно увеличить до 256, если 9 — до 512 и т. д. По этому же принципу работают бинарные деревья.
Но решать всё вручную с калькулятором наперевес — прошлый век. Давайте подключим код и посмотрим, как с этим справится программа.
Решение кодом
Воспроизведём решение с помощью Java без использования графического интерфейса. При желании всегда можно подключить Swing или JavaFX.
Для начала определимся с переменными, которые нам потребуются:
Поскольку мы будем работать с терминалом, подключим слушатель событий с помощью класса Scanner:
И объявим переменную слушателя:
Понравилась задачка? Держите ещё один математический фокус в виде гипотезы Коллатца.
Пример разработки игры на Python: угадай число
В детстве вы наверно играли в игру, где нужно было угадать число. И вы угадывали, а вам говорили «меньше», «больше». И так пока вы не угадаете. Такую игру можно сделать на Python. Код получается довольно простым.
Не смотря на кажущуюся простоту игра довольно интересна. Особенно если ограничить количество попыток. Вот например, что бы угадать число от 1 до 10 достаточно 4 попыток, а для нахождения от 1 до 100 достаточно 7 попыток. Вам лишь нужно применить метод половинного деления.
Как быстро найти загаданное число
Я загадал случайное число от 1 до 10. Как быстро вы сможете отгадать его? Кому-то повезёт с первой попытки. Кто угодно уж точно отгадает с десятой. В среднем у людей будет получаться за 5 попыток. А как можно точно сделать это быстрее всего? Чтобы это было проще, после неправильного ответа я буду говорить вам, большее или меньшее число я загадал

Правильный ответ — за 4 попытки. Не очень впечатляет: лишь на 1 меньше 50%. Но что если я скажу вам, что я отгадаю 1 число из 100 всего за 7 попыток? И одно из тысячи всего за 10
Знание о том, больше или меньше загаданное число нашей попытки очень сильно облегчает задачу. Например, мы можем предположить число 9. Вероятность попасть в любое число одинакова, поэтому девятка ничем не хуже других. Если она и была ответом, мы победили, а если нет, услышав «меньше» мы будем знать, что и 10 не является загаданным числом! Так можно пройти в 2 раза меньше чисел и мы уже улучшим средний результат
Но есть ещё более эффективный способ. Мы можем взять число из середины последовательности. Если не угадаем, у нас тогда останется ещё половина вариантов, это верно. Но мы избавимся и от целой другой половины! В случае 10 это не так важно, но если нам загадали число от 1 до 100, мы даже неправильным предположением убираем 50 вариантов!
С оставшейся половиной можно проделать то же самое. Давайте посмотрим, как это работает на примере. В начале я загадал число 8. Оно отгадывается всего за 2 шага — это неинтересно. Давайте разберём на примере от 1 до 100. На этот раз я сразу скажу ответ, чтобы вы следили за его поиском: это число 43
Мы управились всего за 4 шага! При случайном угадывании нам потребовалось бы 50. Попробуйте сами так «отгадать» любое число из 1000 — вам скорее всего понадобится даже меньше 10 шагов
4, 7, 10 — почему именно эти числа? Вы могли бы подумать, что я просто прибавляю 3, но это неверно: 1 из 10000 точно отгадывается уже за 14 шагов
В нашем алгоритме мы каждый раз делим оставшийся интервал на 2. Давайте попробуем решить обратную задачу: через сколько умножений на 2 мы достигнем определённой длины? 2*2*2 = 8 — это всё ещё не равно 10. Но умножив 2 на себя 4 раза — другими словами, возведя 2 в 4 степень, мы получим 16, что явно больше 10. Значит, можно гарантированно угадать число за 4 шага! Математическая операция, которая позволит это посчитать — обратная к возведению в степень: логарифм по основанию 2. Его функция возрастает очень медленно:

Степень двойки растёт очень быстро. С этим связаны известные факты: например, почти невозможно сложить лист бумаги пополам больше 7 раз, что неудивительно — в нём будет уже 128 слоёв! Рвать листы бумаги пополам также с определённого момента становится очень сложно

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

Если пронумеровать каждый атом на нашей планете и попросить найти один определённый, это можно сделать всего лишь за 167 раз! У числа атомов на нашей планете, к слову, 50 нулей
Такой алгоритм поиска широко используется в программировании — там, где количество шагов и время критически важно. Его также можно несколько улучшить. Наша последовательность расположена по возрастанию и в центре находится число 5 (если округлять середину вниз). Но если число загадывает человек, он с большей вероятностью загадает 7. Если расположить его в середине, часто мы будем попадать с первого раза! Также удобно расположив другие числа, можно ещё больше улучшить алгоритм

Если интересны посты про образование и науку, заглядывайте ко мне в группу ВК и телеграм-канал

3.3K постов 20.4K подписчик
Правила сообщества
Публиковать могут пользователи с любым рейтингом. Однако мы хотим, чтобы соблюдались следующие условия:
ДЛЯ АВТОРОВ:
Приветствуются:
-уважение к читателю и открытость
Не рекомендуются:
-публикация недостоверной информации
ДЛЯ ЧИТАТЕЛЕЙ:
Приветствуются:
-конструктивные дискуссии на тему постов
Не рекомендуются:
-личные оскорбления и провокации
-неподкрепленные фактами утверждения
В этом сообществе мы все союзники — мы все хотим учиться! 🙂
Красиво и понятно рассказано о достаточно тривиальных для айтишника вещах. С удовольствием прочёл. Только вот всколыхнулась старая загадка, над которой я размышлял с тех пор, как услышал эту притчу. В итоге шахматиста всё же грохнули или нет? Типа «нехер выйобываться» или «ты нам тут своей математикой моск не еби»?
Бинарный поиск?
Этому в школе на информатике ещё не учат?
Напомните, как это всё связано с простыми иттерациями? А то боюсь поумничать, но ошибиться.

Как устроена музыкальная гармония. Пространство кратностей – математик Роман Олейников | Научпоп
Что общего между фортепианной клавиатурой и построчной развёрткой телевизора? 😉 Сколько измерений можно выделить в музыкальной гармонии и что это за измерения? Что такое пространство кратностей и как оно помогает понимать и создавать новую музыку? Почему для построения музыкальной гармонии важны простые числа и что такое микрохроматика? Рассказывает Роман Олейников, математик, музыкальный теоретик, соавтор канала Пространство музыки (Science 4 Music), сотрудник лаборатории биомеханических систем Института машиноведения РАН.

Как мы разрабатывали игру про иммунитет
Видели когда-нибудь залипательную гифку, как лимфоцит охотится за бактерией?

Мы разработали игру Цунамити, в которой это можно наблюдать постоянно, сражаясь с инфекциями на стороне иммунитета! Помимо бактерий бороться придётся с вирусами и гельминтами, а также можно наглядно увидеть, как работают вакцины и вирусы. У разработчиков биологическое образование, поэтому мы следили за тем, чтобы игра, пусть и упрощённо, но корректно отражала, как работает иммунитет
Ниже будет рассказ о том, как мы разрабатывали игру. Но я буду более чем счастлив, если вы не будете читать этот текст, а просто попробуете поиграть 🙂 Делитесь рекордами в комментариях! Мой рекорд – 61 волна, почти дотянул до пенсионного возраста

Я с детства любил игры жанра tower defence. Изучая в университете иммунологию, мне показалось, что было бы интересно сделать игру в таком жанре о том, как работает иммунитет. Одни клетки были бы башнями дальнего действия и стреляли бы антителами в бактерии, другие – били бы заражённые вирусами клетки в «ближнем бою». Во время пандемии COVID-19 эта идея развивалась, но на разработку не было сил
Когда разрабатывать игру про иммунитет?

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

А теперь попробуйте вспомнить это завтра, на контрольной через месяц и на экзамене через пол года. Каждую неделю добавляя к списку новые схемы, разумеется. Получается это с трудом
Но в то же время спросите у любого опытного дотера с кем лучше стоять на линии Тини – он ответит без запинки. Я не играю в Доту уже 5 лет, но до сих пор помню сотни героев (и их фразы), предметов, способностей и кучу взаимодействий. Почему это запоминается так хорошо, а иммунология так плохо? Исследования говорят, что дело в геймификации. Информация в игровой форме запоминается гораздо лучше, будь то фэнтезийные герои или медицинские термины
Поэтому мы с биоинформатиком Дмитрием Бибой решили сделать интересную и образовательную игру об иммунологии. Подробнее о том, на что мы делали упор и что в игре передано с упрощениями, можно почитать в статье на Биомолекуле
В процессе обсуждения от жанра tower defence мы перешли к более свободной симуляции движения клеток. А дизайнер Анастасия Трошина подарила игре потрясающий дизайн в японском стиле
Во время разработки игра выглядела так

Игра написана на JavaScript без специальных библиотек. Код можно найти здесь (но нам нужно бы привести его в нормальное состояние :D). Мы никогда прежде не занимались геймдевом всерьёз, поэтому неудачных решений там хватает. Но опыт интереснейший: всегда мечтал создать игру. А самое главное – в ней действительно интересно проводить время. Это сильно мешало при разработке: хотел поправить пару деталей и залип на пол часа, пытаясь побить предыдущий рекорд
С нетерпением жду отзыва пикабушников! Игра несомненно не идеальна и мы будем рады собрать отзывы об улучшениях, чтобы её доработать

«Математика» калейдоскопа | Лекции по математике – математик Николай Андреев | Научпоп
Как устроена игрушка-калейдоскоп с математической точки зрения? Как сделать калейдоскоп из двух зеркал? На каких геометрических фигурах можно строить калейдоскопы и что произойдёт, если попробовать использовать что-то другое? В чём заключается свойство калейдоскопичности и какой раздел математики описывает связанные с ним закономерности? Рассказывает Николай Андреев, кандидат физико-математических наук, заведующий лабораторией популяризации и пропаганды математики Математического института им. В. А. Стеклова РАН.

Победители конкурса «Лучшие иллюзии 2021 года»
C финалистами ежегодного конкурса лучших иллюзий за 2020 год вы можете ознакомится в нашей прошлой статье. Там же пару абзацев про сам конкурс. А теперь, в ожидании публикации финалистов 2022 года, представляем вашему вниманию тройку победителей 2021 года.
Первое место. Призрачная королева Мэтти Притчарда.
Главной иллюзией в этом видео является шахматная доска и ее отражение в зеркале. Фантомная фигура Белой Королевы, которая появляется только как отражение, оставляет загадочную пустую клетку на переднем плане. Иллюзия достигается за счет создания замаскированной “палатки” определенной формы, расцветки и узора, которая скрывает королеву с одного угла обзора.
Второе место. Иллюзия раздевалки Майкла А. Коэна.
Иллюзия раздевалки — это пример «слепоты выпускников к изменениям», феномена, при котором наблюдатели не в состоянии замечать изменения в окружающем их мире, когда эти изменения происходят постепенно. Практически во всех предшествующих случаях слепота к постепенным изменениям изучается путем изменения отдельных объектов (например, исчезновение дымохода или изменение выражения лица). Пытаясь подготовить новый пример этого явления для студентов, Майкл понял, что может поменять десятки предметов незаметно для наблюдателей.
Третье место. Иллюзия двойного кольца Давэй Бая и Брента Стрикленда.
Когда два бистабильных кольца представляются отдельно, кажется, что они движутся, вращаясь на 360°. Однако, если одни и те же кольца частично перекрываются, кажется, что они вращаются со стабильными поворотами на 180°, из стороны в сторону, как будто они избегают прохождения друг через друга. Примечательно, что когда в одном кольце есть отверстия, через которое другое кольцо может пройти, нестабильное восприятие 360° восстанавливается. Во всех трех случаях кольца совершают одно и то же движение, но наша зрительная система по-разному интерпретирует стимулы в зависимости от того, могут ли кольца пересекаться друг с другом.

Визуализация нервной системы мыши при помощи антител выглядит как обложка музыкального альбома

Но идея помещать научные иллюстрации на обложки не нова. Muse использовали изображение связей человеческого мозга от Human Connectome Project для своего альбома The 2nd Law


90 лет со дня рождения Игоря Васильевича Поттосина

История компьютерных технологий помнит многих героев, но некоторые из них остаются в тени более громких и известных имен. Один из таких людей — Игорь Васильевич Поттосин, советский и российский ученый, внесший огромный вклад в развитие вычислительной математики и математического программирования. Сегодня ему исполнилось бы 90 лет.
Игорь Васильевич Поттосин родился 21 февраля 1933 года в селе Кинель-Черкассы Куйбышевской (ныне — Самарской) области. Окончив с золотой медалью школу в 1950 году, Игорь Васильевич поступил на специальное отделение механико-математического факультета Томского Государственного Университета, где готовили специалистов по направлению «баллистика» для нужд Министерства обороны СССР.
Окончив институт в 1955 году, молодой специалист попал по распределению в Москву, в созданный буквально за год до этого первый советский вычислительный центр Министерства обороны СССР, ЦНИИ-27. Этот военный научно-исследовательский институт появился на свет благодаря инициативе известного ученого, создателя ВЦ-1 и основоположника советской «военной информатики» Анатолия Ивановича Китова. Именно в ЦНИИ-27 испытывали и осваивали первые образцы советских электронно-вычислительных машин, разрабатывали языки программирования и писали программное обеспечение для советских спутников и межпланетных автоматических космических станций, а также для выполнения первых космических полетов с человеком на борту.

В 1958 году один из первопроходцев советской кибернетики Андрей Петрович Ершов начал формировать в Москве отдел программирования при Институте математики СО АН СССР, куда пригласил работать Игоря Васильевича Поттосина. Тот согласился, однако в тот же период институт переезжал из Москвы в Академгородок Новосибирска, и сам Андрей Петрович в силу обстоятельств не мог приехать туда вместе с другими сотрудниками. Поэтому 1 ноября 1958 года руководителем отдела программирования стал Игорь Васильевич Поттосин.
Одна из важнейших работ, в которых он принимал непосредственное участие — создание системы автоматизации программирования «Альфа», опиравшейся на язык Алгол. Началом разработки «Альфа-транслятора» считается выступление А.П. Ершова на состоявшейся в 1959 году Всесоюзной конференции по вычислительной математике с докладом «Какой должна быть следующая программирующая программа?». Именно в нем была сформулирована идея транслятора, «программирующей программы», способной работать с платформенно-независимым языком высокого уровня. С помощью этого инструмента разработчики планировали создавать универсальное ПО, пригодное для использования на ЭВМ разных типов и разных производителей. В своих дневниках Ершов писал: «было бы очень здорово разработать этот язык совершенно независимым от конкретных машин, давая привязку к той или иной машине в виде некоторых коротких общих указаний, касающихся представления чисел в машине и характера выполнения операций». То, что сейчас кажется нам совершенно естественным — существование языков высокого уровня, на которых можно писать приложения для любого «железа», — в 1959 году еще считалось чем-то фантастическим.

Разрабатываемый в Новосибирском Академгородке «входной язык» высокого уровня, получивший условное наименование «сибирский», создавался в качестве универсального средства программирования для решения научных задач. Когда в 1960 году на свет появился Алгол-60, советские ученые с удивлением обнаружили, что его структура во многом напоминает проектируемый ими «сибирский» язык. Было принято решение унифицировать синтаксис этого языка с Алголом: получившийся «гибрид» получил наименование «язык Альфа», а для его компиляции в машинный код применялся «альфа-транслятор», созданием которого занимался Игорь Поттосин.
Именно в Альфа-языке появилась поддержка операций с комплексными числами, язык позволял создавать многомерные массивы, а также использовать переменные, с помощью которых их можно было описывать. Иными словами, «Альфа» имела целый ряд улучшений по сравнению с «классическим» Алголом-60. В 1969 году Игорь Васильевич Поттосин защитил кандидатскую диссертацию на основе своих разработок, а они, в свою очередь, легли в фундамент дальнейшего развития транслятора.
В начале 70-х Поттосин возглавил лабораторию системного программирования в институте математики СО АН СССР, где создавались многопользовательские «системы коллективного использования ЭВМ», а также «универсальный оптимизатор БЕТА», ставший дальнейшим развитием разработанного в 60-х транслятора. Эту должность он занимал до 1990 года, в котором защитил докторскую диссертацию.
Параллельно с работой в Институте Игорь Васильевич Поттосин преподавал в Новосибирском государственном Университете, вырастив несколько поколений выдающихся советских программистов.
Игорь Васильевич скончался 15 декабря 2001 года. На протяжении своей карьеры Поттосин опубликовал 10 научных трудов и несколько монографий, он был удостоен звания Заслуженный деятель науки РФ и награжден Премией Совета Министров СССР за вклад в развитие советской информатики и вычислительной техники. Выпускники Новосибирского университета до сих пор вспоминают его с теплотой — влияние его научных работ на развитие трансляторов языков высокого уровня, вычислительной математики математического программирования будет ощущаться еще долгие годы.
Подпишись на наш блог, чтобы не пропустить новые интересные посты!

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

Шахматы — удобный объект исследований в области искусственного интеллекта. Игра проста по структуре, подчинена основной задаче (поставить мат противнику) и не допускает вольной трактовки правил – следовательно, классифицируется как «логическая». Именно на шахматах испытывались многие направления искусственного интеллекта. Например, методики оптимизации перебора (уход от «комбинаторного взрыва» при просчёте вариантов вперёд на несколько ходов), логическое программирование, распознавание образов и экспертные системы.
В этой игре воплотился, известный нам по фантастическим фильмам и книгам, сюжет: человек против машины, плоть и кровь против микросхемы, эмоция против алгоритма. Разумеется, в противостоянии гроссмейстеров и компьютерных программ не наблюдалось голливудского размаха, да и ни о какой угрозе речи не шло, напротив, развитие искусственного интеллекта в наших реалиях одна из составляющих прогресса. И всё же нужно признать, что сражения на доске происходили в лучших традициях драматургии. Об этом сегодня и поговорим, доставайте блокноты и записывайте ходы.
❯ Истоки
Шахматы зародились в Индии полторы тысячи лет назад. Была там такая игра – чатуранга, её принято считать первым предком шахмат. В дальнейшем чатуранга попала в соседние с Индией страны, преобразилась там и сменила название. На Арабском Востоке — шатрандж, в Азии: сянци, макрук и сёги. От арабов шатрандж попал в Европу и Африку. Там (в Европе, не в Африке) игра продолжала меняться вплоть до XV века — тогда-то и сложились классические правила шахмат. А в XIX веке, когда стали проводиться международные турниры, свод правил был официально стандартизирован.
Влияние технологий шахматный мир впервые ощутил во второй половине 18-го века, когда венгерский барон Вольфганг фон Кемпелен изобрёл своего «Механического Турка». Влияние, надо признать, оказалось декоративным. Автаматон Кемплена представлял собой не столько шахматного робота, сколько искусный фокус. Пыль в глаза, конечно, бросили эффектно. Только представьте: «Механический Турок» — машина со сложной системой рычагов и маятников, детище прогресса и, одновременно с тем, настоящее чудо для своего времени. Механизм, который обыгрывает опытных игроков, благодаря каким-то неизведанным граням инженерного гения Вольфгана фон Кемпелена. Это потрясало, завораживало, и это, естественно, был чистой воды трюк. Да, машина действительно была хитро устроена, но не для того, чтобы анализировать и осуществлять ходы, а для того, чтобы прятать внутри живого шахматиста. Вот и вся технологичность. Красивое и хитрое устройство, но, разумеется, о противостоянии человека и машины в данном случае говорить бессмысленно.

Мастерство «Механического Турка» зависело лишь от мастерства спрятанного в нём игрока. Иными словами – посади внутрь сильнейшего шахматиста эпохи и можно смело говорить, что Турок способен победить любого, посади зелёного новичка, и партия против опытного соперника закончится очень быстро. К слову, в 1868 году Чарльз Хупер представил автомат Ajeeb — в котором тоже был спрятан человек.
❯ «Бумажная машина Тьюринга»
Хитрые «шахматные шкатулки» уступили цифровым технологиям в середине XX века. Так в 1951 году Алан Тьюринг подарил миру алгоритм Turochamp. В теории он позволял машине играть в шахматы, однако всё не так просто. Связующим звеном между механизмом и игральной доской вновь выступал человек. А именовался этот нонсенс — «бумажная машина Тьюринга». В чём же суть? Ведущая роль отводится человеку, при этом он не обязан уметь играть в шахматы, даже правил может не знать. Ему нужно просто следовать алгоритму, основанном на информации о ходе соперника. Например, «при ходе противника N передвиньте ферзя на B7». До наших дней даже дошла запись партии, где «бумажная машина Тьюринга» уступила компаньону самого математика. Можно назвать — Turochamp вариацией «китайской комнаты» с шахматным уклоном. В работе же программе не посчастливилось принять участие.

Примерно в то же время математик, инженер, создатель «теории информации» Клод Шеннон опубликовал статью «Программирование компьютера для игры в шахматы». В ней говорилось следующее:
«Шахматная машина идеальна, чтобы с нее начать, поскольку (1) задача четко определяется допустимыми операциями (ходы) и конечной целью (мат); (2) она не слишком проста, чтобы быть тривиальной, и не слишком сложна для получения удовлетворительного решения; (3) считают, что шахматы требуют «мышления» для искусной игры, решение этой задачи приведет нас либо к тому, что мы будем восхищаться способностями механизированного мышления, либо к ограничению нашей концепции «мышления»; (4) дискретная структура шахмат хорошо укладывается в цифровую природу современных компьютеров».
Помимо этого Шеннон отметил существование в шахматах лучшего хода и практическую невозможность его нахождения.
❯ Дальнейшее развитие
1952 год ознаменовал появление программы для игры без участия слонов — шесть клеток вместо восьми. К разработке подошли со всей серьёзностью — она была создана в ядерной лаборатории Лос-Аламоса на компьютере MANIAC I c тактовой частотой 11 кГц. С этой программой, к слову, связан одни любопытней эксперимент. Произвели две партии: в одной компьютеру противостоял умелый шахматист, в другой женщина, которая недавно освоила правила и не имела игрового опыта. Первая партия длилась целых 10 часов, в результате напряжённой борьбы сильнее оказался шахматист. Во второй машина одолела соперницу всего на 23-м ходу. Сейчас нам может показаться, что результат эксперимента не представляет ничего выдающегося, однако в то время – это был настоящий прорыв для мира программирования.
Вскоре на смену программе для игры 6х6 пришла программа, использующая все фигуры. Она была разработана в 1957 году Алексом Бернштейном. А уже в 1958 году Аллен Ньюэлл, Клифф Шоу и Герберт Саймон создали алгоритм, влияющий на дерево поиска. Назвали его «альфа-бета-отсечение». Позже рассмотрим и само «дерево» и алгоритм подробнее, чтобы понимать принцип функционирования.
В 1974 году стартовал Чемпионат мира по шахматам среди компьютерных программ. Победа в нём досталась «Каисса», созданной в Институте проблем управления АН СССР. Всего Чемпионат посетило тринадцать машин из восьми стран.
Уровня элитных игроков компьютеры достигли только в 1983 году. Речь идёт о Belle, созданном Джо Кондоном и Кеном Томпсоном. Его проектировали специально для игры в шахматы, не отвлекаясь на другие возможные сферы применения. Компьютер имел официальный рейтинг – 2250, что делало его настоящим флагманом среди шахматных машин того времени.
❯ Первые столкновения
В этом разделе стоит вспомнить международного гроссмейстера Дэвид Леви и его пари. На каких условиях оно заключалось? Всё просто — ни один компьютер не должен был обыграть Леви в течение следующих десяти лет. Что в результате? С 1968 года вплоть до 1978 – его действительно не смогли превзойти. Леви победил программу Chess 4.7 (сильнейшую на тот момент), но шахматные машины не стояли на месте. В 1989 году программа Deep Thought обыграла Леви. Открытым оставался лишь один вопрос: когда искусственный интеллект достигнет самой вершины шахматного мира — титула чемпиона?
❯ На сцене Deep Blue

В феврале 1996 года случилось знаковое противостояние — Гарри Каспаров сразился с суперкомпьютером Deep Blue. Первую партию взяла машина. У бывалых профессионалов и зелёных новичков перехватило дыхание от этого факта. Дело в том, что подобного ещё ни разу не случалось в турнирных условиях. Deep Blue вычислял 50 миллиардов позиций каждые три минуты, в нём находилось 200 процессоров – против чемпиона выступил настоящий шахматный терминатор. Однако в полном матче победа всё же досталось Каспарову. Он изменил стиль игры, что позволило ему выиграть три следующие партии, а ещё две перевести вничью.
Но его абсолютное чемпионство продлилось не долго. В мае 1997 года Deep Blue вернулся в своей новой, усовершенствованной форме. Со счётом 3,5-2,5 Каспарову было нанесено поражение. А отыграться ему уже не позволили. Создатели разобрали Deep Blue сразу по окончанию игры.
Существует документальный фильм «Матч окончен: Каспаров и машина», в котором не только подробно рассматриваются игры, но и фигурируют упрёки Каспарова в сторону IBM (разработчики Deep Blue) после поражения. А именно механическое вычисление закономерностей и намеренная адаптация компьютера под его стиль игры.
❯ Программа выходит на недосягаемый уровень
Преимущество человечества на шахматной доске постепенно таяло, новые программы появлялись одна за другой и мгновенно навязывали конкуренцию. Так, например, специальный шахматный программно-аппаратный комплекс с 64 процессорами Hydra в 2005 году – не просто победил Майкла Адамса (седьмое место в мире). Нет, Hydra разгромил его. В матче из шести партий преимущество машины оказалось несравненным — 5,5 против 0,5. После этой игры пошли разговоры о том, что компьютер наконец вышел на недосягаемый для человека уровень.
Однако подобная тенденция проявлялась ещё раньше. В 2000 году коммерческие шахматные программы Junior и Fritz перевели в ничью матчи против Гарри Каспарова и Владимира Крамника – предыдущего и действующего чемпионов мира. Каспарова так вообще собрал целую серию подобных сценариев. Против программы Junior в Нью-Йорке результат оказался 3-3, против X3D Fritz – 2-2.
❯ Внутренняя кухня
Поговорим немного о том, что творится в «голове» у машины. Шахматные программы рассматривают игру в виде условного «ветвистого» или вариативного дерева. Все позиции, которые возникнут после множества допустимых ходов, оцениваются, следом оцениваются сами ходы. Анализ продолжается до нахождения конечной позиции (пат, мат), либо достижения максимальной глубины поиска. После оценки выбирается лучшая стратегия. Вычислительные способности компьютера кажутся недосягаемыми для человека. Так среднее количество возможных ходов в каждой позиции равняется примерно тридцати пяти. Для полного анализа четырёх полуходов (это два хода от каждого игрока) исследуется около полутора миллиона возможностей, для шести — два миллиарда.
А сейчас, как заявлялось ранее, коснёмся альфа-бета-отсечения. Древо поиска необходимо «обрезать», то есть ограничивать количество лишних ходов. Вот для этого обычно и применяется «альфа-бета». В нём позиции, получившие меньшую оценку в сравнении с уже оцененными — просто не допускаются.
Приблизительная программная реализация выглядит так:

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

Но и эта фора в скором времени увеличится. Последние 5 лет рейтинг компьютера продолжает расти, а вот у человека изменений не наблюдается. Это, разумеется, не значит, что компьютеры серьёзно угрожают шахматному спорту. Да, есть проблема читинга и заучивания чуть ли не целых партий наизусть благодаря программным решениям, но это всё же что-то из разряда допинга, запретного приёма. Шахматы в своём чистом проявлении никуда не денутся, техническое изучение напротив способно помочь в наработке навыка, открыть новые пути и решения. Шахматы останутся теми же, просто люди и машины начнут (или уже начинают) играть в разных измерениях.
❯ Как дела обстоят сейчас?
В данный момент в шахматном мире царствует эпоха нейронных сетей. Лидирующую позицию занимает движок Stockfish, за ним следуют: Komodo Dragon 2.6, Fat Fritz 2 и LeelaChessZero (LC0).
В чём их преимущество? Нейронные сети намного гибче старых программ, они могут распознавать позиции на доске под разными углами, а это выливается в лучший захват пространства и контроль игры. Дело в том, что преимущество человека над машиной заключается как раз в ставке на долгоиграющие манёвры (такой сюрприз может просто быть не распознан программой), подобную стратегию, к слову, использовал Каспаров в том самом легендарном матче против Deep Blue. Но нейронные сети видят куда больше, они адаптируются и совершенствуются в процессе игры. LC0, например, изначально знала только основные правила передвижения фигур, но самообучилась, после того как провела бесчисленные тысячи и десятки тысяч партий против самой себя же. Стоит признать, что человеку вряд ли удастся когда-нибудь вновь сравняться с машинами. LC0, если хотите, настоящий терминатор новейшего поколения, готовый подстроиться к любому игроку, а после уничтожить его на доске. И это не финальная глава, темпы развития шахматных программ потрясают. Сама игра с её упором на логику, простором для математических решений – стала идеальным полем для искусственного интеллекта с его точностью и прагматичностью. Можно сказать, что в этих шестидесяти четырёх клетках – машина способна видеть будущее.

Подпишись на наш блог, чтобы не пропустить новые интересные посты!

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

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

Вот такое забавное сочетание биологии и лингвистики. Казалось бы, есть много нереалистичных для животных поступков: лошадь могла бы танцевать, жонглировать или летать. Но в качестве поговорки закрепился именно биологический факт
Советские короткометражки "Геометрия для малышей". Просто чудо!
На советском телевидении выходило много образовательных программ и телефильмов для младшего поколения — дошкольников и школьников, которые раскрывали молодому поколению основы различных наук. Причём всегда — в доступной форме, с юмором, наглядно и очень увлекательно! Вот и цикл короткометражных телефильмов «Геометрия для малышей» в лёгкой игровой форме, на простых примерах объясняет малышам основные понятия геометрии, потому что в действительности она присутствует повсеместно.
Предлагаемый вам фильм цикла состоит из двух игровых сюжетов. «История с ромбами» знакомит не только с ромбами, но и с подобием и равенством фигур, а также с устройством пантографа – прибора, с помощью которого можно скопировать изображение и нарисовать равные фигуры. «Кино и зеркала» рассказывает о симметрии и о применении зеркал в киносъёмке.
Новосибирсктелефильм, 1983 г. Источник: канал на YouTube «Советские фильмы, спектакли и телепередачи. Гостелерадиофонд», https://www.youtube.com/channel/UC7FDlGcSUqeSZHh1LRMM1OQ?sub_confirmation=1

Бабочка Лоренца: на пути к новой науке

Что может быть скучнее прогноза погоды? На первый взгляд кажется, что нет более далекой от прорывных научных открытий сферы, чем метеорология. Однако примерно 60 лет назад именно наука о погоде дала жизнь новой, странной и прекрасной области знаний – теории хаоса.
Массачусетский технологический институт, Кембридж, США, зима, 1961 год.

Знакомьтесь, это Эдвард Лоренц – слегка чудаковатый преподаватель метеорологии, инструктор инженерной метеослужбы ВВС США. Сейчас он занят тем, что с помощью огромного компьютера, размером с его кабинет, моделирует изменение ветра и температуры по его недавно выведенным уравнениям. Все это – часть его большого многолетнего исследования, но на самом деле вряд ли Лоренц предполагал, что будет заниматься прогнозированием погоды, а тем более посвятит этому свою жизнь. И хотя в детстве он действительно очень любил наблюдать за природой и даже вел дневник наблюдений, гораздо сильнее была его любовь к математике.
«Сегодня днем погода ожидается солнечная и спокойная, температура оптимальна для семейного счастья, ветер карьерного успеха 3м/с»
Как это часто бывает, увлечение науками у Эдварда пошло от родителей: игры с числами и головоломки с папой – специалистом по машиностроению, паззлы и шахматы с мамой – школьным учителем. Добавьте сюда регулярные семейные прогулки, поездки на природу (которые он просто обожал) и любовь, и вы получите идеальный рецепт для воспитания гения без детских травм. Так вот, Эдвард Лоренц еще в школе определился, что его работа будет связана с математикой.
Он закончил бакалавриат в Дартмутском колледже (1938) и магистратуру в Гарварде (1940) по математике, планируя и дальше углубляться в свою специальность, но времена были слишком неспокойные. Лоренц уже начал работу над кандидатской, когда в 1942 году его поставили перед выбором: либо он попадает в призыв, либо проходит обучение на военного метеоролога, и, к счастью для науки, он выбрал последнее.
Вопреки ожиданиям, восьмимесячный курс для подготовки кадров в ВВС США в его родном Массачусетсе не был лишь слепым натаскиваем рядовых синоптиков: здесь обучали как серьезным научным методам изучения погоды, так и обычным прямым расчетам. Здесь же Лоренц впервые узнал, насколько далеки друг от друга могут быть теория и практика — метеорология и прогнозирование. Оказалось, что несмотря на глубокое понимание природных процессов, метеоролог практически ничем не мог помочь улучшить результаты прогнозов. Синоптики применяли старые проверенные методы, изучая математические аспекты природных процессов скорее из «джентельменских» соображений, и эта странная дихотомия теории погоды и ее практики сильно заинтересовала Лоренца.
После курсов Эду и еще четырем обучающимся предложили остаться на этой же программе, но уже в качестве инструктора, и, пожалуй, лучшей работы ему было не найти. В следующие годы он постепенно забросил свою первую тему для кандидатской и начал активно изучать метеорологию в родном Массачусетском технологическом, периодически выполняя задания по указу военных. В 1948-м он получает степень кандидата, а несколько месяцев спустя женится на Джейн Лобан, работающей ассистенткой в университете, в браке с которой у него после родятся трое детей. Так, наконец, сформировались три главных опоры его жизни: природа (он был заядлым походником), наука и семья – то, что составляло основу счастья американца Эдварда Нортона Лоренца.

С женой Джейн Лобан

Одно из любимых занятий Эда — походы в горы. 2003 г.

Лекция для голландских студентов. 2005 г.
Вернемся ненадолго назад в будущее, в зимний день 1961 года, где мы застали 44-летнего Лоренца, сидящего за рабочим местом и вглядывающегося в графики на компьютере. Ему нужно более детально рассмотреть некоторые конкретные решения, так что он останавливает программу, вносит ранее полученные данные вручную и вновь запускает программу не с начала, а с середины. Компьютеры старые и невыносимо медлительные по нашим меркам, так что пока железный мозг делает свою работу, Лоренц решает сходить выпить чашечку кофе.
Вернувшись примерно через час, он с удивлением обнаруживает, что новый график не похож на сделанный ранее, хотя по логике они должны совпадать, ведь ни данные, ни программа не менялись. Что это, сбой программы или что-то более существенное?
Этот яркий момент в биографии Лоренца часто выделяют как поворотный, и он действительно очень важен – именно здесь Лоренц заметил и осознал то, чего не замечали другие, то, что позднее назовут эффектом бабочки [1].
«К вечеру ожидается резкое ухудшение погодных условий, порывы ветра погрешностей до 20 м/с, возможны хаотичные осадки»
«Физикам нравится думать, будто все, что надо сделать, сводится к фразе: вот начальные условия, что случится дальше?» — Ричард Фейнман
Как часто вы ругали синоптиков за то, что вместо поездки на дачку в солнечные по прогнозу выходные просидели в пледе под звуки беспощадного ливня? Мы живем в 21-м веке, разве так сложно составить точный прогноз?
Погода, какой бы разносторонней она ни была, все-таки подчиняется обычным законам физики, и, как думали раньше, для ее точного расчета людям просто не хватает вычислительных мощностей. Появление компьютера стало настоящим подарком метеорологам: теперь было достаточно лишь запрограммировать машину на решение уравнений циркуляции воздуха и воды с учетом актуальных данных метеостанций, чтобы предсказать изменения в атмосфере планеты. Неточность или неполнота данных, казалось, должна была компенсироваться их количеством, ведь в каждом крупном населенном пункте есть свой гидрометцентр, в общем, планы были грандиозными. Немного усилий, небольших упрощений и подгона данных, и вот мы уже можем планировать свой летний отпуск за пару месяцев заранее, так, чтобы захватить самые теплые деньки.
Такие рассуждения на самом деле не лишены логики. Основная идея науки состоит в построении идеальных моделей, которые, несмотря на некоторые допущения и несоответствие реальным процессам, дают достаточно аккуратные результаты. Мы не можем идеально точно рассчитать движение планет и спутников, так как учитывать влияние всех тел нашей системы слишком сложно. Но несмотря на то, что такая задача до сих пор не имеет полного решения, это не мешает людям с минимальной погрешностью высаживать космические аппараты на поверхность Луны или Марса.
В общем, после появления компьютера в сфере прогнозирования царил неоправданный оптимизм, и Лоренц был как раз одним из тех, кто имел достаточный математический опыт, чтобы разобрать погоду на ограниченное количество уравнений и составить ее первую примитивную компьютерную модель.
Тогда, в 1961-м, Эдвард Лоренц быстро понял, что проблема разных графиков погоды крылась не в неисправном компьютере. В самом начале они были удивительно похожи, но расхождение усиливалось со временем так, что конечные результаты были совсем разными. Дело было в том, что программа выводила данные, округляя их до трех знаков после запятой, тогда как на самом деле в памяти у нее хранились значения с шестью знаками после запятой. Лоренц, запустивший программу с середины, ввел чуть менее точные, укороченные числа, посчитав, что небольшая погрешность не сыграет роли, однако на этот раз малые отклонения стали катастрофичными.

Изображение двух графиков, полученных Лоренцом в 1961г.
«Внимание, штормовое предупреждение: возможны частичные разрушения традиционных научных взглядов, и сильные возмущения авторитетных ученых. Убедительно просим оставаться в рамках старой научной школы»
«Эффект бабочки» — термин, введенный самим Лоренцом, — отражение его высказывания о том, что бабочка, взмахивающая крыльями в Айове, может привести к шторму в Индонезии. Говоря другими словами, это сильная зависимость системы от начальных условий (основное свойство динамического хаоса), где даже малейшая погрешность в исходных данных приводит к совершенно другому результату. Несмотря на то, что уравнения в модели Лоренца были лишь грубым приближением к реальным погодным процессам, он понял, что мы никогда не сможем добиться решения проблемы долгосрочного прогнозирования. И дело не столько в сложности вычислений, сколько в злополучном эффекте бабочки, в результате которого даже небольшие возмущения и неточности с течением времени накладываются друг на друга, как снежный ком, и перерастают в огромные ошибки.
Лоренц не стал сразу публиковать свое необычное наблюдение, все же оно было довольно пессимистично: торжество случайности и беспомощность ученых. Он решил углубиться в эту тему и получить более объемные сведения, чтобы была возможность их опубликовать. Вместо 12 уравнений погоды он нашел более краткий вариант хаотичной системы из трех нелинейных уравнений конвекции – движения слоев газа или жидкости при нагреве. Они были обманчиво простыми, но все равно содержали в себе элемент хаоса.
У модели конвекции, построенной Лоренцем, есть очень наглядный аналог, на примере которого раскрывается суть апериодичной системы – водяное колесо. Представьте небольшой обод, похожий на колесо обозрения, но вместо кабинок у него ведра, в которых проделаны отверстия. Начнем сверху лить воду с достаточным напором, чтобы преодолеть силу трения и заставить колесо вращаться. Если поток остается неизменным, то по прошествии долгого времени мы интуитивно ожидаем обнаружить некую стабильность: колесо либо найдет положение равновесия и остановится, либо станет крутиться в одну сторону, либо же его колебания из стороны в сторону станут регулярно повторяться во времени, то есть будут периодичными. Однако, не произойдет ни того, ни другого.

До обидного простая механическая система не оправдывает интуитивных желаний любого физика. Скорость вращения колеса никогда не становится постоянной, также меняется и направление его движение, причем с разными интервалами времени. Эта модель — очень яркий пример того, что хаос и неупорядоченность появляются не только в огромных и сложных системах, но и в таких вот примитивных конструкциях.
Небольшое видео, демонстрирующее принцип работы водяного колеса Лоренца
Для более точного представления движения своей системы из трех уравнений Лоренц построил пространственный график, каждая точка которого соответствовала одному из конкретных значений трех переменных. Он все еще надеялся обнаружить некоторую периодичность при больших временных промежутках, которую нельзя заметить сразу, но в итоге ни один набор из трех значений ни разу не повторялся точно. Однако при этом рисунок приобретал все более явственные черты: линии не были разбросаны в пространстве, они формировали два странных ограниченных завихрения, словно система несмотря на свою сложность, все же тяготела к некоторой конкретной структуре. Изображение, по удивительной случайности напоминало бабочку, словно закрепляя этот символ за новой наукой — наукой о хаосе.

Аттрактор Лоренца

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

Но кроме этих не очень обнадеживающих выводов, Лоренц также показал, что среди, казалось бы, полнейшего хаоса, есть некий порядок, выдающий себя за случайность, осталось лишь понять, как его систематизировать.
Надо сказать, что ученым понадобилось около десяти лет после публикации работы Лоренца, чтобы окончательно принять его пугающие выводы: мир больше хаотичен, чем упорядочен, наши идеальные модели на самом деле чаще искусственны и далеки от действительности, а чтобы изучать саму действительность, нам нужны новые инструменты и критерии точности. Но несмотря на то, что странный абстрактный язык Лоренца не был сразу понят обществом, его счастливая звезда подарила ему широкое признание еще при жизни, а обнаруженная им фигура впоследствии была названа в его честь и стала негласной эмблемой первых исследователей динамического хаоса.
Трехминутная симуляция построения аттрактора Лоренца
«Погода постепенно приходит в норму, но ветер детерминизма меняется на ветер хаоса, так что не планируйте свой отпуск заранее, это бесполезно»
Некоторые утверждают, что двадцатый век запомнится тремя научными революциями: теорией относительности, квантовой механикой и теорией хаоса. Заслуга самого Лоренца состоит не только в том, что он побудил ученых внимательнее изучать системы, которые ранее зачастую игнорировали или пытались от них избавиться. Его врожденная наблюдательность позволила ему по-другому взглянуть на эти раздражающие проявления хаоса и разглядеть в них красивую мысль: эффект бабочки — не случайность, это суть красоты природы, ее неповторяемости и разнообразия.
Примерами хаотичных систем являются не только атмосферные вихри, но и биологические популяции, политические настроения в обществе, рынок ценных бумаг, биение сердца или набор небольших неточностей в игре музыканта. Наличие элемента хаоса делает мир сложнее, но гораздо интереснее, и ради этого можно пожертвовать парочкой солнечных дней.
Эдвард Лоренц умер 16 апреля в 2008 году в возрасте 90 лет через неделю после того, как завершил очередную научную статью. У него осталось трое детей, четверо внуков и заслуженное признание пионера теории динамического хаоса.
[1] — Очень часто термин «эффект бабочки» вызывает ассоциацию с рассказом Рэя Брэдбери «И грянул гром» (1952), где раздавленная в прошлом бабочка стала началом череды случайностей, изменивших будущее. На самом деле, это еще одно интересное совпадение, ведь Лоренц ввел это понятие только в 60-х, и его происхождение никак не связано с рассказом. Тем не менее, рассказ идеально подходит под художественное описание сверхчувствительности к начальным условиям.
1) Многие сразу раскусили, что огромная часть информации взята из книги Джеймса Глика под названием «Хаос: создание новой науки», уже давно ставшей классикой научпопа.
2) Большинство же биографических сведений были найдены в небольшом мемуаре о Лоренце за авторством Kerry Emanuel: — http://www.nasonline.org/publications/biographical-memoirs/memoir-pdfs/lorenz-edward.pdf
3) Фотографии взяты с сайта https://www.lorenz.mit.edu/edward-n-lorenz
4) Оригинал статьи Лоренца 1963г.: https://www.astro.puc.cl/
Подпишись, чтобы не пропустить новые интересные посты!

Научный метод в музыке | Математика в музыке – Роман Олейников | Научпоп
Математика в музыке. Что такое наука и какие задачи она должна решать? Существует ли музыкальная наука и какими могут быть результаты применения научного метода в этой сфере? Что такое микрохроматика и как она может изменить музыку будущего, расширить возможности её создания и восприятия?
Об этом и не только рассказывает Роман Олейников, математик, музыкальный теоретик, соавтор канала Пространство музыки (Science 4 Music), сотрудник лаборатории биомеханических систем Института машиноведения РАН.

Любовь в python
Делать было нечего и попалась картинка

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-1, 1, 100)
plt.plot(x, (1 — x**2)**0.5 + (x**2)**0.33)
plt.plot(x, -(1 — x**2)**0.5 + (x**2)**0.33,)
plt. show() #удалить пробел


Жадная ли мы цивилиация?

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

Однако описание жизни Лежандра похоже на грустную комедию. Вот несколько фактов с Википедии:
• Лежандра преследовал злой рок — стоило ему сделать выдающееся открытие, как тут же оказывалось, что другой математик сделал то же самое немного раньше
• Даже те его открытия, приоритет которых никто не оспаривал, часто в скором времени перекрывались чужими, более общими результатами
• Из-за бюрократической ошибки пенсия Лежандра была отменена в 1824 году, и остаток своих дней он прожил в нужде
Завершает эту череду неудач то, что не сохранилось ни одного портрета Лежандра, кроме карикатуры. Теперь когда нужно проиллюстрировать вклад учёного, его изображают так:

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

Айсберг больших чисел. Часть 4. Бездна
В трёх предыдущих частях мы рассмотрели просто большие числа, очень большие числа, и дошли до чисел, слишком больших даже для математики. Прочитайте сначала их, иначе этот пост не поймете!
Сегодня мы рассмотрим понятие вычислимости функций, расскажем про математических оракулов-экстрасенсов и затронем чуть-чуть философию.
Для понимания вам нужно обладать воображением и немного абстрактным мышлением, ну и знать математику на уровне 7-8 класса школы. Еще желательно знание основ программирования на любом языке.
Сегодня будут пару теорем с пруфами, которые я буду отдельно помечать. Кто никогда не разбирался в математических доказательствах — можете их пропускать. Тем не менее, настоятельно рекомендую все же их просматривать, чтобы не было вопросов «а почему?» и «в смысле?».
Начнем с парадокса интересного числа, который формулируется так:
Теорема: Докажем, что все числа интересны.
Доказательство: Пусть существуют неинтересные числа. Возьмем самое маленькое неинтересное число. Такое число — единственное в своем роде. Но разве это не делает его интересным?
Отсюда противоречие, значит, неинтересных чисел не существует.
Парадокс этот скорее шутливый, но у него есть и более серьезный аналог (парадокс Берри):
Теорема: Все натуральные числа можно описать, используя менее 10 слов.
Доказательство: Пусть существуют числа, которые нельзя никак описать менее, чем за десять словам. Выберем из всех этих чисел минимальное. Теперь опишем его, как «Наименьшее число, которое нельзя описать, используя менее 10 слов». В этом описании содержится 9 слов. Отсюда противоречие, а значит все числа можно описать менее, чем за 10 слов.
В чем же подвох?

(Сможет ли Уроборос сожрать себя целиком?)
Все эти парадоксы эксплуатируют один и тот же прием — самореференцию, или ссылку на самого себя. В простейшем виде самореференция выглядит так:
«Это предложение ложно». Если оно ложно, значит в нем говорится истина, но если оно истинно, значит оно ложно. Но ведь мы уже сказали, что оно не может быть ложным, потому что в этом случае оно было бы истинным, но в этом случае оно ложно, но.
В математике самореференция, если она приводит к парадоксу, означает, что что-то не так с предпосылками. В примере с «интересными» числами такой предпосылкой было утверждение, что принадлежность числа к «неинтересным» или «интересным» сама по себе может быть интересна. Второй пример чуть сложнее, но и там тоже все это есть — нельзя при описании числа использовать ссылку на само это описание числа. Получается порочный круг, деление на ноль, Марти Макфлай встретился сам с собой, а оба близнеца оказались старше друг друга.
Мы используем этот тип парадоксов, чтобы доказать существование невычислимых функций, то есть таких, для которых не существует хоть какого-то общего способа или алгоритма, их вычисляющего.
Вообще вычислить можно почти что угодно. Все те монстры от мира функций, о которых мы говорили в предыдущей статье (быстрорастущая иерархия) вычислимы, ведь их можно посчитать на каком-то вычислительном устройстве. Конечно, на обычном компьютере или тем более в уме сделать это невозможно. Важна лишь потенциальная возможность, лишь бы в вашем компьютере была неограниченная память и в вашем распоряжении имелось неограниченное время. (Заметьте, не бесконечность в прямом смысле, здесь и сейчас, а именно неограниченность!)
Чтобы наконец рассмотреть понятие вычислимости, надо как-то его формально определить. Для этого Алан Тьюринг придумал абстрактную машину, названную потом его именем — машину Тьюринга.

(картинка из интернета для наглядности)
Машина Тьюринга состоит из трех элементов — неограниченной в обе стороны ленты, разделенной на ячейки, считывающего устройства (головки), и набора правил, по которым машина, собственно, и работает.
В ячейках ленты изначально находятся какие-то символы (входные данные), а головка может находиться в одном из нескольких состояний. Правила описывают, что делать машине в случае, если головка находится в таком-то состоянии и находится напротив ячейки с таким-то символом. А может эта машина за один раз:
Записать в ячейку напротив головки некий символ (другой или такой же)
Сдвинуть головку на одну ячейку вправо или влево
Поменять состояние головки (на какое-то другое или оставить его тем же)
Вот пример правил для машины с двумя состояниями головки и двумя возможными символами в ячейке ленты:
Если головка находится в состоянии А, а в ячейке записан символ «0», записать в неё «1», сместить головку вправо и поменять её состояние на B.
Если головка находится в состоянии А, а в ячейке записан символ «1», сместить головку влево и оставить состояние А.
Если головка находится в состоянии B, а в ячейке записан символ «0», сместить головку влево и оставить состояние B.
Если головка находится в состоянии B, а в ячейке записан символ «1», записать в неё «0», сместить головку вправо и остановить машину.
Поиграться можно, например, здесь.
Сейчас мы не будем углубляться в эту тему, скажу лишь, что что на машине Тьюринга можно эмулировать любой алгоритм, который можно написать и на обычном языке программирования. Берите любой: Python, Java, C++ — эта грубая и уродливая машина Тьюринга справится с чем угодно. И вообще, в дальнейшем мы будем использовать термин «программа», а не «машина Тьюринга». (Но не забывайтесь, машины Тьюринга нам еще понадобятся).
Но есть одна задача, для которой силы машины Тьюринга не хватает — так называемая «проблема остановки». Решить проблему остановки — означает написать программу, которая узнает, остановится ли когда-нибудь данная конкретная программа или нет. (Чувствуете запах самореференции?)
Вроде бы очевидно, что проблема остановки разрешима: нужно лишь проверить, зацикливается ли программа в каком-то месте. Ну а если в правилах для этой машины вообще нет правила для её остановки, то очевидно, что она не остановится.
Но всё не так просто и вот пример. Возьмите какую-нибудь нерешенную до сих пор гипотезу для натуральных чисел, например, проблему Гольдбаха. (Её математики уже почти 300 лет решают!). Запустите программу, которая для каждого натурального числа проверяет, выполняется ли условие задачи. Если для очередного числа условие не выполняется, остановите программу. Математики за 300 лет не узнали, есть ли такое число, и у вас вряд ли выйдет.
На самом деле не существует такого алгоритма S, которому на вход подавалась бы запись любого другого алгоритма A, а на выходе он бы отвечал, останавливается ли A или нет.
Доказательство:
Пусть существует программа S, на вход которой подается запись любой программы A и входных данных к A, а на выходе она решает проблему остановки для программы A при этих входных данных: например — печатает одно из двух: «Программа останавливается» или «Программа не останавливается«.
Напишем программу D, которая принимает на вход запись любой программы A и входных данных к A, выполняет внутри себя программу S, и, если S печатает «Программа останавливается«, то D не останавливается (зацикливается), а если S печатает «Программа не останавливается«, то D останавливается.

Подадим теперь на вход программы S запись программы D и любого входа к ней A. Если D останавливается, то S должна вывести, что D не останавливается, но если D не останавливается, то S должна вывести, что D останавливается, но если D останавливается, то S долж.
Мы получили парадокс, а значит, какое-то из наших предположений неверно. Если программа S существует, то программу D сделать очень просто. Значит, ошибочное предположение было в том, что существует программа S, которая решает проблему остановки.
Следовательно, проблема остановки неразрешима.
А причем здесь большие числа?

(ща все будет, не боись)
Возьмем все машины Тьюринга с произвольными правилами, числом состояний головки N и числом возможных символов M. Запустим их все на ленте, заполненной каким-то одним символом, и «посмотрим», какие из этих машин останавливаются, а какие нет. Из тех, что останавливаются, возьмем ту, которая останавливается за наибольшее число шагов. Обзовем эту машину Busy Beaver (рус. занятой бобр). (Аналогию с занятыми бобрами я считаю еще более запутывающей, поэтому объяснять ее не буду). Определим функцию BB(N, M), которая возвращает, собственно, число шагов до остановки машины Busy Beaver при числе состояний N и числе символов M. Эта функция, очевидно, невычислима, так как, чтобы ее вычислить, нужно решить проблему остановки. Более того, эта функция растет быстрее любой вычислимой функции!
Доказательство:
Пусть существует вычислимая функция f(N, M), которая растет так же или быстрее, чем BB(N, M). Но функцию f(N, M) можно записать в виде программы, а значит, и в виде машины Тьюринга для числа N_0 состояний и M_0 символов.
Возьмем теперь машину Тьюринга с N_1 > N_0 состояниями и M_1 > M_0 символами. Если эта машина не остановилась за f(N_1, M_1) шагов, то она уже не остановится, ведь мы предположили, что f(N_1, M_1) — это оценка сверху числа BB(N_1, M_1).
Но это значит, что, вычислив функцию f(N_1, M_1), мы, по сути, решим проблему остановки для любой машины Тьюринга с N_1 состояниями и M_1 символами. Следовательно, функция f(N, M) невычислима, и BB(N, M) растет быстрее любой вычислимой функции.
Вообще, что собственно этот ваш BB означает? Если говорить популярно и упрощенно, то BB(N, M) означает самое большое число, которое можно рассчитать с помощью программы, код которой «весит» не больше определенного количества байт. Помните парадокс Берри, с которого мы начинали — это тоже самое, только мы избавились от парадокса.
Как ни странно, BB(N, M) можно вычислить для небольших чисел, когда действительно можно понять, зацикливается программа или нет.
Часто используют другую функцию S(N) = BB(N, 2) — то есть используют машины Тьюринга с двумя символами на ленте, скажем «0» и «1». По состоянию на 2022 год известно, что
S(4) = 107. Что-то пока ничего необычного.
S(5) больше или равно 47 176 870. Некоторые машины с пятью состояниями демонстрируют слишком сложное поведение для человеческого понимания, поэтому оценка неточная.
S(6) больше или равно вот этому монстру:

, что больше, чем 10↑↑15 (вспомните нотацию Кнута).
Про S(7) нам неизвестно ничего, кроме того, что оно больше S(6).
Умельцы сконструировали машину Тьюринга с 19 состояниями и 2 символами, которая останавливается больше, чем за число Грэма шагов. Скорее всего, S(19) гораздо больше числа Грэма.
Другие мастера доказали, что S(748) невозможно вычислить в системе аксиом Цермело-Френкеля. Скорее всего, настоящая граница гораздо меньше 748.
Вообще (это уже мое предположение), числами S(N) можно измерять «силу» математических теорий: чем «сильнее» теория, тем для большего N можно вычислить S(N). Чтобы вычислить любое S(N), нужна, как мне кажется, бесконечно сложная теория бесконечной силы.
Число Райо из той же оперы, только использует не «язык» машин Тьюринга, а язык теории множеств, и определяется, как «наибольшее число, представимое на языке теории множеств с использованием гугола символов или меньше, плюс 1».
Математики, естественно, не стали останавливаться на этом.
Предположим существование оракула — мистической машины с неизвестным устройством, которая может решать проблему остановки обычной машины Тьюринга. Противоречий здесь никаких нет, потому что оракула нельзя «спросить» с помощью обычной машины. Если же мы позволим некой машине «высшего порядка» обращаться к нему, этот оракул больше не сможет решить проблему остановки по тем же причинам, что и в случае с обычной машиной. Чтобы решить проблему остановки снова, предположим существование «высшего оракула» или «оракула второго порядка». Но и он не сможет решить проблему остановки для машин, которые к нему обращаются. Так же мы можем предположить существование оракулов энного порядка, ну и в конце концов «абсолютного оракула», который может решить проблему остановки для любого оракула конечного порядка. Но и он сам не сможет решить проблему остановки для машин, которые его вызывают. На самом деле можно образовать целую иерархию оракулов, очень похожую на иерархию быстрорастущих функций.
Для машин, использующих оракулы, мы можем определить своих Busy Beavers и свои функции BB_k(N, M), где k — порядок оракула. Каждая следующая функция BB_k(N, M) растет быстрее любой «сверхвычислимой» функции предыдущих порядков.
С помощью похожих конструкций математик Джонатан Бауэрс наконец определил самое большое именованное конечное число в гугологии — Utter Oblivion (рус. Высшее Забвение). Ничего конкретного оно не означает, просто Бауэрс хотел, чтобы его число было самым большим.
Существует ли оракул на самом деле — проблема скорее философская. Есть несколько вариантов для существования оракула в нашем физическом мире, и, как по мне, вряд ли хоть какой-то из них возможен:
«Машина Зенона» — может выполнить бесконечное количество шагов за конечное время.
«Действительный компьютер» — может вычислить иррациональное число с бесконечной точностью.
Квантовый «сверхкомпьютер» с бесконечномерными кубитами (если я правильно понял).
Есть и другие умозрительные конструкции, про них лучше почитайте на Википедии.
Пожалуй, с конечными числами можно на этом закончить, несмотря на то, что даже самое большое из них — ничто по сравнению с бесконечностью. Но о них в следующий раз.

84 года Дональду Кнуту

На его книгах обучилось не одно поколение программистов, в том числе, и в нашей стране. Созданная им в 70-х годах прошлого века система набора текста TeX до сих пор активно используется по всему миру для верстки высококачественных документов, таких как исследовательские работы, технические руководства и учебники. Его называют пионером в области компьютерных технологий, особенно в сфере языков программирования, а также «отцом анализа алгоритмов». Речь идет о почетном профессоре Стэнфордского университета Дональде Эрвине Кнуте, известном ученом, математике и авторе популярной технической литературы.
Дональд Кнут появился на свет 10 января 1938 года в городе Милуоки, штат Висконсин, во времена, когда IT-технологий и кибернетики в привычном нам виде еще не существовало. Происходил он из семьи выходцев из Германии — его отец Эрвин Генри Кнут преподавал бухгалтерский учет и владел небольшой типографией, а мать, Луиза Мари Бонинг, была домохозяйкой. Способности к математике и аналитическому мышлению Дональд проявил еще в школе. Однажды, когда Кнут учился в восьмом классе, выпускавшая сладости компания Ziegler Candy объявила конкурс: победитель должен был составить максимально возможное количество английских слов путем перестановки букв в названии шоколадного батончика «Ziegler’s Giant Bar». Определявшая итоги конкурса комиссия посчитала, что всего существует 2500 таких слов.

Чтобы решить задачу, юный Дональд Кнут пожаловался матери на боли в животе, не пошел в школу, обложился книгами и принялся составлять алгоритм перестановки букв в заданной фразе с подбором слов по словарю. В результате у него получилось 4500 вариантов — намного больше, чем рассчитывали организаторы. Естественно, он выиграл конкурс. Школа получила в подарок телевизор и большую коробку шоколадных батончиков «Ziegler’s Giant Bar», которых хватило всем одноклассникам Кнута.
Поступив в 1956 году в Технологический институт Кейса в Кливленде, Огайо, Кнут впервые познакомился с компьютером IBM 650 и увлекся программированием. Уже спустя два года он написал программу, которая помогла институтской спортивной команде выиграть первенство по баскетболу. Оценив особенности и возможности каждого игрока, Кнут присвоил им определенный индекс, показывавший вероятность заработать очки тем или иным членом команды в разных условиях. Используя эти знания, тренер мог выпускать игроков на поле на разных этапах игры, увеличивая шансы на победу. Это сработало: команда стала призёром, а об изобретении Дональда Кнута написали издания CBS Evening News и Newsweek.
Тогда же, в период обучения в институте Кейса, Кнут стал редактором студенческого научного журнала «Engineering and Science Review», признанного лучшим техническим университетским изданием 1959 года. Закончив бакалавриат, магистратуру, а затем получив степень Ph.D., Дональд Кнут стал доцентом Калифорнийского технологического института, где начал работу над книгой о компиляторах. Однако он быстро пришёл к выводу, что не сможет полноценно осветить тему без изложения теории — так родилось издание «Искусство программирования», постепенно разросшееся до семитомника, первый том которого был опубликован в 1968 году. Серия охватывает широкий спектр тем, включая фундаментальные алгоритмы, структуры и сортировку данных, а также сложные вычисления.

В начале 70-х издательство «Эддисон-Уэсли», выпускавшее книги Кнута, перешло на более современную технологию компьютерной верстки, из-за чего, по мнению автора, качество макетов книг резко упало. В те времена еще не существовало специализированных приложений для издателей, они пользовались обычными текстовыми редакторами. Компьютерная верстка значительно ускоряла процесс предпечатной подготовки, редактуры и корректуры изданий, и художественная литература от этого, безусловно, выиграла. А вот с техническими книгами, включавшими сложное форматирование, фрагменты кода, многоуровневую систему заголовков, формулы и перекрестные ссылки, получалось не очень. Чтобы помочь любимому издателю, Кнут взялся за разработку специальной программы, которая позволила бы верстать качественные технические книги — прежде всего, его собственные. Так на свет появился TeX, а позже — технология METAFONT — метаязык для описания векторных шрифтов.
Дональд Кнут выплачивал читателям вознаграждение в размере 2,56 доллара за любые опечатки или ошибки, обнаруженные в его книгах. По словам самого Кнута, «256 пенсов — это один шестнадцатеричный доллар». Кроме того, он платил 32 пенса за «любые ценные предложения». Примечательно, что подписанные лично Дональдом Кнутом банковские чеки стоят среди коллекционеров значительно дороже обозначенной на них суммы.

Помимо технической литературы Дональд Кнут отметился и в религиозной — он является автором работы «3:16 Bible Texts Illuminated», в которой исследует Библию с помощью процесса систематической выборки и анализа глав 3, стих 16 каждой книги Священного Писания. Кроме этого, Кнут прекрасно играет на органе и сочиняет музыку: в 2018 году он представил произведение для органа «Fantasia Apocalyptica», которое он описывает как «перевод греческого текста Откровения Святого Иоанна Богослова на музыку».
Книги Дональда Кнута переведены на многие языки мира, в том числе, на китайский, где были опубликованы под китайской версией имени автора — Гао Ден (高德纳). Впервые это имя появилось на обложке китайского издания «Искусства программирования» в 1977 году. В предисловии к этой книге Кнут объясняет, что принял свое китайское имя, потому что желает, чтобы его знало как можно больше программистов в активно развивающемся Китае. В 1989 году это имя появилось на первой странице популярного в Китае «Журнала компьютерных наук и технологий», что, по словам Кнута, «заставляет меня чувствовать себя ближе ко всем китайцам, хотя я не могу говорить на вашем языке».
За свою карьеру Дональд Кнут внес огромный вклад в развитие IT, и в 1974 году он был удостоен премии Тьюринга, неофициально считающейся Нобелевской премией в области компьютерных наук. Помимо исследовательской и писательской деятельности, Кнут был наставником и советником многих студентов, преподавая программирование и математику в различных американских университетах. В 2006 году у Дональда Кнута диагностировали рак, он перенес несколько операций, но, несмотря на проблемы со здоровьем и преклонный возраст, он до сих пор несколько раз в год читает неофициальные лекции под названием «Компьютерные размышления» в Стэнфордском университете, которые всегда проходят с полным аншлагом. Вклад Кнута в информатику оказал значительное влияние на эту область и помог сформировать наше современное представление об алгоритмах, языках программирования и информатике в целом.
Подпишись на наш блог, чтобы не пропустить новые интересные посты!

Крестики-нолики, шашки и шахматы: немного об играх в математике

Вы вечно проигрываете в крестики-нолики? Устали от бесконечных издевок окружающих? Чувствуете себя неполноценным членом общества? Тогда вы обратились по адресу! Сегодня у вас есть уникальная возможность пройти наш обучающий курс по беспроигрышной стратегии, который стартует уже сегодня! Присоединяйтесь сейчас и получите скидку 10% по промокоду НЕУДАЧНОЕ_ВСТУПЛЕНИЕ!
❯ 1. Беспроигрышная стратегия в крестики-нолики (или как впасть в состояние «ничейной смерти»)
Так, ладно, скорее всего все и так знают, что в крестиках-ноликах практически невозможно не победить, да и они давно вышли из моды. Но для поддержания уровня занудства, мы все-таки пробежимся по общей стратегии, а затем очень издалека начнем разговор про игры, так что заваривайте чаёк и присаживайтесь. Кто в теме, следующую часть можно пропустить.
Итак, как не проигрывать, если вы ходите первыми (напомню, что в нашем консервативном мире крестики доминируют).
1 ход: всегда в центр;
2 ход: в угол, который дальше всего от предыдущего хода ноликов;
3 ход: защита от попыток нолика чет выстроить или, что вероятнее, – снова ход в угол;
4 ход: тут у вас в наличии либо уже имеются две выигрышные линии, и вы гасите его, либо нолик прикрыл тылы, и исход – ничья.
Если вы играете за нолики, то при «идеальном» сопернике (который ходит всегда верно) у вас есть лишь возможность обороняться и выйти вничью, например:
1 ход: в любой угол;
2 ход: а дальше только пытаться помешать крестикам замутить тройничок, ведь больше вы ни на что не способны в силу своей submissive сущности.

Автор потерял нужную картинку из инета, не судите строго
Как видно, максимальная выгода от этих знаний – спорить с детишками на конфетки (хотя и они быстро раскусят фокус), а программу, способную никогда не проигрывать в крестики-нолики, может написать даже школьник. Самым примитивным методом в данном случае является дерево игровых ситуаций: перебор всех возможных исходов игры, где в конце партии заполнены все клетки поля.
Смотрите, корень нашего дерева – пустое поле 3х3. Первый игрок имеет возможность сделать ход на одну из девяти позиций – рисуем дереву девять веток с разными позициями крестиков (там внизу есть картинка). На следующем ходе у каждой ветки с крестиком есть восемь свободных мест для ноликов, то есть каждой ветке рисуем по восемь новых, где в различных комбинациях на поле две клетки заняты крестиком и ноликом. Итого имеем 9х8 – 72 ветки. Следуя такой логике, на дальнейшем шаге у дерева появится по 7 ответвлений, так как свободно только 7 клеток для крестика, количество теперь веток стало 9х8х7=504. Конечное число решений – листиков нашего дерева – равно 9! (все же знают, что это не девять с восклицанием, а факториал? – 9х8х7х6х5х4х3х2х1) или 362880. Теперь достаточно вбить компьютеру все эти исходы и запрограммировать выбирать только выигрышные.

Первые ветви дерева решений
Но тут даже с первого взгляда понятно, что такой способ слишком «деревянный»: некоторые ветви приводят к победе еще до того, как заполнится все поле, так что мы, по сути, выполняем тонну ненужных вычислений. Нужно уметь не только выбрать кратчайший путь к выигрышу, но и отсечь ненужные ветви – короче, подстричь наше дерево. Первая задача реализуется с помощью алгоритма минимакс, который сводит к минимуму счет противника, максимизируя при этом свой (то есть – выбирая наиболее возможную короткую ветвь). Вторая задача решается методом альфа-бета отсечения, который при переборке различных узлов дерева отсекает заранее проигрышные.
Ну вот, дерево подстригли, причесали – теперь полное количество его узлов сократилось до 256158, и программа всегда будет выигрывать или заканчивать партию вничью за секунды.
Таким образом, крестики-нолики являются примером игры, находящейся в состоянии «ничейной смерти»: любой игрок (даже если он полный чайник, а противник чемпион мира), применяющий правильную теорию, может выиграть или в худшем случае свести ее к ничьей. Такая полностью просчитанная игра теряет смысл, ведь опыт и квалификация игроков больше не имеют веса, и соревновательный момент уступает место вычислениям.
Но крестики-нолики – игра очень примитивная, самая длинная партия в ней равна всего девяти ходам, так что построить и просчитать дерево решений для нее можно даже вручную (развлечение для людей с кучей свободного времени).
Вот, например, с шашками дела обстоят интереснее: кроме большого поля у них и правила на порядок сложнее, так что при подсчетах оказывается, что листьев у дерева решений около 5х10^20. Это пять и рядом двадцать нулей. Думаете, это мало? Оно и понятно, у нас мозг просто не способен представить число такого порядка, но для сравнения: чтобы выстроить цепочку от Земли до Марса из бусинок размером с атом потребуется как раз 5,5х10^20 бусинок. Очевидно, что число это офигеть какое большое, и пятидесяти компьютерам не просто так потребовалось почти 20 лет (двадцать лет, Карл!), чтобы полностью рассчитать все возможные исходы шашек и выстроить их дерево решений.
Сие знаменательное событие произошло в 2007 году благодаря команде канадских исследователей во главе с Джонатаном Шеффером, и с этого момента шашки официально вошли в список полностью решенных игр. Если оба соперника не совершают ошибок, то партия всегда заканчивается ничьей. Тут нужно учесть, что речь идет об английских шашках – чекерс; в них назад бьет только дамка.

Статья Шеффера и его коллег в журнале Science
Таким образом, человек даже теоретически больше никогда не обыграет компьютер в шашки, так как с первого его хода известны все выигрышные решения, и каждый шаг лишь приближает компьютер к победе. Ничейная смерть шашек была предсказана еще в 50-е, и спустя полвека прогноз подтвердился. Но не стоит грустить: если крестики-нолики имеют короткую беспроигрышную стратегию, то для шашек она гораздо-гораздо сложнее, так что и воспользоваться ей может только компьютер. По сути, 2007 был значим только для математиков. Как многие заметили, после 2007 года шашки не умерли, и в игре между двумя человеческими существами решающее значение все еще имеет опыт, а не вычислительные мощности мозга.
Сейчас на меня наверняка налетят шахматные снобы, утверждающие, что приличные люди вообще не играют в шашки. И действительно, а как обстоят дела у шахмат?
❯ 2. Компьютеры, которые играют в игры
Кто победит, если две одинаковые программы устроят между собой шахматный турнир? Будут ли партии всегда заканчиваться вничью или у белых будет преимущество первого хода? И есть ли какая-то выигрышная стратегия, которая позволила бы полному чайнику одолеть чемпиона?
От математики в этой части не осталось ничего, кроме парочки больших чисел, и она является скорее кратким историческим обзором. Однако теория игр без шахмат – как самолет без двигателя, надо чуть-чуть пробежаться по основным моментам.
Итак, по сравнению с великими и ужасными шахматами, шашки (а тем более, крестики-нолики) покажутся развлечением для малышей. Напомню, что для английских шашек количество различных вариантов партий равняется 5х10^20, и полностью просчитать их смогли только спустя 18 лет после начала работы программы.
Тут нужно отдельно отметить, что обыграть в шашки особь вида Homo sapiens компьютер смог гораздо раньше, целью проекта было не научить машину побеждать людей, а знать последствия каждого его хода вплоть до окончания игры.
Напрашивается очевидный вопрос: раз шашки рассчитали, то и шахматы сможем, разве нет? Ждали же 18 лет, подождем и еще. Всё равно простым смертным нет дела до этих математических извращений, и в каком-нибудь 2040 году, листая ленту девятым кибер-пальцем, мы смахнем новость про найденное решение для шахмат.
К сожалению, пока что это утопия. И дело не в том, что математики поняли, что страдают какой-то фигней, проблема заключается в сложности самой игры: одних только позиций фигур на доске существует около 10^46, а уникальных партий – не меньше 10^120.
Десять в сто двадцатой степени. Это много. Так много, что у нас даже нет аналогии, чтобы показать весь ужас этого гигантского числа, его попросту не существует в физическом мире. Чтобы вы понимали, количество атомов в известной нам части Вселенной примерно равно 10^80, а количество оригинальных партий в шахматах больше этой цифры в 10^40 раз. Причем в начале игры все выглядит довольно безобидно: у белых есть всего двадцать ходов – 16 пешками и четыре конями — но с каждым сделанным шагом количество возможных комбинаций на доске очень быстро растет. Так, например, после первого хода каждого из соперников, на поле существует 400 различных позиций для следующего шага, после второго – 72084, после третьего – больше 9 миллионов, после четвертого – более 288 миллиардов. Такое число соразмерно с количеством звезд в нашей галактике, а ведь это всего лишь самое начало партии.
Однако не просто так было сказано, что теория игр без шахмат – как самолёт без двигателя. После окончания Второй мировой еще на заре эпохи машинных вычислений шахматы стали своеобразным эталоном для проверки различных идей в этой области. Клод Шеннон *кстати, именно в честь него число 10^120 называется числом Шеннона*, один из основателей раздела об искусственном интеллекте, говорил, что не видит практической ценности в вычислении всех возможных шахматных партий, но сама эта мысль побуждает исследователей двигаться вперед и развивать технологии до тех пор, пока они не найдут решение.
Первую программу для игры в шахматы написал еще в 1952 году Дитрих Принц (коллега Алана Тьюринга) на компьютере Ferranti Mark. Правда, тут не стоит обольщаться, этот компьютер, лишь отдалённо напоминающий наши современные устройства, был таким слабеньким, что объем его оперативной памяти мог содержать программу только по типу «мат в два хода». Она была рассчитана лишь для последних двух ходов, но начало шахматной эпопеи было положено.
В 1956 году компьютер MANIAC-1 *милое название* сыграл три партии в облегченные шахматы (на поле 6х6 и без слонов) – сам с собой, против сильного игрока и против новичка. Несмотря на то, что опытный шахматист в начале игры решил отказаться от ферзя, программа все равно ему проиграла *какой неумелый маньяк*, но вот последнего – слабого соперника компьютер смог победить. Это была первая победа машины над человеком.

Название MANIAC, кстати, — это аббревиатура: Mathematical Analyzer Numerical Integrator and Automatic Computer. «… Компания Metropolis выбрала имя MANIAC в надежде остановить поток глупых аббревиатур для названий машин»
После изобретения в 1971 году первого микропроцессора, у ученых появилась возможность задействовать более мощные компьютеры, а значит, сохранять в памяти машины еще больше победных комбинаций. В 1974 году был организован первый чемпионат по шахматам среди программ, в 1978 году машина обыграла международного мастера по шахматам, а в 1981-м Cray Blitz стал первым компьютером, получившим рейтинг мастера.
Но несмотря на то, что с появления первого компьютера, играющего в шахматы, прошло уже много времени, алгоритм программы оставался на уровне решения крестиков-ноликов: легендарный суперкомпьютер Deep Blue от компании IBM использовал типовой метод поиска по шахматному дереву— минимаксный алгоритм с альфа-бета-отсечениями. Преимущество того или иного компьютера заключалось лишь в мощности процессора и количестве загруженных в него победных ходов живых шахматистов.
Кстати, легендарным Deep Blue стал 11 мая 1997 года, когда выиграл матч из шести партий у чемпиона мира Гарри Каспарова. Интересно, что за восемь лет до этого в Нью-Йорке Каспаров победил более слабого предшественника Deep Blue под названием Deep Thought. Тогда он высказал такую мысль: «Если компьютер сможет превзойти в шахматах лучшего из лучших, это будет означать, что ЭВМ в состоянии сочинять самую лучшую музыку, писать самые лучшие книги. Не могу в это поверить. Если будет создан компьютер с рейтингом 2800, то есть равным моему, я сам сочту своим долгом вызвать его на матч, чтобы защитить человеческую расу». Что ж, ему явно пришлось пересмотреть свои взгляды.

Матч 1997 года, который стал предметом документального фильма «Человек против машины»
Окончательно и бесповоротно человечество проиграло железякам в 2005-м: в этот год представитель нашей расы в последний раз смог одержать верх над программой. Сегодня рейтинг живых шахматистов настолько отстал от их железных соперников, что человеку больше никогда не выиграть партию с машиной. На начало сентября 2022 года наивысший шахматный рейтинг человека составляет 2861, а программы 3535.
Чувствуете, как повеяло киберпанком? Но несмотря на такие потрясающие успехи компьютеров, сама игра так и остается нерешенной: нам неизвестно, как закончилась бы идеально просчитанная партия, где обе программы знают последствия каждого хода вплоть до конца игры. Ученые лишь предполагают (но до сих пор не могут доказать), что белые обладают преимуществом первого хода, так как в идеальной игре черные могут только реагировать на создаваемые ими угрозы. Некоторую надежду в этой области вселяет активное развитие квантовых компьютеров, которые могут вести поиск одновременно по нескольким ветвям дерева решений, но тем не менее какого-то революционного алгоритма для самого поиска мы не имеем, и идеальной стратегии для чайников не существует.


Хотя еще в 1960-х шахматы были своеобразным испытательным полигоном при проверке различных методов создания искусственного интеллекта, сложные стратегические игры и сегодня служат этой цели. В чистом виде они не представляют особой ценности, но подходы, используемые для обучения и самообучения машин, имеют большое значение для науки. Кроме того, мне кажется, сама мысль о том, что мы знаем, как рассчитать шахматы, но пока просто не имеем для этого ресурсов, очень вдохновляет.
❯ 3. Go play Go (Последний бой людей)
Оказалось – человек так отстал от своих железных собратьев, что больше никогда не сможет одержать над ними верх. Но что, если бы существовала игра, где люди могли бы проявлять свои сильные стороны, не присущие машинам? Где победа зависит не только от строгих логических расчетов, но и от силы воображения и хитрости?
Как вы уже поняли, такая игра есть: мы наконец-то добрались до го. Го – китайская стратегия – является самой древней настольной игрой, сохраняющей свои правила практически неизменными вот уже 2500 лет. До ХХ века игра была распространена только в Азии, но на сегодняшний день она входит в пять дисциплин Всемирных интеллектуальных игр и является самой распространенной настолкой по числу участников (c поправочкой на плотность населения Востока).
В Китае го образно называют «разговором рук» *italian_moment*, что подчеркивает особое отношение к игре как к искусству. Это неудивительно, ведь ее правила невероятно сложны, так что напоминают не соревнование, а своеобразный диалог, и у разных мастеров есть даже свои собственные стили, по которым их узнают – как стиль писателя или манера художника.
Чтобы сыграть в классическую версию го вам понадобятся: доска в клетку 19х19 (называется гобан) – 1 шт, белые игральные камни – 180 шт., черные игральные камни – 181 шт., кошка-жена – 1 шт. (если есть больше, поделитесь?). Цель игры — отгородить на доске камнями своего цвета бо́льшую территорию, чем противник. Как видно, здесь нет черных и белых клеток на поле, камни можно ставить на любые пересечения линий, нет и разграничения игральных фигур – все они равноценны друг другу. Собственно, именно эта простота и порождает дьявольски сложные тактику и стратегию.

Напомню, тактика – локальное противоборство в какой-то части поля. Стратегия – общее положение сил в игре. Если в шахматах вы лишились дорогой фигуры, ваши шансы на победу обычно заметно уменьшаются, то есть тактика очень сильно влияет на стратегию. В го и поле больше, и фишек огромное количество – поэтому хитрости и поддавки здесь вполне могут стать более близким путем к победе, чем прямая и открытая политика завоевания.
Обычный метод перебора, которым пользуются компьютеры для выбора выигрышной стратегии в шахматах, здесь просто не уместен. Во-первых, дерево решений го необычайно огромно – на начальной позиции существует 55 вариантов ходов (в шахматах – 20), и «растет» оно быстрее – после первых двух ходов соперников существует уже около 16 миллиардов позиций для следующего (в шахматах – меньше ста тысяч). А во-вторых, го – игра, в которой очень важен опыт.
Настоящий мастер способен оценивать ситуацию на поле с помощью распознавания визуальных образов, а человеческий мозг приспособлен к этому гораздо лучше компьютера. Умение узнать на доске некий общий рисунок, который не повторяется каждый раз в точности – задача для машины куда более сложная, чем просто молниеносный подсчет. Именно по этой причине даже после первых серьезных проигрышей людей в шахматы, считалось, что компьютерам не скоро удастся добиться того же в го.
Но вот настал 2016 год и программа AlphaGo, разработанная корпорацией Google, в прямом эфире победила мирового мастера с девятым даном – Ли Седоля. Это стало возможно благодаря новому подходу обучения, который кардинально отличается от обучения шахматных компьютеров. Помните, что Deep Blue использовал обычный метод перебора дерева решений просто с кучей оптимизаций и на самом деле кроме мощных процессоров и больших объемов памяти он недалеко ушел от железяк 60-х.

AlphaGo – революционная программа, в ней нет базы данных с удачными ходами чемпионов или оценочного алгоритма, лишь самые базовые правила, которым учат новичков. Всему остальному она научилась сама, проигрывая тысячи партий с собой. В основе компьютера лежит нейронная сеть, моделирующая работу органического мозга. Главное новшество AlphaGo заключается в использовании глубинного обучения — метода, успешно применявшегося для распознавания образов (например, для поиска картинок в Google Images). Но как ни парадоксально именно из-за этого разработчики не знают, каким конкретным образом программа оценивает ситуацию в игре: система настолько сложна, что анализировать все уровни обработки информации в целом не представляется возможным.
Синтез интеллектуального подхода, свойственного людям, и высокой скорости вычислений делает AlphaGo уникальной. Методы, реализованные в этом проекте, сейчас проходят проверку для применения подобных программ жизни. Уже сегодня они помогают выстраивать модели химических реакций в живых организмах и могут диагностировать некоторые заболевания на ранних стадиях.
Поэтому как ни грустно признавать наше поражение по всем фронтам (и в шашках, и в шахматах, и даже в го) – все же мы не проигрываем впустую. Такие программы, как AlphaGo только лишний раз доказывают невероятную силу человеческого разума и задают высокую планку для следующих поколений. Несмотря на окончательную победу машин, го не только не потеряла статус интересной настольной игры, но и вышла за эти рамки, став важным этапом в истории развития искусственного интеллекта, также как шашки или шахматы.
Как угадать число от 0 до 100 или математический фокус
Интересный математический фокус, который только на первый взгляд может показаться сложным, но на самом деле это не так!
Условие:
- Необходимо загадать любое число от 0 до 100.
- Перед вами появляется целое число, выданное программой и соответствующее диапазону.
- Вам необходимо указать – предложенное число больше, меньше или равно тому, что вы загадали.
- Если программа не угадала – она продолжит предлагать числа.
- Менее чем за 7 попыток искомое число программа все же сгенерирует.
Решение.
Для получения ответа достаточно просто воспользоваться алгоритмом бинарного поиска. То есть, чтобы найти искомое число, следует каждый раз осуществлять деление оставшегося диапазона на 2. Тем самым мы сокращаем объем поиска при каждом проведении действия. Вот и все – правильный ответ всегда будет найден.
Например, первым программа предложит число 50, мы выбираем один из возможных диапазонов, больше 50 – 51-100 или меньше 0-49. Если вариант меньше – следующим числом скорее всего будет 25. Действия будут повторяться, и искомое число наконец найдется.
Согласно законам математики, при делении числа 100 на 2 в течение 7 раз – результат будет порядка 1.
Но так как 2 в седьмой степени – это 128, диапазон может быть увеличен и иметь вид от 1 до 128 или от 0 до 127. А при увеличении возможных попыток, например, до 8, диапазон также может вырасти до 256 и так далее.
Більше цікавих новин
Бракованные батарейки: логическая задача для тренировки мозгов
Интервью: вопросы веб-разработчикам
Игра на внимательность и смекалку
Логическая задачка: «Какую фигуру образует Игрок?»