dastapov: (Default)
[personal profile] dastapov
Имя команды: li-monad (спасибо aleksey/jabber.ru за идею)
Состав: я, endless-world, [livejournal.com profile] iakovz, при участии blancus.
Итоговый бал: 2234.7171 (12 problems solved)

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



Как я уже писал, в этом году я перепутал июнь с июлем, и чуть было не пропустил ICFPC вообще. О том, чтобы собирать команду, не могло быть и речи - на это просто не было ни календарного, ни свободного времени. В результате, в последние два дня перед соревнованием я попытался найти команду, к которой можно было присоединиться, но все места уже были заняты.

В ходе моих поисков на #icfp-contest в последний день, буквально за 6 часов до начала, меня законтачили два человека и предложили объединится в импровизированную команду. Я согласился, тем более, что вероятно было участие еще пары англоязычных персонажей из haskell community. Забегая наперед, с сожалением констатирую, что из этой попытки ничего особо хорошего не вышло, т.к. командного взаимодействия у нас не получилось, и команда буквально развалилась на ходу еще до конца первых суток. Строить общие планы мои соратники по команде не спешили, чем планируют занимаются - не говорили, а в середине второго дня [livejournal.com profile] iakovz вообще пропал, оставив вместо себя полезную ссылку на книгу "Orbital Mechanicas" и приведенного в командную конференцию математика blancus, который честно пытался нам помочь :)

Впочем, обо всем по порядку.

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

Задача сводилась к написанию кода, который выдает "программу" управления спутником для решения задачи по орбитальному пилотированию. Участникам было предложено решить несколько задач с возрастающей степенью сложности, каждую из которых нужно было решить для четырех разных наборов входных данных:
  1. Перевести спутник, движущийся по круговой орбите вокруг центрального тела (Земли), на круговую орбиту с другим радиусом
  2. Произвести "стыковку" с другим спутником, движущимся по круговой орбите
  3. Произвести "стыковку", но при условии, что начальная орбита управляемого спутника и спутника-цели - это не круги, а эллипсы
  4. Пролететь в радиусе 1 км от 11 спутников, движущихся по произвольным орбитам, дозаправляясь топливом на орбитальной заправочной станции и учитывая влияние не только Земли, но и Луны
Программа управления спутником состояла из команд по включению двигателя в определенные моменты времени, которое приводила к мгновенному изменению скорости спутника. Эту программу можно было рассчитывать на листике в клеточку, считать в специализированном ПО вроде MATLAB или Mathematica, или генерировать програмным путем. Для проверки корректности рассчетом можно было скормить свою программу в предоставленный организаторами симулятор движения небесных тел и убедиться, что спутник действительно прилетает куда надо.

Правда, чтобы обеспечить возможность запуска своего кода в любой среде, организаторы скомпилировали свою программу в код некой виртуальной машины, спецификации на которую прилагались в задании. Соответственно, у участников было два пути проверки правильности своих решений - или заливать их на сайт организаторов, где они проходили проверку в течении 5-60 минут, или самостоятельно реализовать описанную виртуальную машину и получить возможность запускать "проверялку" у себя на компьютере.

День первый, старт соревнования в 21:00 EEST 26.06

Мы в течении получаса читали задание, а потом собрались в jabber, чтобы его обсудить. Выяснилось, что понимаем мы его примерно одинаково. После этого мы подключились к gobby и совместно набросали высокоуровневый дизайн решения. Где-то в 23:00 все, кроме меня, отвалились спать, не оставив никаких вещественных результатов. Endless-world сказал, что он пишет VM, и завершит ее завтра с утра. Я написал декодирование байт-кода от организаторов в вид, пригодный для потребления виртуальной машиной и набросал код, который объединяет еще не написанные модули - декодер байт-кодов, VM, поиск решений предложенных задач, формирователь файла с решениями и т.п. - и тоже отправился спать

День второй, 27.06

Организаторы приложили к условию задачи ссылку на страницу на wikipedia с описанием одного из способов решения первой задачи. Казалось бы - бери, кодируй и запускай. Однако, быстро решить первую задачу не получилось. Хотя первая версия VM была готова еще в 10:00, нормальной запустить ее удалось только в 13:40. Мешали как баги, допущенные нами в реализации, так и баги, допущенные организаторами в спецификации. Кроме того, в библиотеке, которую я использовал для побитового декодирования данных, обнаружился мерзкий баг, который периодически приводил к потере данных. Как известно, эффект от независимых багов не складывается, а умножается, что и привело к такой потере темпа.

