Метод Пауэлла
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ
Национальный аэрокосмический университет им. Н.Е. Жуковского «ХАИ»
Кафедра 304
МЕТОД ПАУЭЛЛА
Пояснительная записка к курсовому проекту по дисциплине «Методы оптимизации»
Выполнила: студентка гр.345а Кривоножко А.Ю. |
|
Проверил доц. каф. 304 |
Карташов А.В. |
(подпись, дата) |
2013
РЕФЕРАТ
Пояснительная записка состоит из 32 листа, включает 5 иллюстраций, 2 приложения на 9 листах. При ее составлении использовалось 5 источников литературы.
Темой разработки является «Метод Пауэлла» с использованием современных средств программирования в среде Visual Studio.
По результатам, полученным на этапе проектирования, разработан код программы. Были проведены её испытания.
Содержание
ВВЕДЕНИЕ…………………………………………………………
ПОСТАНОВКА ЗАДАЧИ…………………………………
1 Метод Пауэлла и сопряженные направления 6
1.1 Обоснование применения сопряженных направлений в алгоритмах оптимизации. 6
1.2 Метод Пауэлла. 9
1.3 Стратегия поиска 11
1.4 Блок схема алгоритма метода сопряженных направлений 12
1.5 Пример поиска минимума функции методом Пауэлла 15
2 Описание программной части. Выбор среды программирования 16
3 Руководство пользователя 17
4 Описание программы 20
ВЫВОДЫ……………………………………….……………………
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ…………………………………...24
ПРИЛОЖЕНИЕ А………………………………………………
ПРИЛОЖЕНИЕ Б………………………………………………
Введение
Оптимизация как раздел математики существует достаточно давно. Оптимизация – это выбор, то есть то, чем постоянно приходиться заниматься в повседневной жизни. Термином «оптимизация» в литературе обозначает процесс или последовательность операций, позволяющих получить уточненное решение. Хотя конечной целью оптимизации является отыскание наилучшего или «оптимального» решения, обычно приходится довольствоваться улучшением известных решений, а не доведением их до совершенства. Поэтому под оптимизацией понимают скорее стремление к совершенству, которое, возможно, и не будет достигнуто.
Необходимость
принятия наилучших решений так
же стара, как само человечество. Испокон
веку люди, приступая к осуществлению
своих мероприятий, раздумывали
над их возможными последствиями
и принимали решения, выбирая
тем или другим образом зависящие
от них параметры – способы
организации мероприятий. Но до поры,
до времени решения могли
Цель данной курсовой работы:
- проанализировать и обработать теоретические и практические данные по методу Пауэлла;
- провести сравнительный анализ с другими методами;
- разработка
программы, реализующая данный
метод.
Постановка задачи
- Изучить частный случай метода сопряженных направлений – метод Пауэлла.
- Изучить алгоритмы реализации поиска минимума функции f(x) .
- Реализовать пользовательский интерфейс.
- Реализовать данный алгоритм поиска минимума функции.
- Визуализировать данный алгоритм.
Метод Пауэлла и сопряженные
направления
Метод Пауэлла относится к прямым методам (методам нулевого порядка). Этим методом наиболее эффективно осуществляется минимизация функций, близких к квадратичным. На каждой итерации алгоритма поиск осуществляется вдоль системы сопряженных направлений. Два направления поиска называются сопряженными, если
, , (1.1)
где - положительно определенная квадратная матрица.
Обоснование применения сопряженных направлений в алгоритмах оптимизации.
В методе Пауэлла - матрица вторых частных производных. Идеи метода Пауэлла относятся к квадратичной функции . Основная идея заключается в том, что если на каждом этапе поиска определяется минимум квадратичной функции вдоль каждого из - сопряженных направлений и если затем в каждом из направлений делается шаг до минимальной точки, то полное перемещение от начала до шага с номером сопряжено ко всем поднаправлениям поиска. Идея использования сопряженных направлений лежит в основе ряда алгоритмов.
Пусть - квадратичная функция и процесс минимизации начинается в точке с начальным направлением . Для удобства возьмем этот вектор единичным, т.е. . Тогда вектор и длина шага определяется из условия минимальности функции в данном направлении т.е. .Для квадратичной функции
, (1.2)
и, таким образом, оптимальное значение на первом шаге определяется в соответствии с соотношением
, (1.3)
где .
Из точки процесс минимизации должен осуществляться в другом сопряженном направлении и при этом
. (1.4)
Квадратичная функция может быть представлена в виде
, (1.5)
где положительно определенная матрица .
В общем случае система линейно независимых направлений поиска называется сопряженной по отношению к некоторой положительно определенной матрице , если
, . (1.6)
Так как сопряженные
направления линейно
где . (1.7)
Для некоторой матрицы всегда существует, по крайней мере, одна система из взаимно сопряженных направлений, так как сами собственные векторы матрицы представляют собой такую систему. Отметим, что для квадратичной функции справедливо следующее соотношение, которое потребуется в дальнейшем:
(1.8)
Чтобы убедиться в его справедливости, рассмотрим матрицу . Умножение ее справа на дает
(1.9)
Вообще говоря, справедливо общее правило, заключающееся в том, что если используются сопряженные направления для поиска минимума квадратичной функции , то эта функция может быть минимизирована за шагов по одному в каждом из сопряженных направлений. Более того, порядок использования сопряженных направлений несущественен. Покажем, что это действительно так. Пусть - квадратичная функция и , при этом . В точке минимума , и эта точка Заметим, что . Так как , где определяется в соответствии с соотношением : , затем минимум находится в следующем сопряженном направлении по аналогичным формулам и т.д., то на -м шаге имеем
. (1.10)
На каждом шаге минимизируем функцию
. (1.11)
Кроме того, и , так как все , , и – сопряжены. Таким образом,
. (1.12)
Выразим векторы и через систему сопряженных векторов следующим образом (по аналогии с (3)):
, (1.13)
. (1.14)
Подставив эти выражения, получим .Таким образом, точка , полученная в результате минимизации квадратичной функции на -м шаге, совпадает с точкой минимума квадратичной функции . Покажем, что для сопряженных направлений, если каждый раз минимизируется в сопряженном направлении то при этом выполняется следующее равенство: , ,при использовании не более чем направлений, то есть ортогонален использованным сопряженным направлениям. Для квадратичной функции . Следовательно,
, (1.15)
где - произвольная точка, из которой начинается поиск по сопряженным направлениям. Поскольку ,то .Умножение этого уравнения слева на дает
. (1.16)
Первый член в правой части , так как градиент в точке ортогонален направлению предыдущего спуска, если точка получена в результате минимизации функции в этом направлении. Кроме того, все остальные слагаемые под знаком суммы исчезают вследствие сопряженности направлений и , и таким образом , . (10)
Метод Пауэлла.
Переход из точки в точку на -м шаге алгоритма Пауэлла осуществляется в соответствии с формулой:
При этом последовательно осуществляется минимизация исходной функции по сопряженным направлениям . Результатом минимизации по каждому из сопряженных направлений является система параметров , при которых функция минимальна в каждом из сопряженных направлений:
, . (1.18)
Начальную
систему сопряженных
Теорема: Если при начальной точке поиска в направлении вектора минимум функции находится к точке , а при начальной точке поиск минимума функции в том же направлении приводит к точке , то при направление сопряжено с направлением поиска Доказательство. Используя ранее полученные результаты (10), можно записать, что в первом случае , аналогично, во втором случае можно записать . Вычитая из первого выражения второе получим, что . Следовательно, векторы и являются сопряженными. Эта теорема непосредственно может быть распространена на случай нескольких сопряженных направлений следующим образом. Если, начиная из точки , точка определяется после использования при минимизации нескольких сопряженных направлений . И, аналогично, если из точки точка определяется после использования тех же направлений и функция минимизируется на каждом шаге, то вектор сопряжен ко всем направлениям. Следующий рисунок служит иллюстрацией теоремы.
Рисунок 1.1 – Иллюстрация теоремы
Пусть в начальный момент для двумерной задачи поиск осуществляется из точки вдоль направлений, параллельных осям координат: и Последовательно были найдены точки (рис 1.2).
Рисунок 1.2 – Иллюстрация теоремы
Таким образом, определили 2 сопряженных направления, в которых следует вести поиск: и . В системе исходных направлений должно быть заменено на , представляющее собой полное перемещение из первого минимума. Направления поиска на следующем этапе: , . Второй этап начинается с минимизации вдоль направления , затем, если необходимо, перемещение в направлении . Но в случае квадратичной функции двух переменных после минимизации по двум сопряженным направлениям будет достигнута точка минимума. В общем случае, на -м шаге алгоритма Пауэлла используется линейно независимых направлений поиска. Поиск начинается с точки
Стратегия поиска
1. Начиная с точки , решается последовательность задач минимизации функции , , в направлениях . При этом находятся точки , которые минимизируют исходную функцию в заданных направлениях, причем , , …, .
2. Поиск, осуществляемый
на первом этапе, может
3. Обозначим наибольшее уменьшение на -м шаге ,соответствующее направление поиска обозначим через .Обозначим: , , , где , . Тогда, если и (или) , то следует использовать на -м этапе те же направления , что и на -м этапе, то есть , , и начать поиск из точки или из точки , в зависимости от того, в какой точке функция принимает минимальное значение.
4. Если тест на шаге 3 не прошел, то ищется минимум в направлении вектора , проведенного из в : . Точка этого минимума берется в качестве начальной точки на -м этапе. А в системе сопряженных направлений сохраняются все, кроме направления , которое заменяется на новое направление , но новое направление помещается в последний столбец матрицы направлений. На -м этапе будут использоваться направления .
5. Критерий
останова. Алгоритм прерывается,
если изменение по каждой
Блок схема алгоритма метода сопряженных направлений
Шаг 1. Задать начальную точку х 0 , число ε>0 для окончания алгоритма, начальные направления поиска
Положим d0 = dn , i = 0, у0 = х0, k= 0.
Шаг 2. Найти yi+1 = y i +ti di где шаг ti находится в результате поиска ми-нимума функции f(yi+tidi) по ti одним из методов одномерной минимизации.
Шаг 3. Проверить выполнение условий:
а) если i < n -1, положить i= i +1 и перейти к шагу 2;
б) если I = n -1, проверить успешность поиска по n первым направлениям.
Если у n = у°, то поиск завершить: х* =yn, иначе положить i=i+1 и перейти к шагу 2;
в) если i = n, проверить успешность поиска по n последним направлениям. Если y n+1 = у 1, поиск завершить: х* = у n+1, иначе перейти к шагу 4 для построения сопряженного направления.
Шаг 4. Положить хk+1 = уn+1 и проверить условие окончания:
а) если |||хk+1 - хk || | < ε, то поиск завершить: х* = хk+1;
б) иначе положить: d0 = dn = уn+1 - у1 (новое направление);
(исключается старое
Если при этом rang (,...,)= n, то новая система направлений линейно независима. В этом случае положить: di =di , i = 0,1,...,n; k =k +1, i = 0, у0 = xk+i и перейти к шагу 2.
Если rang(,...,)< n, то новая система направлений линейно зависима. Тогда следует продолжать поиск в старых направлениях. Для этого положить: di =di , i = 0,1,...,n; у0 = xk+1, k = k + 1, i = 0 и перейти к шагу 2.
Рассмотрим алгоритм метода сопряженных направлений, представленный в виде блок схемы. Алгоритм начинается с ввода данных , где x0 - это координата начальной точки, ε – число для окончания алгоритма (ε > 0), d1 и d2 -начальные направления поиска (). Выход их алгоритма возможен в трех случаях:
При минимум функции будет найден в т. .
При минимум функции будет найден в т. .
При |||| < минимум функции будет найден в т. .
Рисунок 1.3 – Продолжение блок схемы алгоритма метода Пауэлла
Пример поиска минимума функции методом Пауэлла
Найти минимум функции методом сопряженных направлений Пауэлла.
10 ) x0 = (8; 9)T, , ε = 0,1, y0 = x0 = (8;9)T
i=0, k=0;
20) y1 = y0 +t0 d0 = (8;9)T + t0 (0;1)T = (8, 9 + t0);
f (8, 9 + t0) = 83 + (9 + t0)2 – 24 – 2(9 + t0) + 2 = t02 + 16t0 + 553;
t0 = -8; y1 = (8;1)T;
30) Т.к. i < n-1 положим i=1 и перейдем к шагу 2;
21) y2 = y1 + t1 d1 = (8;1)T + t1 (1;0)T = (8 + t1;1)T;
f (8 + t1;1) = t13 + 24t12 + 189t1;
t1 = -7; y2 = (1;1);
31) i = n-1; y2 ≠ y0, i =2;
22 ) y3 = y2 + t2 d2 = (1; 1)T + t2 (0;1)T = (1; 1+t2);
t2 = 0; y3 = (1;1)T;
32) i = n = 2;
y3 ≠ y1;
40) x1 = y3 = (1;1)T;
Т.к. || (1;1)T – (8;9)T || = 10,63 > ε положим = d2 = y3 – y1 = (-7;0)T,
= d2 = (0;1)T;
;
Новая система
направлений линейно
d0 = = (-7;0)T;
d1 = = (0;1)T;
d2 = = (-7;0)T;
i = 0, k = 1, y0 = x1 = (1;1)T;
23) y1 = y0 +t0 d0 = (1;1)T + t0 (-7;0)T = (1 - 7t0 ;1);
to = 0; y1 = (1;1);
33) i < n-1 положим i=1 и перейдем к шагу 2;
24) y2 = y1 + t1 d1 = (1;1)T + t1 (0;1)T = (1;1 + t1)T;
t1 = 0; y2 = (1;1);
34) i = n-1; y2 = y0;
x* = y2 = (1;1)T.
Описание программной части. Выбор среды программирования
Для создания
программного продукта использовалась
интегрированная среда
C# — объектно-ориентированный язык программирования. Разработан в 1998—2001 годах группой инженеров под руководством Андерса Хейлс-берга в компании Microsoft.
C# относится
к семье языков с C-подобным
синтаксисом, из них его син-
Переняв многое от своих предшественников — языков C++, Java, Delphi, Модула и Smalltalk — С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем, например, C# не поддержи-вает множественное наследование классов (в отличие от C++).
Название «Си шарп» (До диез) происходит от музыкальной нотации, где знак диез, прибавляемый к основному обозначению ноты, означает повышение соответствующего этой ноте звука на полутон.[4] Это аналогично названию языка C++, где «++» обозначает, что переменная должна быть увеличена на 1.
Вследствие технических ограничений на отображение (стандартные шрифты, браузеры и т. д.) и того обстоятельства, что знак диез ♯ не представ-лен на стандартной клавиатуре, знак номера # был выбран для представления знака диез при записи имени языка программирования.[5] Это соглашение отражено в Спецификации Языка C# ECMA-334.[6] Тем не менее, на практике (например, при размещении рекламы и коробочном дизайне[7]), Майкрософт использует предназначенный музыкальный знак.
Названия языков программирования не принято переводить, поэтому зачастую язык называют по-английски «Си шарп».
C# является мощным объектным языком с возможностями наследования и универсализации.
C# является наследником языков С/С++, сохраняя лучшие черты этих популярных языков программирования. Общий с этими языками синтаксис, знакомые операторы языка облегчают переход программистов от C++ к С#.
Руководство пользователя
Для решения
задачи методом сопряженных
После запуска программного продукта приложение примет вид как показано на рисунке 3.1.
Рисунок 3.1 – Главное окно программы
Для решения задачи необходимо заполнить все текстовые поля, как показано на рисунке 3.2.
Рисунок 3.2 – Ввод данных
При нажатии на кнопку «Расчитать» будет выведено решение метода Пауэла (рис. 3.3,3.4).
Рисунок 3.3 – Вывод результата
Рисунок 3.4 – Вывод результата
Для сохранения решения задачи нужно нажать на кнопку «Сохранить в файл», после чего откроется диалоговое окно (рис.3.5) для выбора места хранения файла и его (файла) названия. Решение примера будет сохранено в текстовый файл с разрешением *.txt.
Рисунок 3.5 – Диалоговое окно сохранения файла.
Описание программы
Рассмотрим основные фрагменты программного продукта, реализующий «метод Пауэлла».
Нахождение экстремума функции f (yi + ti di ) по ti осуществляется функцией Extremum одним из методов одномерной минимизации: «Фибоначи».
private double extremum(double[]u) // u[] это d[]
{
double a = -2 * y[0];
double b = 2 * y[0];
double eps = (b-a)/50;
double l = (b-a)/10;
int g = 0; //счетчик
double s; //y
double w; //z
step_3: s = (a + b - eps) / 2;
w = (a + b + eps) / 2;
if (Function_for_search_extremum(
{
b = w;
}
else
{
a = s;
}
if (Math.Abs(b - a) <= l)
return (a + b) / 2;
else
{
g++;
goto step_3;
}
}
Функция Function_for_search_extremum необходима для нахождения значения функции при поиске экстремума.
private double
Function_for_search_extremum(
{
double Fx = Math.Pow((y[0] + t * u[0]), 3) + Math.Pow((y[1] + t * u[1]), 2) - 3 * (y[0] + t * u[0]) - 2 * (y[1] + t * u[1]) + 2;
return Fx;
}
Для вычисления ранга матрицы используется метод Rang_matrici.
private int Rang_matrici(double [,]Matrica)
{
if(Matrica[1,0] != 0)
for (int i = 1; i < 2; i++)
{
double mnojitel = (Matrica[0, 0] / Matrica[i, 0]) * (-1);
for (int j = 0; j < 2; j++)
{
Matrica[i, j] = Matrica[i,j] * mnojitel + Matrica[i-1, j];
}
}
int k;
int y = 0;
for (int i = 0; i < 2; i++)
{
k = 0;
for (int j = 0; j < 2; j++)
{
if (Matrica[i, j] == 0)
k++;
}
if (k == 2)
y++;
}
int rang = 2 - y;
return rang;
}
Запись полученного решения, хранящееся в объекте RichTextBox1, записывается в текстовый файл спомощью функции MenuFileSaveAs().
private void MenuFileSaveAs()
{
saveFileDialog1.Filter = "Text files|*.txt";
if (saveFileDialog1.ShowDialog()
== DialogResult.OK && saveFileDialog1.FileName.
{
richTextBox1.SaveFile(
}
}
А так же контролируются вводимые данные в элементы управления Text-Box. Пользователь может вводить только цифры и запятую. Проверка осуществляется при нажатии любой клавиши.
private void textX0_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar != 8 && (e.KeyChar < 48 || e.KeyChar > 57 ))
e.Handled = true;
if (e.KeyChar == 44)
e.Handled = false;
}
Выводы
В данной курсовой работе был рассмотрен метод сопряженного направления, описан его алгоритм и приведены несколько примеров решений по алгоритму, как ручного вычисления, так и с помощью ЭВМ.
Рассматривая и сравнивая выше приведенные примеры решений и их результаты, можно сказать, что минимум квадратичной функции был найден с минимальной погрешностью.
Данный метод ориентирован на исследование квадратичных функций. Основная его идея заключается в том, что бы, приведя квадратичную функцию n переменных к виду суммы полных квадратов, был найден ее оптимум в результате n одномерных поисков по преобразованным координатным направлениям.
В программном продукте были реализованы следующие функции:
- решение заданной функции методом Пауэлла;
- вывод результата и ход решения в текстовый объект;
- вывод ошибок,
при условии, что вводимые
- запись решения функции в текстовый файл.
Список использованной литературы
1.Акулич, И.Л. Математическое программирование в примерах и задачах [Текст] / И.Л.Акулич – Москва 1986.
2.Банди, Б.А. Методы оптимизации вводный курс [Текст] / Б.А.Банди – Москва 1988.
3.Белецкая, С.Ю. Решение задач математического программирования [Текст] / С.Ю.Белецкая – Воронеж 2001.
4.Карманов, В.Г. Математическое программирование Текст] / В.Г.Карманов – Москва 1975.
5. Пантелеев, А.В. Методы оптимизации в примерах и задачах Текст] / А.В.Пантелеев – Москва 2005. – С. 544.
Приложение А
Листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Runtime.Serialization;
using System.Runtime.Serialization.
using System.Runtime.Serialization.
namespace Sopr_Napr
{
public partial class Form1 : Form
{
double[,] Matrica = new double[2, 2];
double[] x = new double[2];
double E;
double[] d1 = new double[2];
double[] d2 = new double[2];
double[] d0 = new double[2];
int i;
int k;
int n = 2;
int j;
double[] y = new double[2];
double[] y1 = new double[2];
double[] y0 = new double[2];
double[] x_st = new double[2];
double[] d1_n = new double[2];
double[] d2_n = new double[2];
double[] d0_n = new double[2];
public Form1()
{
InitializeComponent();
}
private int Rang_matrici(double[,] Matrica)
{
if (Matrica[1, 0] != 0)
for (int i = 1; i < 2; i++)
{
double mnojitel = (Matrica[0, 0] / Matrica[i, 0]) * (-1);
for (int j = 0; j < 2; j++)
{
Matrica[i, j] = Matrica[i, j] * mnojitel + Matrica[i - 1, j];
}
}
int k;
int y = 0;
for (int i = 0; i < 2; i++)
{
k = 0;
for (int j = 0; j < 2; j++)
{
if (Matrica[i, j] == 0)
k++;
}
if (k == 2)
y++;
}
int rang = 2 - y;
return rang;
}
private double Function_for_search_extremum(d
{
double Fx = Math.Pow((y[0] + t * u[0]), 3) + Math.Pow((y[1] + t * u[1]), 2) - 3 * (y[0] + t * u[0]) - 2 * (y[1] + t * u[1]) + 2;
return Fx;
}

- Метод повышения управления качеством продукции в ОАО «Ламзурь»
- Метод повышения эффективности менеджмента на предрприятии
- Метод подобия
- Метод подъема этажей и перекрытий
- Метод политических процессов
- Метод полной себестоимости
- Метод половинного деления
- Метод осциллирующих функций в случае дифференциального уравнения с запаздывающим аргументом
- Метод отбора персонала
- Метод отбора персонала
- Метод оценки активов
- Метод оценки доходности и риска
- Метод оценки затрат в управленческом учете
- Метод паука. Выбор ВУЗа