Играем в Lunar Landing
2023-07-12 01:08Игру "посадка на Луну" написал в 1969 году семнадцатилетний американский школьник Джим Сторер. Изначально он назвал её Rocket, но позже игра стала известна как Lunar Landing. Написана игра была на языке Focal для компьютера PDP-8. Позже широко разошёлся вариант, переписанный на Бейсик. На БЭСМ-6 эта игра имелась в составе игровой системы Джин. Не так давно
spamsink смог восстановить исходный бэсмовский код (landing.pas).
Игра довольно трудная. Чаще всего вы получаете результат вида:
Пришлось сварганить серьёзный оптимизатор, методом Монте-Карло подбирающий оптимальные величины расхода топлива на каждом шаге. Вот мой рекорд: 0.17 мили в час остаточной скорости прилунения. Будем запускать версию, переписанную с Фокала на Си. Скачаем с сайта самого Джима Сторера, ныне профессора университета Brandeis в Массачусетсе:
В игру можно играть онлайн на сайте: lunar69.uber.space/lunar.html
Игра довольно трудная. Чаще всего вы получаете результат вида:
Чтобы результат считался приемлемым, остаточная скорость не должна превышать 22 мили в час: "CONGRATULATIONS ON A POOR LANDING". Пришлось припомнить бэсмовский опыт и потрудиться несколько дней, чтобы снизить скорость меньше 10 mph: "GOOD LANDING-(COULD BE BETTER)". Хитрость в том, что не нужно начинать тормозить прямо сразу, иначе вам не хватит топлива. Надо первые 70 секунд просто свободно падать. Со временем мне удалось достичь 4 mph. Но судя по исходникам, можно сесть ещё более мягко, ниже 1 mph.SORRY,BUT THERE WERE NO SURVIVORS-YOU BLEW IT!
IN FACT YOU BLASTED A NEW LUNAR CRATER 267.13 FT. DEEP
Пришлось сварганить серьёзный оптимизатор, методом Монте-Карло подбирающий оптимальные величины расхода топлива на каждом шаге. Вот мой рекорд: 0.17 мили в час остаточной скорости прилунения. Будем запускать версию, переписанную с Фокала на Си. Скачаем с сайта самого Джима Сторера, ныне профессора университета Brandeis в Массачусетсе:
Исходный текст программы на Фокале лежит здесь: LunarLanderListing.jpg$ wget https://www.cs.brandeis.edu/~storer/LunarLander/LunarLanderTranslations/LunarLanderJohnsonTranslation-c.txt
$ mv LunarLanderJohnsonTranslation-c.txt rocket.c
$ cc rocket.c -o rocket
$ ./rocket
CONTROL CALLING LUNAR MODULE. MANUAL CONTROL IS NECESSARY
YOU MAY RESET FUEL RATE K EACH 10 SECS TO 0 OR ANY VALUE
BETWEEN 8 & 200 LBS/SEC. YOU'VE 16000 LBS FUEL. ESTIMATED
FREE FALL IMPACT TIME-120 SECS. CAPSULE WEIGHT-32500 LBS
FIRST RADAR CHECK COMING UP
COMMENCE LANDING PROCEDURE
TIME,SECS ALTITUDE,MILES+FEET VELOCITY,MPH FUEL,LBS FUEL RATE
0 120 0 3600.00 16000.0 K=:0
10 109 5016 3636.00 16000.0 K=:0
20 99 4224 3672.00 16000.0 K=:0
30 89 2904 3708.00 16000.0 K=:0
40 79 1056 3744.00 16000.0 K=:0
50 68 3960 3780.00 16000.0 K=:0
60 58 1056 3816.00 16000.0 K=:0
70 47 2904 3852.00 16000.0 K=:200
80 37 1930 3476.43 14000.0 K=:200
90 28 1385 3072.94 12000.0 K=:189
100 20 1515 2664.30 10110.0 K=:189
110 13 2592 2222.89 8220.0 K=:177
120 7 4892 1777.47 6450.0 K=:183
130 3 3573 1274.99 4620.0 K=:198
140 0 5050 673.10 2640.0 K=:198
150 0 9 1.49 660.0 K=:10
ON THE MOON AT 157.20 SECS
IMPACT VELOCITY OF 0.17 M.P.H.
FUEL LEFT: 588.05 LBS
PERFECT LANDING !-(LUCKY)
В игру можно играть онлайн на сайте: lunar69.uber.space/lunar.html

