Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Метод покоординатного спуска


Larin ©   (14.01.18 06:33

Ребят, кто-нибудь может доступно и на пальцах объяснить сабж? Или с какими-нибудь примерами из жизни?


Larin ©   (14.01.18 06:33[1]

Заранее благодарю


Внук ©   (14.01.18 21:42[2]

На пальцах:
метод применяется для поиска локального экстремума функции нескольких переменных. Хотя, что там особо говорить, все эти "методы" есть только умные слова вокруг довольно простых и наглядных идей.

Выбираем начальную точку многомерной области определения.
В этой точке фиксируем все координаты, кроме первой, получаем функцию одной переменной, ищем ее локальный экстремум (как угодно). В полученной точке фиксируем все координаты, кроме второй, получаем функцию одной переменной, ищем ее локальный экстремум... И так по кругу, пока не надоест, то есть пока не будет получена требуемая точность.

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


Внук ©   (14.01.18 21:53[3]

Иллюстрация: представь, что имеется прямая дорога, идущая ровно по краю оврага. При этом тебе надо спуститься в низшую точку этого оврага, но двигаться ты можешь только либо параллельно дороге, либо перпендикулярно. Причем, выбрав направление (перпендикулярно или параллельно), имеет смысл двигаться в этом направлении до тех пор, пока это нас устраивает (высота уменьшается), а как только высота перестала уменьшаться, меняем направление (перпендикулярное на параллельное или наоборот). Так победим!


KilkennyCat ©   (14.01.18 23:05[4]


> Внук ©   (14.01.18 21:53) [3]

можно умудрится всегда делать два лишних поворота ))


Larin ©   (16.01.18 11:39[5]


> Внук ©   (14.01.18 21:42) [2]


Спасибо!
Мне нужно разом менять все переменные функции, чтобы минимизировать другую функцию, которая зависит от первой.

Допустим, я выбрал дельту для каждой новой итерации. Как лучше сделать: половину переменных уменьшить на эту дельту, а половину увеличить? И если вторая функция минимизировалась, то продолжить в таком же духе?

И как избежать повторения?


Styx ©   (16.01.18 18:00[6]

Дык в том и суть метода, что на каждой итерации Вы меняете только одну переменную. Метод прост и туп :). А чтобы делать, как Вы хотите - нужно вначале оценить матрицу Якоби, и из нее уже решать, куда двигаться - сразу по всем переменным. Если у Вас функции заданы в явном виде, лучше якобиан выписать аналитически - тогда вычислений понадобится гораздо меньше...


Larin ©   (16.01.18 22:39[7]

Styx, вот у меня 50 переменных. В каждой итерации менять их друг за другом или менять первую, пока не будет достигнут оптимум?


Styx ©   (17.01.18 01:35[8]

Меняешь первую, пока не дойдёшь до минимума функции. Потом также вторую, третью и далее... После пятидесятой - снова первую, вторую, третью... И так - до тех пор, пока не получится, что за весь круг из 50 переменных не окажется, что двигаться больше некуда.


Larin ©   (17.01.18 08:29[9]


> Styx ©   (17.01.18 01:35) [8]
> Меняешь первую, пока не дойдёшь до минимума функции. Потом
> также вторую, третью и далее...


А не получится ли так, что мы, оптимизировав функцию при первой переменной, начнем ее ухудшать при второй и лучше было бы частично оптимизировать первую переменную и улучшать второй?


Styx ©   (17.01.18 12:56[10]

Как мы можем ее ухудшить, если мы всегда идем вниз? На то он и спуск. Но да, путь спуска может быть совсем неоптимальным, и для некоторых (правда, весьма специфических) случаев этот способ не сработает вообще. Есть множество способов, позволяющих найти минимум быстрее - но для них требуется знание Якобиана, как я уже говорил. И имейте в виду, что никакой способ не гарантирует нахождение глобального минимума, речь идёт только о локальной оптимизации. Глобальный минимум можно найти только для линейной функции, для нелинейных - можно только попытаться проверить, что рядом нет более глубоких минимумов, начиная оптимизацию с разных начальных значений.


Лодочник ©   (17.01.18 14:55[11]

Сессия. Однако.


Mystic ©   (17.01.18 19:50[12]

https://upload.wikimedia.org/wikipedia/commons/thumb/e/e3/Coordinate_descent.svg/900px-Coordinate_descent.svg.png


Larin ©   (18.01.18 07:32[13]


> Mystic ©   (17.01.18 19:50) [12]


Я ничего не понял из вашей картинки


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо