?

Log in

No account? Create an account

Previous Entry | Next Entry

Нарисовал программу, моделирующую... ну, неважно что, важно, что довольно сложную систему. Посмотрел на результаты пробного прогона - все красиво получается, ура. Запустил настоящие прогоны - на неделю счета. Сделано!

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

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

И главное, такая сволочная ошибка, что на пробных прогонах не могла проявиться - по техническим причинам...

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

Tags:

Comments

( 25 comments — Leave a comment )
vadim_i_z
Nov. 19th, 2009 08:14 pm (UTC)
Интересно поймет ли нынешнее поколение заголовок и про землекопов?! Я-то понял.
scholar_vit
Nov. 20th, 2009 03:25 am (UTC)
:)
alexey_ivanov
Nov. 19th, 2009 08:25 pm (UTC)
Не напрасно говорят, что когда с первого раза всё хорошо - это очень подозрительно. :)
profpr
Nov. 19th, 2009 09:11 pm (UTC)
Очень давно мой знакомый занимался моделированием пищеварительной системы. Закончил программу, сделал прогон, пошел хвастаться: у него получились колебания об"ема проходящей пищи, "глотки". Бедняга...
scholar_vit
Nov. 20th, 2009 03:27 am (UTC)
А что там было на самом деле?
profpr
Nov. 20th, 2009 03:37 am (UTC)
Шаг по времени неправильно установил в условно-устойчивой разностной схеме :-)
scholar_vit
Nov. 20th, 2009 04:22 am (UTC)
Это была аксиома в ранних экспериментах по измерению гравитационных волн: любая ошибка порождает мощные гравитационные волны.
ex_juan_gan
Nov. 19th, 2009 09:33 pm (UTC)
А как насчёт юниттестов?
nec_p1us_u1tra
Nov. 19th, 2009 09:43 pm (UTC)
Юнит-тесты тут просто не в кассу. Они тестируют предсказуемость на некотором наборе данных да контрактованность интерфейсов. А у меня например в "олимпиадных" эйлеровских задачах были например алгоритмические ошибки, причем такие что скажем на десятках тысяч натуральных чисел (считаемых программой за секунды, вручную за минуты проверяемых) все идеально, а где-то в районе сотен тысяч, проверяемых руками за десятки минут -- расхождение.

А тут в самом посте, если внимательно прочесть, сказано "ошибку в алгоритме".
ex_juan_gan
Nov. 22nd, 2009 12:01 am (UTC)
Всех случаев не предусмотришь, но если кусочки хорошо вылизаны (о чём свидетельствуют юниттесты), то ведь и интеграция может быть оттестирована уже отдельно - так что весь этот ужас, при котором получаются минус землекопы, легко локализуется добавлением юниттестов. Которые да, всех случаев не предусмотрят.
scholar_vit
Nov. 20th, 2009 03:32 am (UTC)
Как правильно заметил nec_p1us_u1tra, юниттесты хороши многим, но ошибки в алгоритме они ловят далеко не всегда (хотя и ловят иногда). В данном случае я просто не подумал о возможности некоей хитрой ситуации, которая возникает крайне редко. Ну да, теперь я могу вставить ее в тест - но если бы я подумал о ней, когда тестировал, то я бы и в алгоритме её предусмотрел, верно?
ex_juan_gan
Nov. 21st, 2009 11:55 pm (UTC)
Да это всё понятно, конечно.
roman_sharp
Nov. 19th, 2009 11:21 pm (UTC)
Напомнило...

1) В старых добрых Sid Meyer's Pirates сумма денег персонажа по всей видимости имела верхним пределом верхний предел integer 32768 (для солидности суммы к этому числу дорисовывался нолик). Игрок же при определенном везении и экспериментах с save-load мог запросто набрать больше. После чего вся система игровых данных шла в совершенный разнос: например, в бою на твоем корабле оказывалось -8 человек, а при попадании в него залпа вражеского корабля их становилось -16.


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

Ну, кто скажет, какая? :)
scholar_vit
Nov. 20th, 2009 04:19 am (UTC)
Добавляли случайные смещения к повторяющимся векторам?
roman_sharp
Nov. 20th, 2009 07:00 pm (UTC)
Нет, совсем сердито ;) Дописал сравнение ввода и результата итерации, и в случае их совпадения с определенной точностью - выдачу полученного как конечного результата.
cheeha
Nov. 19th, 2009 11:25 pm (UTC)
Знакомо, сочувствую. :))
dmpogo
Nov. 20th, 2009 02:36 am (UTC)
> Но теперь получается, что все прогоны с нуля повторять надо.

Big deal, my colleagues just run 250 CPUs for month and a half and then realized that they were writing out the wrong stuff ...
scholar_vit
Nov. 20th, 2009 04:20 am (UTC)
И небось на деньги налогоплательщиков :)
dmpogo
Nov. 20th, 2009 09:40 pm (UTC)
В конечном счете - конечно
dr_trollin
Dec. 18th, 2009 02:30 pm (UTC)
да, досадно, но ...
да, досадно, :)
но хоть не реального времени задача и то лепско :)

кстати,- технический вопрос -- чем считаете-то?
-т.е. не "какую математику",
но же ж "какие програмные пакеты" используете для моделирования "довольно сложную систему"(с)
scholar_vit
Dec. 18th, 2009 05:51 pm (UTC)
Re: да, досадно, но ...
Стыдно признаться, но ничего специального для счета не использую. Все пишу сам. Сложные кусочки вычислений - на C (даже, увы на фортране, когда мне нужен lapack), обвязки - Perl и make, и прочие вещи.

То есть типичный случай с простыми вычислениями выглядит так:

1. Я вставляю в TeXовский файл \includegraphics{analysis/234-12-17.eps}

2. Makefile строит dependency и понимает, что нужна картинка analysis/234-12-17.eps

3. Make вызывает перловский скрипт, который осознает, что мне нужен анализ с параметрами 234, 12 и 17.

4. Этот скрипт прогоняет анализ - на C, Perl, что придется и создает файл с данными.

5. Make вызывает gnuplot и создает рисунок

6. Make строит pdf с отчетом.
dr_trollin
Dec. 19th, 2009 07:10 pm (UTC)
Re: да, досадно, но ...
ыч как!

нет,- в общем-то поддерживаю.
сам таким был, когда свой рентген расплавов надо было считать.

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

но, в принципе ежели,- таким образом возможно что и удобнее будет ибо напороть тяжелее, но (как показал опыт) таки тож проруха,- да... -- бывает.
scholar_vit
Dec. 19th, 2009 08:36 pm (UTC)
Re: да, досадно, но ...
Специализированных пакетов очень много, верно. Но на то, чтобы изучить, как они работают, нужно время. А на то, чтобы понять, где там засады и проблемы - очень много времени.

У нас есть "специалисты по пакету XXX". Они несколько лет моделируют именно с данным пакетом, и хорошо знают, где там что.

Кстати, нашел старый пост про свой инструментарий: http://scholar-vit.livejournal.com/136432.html
al_zatv
Feb. 4th, 2010 02:55 pm (UTC)
слушай, а у меня вопрос немного не по теме, но по программированию
http://al-zatv.livejournal.com/137474.html
если есть чего посоветовать, буду признателен.
( 25 comments — Leave a comment )

Profile

knot
scholar_vit
scholar_vit

Latest Month

August 2018
S M T W T F S
   1234
567891011
12131415161718
19202122232425
262728293031 

Tags

Powered by LiveJournal.com
Designed by Paulina Bozek