Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Тема- Безусловная многомерная оптимизация Цель работы- знакомство с методами многомерной безусловной опти

Работа добавлена на сайт samzan.net:


Министерство образования и науки РФ

Федеральное государственное бюджетное общеобразовательное учреждение

высшего профессионального образования

"Уфимский государственный авиационный технический университет"

Кафедра АПрИС

Отчет

по лабораторной работе №4

по дисциплине "Методы оптимизации"

Вариант №2

Выполнил: ст.гр. ИВТ-203

Арсланова А.

Проверил: доцент кафедры

Хасанов А.Ю.

Уфа-2013

Тема: Безусловная многомерная оптимизация

Цель работы: знакомство с методами многомерной безусловной оптимизации нулевого порядка.

Задание: решить задачу оптимизации следующим методом многомерной безусловной оптимизации:

- метод с оптимальным шагом(наискорейший спуск).

F(x1,x2)=129x12-256x1x2+129x22-51x1-149x2-27;

x1=49.904669

x2=50.095331

y=-5031.671206

График функции:

Блок-схема программы:

Листинг программы:

#include <iostream>

#include <stdio.h>

#include <math.h>

#include <conio.h>

#include<iomanip>

using namespace std;

const int N = 10000;

long double fx(long double x1, long double x2)

{

long double f;

f = 129 * x1*x1 - 256 * x1*x2 + 129 * x2*x2 - 51 * x1 - 149 * x2 - 27;

return(f);

}

long double fz1(long double x1, long double x2)

{

long double f;

f = 258 * x1 - 256 * x2 - 51;

return(f);

}

long double fz2(long double x1, long double x2)

{

long double f;

f = -256 * x1 + 258 * x2 - 149;

return(f);

}

double perebor(double ax1, double ax2, double az1, double az2, double aa, double ab)

{

int i, l;

double min, yr, a, b, L;

double *x, *y;

int N;

N = 51;

x = new double[N];

y = new double[N];

a = aa; b = ab;

for (i = 1; i <= N; i++)

{

 x[i] = a + i*((b - a) / (N + 1));

 y[i] = fx(ax1 - x[i] * az1, ax2 - x[i] * az2);

}

min = y[1];

l = 1;

for (i = 1; i <= N; i++)

{

 if (y[i] <= min) {

  min = y[i];

  l = i;

 }

}

L = x[l];

yr = y[l];

return L;

}

void GaussZeiden()

{

double *x1, *x2, e, xr1, xr2, yr, z1, z2, L, d, h, a1, b1, a2, b2, L1, L2;

int mm, mm1, mm0, k;

x1 = new double[100000];

x2 = new double[100000];

if (x1 == NULL) { cout << "Нетдинамическойпамяти\n"; _getch(); return; }

if (x2 == NULL) { cout << "Нетдинамическойпамяти\n"; _getch(); return; }

cout << "e= "; cin >> e;

h=0.361;

mm1 = 0; k = 0; mm0 = 0;

x1[0] = 1;

x2[0] = 1;

do{

 z1 = fz1(x1[k], x2[k]);

 z2 = fz2(x1[k], x2[k]);

 mm1 = mm1 + 1;

 find(x1[k], x2[k], z1, z2, h, a1, b1, mm0);

 L1 = perebor(x1[k], x2[k], z1, z2, a1, b1);

 x1[k + 1] = x1[k] - L1*z1;

 x2[k + 1] = x2[k];

 z1 = fz1(x1[k + 1], x2[k + 1]);

 z2 = fz2(x1[k + 1], x2[k + 1]);

 mm1 = mm1 + 1;

 find(x1[k + 1], x2[k + 1], z1, z2, h, a2, b2, mm0);

 L2 = perebor(x1[k + 1], x2[k + 1], z1, z2, a2, b2);

 x1[k + 2] = x1[k + 1];

 x2[k + 2] = x2[k + 1] - L2*z2;

 d = sqrt(pow(x1[k + 2] - x1[k], 2) + pow(x2[k + 2] - x2[k], 2));

 k = k + 2;

} while (d>e);

xr1 = x1[k];

xr2 = x2[k];

yr = fx(xr1, xr2);

 mm = mm1 + mm0;

 cout << "x1= " << xr1 << endl;

cout << "x2= " << xr2 << endl;

 cout << "y= " << yr << endl;

 cout << "mm0= " << mm0 << endl;

cout << "mm1= " << mm1 << endl;

 cout << "mm= " << mm << endl;

 cout << "k= " << k << endl;

delete[]x1;

 delete[]x2;

_getch();

}

void GrPostShag()

