Исследование методов оптимизации
Математическое описание и аналитическое исследование методов оптимизации: Нелдера-Мида и градиентный с дроблением шага. Зависимость числа итераций от заданной точности. Решение задачи минимизации для каждого из методов и ее графическая интерпретация.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 22.11.2009 |
Размер файла | 472,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
public override string ToString()
{return "(" + this.x1.ToString("f5") + ";" + this.x2.ToString("f5") + ")";}}
class Cnt
{public static double function(Tk c)
{return 12 + c.x1*c.x1 + (1+c.x2*c.x2)*c.x2*c.x2 + (c.x1*c.x1*c.x2*c.x2+100)*(c.x1-c.x2)*(c.x1-c.x2);}
public static void Pr(ref Tk[] c, ref double[] ot)
{double fir; Tk tk;
for (int k = 1; k <= cap; k++)
for (int l = k; l >= 1; l--)
if (ot[l - 1] > ot[l])
{fir = ot[l];
tk = c[l];
ot[l] = ot[l - 1];
c[l] = c[l - 1];
ot[l - 1] = fir;
c[l - 1] = tk;}
else break;}
public static bool Ostanov(Tk[] w, double E, double n, Tk c, out double Ost)
{double Lp;
double d = 0.5;
double p1 = 0;
Tk p2 = new Tk(0, 0);
for (int i = 0; i <= cap; i++)
{p1 += (function(w[i]) - function(c)) * (function(w[i]) - function(c));
p2 += (w[i] - c) * (w[i] - c);}
Lp = Math.Sqrt(p2.x1 * p2.x1 + p2.x2 * p2.x2);
Ost = d * (Math.Sqrt((1 / (n + 1)) * p1)) + (1 - d) * (Math.Sqrt((1 / (n + 1)) * Lp));
if (Ost < E)
return true;
else return false;}
public static double Met(Tk[] c, double tchn)
{double[] f = new double[cap + 1];
double val1=0, val2=0, val3 = 0, val4, val5, val6, val7;
Tk sim1, sim2, sim3, sim4, sim5, sim6, sim_cen, sim7;
sim_cen.x1 = sim_cen.x2 = 0;
int i;
double J1;
bool flag;
for (i = 0; i <= cap; i++) // Вычисление значений функции на начальном симплексе
f[i] = function(c[i]);
while (!Ostanov(c, tchn, n, sim_cen, out J1))// Проверка на условие выхода
{n++;
// Шаг 1. Сортировка
Pr(ref c, ref f);
sim1 = c[cap]; val1 = f[cap];
sim2 = c[cap - 1]; val2 = f[cap - 1];
sim3 = c[0]; val3 = f[0];
// Шаг 2. Вычисление центра тяжести симплекса
sim_cen.x1 = sim_cen.x2 = 0;
for (i = 0; i < cap; i++)
sim_cen = sim_cen + c[i];
sim_cen = sim_cen / cap;
// 3Шаг . Отражение
sim4 = sim_cen * (1 + Al) - sim1 * Al; val4 = function(sim4);
// Шаг 4.
if (val4 <= val3)
{ // Шаг 4a.
sim5 = sim_cen * (1 - Gm) + sim4 * Gm;
val5 = function(sim5);
if (val5 < val3)
{c[cap] = sim5;
f[cap] = val5;}
else
{c[cap] = sim4;
f[cap] = val4;}}
if ((val3 < val4) && (val4 <= val2))
{ // Шаг 4.b
c[cap] = sim4;
f[cap] = val4;}
flag = false;
if ((val1 >= val4) && (val4 > val2))
{ // Шаг 4c.
flag = true;
val7 = val1;
sim7 = sim1;
c[cap] = sim4;
f[cap] = val4;
sim4 = sim7;
val4 = val7;}
// Шаг 4d.
if (val4 > val1) flag = true;
if (flag)
{ // Шаг 5. Сжатие
sim6 = sim1 * Bt + sim_cen * (1 - Bt);
val6 = function(sim6);
if (val6 < val1)
{ // Шаг 6.
val7 = val1;
sim7 = sim1;
c[cap] = sim6;
f[cap] = val6;
sim6 = sim7;
val6 = val7;}
else
{ // Шаг 7. Глобальное сжатие
for (i = 0; i <= cap; i++)
c[i] = sim3 + (c[i] - sim3) / 2;}}
op[n - 1] = Convert.ToString(n) + "; " + sim1.ToString() +
"; " + sim2.ToString() + "; " + sim3.ToString();}
return (val3 + val1 + val2) / 3;}}
private void button1_Click(object sender, EventArgs e)
{Tk ta = new Tk(0, 0);
Tk tb = new Tk(0.26, 0.96);
Tk tc = new Tk(0.96, 0.26);
Tk[] t = new Tk[3] { ta, tb, tc };
listBox1.Items.Clear();
n = 0;
op = new string[200];
double eps1 = Convert.ToDouble(textBox2.Text);
label4.Text = Cnt.Met(t, eps1).ToString("f5") + "; " + Convert.ToString(n) + ".";
for (int i = 0; i < n; i++)
listBox1.Items.Add(op[i]);}
private void Form1_Load(object sender, EventArgs e){}}
8. СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ
1. Агуров П.В. C# в подлиннике (программирование на языке С#) - Петербург, 2006
2. Агуров П.В. Сборник рецептов по C# - Петербург,2006
3. Банди Б. Методы оптимизации - Москва, 1988
4. Базара М, Шетти К. Нелинейное программироваине. Теория и алгоритмы - М.:Мир, 1988
5. Поляк Б.Т. Введение в оптимизацию. - М.: Наука, 1983
6. Раскин Л.Г. Математическое программирование: Учебное пособие - Харьков: НТУ «ХПИ» , 2002
7. Рихтер Д. Программирование на платформе Microsoft. NET Freamework для профессионалов - М.Microsoft Press, 2003
8. Серая О.В. Методические указания для проведения лабораторных работ по курсу «Математическое программирование» - Харьков: НТУ «ХПИ» , 2003
9. Сухарев А.Г., Тимохов А.В Курс методов оптимизации - М.: Наука, 1986
10. Химмельблау Д. Прикладное нелинейное программирование М.:Мир, 1989
Подобные документы
Задачи оптимизации в математике и информатике. Классификация методов оптимизации. Методы с переменной метрикой. Значение функции на заданном интервале. Локальный минимум функции. Методы минимизации функции. Классификация методов многомерной оптимизации.
курсовая работа [1,5 M], добавлен 19.06.2012Отделение действительных корней нелинейного уравнения. Метод хорд и касательных (Ньютона), геометрическая интерпретация. Графическая схема алгоритма. Описание реализации базовой модели в MathCAD. График сравнения числа итераций в зависимости от точности.
курсовая работа [2,0 M], добавлен 16.05.2013Программирование численных методов одномерной оптимизации. Решение одномерных задач оптимизации методами последовательного поиска. Градиентные методы и их применение для оптимизации на ЭВМ математических моделей объектов. Методы нулевого порядка.
контрольная работа [257,9 K], добавлен 15.01.2009Способы отделения корней. Решение задачи методами Ньютона уточнения корней и простых итераций. Формула нахождения погрешностей. Геометрическая интерпретация методов. Составление блок-схем и текстов программ. Результаты их работы на тестовом примере.
курсовая работа [3,1 M], добавлен 15.06.2013Изучение аналитических и численных методов поиска одномерного и многомерного безусловного экстремума. Решение поставленной задачи с помощью Mathcad и Excel. Реализация стандартных алгоритмов безусловной оптимизации средствами языка программирования С++.
курсовая работа [488,5 K], добавлен 21.10.2012Исследование методов оптимизации программного кода на языке Си с помощью компилятора. Тестирование результатов утилитой optbench.c. Определение особенностей оптимизации компилятора на собственной программе. Удачные примеры быстроты и компактности кода.
лабораторная работа [26,5 K], добавлен 17.12.2012Сравнение методов многомерной оптимизации Хука-Дживса и Розенброка по числу вычислений и по числу вызова оптимизируемой функции в процессе оптимизации. Особенности применения алгоритмов ускоряющего шага, в которых используется поиск по направлению.
лабораторная работа [2,8 M], добавлен 14.07.2012Описание математических методов решения задачи оптимизации. Рассмотрение использования линейного программирования для решения транспортной задачи. Применение симплекс-метода, разработка разработать компьютерной модели в Microsoft Office Excel 2010.
курсовая работа [1,5 M], добавлен 24.05.2015Назначение и классификация методов поисковой оптимизации. Эффективность поискового метода. Методы поиска нулевого порядка: исходные данные, условия, недостатки и применение. Структура градиентного метода поиска. Основная идея метода наискорейшего спуска.
лекция [137,8 K], добавлен 04.03.2009Задача о ранце как задача комбинаторной оптимизации. Задача о загрузке, рюкзаке, ранце. Постановка и NP-полнота задачи. Классификация методов решения задачи о рюкзаке. Динамическое программирование. Метод ветвей и границ. Сравнительный анализ методов.
курсовая работа [1,7 M], добавлен 18.01.2011