Еще час был потерян из-за того, что все константы, кроме одной, были указаны в условии в шестнадцатеричном виде. Мы этого при беглом чтении не заметили, и указывали номер задачи в виде 0x1001 вместо 1001.  К 15:00 мы с endless-world независимо друг от друга реализовали две версии решателя, вычисляющего параметры Гомановского перехода на другую круговую орбиту, и выяснили, что мы совсем забыли с институтских времен и физику, и математику, и тригонометрию. Разнообразные досадные ошибки (забыли домножить в нужном месте на массу Земли; забыли, как рассчитать вектор, перпендикулярный к данному; ...) привели к тому, что в 17:00 спутник у нас уже летал, но в цель попасть никак не мог.

Перепробовав несколько вариантов расчета перпендикуляра, "смотрящего" в нужную нам сторону (да-да, и нечего смеяться), пересчитав несколько раз формулы из wikipedia по найденной умной книге и оптимизировав VM, чтобы она не отжирала память при работе, мы в конце-концов получили в 19:00 код, решающий первую задачу, для всех четырех вариантов известных старторвых условий.

Ура! Получается, что мы еще успеваем сдать какие-то результаты для участия в т.н. lightning round - соревновании по результатам, полученным в течении первых суток. Но не тут-то было - отосланные организаторам программы управления были проверены и получили оценку "CRASHED!"

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

Как выяснилось - мы плохо прочитали и поняли условие задачи. Нам казалось, что если в программе записано "в момент времени T подать имульс V в направлении a", то двигатели включатся и выключатся. А по спецификации получалось, что они включатся и будут работать до тех пор, пока в программе не встретится команда "в момент времени T' подать импульс величиной 0". Соответственно, по мнению организаторов все наши программы врубали газ на полную и летели, куда глаза глядят, вплоть до исчерпания запасов топлива.

К сожалению, осознание этого факта пришло ко мне уже после окончания lightning round-а. Первые наши результаты были приняты уже 28-го числа, сразу после полуночи.

День третий, 28.06

Выяснилось, что организаторы ошиблись в своем коде, и для первой задачи можно получить больше баллов не экономя топливо, а наоборот - тратя его :) Организаторы сказали, что так уже и будет - для первой задачи больше балов получают "растратчики", а для всех следующих - те, кто экономит топливо.

Endless-world прочел об этом в блоге организаторов и реализовал хак, который сжигает остатки топлива после выхода на целевую орбиту, и мы получили за первую задачу 382 балла из 400 возможных!

Вторая задача похожа на первую - ведь это, по сути, тот же переход на другую орбиту, который мы уже умеем делать. Правда, после перехода на нужную орбиту надо чуть разогнаться (или затормозить), чтобы орбита из круговой стала эллиптической и мы догнали таким образом спутник, с которым нам надо состыковаться. Впрочем, перейдя к решению второй задачи, я обнаружил, что мы по-прежнему где-то ошибаемся в рассчете перпендикуляров к радиусу орбиты - в двух случаях из четырех во второй задаче наш спутник тормозит вместо разгона и врезается в Землю :(

Кроме этого, в коде решателя первой задачи (который я хотел переиспользовать для решения второй задачи) нашлись два бага, которые компенсировали друг друга. Со скрипом и проблемами, с многочисленными правками физических рассчетов, к 16:00 появилась версия решения, которая пыталась выполнить phasign -- тот самый маневр по догонянию спутника-цели.

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

Попытки сделать какой-то "подруливатель" успехом не увенчались - становилось только хуже. Во второй половине дня я плюнул, взял Mathematica и самостоятельно вывел решение задачи phasing-а с нуля. Результат получился выше всяких похвал - маневр завершался в пределах +-50 метров от цели, и в течении 900 секунд мы отлетали максимум метров на 100-200. Вторая задача пошла в зачет :)

Мы не писали какого-то отдельного специального визуализатора - наша VM выводила отладочный лог с координатами нашего и целевого спутников на каждом шаге, а я использовал gnuplot для рисования красивых по этому логу:



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