{

long double *x1, *x2, e, xr1, xr2, yr, z1, z2, L;

int mm, k, h;

x1 = new long double[100000];

x2 = new long double[100000];

if (x1 == NULL) { cout << "Нетдинамическойпамяти\n"; _getch(); return; }

if (x2 == NULL) { cout << "Нетдинамическойпамяти\n"; _getch(); return; }

cout << "e= "; cin >> e;

 

L = 0.0005;

x1[0] = 1;

x2[0] = 1;

z1 = fz1(x1[0], x2[0]);

z2 = fz2(x1[0], x2[0]);

mm = 2; k = 0;

poka:

x1[k + 1] = x1[k] - L*z1;

x2[k + 1] = x2[k] - L*z2;

z1 = fz1(x1[k + 1], x2[k + 1]);

z2 = fz2(x1[k + 1], x2[k + 1]);

//out<<x1[k+1]<<endl;

//out<<x2[k+1]<<endl;

mm = mm + 2;

if (sqrt(pow(z1, 2) + pow(z2, 2))>e) {

 k = k + 1;

 goto poka;

}

else{

 xr1 = x1[k + 1];

 xr2 = x2[k + 1];

 yr = fx(xr1, xr2);

}

cout << "xr1= " << x1 << endl;

cout << "xr2= " << x2 << endl;

cout << "yr= " << y << endl;

cout << "mm= " << mm << endl;

cout << "k= " << k << endl;

delete[]x1;

delete[]x2;

_getch();

}

void main()

{

int i;

setlocale(LC_ALL, "Russian");

 while (1)

{

 system("cls");

 cout << "1. Градиентный метод с оптимальным шагом.\n";

    cout << "2. Градиентный метод с дроблением шага.\n";

 cout << "3. Покоординатный метод с постоянным шагом.\n";

 cout << "4. Метод покоординатного спуска с оптимальным шагом.\n";

 cout << "5. Градиентный метод с постоянным шагом.\n";

 cout << "6. Выход из программы.\n";

 cout << " \n";

 cout << "Ваш выбор:(1-6)  \n"; cin >> i;

 switch (i)

 {

 case 1: GrOptimShag(); break;

 case 2: GrDroblShaga(); break;

 case 3: PokoordPostShag(); break;

 case 4: GaussZeiden(); break;

 case 5: GrPostShag(); break;

 case 6: cout << "Конец работы.\n";

  _getch();

  exit(0);

 default: cout << i << " - нет такого пункта. \n";

  cout << "Повторите: \n";

  _getch(); break;

 }

}

}

Результаты вычислений:

Покоординатный метод с оптимальным шагом:

точность E

x1'

x2'

y'

mm

mm1

mm2

k

E

0,1

49.775814

50.099902

-5031.571318

108

54

162

52

0.012898

0,01

49.908973

50.099982

-5031.670474

132

66

198

66

0.006337

0,001

49.906654

50.097041

-5031.67119

172

86

258

86

0.002619

0,0001

49.904676

50.095404

-5031.671206

204

102

306

102

0.000073

0,00001

49.90465

50.095309

-5031.671206

224

112

336

112

0.0000029

Градиентный метод с постоянным шагом:

точность E

x1'

x2'

y'

mm

k

E

0,1

49.869331

50.059993

-5031.668709

14464

7230

0.035513

0,01

49.901134

50.091795

-5031.671181

19066

9531

0.004999

0,001

49.904316

50.094977

-5031.671206

23670

11833

0.000473

0,0001

49.904634

50.095295

-5031.671206

28272

14134

0.000036

0,00001

49.904666

50.095327

-5031.671206

32876

16436

0.0000039

Траектории точек:

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




1. тема и ее уровни Принципы организации БС БС ~ это основанная на экон
2. Тема 6 Личность и общество 1
3. Поэтому эти поля могут использоваться для управления движением заряженных частиц
4. Анализ модели Манделла-Флеминга
5. тема является весьма актуальной и важной для всего мира т
6. ЛУКОЙЛа В Азербайджане для компании они остаются неизменными Владимир МИШИН собственный корреспо
7. на тему- Государственный долг и его последствия Преподаватель- доц
8. держал сжатую в -его- руках; to clench ~ сжимать стискивать slopped on the floor не полилось на пол; to slop ~ проливать
9. Другая жизнь в исправительной колонии особого режима ’4 в г
10. тема издержек производства и их эффект на масштабы производства рассматривается с теоретической точки зрени
11. Задание- выбрать верныеВ случае задержки выплаты зарплаты на срок более 15 дней работник имеет право
12. Микроклимат в коллективе это очень важно
13. МакКінзі 3 Використання SWOTаналізу для визначення конкурентних переваг 4 Аналіз конкурентоспроможності
14. Взаимосвязь онтологии и физики в атомизме Демокрита (на примере анализа понятия пустоты)
15. Статья 163 Зоны таможенного контроля 1
16. 3.04 Харківський інститут фінансів Українського державного університету фінансів та міжнародно
17. Курсовая работа- Понятие договора аренды
18. Реферат- Учет финансовых вложений (инвестиций) и ценных бумаг
19. Значение стратегического менеджмента
20. Особливості функціонування партійних систем