no subject
Date: 2023-07-12 12:25 (UTC)Как интересно, это снижение расхода на 110-й секунде.
Вот у японцев что-то не вышло последний раз. Плохо тормозили.
no subject
Date: 2023-07-12 13:46 (UTC)(или я их с кем другим спутал? не, вроде про Хакуту именно это и пишут)
no subject
Date: 2023-07-12 19:31 (UTC)Точнее, хорошая работа алгоритма поиска оптимального решения.
no subject
Date: 2023-07-12 15:41 (UTC)no subject
Date: 2023-07-12 19:32 (UTC)no subject
Date: 2023-07-12 16:07 (UTC)Попробуй в своей программе подбора поменять в реактивной формуле log(1-x) на -log(1+x) и посмотри, удастся ли тебе найти решение для интервала 10 секунд.
no subject
Date: 2023-07-12 19:12 (UTC)Мои исходники здесь: https://github.com/sergev/vak-opensource/blob/master/languages/c%2B%2B/lunar-landing/rocket.cpp
no subject
Date: 2023-07-12 19:33 (UTC)J = V + G * S + Z * (-Q - Q_2 / 2 - Q_3 / 3 - Q_4 / 4 - Q_5 / 5);
это же, в сущности,
J = V + G * S + Z * log(1-Q);
no subject
Date: 2023-07-12 20:41 (UTC)Достать бы
из могилыэтого умника, переводившего программу из Бейсика в Паскаль, из-за которого тысячи людей зазря убили многие тысячи часов, да носом ткнуть.no subject
Date: 2023-07-12 21:53 (UTC)0 120 0 3600.00 16000.0 K=:0 10 109 5016 3636.00 16000.0 K=:0 20 99 4224 3672.00 16000.0 K=:0 30 89 2904 3708.00 16000.0 K=:0 40 79 1056 3744.00 16000.0 K=:0 50 68 3960 3780.00 16000.0 K=:0 60 58 1056 3816.00 16000.0 K=:0 70 47 2904 3852.00 16000.0 K=:200 80 37 1930 3501.02 14000.0 K=:200 90 28 1024 3125.45 12000.0 K=:200 100 20 576 2721.96 10000.0 K=:200 110 13 1030 2286.48 8000.0 K=:200 120 7 2900 1813.98 6000.0 K=:200 130 3 1506 1298.16 4000.0 K=:200 140 0 2837 730.93 2000.0 K=:200Заметь, что в свободном падении (до 70 секунд) высота уменьшается ровно так же, но как только даём тягу - сразу расхождение. На 80-й секунде уже 37 1913 против 37 1930.
no subject
Date: 2023-07-12 22:08 (UTC)no subject
Date: 2023-07-12 22:43 (UTC)no subject
Date: 2023-07-12 23:25 (UTC)The best score 0.673517, control { 0 0 0 0 0 0 0 200 194 174 200 200 196 191 188 11 }
Вот это другое дело!
Date: 2023-07-12 23:36 (UTC)МISSIОN СОNТRОL САLLING LUNАR МОDULЕ: МАNUАL СОNТRОL IS NЕСЕSSАRУ FОR LАNDING. WНАТ IS УОUR ЕХРЕRIЕNСЕ: 0 1 2(SТАNDАRD) 3 4 5 6 7 8 9(NО ЕХРЕRIЕNСЕ) ? WНАТ IS УОURS ? 2 УОU МUSТ SРЕСIFУ А FUЕL RАТЕ ЕАСН 10 SЕСОNDS. RАТЕS МUSТ ВЕ ZЕRО ОR ВЕТWЕЕN 8 АND 200 LВS.РЕR SЕС. УОU НАVЕ 16000 LВS ОF FUЕL. САРSULЕ WЕIGНТ IS NОW 32500 LВS INСLUDING FUЕL. СОММЕNСЕ LАNDING РRОСЕD. FIRSТ RАDАR СНЕСК СОМING UР: ТIМЕ(SЕС) АLТ(МILЕS + FЕЕТ) VЕLОСIТУ(FРS) FUЕL(LВS) 0 120 0 5280 16000 FUЕL RАТЕ=0 10 109 5016 5333 16000 FUЕL RАТЕ=0 20 99 4224 5386 16000 FUЕL RАТЕ=0 30 89 2904 5438 16000 FUЕL RАТЕ=0 40 79 1056 5491 16000 FUЕL RАТЕ=0 50 68 3960 5544 16000 FUЕL RАТЕ=0 60 58 1056 5597 16000 FUЕL RАТЕ=0 70 47 2904 5650 16000 FUЕL RАТЕ=200 80 37 1913 5103 14000 FUЕL RАТЕ=194 90 28 1215 4535 12060 FUЕL RАТЕ=174 100 20 781 3994 10320 FUЕL RАТЕ=200 110 13 1148 3316 8320 FUЕL RАТЕ=200 120 7 3312 2577 6320 FUЕL RАТЕ=196 130 3 2570 1784 4360 FUЕL RАТЕ=191 140 0 4760 933 2450 FUЕL RАТЕ=188 150 0 4 3 570 FUЕL RАТЕ=11 ОN ТНЕ МООN АТ 152 SЕСОNDS. IМРАСТ VЕLОСIТУ ОF 1 F.Р.S. FUЕL LЕFТ 547 LВS. РЕRFЕСТ LАNDING. УОU LUСКУ JЕТ JОСКЕУ.Через 40 лет мы наконец освоили посадку на Луну. 😀
Re: Вот это другое дело!
Date: 2023-07-13 01:36 (UTC)Уровень 0 - явно нерешаемый.
Моя программа 3 года назад пыталась перебором с возвратом искать первый попавшийся годный способ сажать, но за время, которое я был готов ждать (минут 5) с интервалом 10 секунд ничего не находилось, поэтому я просто снизил интервал, и довольно быстро годный вариант нашелся. А optimize работает минут 15.
Re: Вот это другое дело!
Date: 2023-07-13 01:43 (UTC)Я отправил email с решением профессору Стореру. Посмотрим, отзовётся ли.
Re: Вот это другое дело!
Date: 2023-07-13 19:18 (UTC)The best score 228.297, control { 0 0 0 0 0 0 0 189 182 190 200 199 200 199 200 8 }
(последняя восьмерка незначащая, садится раньше)
140 0 3858 594.76 1910.0 K=:200 ON THE MOON AT 148.41 SECS IMPACT VELOCITY OF 21.50 M.P.H. FUEL LEFT: 228.30 LBS CONGRATULATIONS ON A POOR LANDINGТак что если манипулировать длительностью первоначального свободного падения и расходом с точностью до секунды, то может быть, что-то можно подобрать. Но уже не так интересно.
no subject
Date: 2023-07-13 20:18 (UTC)no subject
Date: 2023-07-13 21:50 (UTC)TIME,SECS ALTITUDE,MILES+FEET VELOCITY,MPH FUEL,LBS FUEL RATE 0 0 0 -22.00 0.0 K=:200 10 1 70 -694.90 2000.0 K=:200 20 3 4199 -1297.84 4000.0 K=:200 30 8 897 -1843.40 6000.0 K=:200 40 13 5236 -2341.03 8000.0 K=:200 50 21 727 -2798.05 10000.0 K=:200 60 29 2660 -3220.19 12000.0 K=:200 70 38 5277 -3612.07 14000.0 K=:200 80 49 2155 -3779.86 15000.0 K=:0 90 59 4529 -3743.86 15000.0 K=:0 100 70 1095 -3707.86 15000.0 K=:0 110 80 2413 -3671.86 15000.0 K=:0 120 90 3203 -3635.86 15000.0 K=:0 130 100 3465 -3599.86 15000.0 K=:^Cno subject
Date: 2023-07-13 22:26 (UTC)И на русском, для полноты картины
Date: 2023-07-12 23:39 (UTC)ЦЕНТР УПРАВЛЕНИЯ ВЫЗЫВАЕТ ЛУННЫЙ МОДУЛЬ: ДЛЯ ПОСАДКИ ПЕРЕЙДИТЕ НА РУЧНОЕ УПРАВЛЕНИЕ. КАКОВ ВАШ ОПЫТ: 0 1 2(НОРМА) 3 4 5 6 7 8 9(ОПЫТА НЕТ) ? ЧТО У ВАС ? 2 ВЫ ДОЛЖНЫ УКАЗЫВАТЬ СКОРОСТЬ РАСХОДА ТОПЛИВА ЧЕРЕЗ КАЖДЫЕ 10 СЕКУНД. РАСХОД ДОЛЖЕН БЫТЬ ИЛИ 0 ИЛИ ОТ 8 ДО 200 ФУНТОВ В СЕКУНДУ. У ВАС 16000 ФУНТОВ ТОПЛИВА. ВЕС КАПСУЛЫ СЕЙЧАС 32500 ФУНТОВ, ВКЛЮЧАЯ ТОПЛИВО. НАЧИНАЙТЕ ПОСАДКУ. ПЕРВЫЙ РАДИОЛОКАЦИОННЫЙ ЗАМЕР ВЫСОТЫ: ВРЕМЯ(СЕК) ВЫС(МИЛИ + ФУТЫ) СКОРОСТЬ(Ф/С) ТОПЛ(ФУН) 0 120 0 5280 16000 РАСХОД=0 10 109 5016 5333 16000 РАСХОД=0 20 99 4224 5386 16000 РАСХОД=0 30 89 2904 5438 16000 РАСХОД=0 40 79 1056 5491 16000 РАСХОД=0 50 68 3960 5544 16000 РАСХОД=0 60 58 1056 5597 16000 РАСХОД=0 70 47 2904 5650 16000 РАСХОД=200 80 37 1913 5103 14000 РАСХОД=194 90 28 1215 4535 12060 РАСХОД=174 100 20 781 3994 10320 РАСХОД=200 110 13 1148 3316 8320 РАСХОД=200 120 7 3312 2577 6320 РАСХОД=196 130 3 2570 1784 4360 РАСХОД=191 140 0 4760 933 2450 РАСХОД=188 150 0 4 3 570 РАСХОД=11 НА ЛУНЕ НА 152 СЕКУНДЕ. СКОРОСТЬ В МОМЕНТ КАСАНИЯ 1 ФУТ/СЕК. ОСТАЛОСЬ ТОПЛИВА 547 ФУНТОВ. ИДЕАЛЬНАЯ ПОСАДКА. ВЫ СЧАСТЛИВЫЙ РАКЕТНЫЙ ЖОКЕЙ.no subject
Date: 2023-07-12 20:14 (UTC)no subject
Date: 2023-07-12 20:20 (UTC)no subject
Date: 2023-07-12 20:24 (UTC)$ dispak games.b6 ИГРА К ВАШИМ УСЛУГАМ НУЖНЫ ПРАВИЛА ? =-* к ==* пос ШАШ ЧТО У ВАС ? ШАШ ШАШ ШАШ ШАШ 0 120 0 5280 19500 РАСХОД=0 10 109 5016 5333 19500 РАСХОД=0 20 99 4224 5386 19500 РАСХОД=0 30 89 2904 5438 19500 РАСХОД=0 40 79 1056 5491 19500 РАСХОД=0 50 68 3960 5544 19500 РАСХОД=0 60 58 1056 5597 19500 РАСХОД=0 70 47 2904 5650 19500 РАСХОД=200 80 37 1913 5103 17500 РАСХОД=181 90 28 1006 4577 15690 РАСХОД=196 100 20 509 3962 13730 РАСХОД=200 110 13 1203 3282 11730 РАСХОД=188 120 7 3482 2589 9850 РАСХОД=187 130 3 2417 1837 7980 РАСХОД=185 140 0 3904 1021 6130 РАСХОД=197 ШАШ ШАШ ШАШ ШАШ ШАШ ЕЩЕ РАЗ (1) ИЛИ ВСЕ (0) ? 0no subject
Date: 2023-07-12 20:47 (UTC)no subject
Date: 2023-07-12 21:33 (UTC)https://www.desmos.com/calculator/fmmxwekfpo
no subject
Date: 2023-07-12 21:36 (UTC)А не подскажете?
Date: 2023-07-12 16:32 (UTC)Re: А не подскажете?
Date: 2023-07-12 17:21 (UTC)Re: А не подскажете?
Date: 2023-07-12 18:03 (UTC)Я считал что я подстраховался с 2Wt, возьму 4.
На а коробочку для поделок не посоветуете?
Re: А не подскажете?
Date: 2023-07-12 18:11 (UTC)Re: А не подскажете?
Date: 2023-07-12 18:32 (UTC)https://www.amazon.com/Eightwood-Aluminum-Electronic-Enclosure-Symmetrical/dp/B0107WWDFU/
no subject
Date: 2023-07-12 21:15 (UTC)no subject
Date: 2023-07-13 08:33 (UTC)no subject
Date: 2023-07-12 22:27 (UTC)no subject
Date: 2023-07-12 23:51 (UTC)no subject
Date: 2023-07-13 08:34 (UTC)no subject
Date: 2023-07-13 08:39 (UTC)