Файл: Сахарова Людмила Викторовна, Лукьянова Галина Викторовна Методы оптиизации для машинного обучения учебное пособие.doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 06.12.2023
Просмотров: 957
Скачиваний: 18
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
МАТЕМАТИЧЕСКОЕ МОДЕЛИРОВАНИЕ В ОПТИМИЗАЦИИ
1.1. ОПРЕДЕЛЕНИЕ ГРАНИЦ ОБЪЕКТА ОПТИМИЗАЦИИ
1.3. ОПРЕДЕЛЕНИЕ ОГРАНИЧЕНИЙ НА УПРАВЛЯЕМЫЕ ПЕРЕМЕННЫЕ
1.4. ВЫБОР ЧИСЛОВОГО КРИТЕРИЯ ОПТИМИЗАЦИИ
1.5. ФОРМУЛИРОВКА МАТЕМАТИЧЕСКОЙ ЗАДАЧИ ОПТИМИЗАЦИИ
ЧИСЛЕННЫЕ МЕТОДЫ РЕШЕНИЯ ЗАДАЧ ОДНОМЕРНОЙ ОПТИМИЗАЦИИ
МЕТОДЫ БЕЗУСЛОВНОЙ МИНИМИЗАЦИИ ФУНКЦИЙ МНОГИХ ПЕРЕМЕННЫХ
3.2. ВЫПУКЛЫЕ МНОЖЕСТВА И ВЫПУКЛЫЕ ФУНКЦИИ
3.3. ОБЩИЕ ПРИНЦИПЫ n–МЕРНОЙ МИНИМИЗАЦИИ
3.5. МЕТОДЫ БЕЗУСЛОВНОЙ МИНИМИЗАЦИИ, ИСПОЛЬЗУЮЩИЕ ПРОИЗВОДНЫЕ ФУНКЦИИ
точками золотого сечения отрезка [а; b]. Это и объясняет название рассматриваемого метода.2. На каждой итерации исключения отрезков с пробными точками (2.15) одна из них
переходит на следующий отрезок и значениеf (x) в этой точке вычислять не следует. Если новым отрезком становится [а; х2], то на него переходит пробная точка исходного отрезка, становясь его второй пробной точкой (х2’= х1) (рис. 2.7). В случае перехода к отрезку [х1; b] пробная точка исходного отрезка становится первой пробной точкой отрезка [х1; b].3. Легко проверить, что х1=а+b–х2 , и x2=а+b–х1. Поэтому на каждой итерации метода золотого сечения недостающую пробную точку нового отрезка можно найти по перешедшей на него пробной точке с помощью сложения и вычитания, не используя формул (2.15).4. В конце вычислений по методу золотого сечения в качестве приближенного значения х* можно взять середину последнего из полученных отрезков
.На каждой итерации отрезок поиска точки минимума уменьшается в одном и том же отношении , поэтому в результате п итераций его длина становится . Таким образом, точность n определения точки х* после п итераций находят из равенства , (2.16)а условием окончания поиска точки х* с точностью служит неравенство n .Опишем алгоритм метода золотого сечения.Шаг 1. Найти х1 и х2 по формулам (2.15). Вычислитьf (x1) и f (x2). Положить , .Шаг 2. Проверка на окончание поиска: если n > , то перейти к шагу 3, иначе – к шагу 4.
Шаг 3. Переход к новому отрезку и новым пробным точкам. Еслиf (x1) f (x2) то положить b=x2 , x2=x1 , f (x2) f (x1), x1=b–(b–a) и вычислитьf (x1), иначе – положить a=x1, x1= x2 , f (x1) = f (x2), x2=b+(b–a) и вычислить f (x2). Положить n = n и перейти к шагу 2. Шаг 4. Окончание поиска: положить , .Пример 2.6. Метод золотого сечения.Решить задачу, приведенную в примере 2.3: f (x) =x4 +е–xmin, x [0; 1], = 0, 1.И т е р а ц и я 1. Шаг 1. Находим: x1 = 0,382, x2= 0,618, f (x1) = 0,704,f (x2) = 0,685, n = 0,5. Шаг 2. n = 0,5 > =0,1, поэтому переходим к шагу 3.Шаг 3.f (x1) > f (x2), поэтому полагаем a= 0,382, x1 = 0,618, f (x1) = 0,685, x2= 0,764, n = 0,309 и вычисляем f (x2) = 0,807. Переходим к следующей итерации, начиная с шага 2.Результаты вычислений на остальных итерациях представлены в табл. 2.3 (стрелки указывают значения, переходящие на данную итерацию с предыдущей).Таблица 2.3
Таким образом, , f *f (0,55) = 0,67 (сравните с решением примеров 2.3–2.5). Замечание. Число итераций, необходимое для достижения заданной точности , можно найти из условия n с учетом соотношения (2.16): .Так как N вычислений f (x) позволяют выполнить N– 1 итераций метода золотого сечения, то достигнутая в результате этих вычислений точность определения х* составляет . (2.17)Второй метод деления отрезка пополам. Этот метод, использующий на каждой итерации три пробные точки, обеспечивает последовательное уменьшение длины отрезка, содержащего х*, ровно вдвое. Рассмотрим способ исключения отрезков, применяемый в рассматриваемом методе.Разделим отрезок [a; b] на четыре равные части пробными точками , i=1,2,3. Сравним значения f (x1) и f (x2). Если f (x1) f (x2), то уменьшенный вдвое отрезок поиска точки х* найден – это [а; х2]. Если f (x1) > f (x2), то произведем еще одно сравнение значений f (x): при f (x2)f (x3), перейдем к отрезку [x1; х3],а в противном случае – к отрезку [x2; b].Отметим, что каким бы ни оказался новый отрезок, одна из уже использованных пробных точек переходит на его середину, становясь новой точкой x2 . Таким образом, для проведения следующей итерации на вновь полученном отрезке потребуется вычисление не более двух новых значенийf (x) (либо только в точке x1, либо еще и в точке x3).Перечислим основные шаги алгоритма второго метода деления отрезка пополам.Шаг 1. Положить . Вычислить значение f (x2) и перейти к шагу 2. Шаг 2. Положить . Вычислить значение f (x1) и перейти к шагу 3.Шаг 3. Сравнить f (x1) и f (x2). Если f (x1) f (x2), то продолжить поиск на отрезке [
а;x2], положив b= x2, x2= x1, f (x1) = f (x2), и перейти к шагу 5, иначе – положить , вычислить значение f (x3) и перейти к шагу 4. Шаг 4. Сравнить f (x2) и f (x3). Если f (x2) f (x3), то перейти к отрезку [x1; x3], положив a= x1, b =x3, иначе – продолжить поиск на отрезке [x2; b], положив а =x2, x2 = x3, f (x2)= f (x3). Перейти к шагу 5.Шаг 5. Проверка на окончание поиска. Вычислить и сравнить с . Если n> , то перейти к следующей итерации, вернувшись к шагу 2, иначе – завершить поиск, положив х* x2 , f * f (x2). Пример 2.7. Второй метод деления отрезка пополам. Решить задачу, приведенную в примере 2.3: f (x) = x4 +e–x min, x[0;1], =0,1. И т е р а ц и я 1. Шаг 1. Находим x2=0,5, f (x2) = 0,669. Переходим к шагу 2.Шаг 2. Определяем x1 = 0,25, f (x1) = 0,783. Переходим к шагу 3.Шаг 3.f (x1) > f (x2), поэтому полагаем x3 = 0,75, вычисляем f (x3) = 0,789 и переходим к шагу 4.Шаг 4.f (x1) < f (x2), поэтому полагаем а = 0,25, b = 0,75 и переходим к шагу 5.Шаг 5. Находим n= 0,25 > 0,1, т.е. переходим к следующей итерации, начиная с шага 2.Результаты вычислений на остальных итерациях записаны в табл. 2.4.Таблица 2.4
Таким образом, x* x2 = 0,5, f * f (x2) = 0,67. Сравните этот ответ с результатами решения предыдущих примеров.Замечание. На первой итерации второго метода деления отрезка пополам вычисляется не более трех значений f (x) а на остальных – не более двух. Поэтому N вычислений f (x) гарантируют осуществление (N–1)/2 итераций, и достигнутая точность определения x* составляет . (2.18)Сравнение методов исключения отрезков и перебора. При сравнении прямых методов минимизации обычно учитывают количество N значений f (x), гарантирующее заданную точность определения точки х* тем или иным методом. Чем меньше N, тем эффективнее считается метод. При этом вспомогательные операции такие, как выбор пробных точек, сравнение значений f (x) и т.п., не учитываются. Во многих практических случаях определение значений целевой функции требует больших затрат (например, времени ЭВМ или средств для проведения экспериментов) и вспомогательными вычислениями можно пренебречь. А эффективность метода минимизации особенно важна именно в таких случаях, поскольку позволяет сократить указанные затраты.Эффективность методов минимизации можно также сравнивать, на основании гарантированной точности (N) нахождения точки х*, которую они обеспечивают в результате определения N значений f (x). Из анализа формул (2.10), (2.14), (2.17) и (2.18) следует, что наиболее эффективным из сравниваемых методов является метод золотого сечения, за ним идут методы деления отрезка пополам и наименее эффективен метод перебора. Этот вывод иллюстрирует табл. 2.5 значений достигнутой точности (N) в зависимости от количества N найденных значенийf (x) на отрезке длины 1 для указанных методов.Таблица 2.5
Шаг 3. Переход к новому отрезку и новым пробным точкам. Еслиf (x1) f (x2) то положить b=x2 , x2=x1 , f (x2) f (x1), x1=b–(b–a) и вычислитьf (x1), иначе – положить a=x1, x1= x2 , f (x1) = f (x2), x2=b+(b–a) и вычислить f (x2). Положить n = n и перейти к шагу 2. Шаг 4. Окончание поиска: положить , .Пример 2.6. Метод золотого сечения.Решить задачу, приведенную в примере 2.3: f (x) =x4 +е–xmin, x [0; 1], = 0, 1.И т е р а ц и я 1. Шаг 1. Находим: x1 = 0,382, x2= 0,618, f (x1) = 0,704,f (x2) = 0,685, n = 0,5. Шаг 2. n = 0,5 > =0,1, поэтому переходим к шагу 3.Шаг 3.f (x1) > f (x2), поэтому полагаем a= 0,382, x1 = 0,618, f (x1) = 0,685, x2= 0,764, n = 0,309 и вычисляем f (x2) = 0,807. Переходим к следующей итерации, начиная с шага 2.Результаты вычислений на остальных итерациях представлены в табл. 2.3 (стрелки указывают значения, переходящие на данную итерацию с предыдущей).Таблица 2.3
| Номер Итерации | a | b | n | x1 | x2 | f (x1) | f (x2) | Сравнение f (x1) и f (x2) |
| 2 | 0,382 | 1,000 | 0,309 | 0,618 | 0,764 | 0,685 | 0,807 | f (x1) < f (x2) |
| 3 | 0,382 | 0,764 | 0,191 | 0,528 | 0,618 | 0,668 | 0,685 | f (x1) < f (x2) |
| 4 | 0,382 | 0,618 | 0,118 | 0,472 | 0,528 | 0,673 | 0,668 | f (x1) > f (x2) |
| 5 | 0,472 | 0,618 | 0,073 | 0,073 < 0,1 – точность достигнута | ||||
Таким образом, , f *f (0,55) = 0,67 (сравните с решением примеров 2.3–2.5). Замечание. Число итераций, необходимое для достижения заданной точности , можно найти из условия n с учетом соотношения (2.16): .Так как N вычислений f (x) позволяют выполнить N– 1 итераций метода золотого сечения, то достигнутая в результате этих вычислений точность определения х* составляет . (2.17)Второй метод деления отрезка пополам. Этот метод, использующий на каждой итерации три пробные точки, обеспечивает последовательное уменьшение длины отрезка, содержащего х*, ровно вдвое. Рассмотрим способ исключения отрезков, применяемый в рассматриваемом методе.Разделим отрезок [a; b] на четыре равные части пробными точками , i=1,2,3. Сравним значения f (x1) и f (x2). Если f (x1) f (x2), то уменьшенный вдвое отрезок поиска точки х* найден – это [а; х2]. Если f (x1) > f (x2), то произведем еще одно сравнение значений f (x): при f (x2)f (x3), перейдем к отрезку [x1; х3],а в противном случае – к отрезку [x2; b].Отметим, что каким бы ни оказался новый отрезок, одна из уже использованных пробных точек переходит на его середину, становясь новой точкой x2 . Таким образом, для проведения следующей итерации на вновь полученном отрезке потребуется вычисление не более двух новых значенийf (x) (либо только в точке x1, либо еще и в точке x3).Перечислим основные шаги алгоритма второго метода деления отрезка пополам.Шаг 1. Положить . Вычислить значение f (x2) и перейти к шагу 2. Шаг 2. Положить . Вычислить значение f (x1) и перейти к шагу 3.Шаг 3. Сравнить f (x1) и f (x2). Если f (x1) f (x2), то продолжить поиск на отрезке [
а;x2], положив b= x2, x2= x1, f (x1) = f (x2), и перейти к шагу 5, иначе – положить , вычислить значение f (x3) и перейти к шагу 4. Шаг 4. Сравнить f (x2) и f (x3). Если f (x2) f (x3), то перейти к отрезку [x1; x3], положив a= x1, b =x3, иначе – продолжить поиск на отрезке [x2; b], положив а =x2, x2 = x3, f (x2)= f (x3). Перейти к шагу 5.Шаг 5. Проверка на окончание поиска. Вычислить и сравнить с . Если n> , то перейти к следующей итерации, вернувшись к шагу 2, иначе – завершить поиск, положив х* x2 , f * f (x2). Пример 2.7. Второй метод деления отрезка пополам. Решить задачу, приведенную в примере 2.3: f (x) = x4 +e–x min, x[0;1], =0,1. И т е р а ц и я 1. Шаг 1. Находим x2=0,5, f (x2) = 0,669. Переходим к шагу 2.Шаг 2. Определяем x1 = 0,25, f (x1) = 0,783. Переходим к шагу 3.Шаг 3.f (x1) > f (x2), поэтому полагаем x3 = 0,75, вычисляем f (x3) = 0,789 и переходим к шагу 4.Шаг 4.f (x1) < f (x2), поэтому полагаем а = 0,25, b = 0,75 и переходим к шагу 5.Шаг 5. Находим n= 0,25 > 0,1, т.е. переходим к следующей итерации, начиная с шага 2.Результаты вычислений на остальных итерациях записаны в табл. 2.4.Таблица 2.4
| Номер итерации | а | b | n | x1 | x2 | x3 | f (x1) | f (x2) | f (x3) | Сравнение f (x1) и f (x2) |
| 2 | 0,250 | 0,750 | 0,25 | 0,375 | 0,500 | 0,625 | 0,707 | 0,669 | 0,688 | f (x1) > f (x2) f (x2) < f (x3) |
| 3 | 0,375 | 0,625 | 0,13 | 0,438 | 0,500 | 0,563 | 0.669 | 0,669 | 0,670 | f (x1) > f (x2) f (x2) < f (x3) |
| 4 | 0,438 | 0,563 | 0,06 | 0,06 < 0,1 – точность достигнута | ||||||
Таким образом, x* x2 = 0,5, f * f (x2) = 0,67. Сравните этот ответ с результатами решения предыдущих примеров.Замечание. На первой итерации второго метода деления отрезка пополам вычисляется не более трех значений f (x) а на остальных – не более двух. Поэтому N вычислений f (x) гарантируют осуществление (N–1)/2 итераций, и достигнутая точность определения x* составляет . (2.18)Сравнение методов исключения отрезков и перебора. При сравнении прямых методов минимизации обычно учитывают количество N значений f (x), гарантирующее заданную точность определения точки х* тем или иным методом. Чем меньше N, тем эффективнее считается метод. При этом вспомогательные операции такие, как выбор пробных точек, сравнение значений f (x) и т.п., не учитываются. Во многих практических случаях определение значений целевой функции требует больших затрат (например, времени ЭВМ или средств для проведения экспериментов) и вспомогательными вычислениями можно пренебречь. А эффективность метода минимизации особенно важна именно в таких случаях, поскольку позволяет сократить указанные затраты.Эффективность методов минимизации можно также сравнивать, на основании гарантированной точности (N) нахождения точки х*, которую они обеспечивают в результате определения N значений f (x). Из анализа формул (2.10), (2.14), (2.17) и (2.18) следует, что наиболее эффективным из сравниваемых методов является метод золотого сечения, за ним идут методы деления отрезка пополам и наименее эффективен метод перебора. Этот вывод иллюстрирует табл. 2.5 значений достигнутой точности (N) в зависимости от количества N найденных значенийf (x) на отрезке длины 1 для указанных методов.Таблица 2.5
| Методы минимизации | Количество найденных значений f (x) | |||
| | N = 5 | N = 11 | N = 21 | N = 51 |
| Метод золотого сечения | 0,073 | 4,1 10–3 | 3,3 10–5 | 1,8 10–11 |
| Методы деления отрезка пополам *) | 0,125 | 1,6 10–2 | 4,9 10–4 | 1,5 10–8 |
| Метод перебора | 0,250 | 0,100 | 0,050 | 0,020 |