На втором графике видно, как менялось расстояние до цели (синяя кривая) и расстояние от нашего спутника до Земли (красная кривая) с течением времени.

День третий, 29.06

В общем чат-логе за этот день нет ни одной строчки - все куда-то окончательно разбежались :(

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

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

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

Невзирая на все ошибки со стороны организаторов (было выпущено 8 уточняющих версий спецификации), мне соревнование этого года понравилось больше, чем прошлого. Остается надеятся, что когда-нибудь кто-нибудь из организаторов повторит успех 2006-го года.

Отдельно хотелось бы поблагодарить любимую [livejournal.com profile] yulanta за предоставленную возможность предаваться сомнительным развлечениям :)

Официальный scoreboard, по состоянию за 5 часов до окончания соревнования

И, наконец, немного статистики и всяких фактов
Объем кода: 1077 строк (из них 100 - VM, и 100 - базовые функции для физических рассчетов), язык - Haskell
Скорость работы VM: ~10 секунд на любой сценарий задачи 1
Кол-во commit-ов в репозиторий: 170 (151 - я, 14 - endless-world, 5 - [livejournal.com profile] iakovz)
Кол-во найденных в сети и просмотренных книг по орбитальной механике: 15
Из них полезных: 3
Кол-во памяти, потребляемой первой версией VM: от 400 до 3000 Мб, в зависимости от сценария (из-за неудачного design decision сборщик мусора не мог собрать старые версии состояния VM)
Кол-во памяти, потребляемой VM после оптимизации: от 5 до 20 мб

Финальная версия кода
http://adept.homeunix.net/icfpc2009

Отчеты и репозитории других команд (список будет пополняться)
Page 1 of 2 << [1] [2] >>

(no subject)

Date: 2009-06-29 11:31 pm (UTC)
From: [identity profile] http://users.livejournal.com/_navi_/
Обидно, что в этом году собрать команду не удалось. У меня дома кстати стоит книжка по управлению спутниками, вот только поездка все карты попутала :-)

communication

Date: 2009-06-29 11:39 pm (UTC)
From: [identity profile] maard.livejournal.com
на канале icfpc кто-то сказал, что очень помогает присутствие всех участников команды в одной комнате. на самом деле неважно. в прошлом году мы просидели все вместе на работе почти все выходные, а в этом каждый работал дома. и общение в этом году было более эффективным (устраивали скайп конференции). хотя окончательный состав команды определился за 2 дня до начала :)

Re: communication

Date: 2009-06-30 08:49 am (UTC)
From: [identity profile] bamsic.livejournal.com
В одной комнате - очень продуктивно выходит.

Не играл, но осуждаю

Date: 2009-06-30 12:33 am (UTC)
From: [identity profile] spamsink.livejournal.com
Очень халтурно подошли организаторы к своим обязанностям.
From: [identity profile] http://users.livejournal.com/_navi_/
но мне показалось, что по сравнению с предыдущим годом было гораздо лучше организовано.

(no subject)

From: [identity profile] coochik.livejournal.com - Date: 2009-06-30 08:46 am (UTC) - Expand

(no subject)

From: [identity profile] spamsink.livejournal.com - Date: 2009-06-30 02:48 pm (UTC) - Expand

(no subject)

Date: 2009-06-30 05:14 am (UTC)
From: [identity profile] tarantul.livejournal.com
Чуваки, вы в любом случае молодцы! Я за вас мегарад! :)

(no subject)

Date: 2009-06-30 05:22 am (UTC)
From: [identity profile] pufpuf.livejournal.com
По второй задаче я использовал другой метод: вместо phasing расчитать время Хохманновского перехода (по формуле), расчитать угол, который будет пройден целью за это время, и сделать только 1 переход (как и в первом варианте), но начать его в тот момент, когда сумма углов между нами и целью и расчетным углов составит PI. На тех четырех задачах при этом ухрдило бы, наверно, побольше времени (поскольку приходится долгол ждать на своей орбите), но зато минимальный расход топлива.

Честно говоря, это почему-то выводило меня на расстояние ок. 4 км от цели, но, видимо, была ошибка в расчетах (или нужно было более точные измерения сделать, или немного притормозить/ускориться). Короче говоря, я закончил играть в воскресенье и довести эту задачу до конца уже не хватило желания и времени.

