Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
140
Добавлен:
07.08.2013
Размер:
925.82 Кб
Скачать

9.Вывод

В данной курсовой работе были рассмотрены различные методы оптимизаций поставленных задач , а именно, рассматривались задачи:

-Задача линейного программирования, которая решалась двухэтапным симплекс-методом.

- Условной и безусловной оптимизации:

Задача безусловной оптимизации решалась с применение основных теорем математического анализа, а так же

написанной программой одномерной оптимизации реализующей метод «золотого сечения» отрезка локализации минимума.

Задачи условной минимизации решались:

  1. С применением теоремы Джона-Куна-Таккера

  2. Методом возможных направлений Зойтендейка

  3. Методом внешних штрафных функций (программная реализация; использовался метод Дэвидона-Флетчера-Пауэлла)

-Оптимизация квадратичных и неквадратичных функций:

Функции минимизировались программой, реализующей метод Дэвидона-Флетчера-Пауэлла.

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

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

В программе был написан критерий проверки функции на выпуклость (через определитель матрицы Гессе), т.е. в точках, где он не положительна программа завершала процесс и выводила соответствующее оповещение.

Метод внешних штрафных функций был добавлен в описанную программу. Минимум функции с задаваемым допустимым множеством находился примерно за 7 итераций в каждом случае. Ответ, полученный через программу, совпал с значение полученным на этапе решения задачи условной минимизации методом Зойтендейка.

Так же производилось исследование множеств на выпуклость, функций на выпуклость и овражность.

10.Список литературы

1.Пантилеев А.В., Летова Т.А., «Методы оптимизации в примерах и задачах», «Высшая школа», 2002 г.

2.Лутманов С.В., «Курс лекций по методам оптимизации», 2001

3.Ларичев О.И., Горвиц Г.Г., «Методы поиска локального экстремума овражных функций», «Наука», 1990

4.Амосов А.А., Дубинский Ю.А., Копченова Н.В., «Вычислительные методы для инженеров», «Высшая школа», 1994

5.Бушуев А.Ю., Кутыркин В.А., Мозжорина Т.Ю., Тимофеев В.Н., «Введение в оптимизацию» «МГТУ им. Н.Э.Баумана», 2008

11.Приложения

10.1. Одномерный поиск. Метод «золотого сечения».

Описание программы:

Задача состоит в минимизации затрат на производство закрытого цилиндрического бака, при заданном объеме V;

-В программе производится минимизация функции одного аргумента S(R)=2*PI*r^2+2*V/r;

-При выполнении программы вводится значение объема V;

-Решением задачи является пара чисел (Rmin;Hmin);

-Высота H находится по формуле H=V/(PI*r^2);

-Используется метод «золотого сечения» .

Программа написана в среде Microsoft Visual Studio 2010.

Листинг:

#include <iostream>;

#include <math.h>;

using namespace std;

void main()

{

//Повторить программу или нет

char chose[4]="no";

//Включаем вывод русских символов в консоль;

setlocale(LC_ALL,"Russian");

//Число PI;

const double pi=3.1416;

//Инициализация границ отрезка локализации минимума, т.е. два значения радиуса [R1;R2] в милиметрах;

double R1=0, R2=100000;

//Константы золотого сечения;

double const1=0.381966, const2=0.618033;

//Точки, осуществляющие золотое сечение;

double alfa=0, bett=0;

//Значения функции для двух точек золотого сечения(нужны для сравнения);

double S1=0,S2=0;

//Точность,объем, минимальный радиус и соответствующая ему высота;

double eps=0,V=0,Rmin=0,Hmin=0;

{

cout<<"В программе производится минимизация функции одного аргумента:"<<endl;

cout<<"S(r)=2*PI*r^2+2V/r;"<<endl;

cout<<"При выполнении программы вводится значение объема V;"<<endl;

cout<<"Решением задачи является пара чисел (r*;H*);"<<endl<<endl; loop:

cout<<"Введите объем V:\t";

cin>>V;

cout<<"Задайте точность eps:\t";

cin>>eps;

cout<<endl;

}

//Вычисляем начальные точки золотого сечения;

{

alfa=R1+const1*(R2-R1);

bett=R1+const2*(R2-R1);

}

//Далее следует реализация метода;

while(const2*(R2-R1)>=eps) {

S1=2*(pi*pow(alfa,2)+V/alfa);

S2=2*(pi*pow(bett,2)+V/bett);

//Т.к. функция унитарна, изменяем границы отрезка локализации минимума;

if (S1>S2){

R1=alfa;

alfa=bett;

bett=R1+const2*(R2-R1);

}

else {

R2=bett;

bett=alfa;

alfa=R1+const1*(R2-R1);

}

};

//Обработка конечных данных;

{

//Далее сравниваются два значения S1 S2;

S1=2*(pi*pow(R1,2)+V/R1);

S2=2*(pi*pow(R2,2)+V/R2);

if (S1>S2)

Rmin=alfa;

else

Rmin=bett;

//Минимальная высота: H=V/(pi*R^2);

Hmin=V/(pi*pow(Rmin,2));

}

//Вывод ответа;

cout<<"Решением задачи в виде (Rmin;Hmin): ("<<Rmin<<";"<<Hmin<<")"<<endl<<endl;

//Закольцовка

{

cout<<"Запустить заново?"<<endl;

cout<<"1. yes"<<endl;

cout<<"2. no"<<endl;

cout<<"Выбор:\t";

cin>>chose;

cout<<endl<<endl;

if (chose[0]=='y'&&chose[1]=='e'&&chose[2]=='s') {goto loop;}

}

}

Соседние файлы в папке курсовая docx40