ltwood: (Default)
[personal profile] ltwood
Давно хотел прикрутить метод Хука-Дживса к одной задаче (это один из лучших методов оптимизации без вычисления производных, он хорошо справляется с т.н. «извилистыми оврагами» — одним из проклятий численной оптимизации). Проблема в том, что исходная статья практически недоступна, в книжках метод часто бывает описан с принципиальными ошибками (я знаю несколько примеров, проверять остальные описания нет ни времени, ни желания). В принципе я знаю как работает метод, даже когда-то реализовывал его, но хочется сделать реализацию, в точности соответствующую исходной статье и вышедшему на несколько лет позже обновлению алгоритма. Решение есть: по адресу http://netlib.org/opt/hooke.c лежит исходник канонической реализации метода, авторам которой я доверяю. Начинаю читать исходник и тут начинаются чудеса.

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

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

Все же низкое качество вычислительного софта поражает воображение. Сколько о нем плохо ни думай, а удивиться все равно придется.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

ltwood: (Default)
ltwood

January 2017

S M T W T F S
1234567
891011121314
15161718192021
22232425262728
293031    

Expand Cut Tags

No cut tags
Page generated 2025-07-14 08:46
Powered by Dreamwidth Studios