|    | 
СИ-БИ техника | КВ техника | УКВ техника | Радиоизмерения | Защита от TVI | Источники питания | Софт | Расчеты | return_links(); ?>
Справочники
Главная arrow Проектирование arrow MathCAD arrow Two-step  

Two-step

Оглавление
Two-step
Страница 2
Страница 2 из 2

В новых местах15 вычисляются значения минимизируемой функции. Туда, где функция имеет минимальное значение, делается переход, данная точка становится новой точкой приближения к минимуму, а все вышеописанные действия ("ощупывание" функции вблизи точки приближения16) повторяются. Если окажется, что вблизи новой точки приближения все новые значения функции увеличиваются, то шаг поиска (d) уменьшается вдвое, а все действия повторяются. Поиск заканчивается, когда значение d становится меньше tol (системная переменная Mathcad, регулирующая точность вычислений).

Функция Min2step протестирована на довольно сложной функции двух аргументов, которая в области х [-2, 2] и у [-3, 3] имеет три минимума и два максимума (см. рис. 3.33, где эта функция показана в аксонометрии). На рис. 3.27 изображен путь к этим минимумам от трех различных точек приближения.

Примечание

Рис. 3.27 — это некий коллаж: в один рисунок сведены три разных — три трассировки к трем минимумам от трех начальных точек.

Алгоритм функции Min2step, конечно, намного примитивнее алгоритмов встроенных в Mathcad средств поиска минимума. Но бесспорное преимущество функции Min2step перед встроенными в том, что она возвращает "историю" работы — трассировку пути к решению.

На рис. 3.28 показано окно браузера Интернета с открытым сайтом метода "Два шага" (Two-step), где читатель может протестировать другие начальные точки и иные анализируемые функции.

Алгоритм спуска к минимуму, заложенный в программу на рис. 3.26,— простой и без всяких оптимизирующих хитростей. Так, например, при очередном приближении к минимуму лишний раз рассчитывается значение анализируемой функции в предыдущей точке. Если анализируемая функция имеет мало аргументов и сама по себе простая, а ее значение высчитывается быстро, то это повторение мало влияет на общее время поиска минимума. Но что будет, если функция достаточно сложная? Предлагаем читателям доработать программу на рис. 3.26 и исправить отмеченный недостаток.

Рис. 3.28. Шагаем в самую глубокую пропасть

Программа должна запоминать значение анализируемой функции в предыдущей точке приближения и использовать его в новом приближении. Это, кстати, заложено в метод золотого сечения поиска минимума функции одного аргумента. А вот более сложное задание. При поиске минимума функции двух аргументов мы "перекрещиваем" точку очередного приближения, как бы благословляя успех поиска.

Более оптимальная стратегия может требовать "охвата" очередной точки не крестом, а равносторонним треугольником со стороной d (симплекс-метод; при минимизации функции трех переменных точка помещается внутри тетраэдра и т. д.).

Кроме того, неплохо треугольник (либо звезду Давида или даже пятиконечную звезду — новое задание читателю) при каждом шаге приближения к минимуму ориентировать в пространстве случайным образом, растягивать его вдоль одной из вершин. Этим также можно добиться более оптимальной стратегии поиска минимума.

Описанные ухищрения можно перенести и на задачу с п переменными оптимизации (n-мерная иудейская или пятиконечная звезда!). Все это будет хорошим заданием читателям. Поиск и испытание алгоритмов оптимизации относится к одному из разделов вычислительной (прикладной) математики. В данной книге мы только чуть-чуть заглянули в него.

Читатель может отметить еще одну "неоптимальность" программы на рис. 3.26. Она генерирует не только вектор значений переменных, где функция минимальна, но и целую матрицу м с "историей" поиска. Но перегрузка программы на рис. 3.26 не была напрасна. Программирование в среде Mathcad до 13-й версии было лишено средств отладки. Простейшее, но, тем не менее, очень эффективное средство отладки программ — наблюдение за промежуточными результатами. А как раз это в среде Mathcad делать невозможно. И все же— если нельзя, но очень хочется, то можно. Программа, приведенная на рис. 3.26, успешно справляется с довольно-таки сложными задачами. Но если ей подсунуть совсем уж простую функцию — тестовую функцию Розенброка, например, то при определенных начальных приближениях программа на рис. 3.26 зациклится— ответа от нее не дождешься. В чем тут дело? Ответить на этот вопрос поможет некоторая модернизация программы: прервать ее работу можно не только по условию d<tol, но и по дополнительному условию, например, n>30. После того как число шагов приближения п превысит 30, можно будет просмотреть след поиска минимума функции Розенброка или иной другой (задание читателю).

На рис. 3.28 видно, что след поиска минимума закручивается у точки минимума. В чем тут дело?!

Наполните ванну водой, бросьте туда перышко или какой-нибудь другой легкий предмет и выдерните пробку. Перышко сначала будет более-менее спокойно двигаться к отверстию, а затем закрутится в водовороте (см. рис. 3.28). Наш метод поиска минимума можно назвать не просто методом наискорейшего спуска, а методом наискорейшего спуска воды. Жидкость не просто спускается водоворотом, она всегда вращается в одну сторону. Если даже раскрутить ее в противоположном направлении, то, преодолев насилие, она снова потечет по часовой стрелке. Говорят, что это физическое явление через силы Кориолиса связано с вращением Земли: на экваторе вода в ванне не закручивается, но севернее или южнее экватора она приобретает "правый" (как на рис. 3.28) или "левый" уклон. Автор проверил эту гипотезу: он переслал по e-mail файл с задачей коллеге в Австралию. Все подтвердилось: линии траектории спуска стали закручиваться в другую сторону— против часовой стрелки. Интересно, как они себя поведут на Северном или на Южном полюсах? С водой там все ясно, она вообще не будет течь — замерзнет. А вот что будет с кривыми? К сожалению, у автора нет коллег в Арктике и Антарктике.

Читатель, наверное, уже догадался, что его разыгрывают— этот материал был опубликован в апрельском выпуске одного компьютерного журнала17.

Но самое смешное в этой истории то, что траектории спуска, показанные на рис. 3.28, в Австралии на самом деле стали закручиваться в другую сторону. Все объяснилось довольно просто: при передаче данных на линии произошел маленький сбой и в программе на рис. 3.26 вместо строки

for i ORIGIN..L

появилась строка

for i L...ORIGIN

Вот и все объяснение. Но виноваты в этом все те же силы Кориолиса — магнитные диски винчестеров на серверах и маршрутизаторах Южного полушария вращаются несколько иначе, чем на Северном полушарии. Отсюда и сбои, выявить которые довольно сложно, т. к. при контрольной обратной пересылке файла ошибка исправляется по принципу "минус на минус дает плюс"18.

В среде Mathcad 13/14 появилась возможность трассировки и встроенных функций оптимизации (рис. 3.29).

Рис. 3.29. Трассировка встроенной функции minimize


« Пред. - След.


CitRadio.com - Электроника и компьютеры

0.1503