![]() |
Содержание
1 Предобуславливатель |
Предобуславливание - это преобразование, которому проблема подвергается для того, чтобы ускорить её решение. Обычно такое преобразование является линейной заменой переменных через умножение на матрицу-предобуславливатель. Простейшей формой предобуславливания является масштабирование переменных, коэффициенты которого подобраны таким образом, чтобы получившаяся в результате функция имела максимально простой рельеф.
Ниже приведен довольно-таки условный пример того, как предобуславливатель ускоряет решение проблемы. Оригинальная функция имеет вытянутый рельеф, и алгоритм оптимизации постоянно "рикошетирует" от стенок узкой аллеи, по дну которой он приближается к минимуму. В конце-концов он прибывает к линии уровня f=1, но для этого ему требуется четыре итерации. После масштабирования переменных рельеф становится более простым, и достаточно одного шага, чтобы оказаться намного ниже уровня f=1.

В примере выше мы использовали самый простой из возможных алгоритмов оптимизации - метод наискорейшего спуска. Это ясно хотя бы потому что шаги всегда совершаются в направлении антиградиента, без использования накопленной информации о кривизне функции. Любой из алгоритмов, рассматриваемых на этой странице, уже на второй итерации догадался бы развернуть направление поиска в сторону настоящего минимума. Однако это не значит, что хороший алгоритм оптимизации не нуждается в предобуславливании. На некоторых плохо обусловленных задачах использование хорошего предобуславливателя позволяет ускорить процесс решения в разы.
Предобуславливатель нужен:
В некоторых случаях предобуславливатель необходим не просто для ускорения процесса решения, а для того, чтобы в принципе найти решение.
Пакет ALGLIB поддерживает несколько типов предобуславливателей:
Разные оптимизаторы поддерживают разные типы предобуславливателей, но первые три типа предобуславливателей доступны во всех оптимизаторах.
This article is intended for personal use only.
Исходный код на C#
Исходный код на C++
Исходный код на C++, использующий библиотеки MPFR/GMP.
Исходный код GMP доступен на сайте gmplib.org. Исходный код MPFR доступен на сайте www.mpfr.org.
Исходный код на Free Pascal.
Исходный код на Delphi.
Исходный код на VB.NET.
Исходный код на VBA.
Исходный код на Python (CPython и IronPython).
|
ALGLIB® - numerical analysis library, 1999-2012. |