(no subject)

Date: 2009-06-30 08:51 am (UTC)
From: [identity profile] bamsic.livejournal.com
Нет, ошибка была в углах. Мы от углов перешли на длины окружностей - и сразу точность возросла.

Кстати, по началу тоже ждали, но выгоднее делать увеличенную (чтобы отстать) или уменьшенную (чтобы догнать) промежуточную орбиту.

(no subject)

From: [identity profile] pufpuf.livejournal.com - Date: 2009-06-30 05:32 pm (UTC) - Expand

(no subject)

From: [identity profile] dmitry-vk.livejournal.com - Date: 2009-06-30 10:40 am (UTC) - Expand

(no subject)

Date: 2009-06-30 05:35 am (UTC)
From: [identity profile] w23.livejournal.com

А почему так медленно? Это Haskell такой?
Самый наивный решатель на си даёт ~0.5 сек для той же задачи на 800МГц-камне. И то это очень медленно, я считаю.

(no subject)

Date: 2009-06-30 08:49 am (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
из нее вываливались тонны отладочного мусора, который, в большинстве случаев, шел на экран...

(no subject)

From: [identity profile] w23.livejournal.com - Date: 2009-06-30 09:11 am (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_adept_/ - Date: 2009-07-03 09:14 pm (UTC) - Expand

(no subject)

Date: 2009-06-30 05:41 am (UTC)
From: (Anonymous)
Я решил поучаствовать за пару часов до начала.
Команду конечно никакую не подобрал.
icfpc начался в 2 часа ночи по моему местному, поэтому я быстро прочел спеку и ушёл спать.
С утра за пару часов написал ВМ и форматтер, переводящий текстовый файл в байт-код решения. баг был только один - я брал младшие биты в коде условия для инструкции cmpz, а надо было старшие как указано было в спеке.
Быстренько решил первую модель (3-4 часа). Непонятно зачем вам было считать перпендикуляр :\

dV = sqrt(mu / r1) * (sqrt(2 * r2 / (r1 + r2)) - 1);
vx = sx - sx0 + mu/(rad * rad);
vy = sy - sy0 + mu/(rad * rad);
v = sqrt(vx * vx + vy * vy);
IOinPorts[VX_PORT] = -(dV / v) * vx;
IOinPorts[VY_PORT] = -(dV / v) * vy;

Вторая задача пошла хуже. Их модель не предоставляет идеальный круг, да и погрешность, несмотря на double, существенно влияла. Тригонометрию я еще со школы не любил, поэтому вспомнив что я программист, написал простенький перебор по условию что если через какое-то вермя мы запустим двигатель чтобы выйти на орбиту цели, то мы с ним встретимся. Перебор легко укладывался в 100k секунд. Но всё-равно был достаточно неточен. Исправлял эту неточность я микроимпульсами |dV| < 1.0.

В общем затратил я часов 20 из 72, и решил 8 задач, даже не старался оптимизировать решения, поэтому довольно мало очков - 1000.

Писал на Си. 500 строк кода. Скорость работы - 1-10 на любой сценарий задач 1-2. Память - 1.5 метра.

(no subject)

Date: 2009-06-30 06:14 am (UTC)
From: [identity profile] cd-riper.livejournal.com
вот тебе и хаскелл, и функциональное программирование... :)))

(no subject)

From: [identity profile] shikunshi.livejournal.com - Date: 2009-06-30 07:45 am (UTC) - Expand

К. О.

Date: 2009-06-30 05:51 am (UTC)
From: [identity profile] kalobyte.livejournal.com
кризис в наса
теперь они используют халявные человеческие ресурсы mozg@home

(no subject)

Date: 2009-06-30 06:47 am (UTC)
From: [identity profile] fonmax.livejournal.com
мои поздравления, вы таки в сотне:
place: 99 score: 1127.1283 team: li-monad solved: 8

полон решимости поучаствовать в следующем году.

(no subject)

Date: 2009-06-30 06:54 am (UTC)
From: [identity profile] shikunshi.livejournal.com
Это не окончательный итог, посмотри шапку записи.
PS: Анонимный пост - мой.

