Энтузиаст распутал математическую загадку древней игры о Луне.
Софтверный инженер на пенсии Мартин К. Мартин недавно обнаружил ошибку в коде обработки легендарной компьютерной игры «Lunar Lander», созданной ещё в 1969 году, той самой, где нужно сажать лунный модуль на поверхность Луны. Открытие было сделано при изучении оптимальной стратегии посадки модуля с максимальной экономией топлива.
Первая версия игры «Lunar Lander» (с англ. «Лунный модуль») была написана 17-летним школьником Джимом Сторером на миникомпьютере PDP-8 с использованием языка программирования FOCAL. В тексте игры отображались только статусные обновления о положении лунного модуля во время посадки на поверхность Луны. Геймерам необходимо было аккуратно управлять расходом топлива для обеспечения мягкой посадки, принимая критически важные решения каждые 10 секунд о количестве сжигаемого топлива.
Эта примитивная игра проложила путь для будущих версий. В 1974 году появилась графическая версия, а в 1979-м - аркадная игра от Atari, благодаря которым «Lunar Lander» стала широко известна. К 40-летию первой высадки человека на Луну в 2009 году энтузиаст нашёл автора оригинальной игры Джима Сторера, взял у него интервью и составил историю создания «Lunar Lander». Позже Сторер опубликовал исходный код игры на своём сайте.
Проведя анализ кода в 2024 году, эксперт по ИИ и бывший научный сотрудник MIT Мартин К. Мартин выявил ошибку в реализации физических расчётов. Баг срабатывал при попытке максимально эффективной посадки с помощью техники «самоубийственного торможения», известной среди поклонников игры Kerbal Space Program. Эта стратегия подразумевает свободное падение для наращивания скорости и последующее включение двигателей в самый последний момент для безопасного торможения.
«Недавно я исследовал оптимальный режим сжигания топлива для максимально мягкой посадки с высокой остаточной тягой, - написал Мартин в своём блоге. - Неожиданно оказалось, что теоретически лучшая стратегия не работала. Игра ошибочно считала, что модуль не касается поверхности, хотя на самом деле это происходило. Вникнув глубже, я был поражён сложностью физических расчётов и численных вычислений в игре. В итоге я нашёл ошибку: отсутствие операции деления на два, которая, по всей видимости, никем не замечалась почти 55 лет».
Несмотря на применение, казалось бы, идеальной стратегии посадки, игра противоречиво сообщала, что модуль полностью промахнулся мимо поверхности Луны. Заинтригованный этой аномалией, Мартин изучил исходный код и обнаружил, что алгоритм посадки базировался на продвинутой для того времени физике, включая уравнение ракетного движения Циолковского и ряд Тейлора.
Как упоминалось в цитате выше, корень проблемы крылся в банальной вычислительной оплошности - отсутствии деления на два в формуле, рассчитывающей траекторию лунного модуля. Это незначительное, на первый взгляд, упущение имело серьёзные последствия, приводя к неправильному расчёту времени до посадки и самой посадки. Несмотря на ошибку, Мартин был впечатлён тем, что Сторер, будучи старшеклассником, смог внедрить в свою игру продвинутые математические концепты, что по-прежнему остаётся весомым достижением сегодня.
Связавшись с самим Сторером, Мартин узнал, что отец автора «Lunar Lander» был физиком и помог сыну вывести уравнения для игровой симуляции.
Хотя люди играли в игру Сторера с багом многие годы, это показывает, что реализм не всегда является самой важной частью захватывающего интерактивного опыта. И, к счастью для Олдрина и Армстронга, настоящая лунная экспедиция "Аполлона" не страдала от подобной ошибки.
Одно найти легче, чем другое. Спойлер: это не темная материя