| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > Оптимизация методом координатного спуска |
| Автор: rudolfninja 16.10.2014, 23:47 | ||||
| Ребята, приветствую. Сразу извиняюсь, если тему нужно было создать в "Центре помощи", но, по-моему, тут она более уместна. Проблема вот в чем, нужно написать алгоритм поиска минимума многомерной функции методом Гаусса-Зейделя (или координатного спуска). В качестве метода поиска минимума одномерной функции использовать метод золотого сечения. Я написал функции на Си++, одна функция находит минимум одномерной функции методом золотого сечения, другая - непосредственно метод координатного спуска. Для примера была дана тестовая целевая функция с начальными значениями.
Я старался написать наиболее универсальный код, но вышло как вышло. У меня возникло, пока что, два вопроса: 1) Какие границы отрезка передавать в метод золотого сечения? 2) Зачем нужен шаг, если поиск минимума одномерной функции проводится по методу золотого сечения, а не через частные производные
метод golden_section работает правильно и возвращает значение аргумента при котором значение функции будет минимальным на заданном отрезке. Это я проверял на нескольких различных примерах. В итоге программа выдает результат не такой, который должен быть, но довольно близкий к нему. Это только на этом примере. Переписывал целевые функции для других примеров (с последующей корректировкой функций main и golden_section), вообще ерунда какая-то получается. В общем, если кто видит ошибки/недочеты в моей реализации и(или) может ответить на вопросы, написанные выше, ответьте, пожалуйста. Спасибо. |
| Автор: rudolfninja 17.10.2014, 09:09 | ||
А как я узнаю, что они гарантированно охватывают минимум? Такого не написано, но зачем, тогда нагружать лишними данными? |
| Автор: Akina 17.10.2014, 11:13 |
Ну, например, для контроля можно посмотреть чисельно производную в выбранных краевых точках. Допустим, это универсальный блок данных для нескольких заданий. Для некоторых нужны все данные, для других только часть. Почему нет? |
| Автор: rudolfninja 17.10.2014, 16:21 |
| Akina, а вы знакомы с методом? Шаг вообще должен меняться по ходу изменения координат? |
| Автор: Akina 17.10.2014, 16:45 |
| Не понял... какой ещё шаг? В золотом сечении шага нет в принципе, а покоординатный спуск - вообще метод не минимизации, а выбора плоскости минимизации. |
| Автор: rudolfninja 17.10.2014, 16:47 |
| Я имел в виду покоординатный спуск. А это не одно и тоже, что и метод минимизации многомерной функции? На выходе получим точки, в которых функция минимальна, ну и эти точки образуют плоскость минимизации. |
| Автор: Akina 17.10.2014, 19:54 | ||
Покоординатный спуск - это не метод минимизации! Это метод выбора порядка перебора координат, метод выбора следующей координаты, по которой мы будем искать очередной частный минимум. И далеко не всегда координаты перебираются тупо по порядку в цикле... |