(no subject)

From: [identity profile] fonmax.livejournal.com - Date: 2009-06-30 07:21 am (UTC) - Expand

(no subject)

Date: 2009-06-30 07:29 am (UTC)
From: [identity profile] http://users.livejournal.com/_navi_/
я вот тут подумал, надо было для VM использовать LLVM-баиндинги к Haskell'у :-)

(no subject)

Date: 2009-07-04 10:48 am (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
На IRC кто-то говорил, что они так сделали, и получилось в два раза медленее варианта на C.

(no subject)

Date: 2009-06-30 08:29 am (UTC)
From: [identity profile] alexott.livejournal.com
интересный отчет. а можно ссылки на полезные книги?

(no subject)

Date: 2009-07-03 09:18 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
1. Howard Curtis, "Orbital Mechanics for Engineering Students"
2. "Spacecraft Dynamics and Control", Cambridge Aerospace Series 7, general editors Michael R. Rycroft & Robert Stengel
3. Victor Szebehely "Adventures in Celestial Mechanics"

В меньшей степени: "Fundamentals of Astrodynamics" by Roger Bate, Donald Mueller, Jerry White.

Все находится на гигапедии.

(no subject)

From: [identity profile] alexott.livejournal.com - Date: 2009-07-05 12:14 pm (UTC) - Expand

(no subject)

From: [identity profile] aldekein.livejournal.com - Date: 2009-07-06 10:30 am (UTC) - Expand

(no subject)

Date: 2009-06-30 08:55 am (UTC)
From: [identity profile] bamsic.livejournal.com
А я все выходные искал в листе "LazyBottoms"...

Наш отчет.

(no subject)

Date: 2009-06-30 09:02 am (UTC)
From: [identity profile] larubin.livejournal.com
Наш отчет, команда 7-15, десятое место по таблице от T-4

http://larubin.livejournal.com/119872.html

(no subject)

Date: 2009-06-30 12:48 pm (UTC)
From: [identity profile] tilarids.blogspot.com (from livejournal.com)
В твоём списке во второй пункт можешь поставить http://cm.xa4a.org.ua - это страница нашей команды и http://tilarids.blogspot.com/2009/06/icfp-contest-2009.html - это первый отчёт.

(no subject)

Date: 2009-06-30 01:15 pm (UTC)
From: [identity profile] wild-tatar.livejournal.com
http://wild-tatar.livejournal.com/48584.html — отчёт Kharkiv MINDS

(no subject)

Date: 2009-06-30 01:53 pm (UTC)
From: [identity profile] shigin.livejournal.com
отчет (http://shigin.livejournal.com/128762.html) из глубины таблицы...
From: [identity profile] rst7-cbsie.livejournal.com
http://thirteen.kharkov.ru/

(no subject)

Date: 2009-06-30 03:12 pm (UTC)
From: [identity profile] voidex.livejournal.com
Раз уж все выкладывают отчёты, то http://voidex.livejournal.com/29050.html

(no subject)

Date: 2009-06-30 05:37 pm (UTC)
From: [identity profile] oal.livejournal.com
Мы на самом деле все зафейлили. Я собрал трех студентов и коллегу, сидеть должны были в одном помещении. Первый день решили писать VM, написали лексер и половину парсера. Где-то к трем часам дня во второй день VM работала. При этом коллега пришел во второй день, один из студентов нефига не делал и после первого дня я его не видел. Потом мы долго пытались решить сразу переход с эллипса на эллипс, потому что круг — это частный случай. Студент — оставшийся один — в этот момент писал 1001 и форматировалку ответа. Я изваял считалку аналитической формулы эллипса по точкам на octave и думал над переходом эллипс-эллипс.

Я хотел писать на хаскеле или по ситуации. Из-за жалостливых взглядов студентов писать стали на жабке. О чем я неоднократно пожалел — у меня оно не взлетело. Совсем.

Итак, вечер второго дня — у нас есть 1001. Третий день. Меня нет, я улетаю на конференцию. Коллеги нет. Студет остался один. Он героически весь день делает 200x. Я думаю над эллипсами, когда дорываюсь до чего-то пишущего. Ночью третьего дня я придумываю как сконструировать нужный эллипс, ору об этом в мыло, ирц и прочие колокола. Коллеги нет, студента нет. Четвертый день. Я сижу на конференции зная правильный ответ, студент умотал на каникулы, коллега пишет статью. Я несколько часов и целую ночь знаю что делать, но всем пофиг, а у меня нет на это ни времени, ни сил!

Вот такой вот epic fail.

А разгадка одна — органзация, организация и еще раз организация.

(no subject)

Date: 2009-06-30 06:39 pm (UTC)
From: [identity profile] pbl.livejournal.com
Приобщусь.

http://pbl.livejournal.com/895500.html (http://pbl.livejournal.com/895500.html)

Некоторый избыток не вполне нормативной лексики.

(no subject)

Date: 2009-06-30 09:38 pm (UTC)
From: [identity profile] murkt.livejournal.com
Я собрал кучу линков на отчёты на хабре (http://habrahabr.ru/blogs/icfpc/63279/), можно там почитать.

(no subject)

Date: 2009-07-04 02:44 pm (UTC)
From: [identity profile] frozenpinguin.livejournal.com
Спасибо за подборку!

Вот этой ссылки там вроде не было:
http://shikunshi.livejournal.com/6329.html?style=mine

И на сайте команды thirteen много новых постов про ICFPC.

(no subject)

From: [identity profile] murkt.livejournal.com - Date: 2009-07-04 03:17 pm (UTC) - Expand

(no subject)

Date: 2009-06-30 10:37 pm (UTC)
From: [identity profile] vayun.livejournal.com
А я потратил кучу времени на вывод формул перехода с произвольной орбиты на произвольную. Особенно много времени и багов заняли практически не использующиеся (изза жуткого расхода топлива) гиперболические орбиты. Еще площадь эллиптического и гиперболического сектора (между произвольными углами a1 и a1) не удалось нигде найти пришлось вывести, оказалось довольно непросто... В итоге когда это все заработало (после вылавливания всех потерянных минусов и Pi) выяснилось что из-за плохой точности double аналитические точные решения получаются приближенными и все равно нужен интегратор/предсказатель, который писать уже не хотелось (все было на Питоне).

Кстати странно что у вас не получалось считать траектории по двум точкам. У меня по первым двум точками симуляции рассчитывало все траектории и сразу попадало куда надо в первых 7 задачах.

Во втором задании, где надо выйти на одну орбиту с другим спутником у меня был оч. интересный баг:
Выхожу на орбиту, следую за ним - на дают очков. Написал функцию стабилизации орбиты микроимпульсами. По логам получалось, что лечу на расстоянии нескольких сантиметров от него в течении 10000 секунд (по условию достаточно 900 метров 1000 сек.) - нет очков. Я впадаю в ступор "что за фигня тут творится?".
Оказалось, что изза непоняток в описании задания (ну сложно им было картинку нарисовать) у векторы второго спутника оказался инвертированным и мой спутник гонялся за его "призраком" (с беспрецедентной точностью:)). Добавление минусов в процедуре чтения тут же все исправило)

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

(no subject)

Date: 2009-07-01 11:06 am (UTC)
From: [identity profile] murkt.livejournal.com
Вообще-то шла речь о сложности расчётов наблюдаемых эллиптических траекторий в третьем (и четвёртом) заданиях. Понятное дело, что в 100х и 200х всё расчитывалось на раз-два.

А зачем делал гиперболические траектории в принципе? :)

(no subject)

From: [identity profile] vayun.livejournal.com - Date: 2009-07-01 01:32 pm (UTC) - Expand

(no subject)

Date: 2009-06-30 11:23 pm (UTC)
From: [identity profile] alogic.livejournal.com
Можно сказать, что вытянул всё почти сам, один, без ансамбля:)

Еще линки

Date: 2009-07-01 11:24 am (UTC)
From: [identity profile] kilew.livejournal.com
И еще линки на на отчет
http://stanfy.com.ua/blog/2009/07/01/icfp09-contest-part1/
http://stanfy.com.ua/blog/2009/07/01/icfp09-contest-part2/
Page 1 of 2 << [1] [2] >>

Profile

dastapov: (Default)
Dmitry Astapov

April 2017

M T W T F S S
     12
3 45 6789
10111213141516
17181920212223
24252627282930

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags