Метод Нелдера-Міда

Дослідження збіжності методу Нелдера-Міда в контексті безумовної та умовної оптимізації. Особливості роботи данного методу для допустимих областей: опуклої, не випуклої, з лінійними обмеженнями. Вибір птимальної довжини ребра початкового симплексу.

Рубрика Математика
Вид курсовая работа
Язык украинский
Дата добавления 15.07.2016
Размер файла 87,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Міністерство освіти і науки України

НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ УКРАЇНИ

«КИЇВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ»

Кафедра прикладної математики

КУРСОВА РОБОТА

з дисципліни «Методи оптимізації»

на тему: «Метод Нелдера-Міда»

Виконала: Кравченко А.Д.

Група КМ-32 факультет ФПМ

№ залікової книжки КМ-3209

Допущений до захисту ______

Керівник ___________ (Ладогубець Т.С.)

КИЇВ

2016

ЗМІСТ

  • ПОСТАНОВКА ЗАДАЧІ
    • 1. ТЕОРЕТИЧНІ ВІДОМОСТІ
    • 2. ПРАКТИЧНІ РЕЗУЛЬТАТИ
      • 2.1 Безумовна оптимізація
      • 2.2 Умовна оптимізація
  • ВИСНОВКИ
  • СПИСОК ВИКОРИСТАНИХ ЛІТЕРАТУРНИХ ДЖЕРЕЛ
  • ДОДАТКИ
  • Постановка задачі
  • Метою роботи є дослідження збіжності методу Нелдера-Міда в контексті безумовної та умовної оптимізації.
  • Безумовна оптимізація

- Дослідити збіжність методу без обмежень на прикладі функції Розенброка

Умовна оптимізація

Розглянути роботу методу для допустимих областей:

- Опуклої;

- Не випуклої;

- З лінійними обмеженнями із застосуванням методу ДСК-П;

- З лінійними обмеженнями із застосуванням методу золотого перерізу;

Також необхідно визначити більш оптимальний для даної задачі метод одномірного пошуку з методів ДСК-П та золотого перерізу, визначити оптимальну точність цих методів одномірного пошуку.

Для виконання поставлених задач необхідно виділити основні підзадачі:

- здійснити пошук мінімуму для кожної з даних функцій при відповідних обмеженнях;

- обрати оптимальну довжину ребра початкового симплексу;

- покращити алгоритм методу при точності 10-1...10-8 (кількість обчислень функції не повинна перевищувати 600-1000);

- порівняти отримані значення мінімуму з величинами, знайденими аналітично;

- зробити висновки щодо доцільності використання методу для різних областей.

метод нелдер міда симплекс

1. Теоретичні відомості

Метод Нелдера-Міда відноситься до категорії евристичних методів. Процес пошуку ґрунтується на властивостях симплексу. Регулярний симплекс в N- мірному просторі - це многогранник , що містить N+1 рівновіддалену одна від одної вершини. Очевидно, що у випадку 2-х змінних це правильний трикутник.

Новий симплекс можна побудувати на будь-якій грані початкового симплексу шляхом перенесення вибраної вершини на відповідну відстань вздовж прямої, проведеної через центр тяжіння решти вершин. Отримана таким чином точка стає вершиною нового симплексу, а стара (обрана для побудови) вершина симплексу виключається. Тобто для переходу до нового симплексу необхідно здійснити лише одне обчислення цільової функції.

На першому етапі методу необхідно, маючи початкову точку та масштабний множник, побудувати регулярний симплекс. Масштабний множник визначає довжину ребра симплексу.

Координати вершин регулярного симплексу, визначаються наступною матрицею D, в якій стовпцями є вершини, пронумеровані від 1 до (n+1), а рядки - координати i-ї змінної (i = 1, ..., n).

Або, в загальному випадку, якщо початкова точка має ненульові координати, тоді координати вершин симплексу обчислюються за формулою:

d1=;

d2=;

t - масштабний множник (довжина ребра);

n - кількість змінних, n+1 - кількість вершин,

x(0) = (x1(0), x2(0), ..., xj(0), ...,xn(0)) - початкова точка;

x(i) = (x1(i), x2(i), ..., xj(i), ...,xn(i)), де i, j = 1, ..., n.

Після побудови симплексу обчислюються значення цільової функції в кожній вершині симплексу. Розглянемо симплекс для функції від двох змінних - трикутник. Вершину с найбільшим значенням функції позначимо h, з найменшим - l, із середнім - g. Далі знайдемо середину ребра проти xh і позначимо її xc. Проведемо проектуючи пряму через точки xh і xc. На такій самій відстані від xc побудуємо нову точку xn. Порівняємо значення в цій точці з fh fg fl:

- Якщо fс - найбільша, обираємо коефіцієнт в = -0.5, сильно зменшуючи розмір симплекса;

- Якщо fс - найменша, обираємо коефіцієнт г = 2, сильно збільшуючи розмір симплекса;

- Якщо fс лежить між найбільшим та середнім значеннями, обираємо коефіцієнт в = 0.5, помірно зменшуючи розмір симплекса;

- Якщо fс лежить між найменшим та середнім значеннями, обираємо коефіцієнт б = 1, не змінюючи розмір симплекса.

Ці коефіцієнти (загальне їх позначення - И) суттєво пришвидшують процес пошуку точки мінімуму. З їх врахуванням шукаємо нову вершину симплексу за формулою:

.

f(x2)= max{f(x1), f(x2), f(x3)}

Новий симплекс - x1, x3, x4 при б = 1:

xc - центр тяжіння.

Під час роботи методу розмір симплексу може виявитись завеликим для визначення точки мінімуму із заданою точністю. Про це сигналізує за циклювання - кружляння навколо однієї точки. Для подальшої роботи методу необхідно зробити редукцію - зменшити розмір симплексу вдвічі.

Ітерації продовжуються аж поки:

1. Не буде покрита точка мінімуму;

2. Не почнеться циклічний рух по 2-х або більше симплексу.

У цих ситуаціях використовують наступні правила.

Правило 1. Накриття точки мінімуму.

Якщо вершина, якою відповідає найбільше значення цільової функції, побудована на попередній ітерації, то замість неї береться вершина, якою відповідає наступне по величині значення цільової функції.

Правило 2. Циклічний рух.

Якщо деяка вершина симплексу не виключається впродовж більш, ніж M ітерацій, необхідно зменшити розміри симплексу за допомогою коефіцієнта редукції, і побудувати новий симплекс, вибравши базисною точку, якій відповідає мінімальне значення цільової функції.

Спендіш, Хекст і Хімсворт запропонували обчислювати M, як M = 1,65 N + 0,05N2, де N - розмірність завдання.

Правило 3. Критерій закінчення.

Пошук завершується, коли 1) розміри симплексу стають досить малими 2) різниці між значеннями цільової функції у вершинах симплексу менше заданої величини або з використанням інших критеріїв, наприклад, середньоквадратичного відхилення.

Переваги методу:

- Мала кількість початкових даних: параметри величини симплексу t, параметри зменшення симплексу, параметри закінчення пошуку;

- Невеликий вплив помилки обчислень значень цільової функції на ефективність пошуку, оскільки основними даними є максимальні значення цільової функції, а не мінімальні;

- Простота розрахунків і логічної структури, невеликий об'єм коду програми обчислень;

Недоліки методу:

- Необхідне введення масштабування, аби значення змінних були порівнянні по величині, оскільки вершини симплексу залежать від одного масштабного множника.

2. Практичні результати

2.1 Безумовна оптимізація

Аналітичний розрахунок мінімуму функції Розенброка дає результат f(x) = 0 при x = (1;1). Розглянемо розрахунки мінімуму функції Розенброка методом Нелдера-Міда за різних умов. В усіх таблицях t - довжина ребра регулярного симплексу, сount - кількість обчислень цільової функції, х1 та х2 - координати точки мінімуму, f(x1;x2) - локальний мінімум функції.

1) Дані розрахунків, проведених із точністю е=10-3 наведені в таблиці 2.1.1

Таблиця 2.1.1 - дані розрахунків з точністю 10-3

t

сount

f(x1; x2)

x1; x2

0.001

53

2.351833235771263019842081121169

0.5282 0.2918

0.01

45

2.3731519815891104485672258306295

0.5363 0.299

0.1

97

0.85050032528462238268218698067358

0.1449 0.0135

1

171

0.10106756440559097609543925955222

0.6959 0.4741

10

115

5.4982518121351562356835529499222

1.2319 1.4456

0.5

267

0.016873455331054797168288672537528

0.6726 0.4780

Згідно з даними, представленими в таблиці 2.1.1, точність 10-3 занадто низька для коректної роботи методу.

2) Дані розрахунків, проведених із точністю е=10-6 наведені в таблиці 2.1.2

Таблиця 2.1.2 - дані розрахунків з точністю 10-6

t

count

f(x1; x2)

x1; x2

0.001

591

0.00051212007958092791663068377161494

0.9978

0.9934

0.01

477

0.013718720571803087737716708716107

0.8897

0.7876

0.1

429

0.000000154472354704593817689814612417

0.9997

0.9995

1

287

0.000000779438128619230353514549421158

1.0005

1.0009

10

201

5.4916272242766037692263125791214

1.2120

1.3916

100

1321

0.000000241848910772895940249636913618

0.9995

0.9991

1000

665

0.000065037051123411528520505686667974

1.0077

1.0153

5000

313

0.028264065745328866008367896256459

0.8516

0.7173

4499

307

0.000000421009385248898224582392822712

1.0002

1.0003

Згідно з даними таблиці 2.1.2 кращий результат можна отримати при стандартному значенні масштабного множника (t=1). Зі зменшенням довжини ребра збільшується кількість обчислень функції. При збільшенні масштабного множника до t=100 отримаємо найменшу точність обчислення - рахуємо значення цільової функції 1321 раз. Проте під час подальшого збільшення довжини ребра точність обчислень знову зростає, наприклад, при t=4499 рахуємо цільову функцію лише 307 разів.

3) Дані розрахунків, проведених із точністю е=10-8 наведені в таблиці 2.1.3

Таблиця 2.1.3 - дані розрахунків з точністю 10-

t

count

f(x1; x2)

x1;x2

0.001

787

0.00000001232552451237797332636534903931

1

0.9999

0.01

507

0.013718476819046011849767552348567

0.8899

0.7879

0.1

439

0.0000000002632431957530018240493184088907

1

1

1

315

0.0000000005498911394647540303484406787337

1

1

10

2333

0.0000000040079500007574848550494971350169

0.9999 0.9999

100

1339

0.0000000031421414983789602263770598006591

1 1.001

4499

319

0.0000000057895816563369023427827330004203

0.9999 0.9999

8

Дані з таблиці 2.1.3 ілюструють високу точність знаходження мінімуму. При деяких значеннях t за допустиму кількість підрахування значення функції знаходимо мінімум в точках (1;1), тобто у власне точці локального мінімуму. Аналогічно випадку з е = 10-6 найбільш точні значення досягаються в точках з довжиною ребра t = 1, та t = 4499, де функцію рахуємо приблизно лише 300 разів.

2.2 Умовна оптимізація

2.2.1 Опукла допустима область

Задамо таку область за допомогою наступного рівняння: x12 + (x2-1) =< 0.52 . Аналітично знайдений мінімум на границі обмеження знаходиться в точці (0.18475; 0.5354), де значення функції становить 25.79.

Під час дослідження допустимої області відслідковувались як виконання критерію закінчення, так і потрапляння точки на границю допустимої області (саме допустимої області без застосуванням «майже» допустимої області). Нижче наведені таблиці ілюструють результати дослідження з точністю 10-3 та 10-6 .

1) Розглянемо таблицю 2.2.1.1 - отримані результати за умов точності е = 10-3 та початкової точки х0 = (0; 1) в допустимій області.

Таблиця 2.2.1.1 - дані розрахунків з точністю 10-3, х0 = (0; 1)

t

count

f(x1; x2)

(x1; x2)

0.001

101

26.115743792106064378788753432092

0.0537

0.5029

0.01

111

26.120397451568539283673522698269

0.0564

0.5032

0.1

103

25.973967216317845766796149537427

0.1429

0.5002

1

199

31.910329380568404576357447328043

0.4325

0.7491

10

135

39.454868757547251745189451162717

0.4783

0.8548

100

163

33.53937283495660817347876031342

0.4472

0.7765

0.15

91

26.17404381618605587779308301076

0.0777

0.5061

Оскільки допустима область - коло з радіусом 0.5, то очевидно, що кращі результати отримаємо при довжині ребра t < 0.5, що, власне, підтверджують дані таблиці. При t = 0.1 отримаємо точку, найближчу до глобального мінімуму на границі. А при t = 0.15 рахуватимемо значення функції лише 91 раз.

2) Розглянемо таблицю 2.2.1.2 - отримані результати за умов точності е=10-6 та початкової точки х0 = (0; 1) в допустимій області.

Таблиця 2.2.1.2 - дані розрахунків з точністю 10-6, х0 = (0; 1)

t

count

f(x1;x2)

(x1;x2)

0.001

177

26.11126035112447952900432313801

0.0537

0.5029

0.01

173

26.117105146273103762495594975987

0.0564 0.5032

0.1

171

25.971863284987095896205912870323

0.0142 0.5002

1

187

31.909995828446457251276723604199

0.4325 0.7491

10

203

39.446912881408620698234131527638

0.4783 0.8548

100

245

33.536139019938827229833451323577

0.4472 0.7765

Ситуація аналогічна попередньому випадку - найкраще значення при t = 0.1 (точне попадання в точку глобального мінімуму за 171 підрахування функції). Зі збільшенням довжини ребра точність результатів погіршується, при зменшенні - не покращується, майже не змінюється.

Очевидно, що при збільшенні точності збільшуватиметься лише кількість підрахунку функції (див. Таблиця 2.2.1.4 і 2.2.1.5), тож не розглядатимемо е=10-8. Також цікаво відмітити, що при е=1 можна за лише 25 підрахунків функції потрапити в точку, де значення функції становить 29.4.

Розглянемо тепер точку х0=(-0.2; 1.4) в тій самій допустимій області

3) Таблиця 2.2.1.3 - отримані результати за умов точності е = 10-3 та початкової точки х0=(-0.2; 1.4) в допустимій області.

Таблиця 2.2.1.3 - дані розрахунків з точністю 10-3, х0 = (-0.2; 1.4)

t

count

f(x1; x2)

(x1; x2)

0.001

119

27.610658423306177979150230332343

0.2947 0.5961

0.01

121

27.544642859402292160746716137568

0.2908 0.5932

0.1

109

26.507904061425076814473964835978

0.1804 0.5337

1

135

29.511186664416271413893183888445

0.3669 0.6604

10

137

26.407079885288309858714417526257

0.1580 0.5256

100

153

26.664241977881687566272135445376

0.2072

0. 0545

1000

197

29.293714798660124924768276827143

0.3613 0.6544

Оскільки допустима область - коло з радіусом 0.5, то очевидно, що кращі результати отримаємо при довжині ребра t < 0.5, що, власне, підтверджують дані таблиці. При t = 0.1 отримаємо точку, найближчу до глобального мінімуму на границі і найменшу кількість підрахунків функції. Аналогічно дослідженню іншої точки з цієї області, зі збільшенням довжини ребра точність результатів погіршується, при зменшенні - не покращується, майже не змінюється.

4) Порівняємо таблиці 2.2.1.4 і 2.2.1.5 відповідно результати, отримані з точністю е=10-6 та з точністю е=10-8 при х0 = (-0.2; 1.4)

Таблиця 2.2.1.4 - дані розрахунків з точністю 10-6, х0 = (-0.2; 1.4)

t

count

f(x1; x2)

(x1; x2)

0.001

189

27.608628946924989170404404566515

0.2947 0.5961

0.01

203

27.54356915429051515593974275635

0.2908 0.5932

0.1

189

26.507187770367285358337259145472

0.1804 0.5337

1

207

29.506218786318459253078940735743

0.3669 0.6603

10

217

26.406682808586871467053797107041

0.1580 0.5256

100

223

26.660420587855176884349279580066

0.2072

0.0545

1000

273

29.292902275253868016642507309791

0.3613 0.6544

Таблиця 2.2.1.5 - дані розрахунків з точністю 10-8, х0 = (-0.2; 1.4)

t

count

f(x1; x2)

(x1; x2)

0.001

251

27.60862642387442083520118016408

0.2947 0.5961

0.01

235

27.543568525390022946586607485773

0.2908 0.5933

0.1

245

26.507187118170539084927025565048

0.1804 0.5337

1

247

29.506213616499864317679802607137

0.3669 0.6603

10

261

26.406679770020612071784632928683

0.1580 0.5256

100

263

26.660420350569983139688107795215

0.2072

0.0545

1000

325

29.292901891507385369662072544436

0.3613 0.6544

Дані цих двох таблиць відрізняються лише показником кількості підрахунків цільової функції - зі збільшенням точності розрахунків в 10-2 соunt збільшується приблизно на 20-40 разів. Інші результати аналогічні випадку з е=10-3.

2.2.2 Невипукла допустима область

Задамо таку область за допомогою наступних рівнянь (х1+7)2 + x22 = 82 та (x1+4)2+(x2-2)2=22 . Аналітично знайдений мінімум на границі обмеження знаходиться в точці (0.9491; 0.901), де значення функції становить 0.00258855569.

Під час дослідження допустимої області відслідковувались як виконання критерію закінчення, так і потрапляння точки на границю допустимої області (саме допустимої області без застосуванням «майже» допустимої області). Нижче наведені таблиці ілюструють результати дослідження з точністю 10-3, 10-6 та 10-8 .

1) Розглянемо таблицю 2.2.2.1 - отримані результати за умов точності е = 10-3 та початкової точки х0 = (-4; -4) в невипуклій допустимій області.

Таблиця 2.2.2.1 - дані розрахунків з точністю 10-3, х0 = (-4; -4)

t

count

f(x1; x2)

(x1; x2)

0.001

140

0.0034067424034683225313416973536096

0.9442 0.8933

0.01

167

0.2949732756675845224414445056027

0.4690 0.2085

0.1

78

0.21692157777473924928912651921564

0.5358 0.2833

1

123

0.60850358078669819494876946919248

0.2544 0.0418

10

202

1.5575654321575382876829962697229

0.2185 0.0208

100

104

5.8428620257878316479605018685106

-1.3641 1.8105

1000

148

0.0078691685266584331798211948694188

0.9129 0.8351

Аналогічно випадку безумовної оптимізації з такою ж точністю, е=10-3 занадто низька для коректної роботи методу.

2) Розглянемо таблицю 2.2.2.2 - отримані результати за умов точності е = 10-6 та початкової точки х0 = (-4; -4) в невипуклій допустимій області.

Таблиця 2.2.2.2 - дані розрахунків з точністю 10-6, х0 = (-4; -4)

t

count

f(x1; x2)

(x1; x2)

0.001

178

0.002602691926502102327811716264705

0.9491 0.901

0.01

261

0.0028323607015104312542574938049711

0.9492 0.8994

0.1

163

0.0043057286247929135725165394887881

0.9417 0.8839

1

327

0.0026213997336092397134887921339441

0.9491 0.9003

10

478

0.0029034118872556854279443072641698

0.9493 0.8993

100

578

0.002829619561743920708174471201346

0.9493 0.8995

0.099

98

0.0026035707144936846325899981735574

0.9492 0.9005

При всіх розглянутих значеннях множника t метод знаходить точку, близьку до точки глобального мінімуму. При t=0.001 за 178 підрахувань функції потрапляємо в точку власне глобального мінімуму, а при t=0.099 - в точку (0.9492; 0.9005) лише за 98 підрахунків цільової функції.

3) Розглянемо таблицю 2.2.2.3 - отримані результати за умов точності е = 10-8 та початкової точки х0 = (-4; -4) в невипуклій допустимій області.

Таблиця 2.2.2.3 - дані розрахунків з точністю 10-8, х0 = (-4; -4)

t

count

f(x1; x2)

(x1; x2)

0.001

221

0.00259842726985952702720150675475

0.9491 0.901

0.01

341

0.0025926928817205669580703286669632

0.9491 0.9007

0.1

258

0.0038751435506290204079105077283884

0.9495 0.8978

1

376

0.0026174232370318123788721642597466

0.9492 0.9003

10

498

0.0029024013088871192071749316454543

0.9493 0.8993

100

660

0.0027743986543043224965443549479005

0.9493 0.8997

0.99

138

0.0026017642930352231564472553770884

0.9492 0.9005

Найкращий результат отримаємо при t=0,001 і count=221. Проте, в загальному, при такому значенні е цільову функцію доводиться рахувати більше разів.

Розглянемо тепер точку х0=(-8; 4) в тій самій невипуклій допустимій області. Одразу зазначимо (спойлер), що при збільшенні значення масштабного множника до 10 і далі отримаємо дві точки за межами допустимої облисті і значення кількості підрахунків цільової функції count досягне 1300 і більше, тому для випадків t>=10 дані роботи методу не наводяться.

4) Розглянемо таблицю 2.2.2.4 - отримані результати за умов точності е = 10-3 та початкової точки х0 = (-8; 4) в невипуклій допустимій області.

Таблиця 2.2.2.4 - дані розрахунків з точністю 10-3, х0 = (-8; 4)

t

сount

f(x1; x2)

(x1; x2)

0.001

53

12.407113176149865196862265293021

-2.5215 6.3658

0.01

49

12.43648494543506899390195030719

-2.5251 6.3863

0.1

51

12.56225784007041212930744222831

-2.5435 6.4771

1

111

19.205417753027596461379289394245

-2.6362 6.7050

Метод завершує роботу на границі області, котра є діркою в допустимій, тобто працює некоректно.

5) Розглянемо таблицю 2.2.2.5 - отримані результати за умов точності е = 10-6 та початкової точки х0 = (-8; 4) в невипуклій допустимій області.

Таблиця 2.2.2.5 - дані розрахунків з точністю 10-6, х0 = (-8; 4)

t

сount

f(x1; x2)

(x1; x2)

0.001

69

12.406859823848071400220760551747

-2.5217 6.3657

0.01

545

0.0028370089298723304149785207073364

0.9492 0.8994

0.1

495

0.31241250451474478211366658797488

0.3124 0.2077

1

617

19.204808868087496875887154601514

-2.6362 6.7050

При значенні t=0.01за 545 підрахунків цільової функції досягнемо точки, що знаходиться близько до точки глобального мінімуму. В інших випадках метод працює некоректно.

6) Розглянемо таблицю 2.2.2.6 - отримані результати за умов точності е = 10-8 та початкової точки х0 = (-8; 4) в невипуклій допустимій області.

Таблиця 2.2.2.5 - дані розрахунків з точністю 10-8, х0 = (-8; 4)

t

сount

f(x1; x2)

(x1; x2)

0.001

94

12.406858545564141138584091095254

-2.5217 6.3657

0.01

575

0.0028355456180588238176976112470129

0.9493 0.8995

0.1

913

0.0037905727810734215176002859237769

0.9494 0.8979

1

177

19.204805474389097241783019853756

-2.6362 6.7050

При значенні множинного множника t=0.01 за 575 підрахунків функції отримуємо точку, близьку до точки мінімуму. При t=0.1 отримуємо гірші, але також відносно коректні результати. В інших випадках метод працює некоректно.

2.2.3 Область з лінійним обмеженням

Задамо таку область за допомогою наступного рівняння: 2x1+x2>=5 .

Спростимо умови задачі: вважаємо, що границя - це проміжок в межах від 4.999 до 5.001. Аналітично знайдений мінімум на границі обмеження знаходиться в точці (1.4493; 2.1013), де значення функції становить 0.2019.

Під час дослідження допустимої області відслідковувались лише потрапляння точки на границю допустимої області.

Розглянемо Таблицю 2.2.3.1 - дані, отримані при початковій точці х0(5;5) із допустимої області. При довжині ребра 1 за 331 підрахування функції досягаємо власне границі, а не області навколо неї і значення функції 0.2038. При довжині ребра 0.1 підходимо ще ближче до глобального мінімуму - значення функції 0.2021, пороте доводиться рахувати функцію 639 разів. В загальному, з цієї точки знаходимо коректу точку мінімуму.

Таблиця 2.2.3.1 - дані розрахунків з точки х0 = (5; 5)

t

сount

f(x1; x2)

(x1; x2)

0.001

783

0.2071

1.4509

2.0989

0.01

249

0.2267

1.4526

2.0955

0.1

639

0.2021

1.4494

2.1020

1

311

0.2038

1.4503

2.1001

10

345

0.223

1.4524

2.0960

100

445

0.2062

1.4507

2.0991

1000

671

0.2026

1.449

2.1027

Розглянемо тепер іншу початкову точку з цієї ж області (Таблиця 2.2.3.2). Нехай х0=(6;1). В цьому випадку при довжині ребра t=1 отримаємо f(2.3199;0.3603)=2513.3589. Проте коректне значення також можна отримати при значенні t=10. Причому зі збільшенням значення t результати сильно покращуються, що ілюструє таблиця 2.2.3.2

Таблиця 2.2.3.2 - дані розрахунків з точки х0 = (6; 1)

t

сount

f(x1; x2)

(x1; x2)

0.001

109

1895.6089

2.2175

0.5655

0.01

135

1836.4428

2.2069

0.5868

0.1

97

2068.4921

2.2475

0.5051

1

121

2523.35891

2.3199

0.3603

10

589

0.2047

1.4505

2.0997

100

211

20.0841

-3.4587

11.9188

1000

405

20.0283

-3.4576; 11.9156

Візьмемо точку, отриману при стандартному значенні t=1 і підемо по границі допустимої області використовуючи лопт і методи золотого перерізу та ДСК-П для пошуку Дл на кожному кроці. Дані, отримані за таких умов наведені в таблиці 2.2.3.3.

Згадаємо, що наша границя має вигляд 2x1+x2=5. Використовуючи напрямок S = (-2.5;5)T. Для поставленої задачі оберемо Дл0=0.

Таблиця ілюструє, що метод ДСК-П працює краще за метод золотого перерізу, а також те, що кожен з методів знаходить точку мінімуму на границі функції, хоча метод золотого перерізу рахує функцію 36 разів, а метод ДСК-П - 33 рази. Під час проведення розрахунків е = 10-5.

Таблиця 2.2.3.23- дані, отримані під час пошуку мінімуму на границі

Метод

ЗС

ДСК-П

е=10-5

f(x0)

2523.35891

2523.35891

x0

(2.3199;0.3603)

(2.3199;0.3603)

Дл

0.2348

0.2348

л0

0.8706

0.8706

count

36

33

f(x1)

0.201976479

0.201976479

x1

(1.4493; 2.1015)

(1.4493; 2.1015)

Висновки

На основі проведених розрахунків можна сказати, що під час використання методу Нелдера-Міда для знаходження локального мінімуму функції найкращі результати можна отримати за наступних умов: t=1, e=10-6. В цьому випадку отримаємо f(1.0005;1.0009) = 0.000000779 при кількості підрахунку функції рівній 287 (див. таблицю 2.1.2). За умов е=10-8, t=1 або t=0.1метод потрапляє в точку мінімуму з точністю виводу 30 знаків після крапки (див. таблицю 2.1.3). Цікаво відмітити, що при значенні t=10 або кількість підрахунків значення цільової функції різко зростає, або в результаті отримується некоректне значення функції (див. таблиці 2.1.1, 2.1.2, 2.1.3)

При наявності опуклої допустимої області важливу роль грає розмір області. В даній роботі було розглянуто коло з радіусом 0.5 і найкращі результати були отримані за умови t=0.1 без відчутого впливу значення параметру е на кінцеве значення цільової функції. Проте е впливає на кількість підрахувань функції - 103 при е=10-3 (див. таблицю 2.2.1.1) і 171 при е=10-6 (див. таблицю 2.2.1.2). Також хороше значення можна отримати при t=0.15 (див. таблицю 2.2.1.1). Очевидно, що точка має знаходитись в допустимій області, бажано не біля самої границі.

Під час роботи з не випуклою допустимою областю коректність роботи методу в першу чергу залежить від вибору початкової точки. В залежності від її положення в допустимій області на коректність і точність роботи методу впливає значення е, наприклад, якщо на прямій між початковою точкою та точкою глобального мінімуму немає перешкод у вигляді недопустимої області, то при точності 10-8 отримуємо хороший результат при довжині ребра 0.01 та 0.001 (див. таблицю 2.2.2.3). При зменшенні точності обчислень до 10-6 хоч і знижується кількість підрахувань значення функції, проте і знайдена точка на 0.0001 більша, ніж точка глобального мінімуму (див. таблицю 2.2.2.2)

Якщо ж точка має пройти по відносно вузькій смузі між недопустимим областями (тобто між недопустимою областю то діркою в допустимій), то велике значення має значення довжини ребра. Воно має бути «середнім». Наприклад, при необхідності проходження по смузі шириною 1, значення, близьке до мінімуму досягається при t=0.1 та 0.001(див. таблиці 2.2.2.5 і 2.2.2.6) за 495 та 913 підрахувань функції і за 545 та 575 підрахувань функції при точностях 10-6 та 10-8 відповідно.

При дослідженні в області з лінійним обмеженням також важливе положення точки області. При однакових умовах ( t = 1) із вдало обраної точки (5; 5) за 311 підрахунків функції можна дійти достатньо близько до глобального мінімуму - в точку зі значенням 0.038 функції і ній, а з точки (6; 1) вийти на границю, де значення функції дорівнює 2523.35891.

Під час руху по лінійній границі методами одномірного пошуку виявлено, що метод ДСК-П дає кращі результати, ніж метод золотого перерізу.

Список використаних літературних джерел

1. Д. Хіммельблау, «Прикладне нелінійне програмування». М.; «Мир», 1975.

2. http://www.100byte.ru/stdntswrks/hj/nm.html

3. Рейклетіс Г., Рейвиндран А., Регсдейл К., «Оптимізація в техніці», том 2; М. «Мир», 1986.

Додатки

Код програми, написаної на MatLab, що проводить розрахунки за алгоритмом методу Нелдера-Міда

function [x1,x2] = BO_noVpa (e,t)

count = 0;

a1=-1.2;

a2=0;

b1=a1+((1+sqrt(3))/(2*sqrt(2)))*t;

b2=a2+((-1+sqrt(3))/(2*sqrt(2)))*t;

c1=a1+((-1+sqrt(3))/(2*sqrt(2)))*t;

c2=a2+((1+sqrt(3))/(2*sqrt(2)))*t;

i=1;j=2;k=3;

loop=0;

RMSkrit=e+1;%для входа в цикла проверки

secondVectorForRed=[0,0,0];

thirdVectorForRed=[0,0,0];

fourthVectorForRed=[i,j,k];

[fa,count]=f(a1,a2,count);

[fb,count]=f(b1,b2,count);

[fc,count]=f(c1,c2,count);

while (e<RMSkrit)

loop=loop+1

massfun=[fa, fb, fc];

massSort = sort(massfun);

fh = massSort(3);

fg = massSort(2);

fl = massSort(1);

massForRed = [i,j,k];

T=max(massForRed)

if fh==fa && fg==fb && fl==fc

xh1=a1;xh2=a2;xg1=b1;xg2=b2;xl1=c1;xl2=c2;

i=T+1; genius=1;%j=j;k=k;

end

if fh==fa && fg==fc && fl==fb

xl2=b2;xh1=a1;xg1=c1;xl1=b1;xh2=a2;xg2=c2;

i=T+1;genius=2;%j=j;k=k;

end

if fh==fb && fg==fa && fl==fc

xh1=b1;xg1=a1;xl1=c1;xh2=b2;xg2=a2;xl2=c2;

j=T+1;genius=3;%k=k;i=i;

end

if fh==fb && fg==fc && fl==fa

xh1=b1;xg1=c1;xl1=a1;xh2=b2;xg2=c2;xl2=a2;

j=T+1;genius=6;%i=i;k=k;

end

if fh==fc && fg==fa && fl==fb

xh1=c1;xg1=a1;xl1=b1;xh2=c2;xg2=a2;xl2=b2;

k=T+1;genius=4;% i=i;j=j;

end

if fh==fc && fg==fb && fl==fa

xh1=c1;xg1=b1;xl1=a1;xh2=c2;xg2=b2;xl2=a2;

k=T+1;genius=5;%i=i;j=j;

end

newLineMassForRed=[i,j,k];

firstVectorForRed=secondVectorForRed

secondVectorForRed=thirdVectorForRed

thirdVectorForRed=fourthVectorForRed

fourthVectorForRed=newLineMassForRed

I1 = firstVectorForRed(1); %Номер Fa на первой интерации

I2 = secondVectorForRed(1); %Номер Fa на второй интерации

I3 = thirdVectorForRed(1); %Номер Fa на третьей интерации

I4 = fourthVectorForRed(1); %Номер Fa на чертвертой интерации

II1 = firstVectorForRed(2); %Номер Fb на первой интерации

II2 = secondVectorForRed(2);%Номер Fb на воторой интерации

II3 = thirdVectorForRed(2);%Номер Fb на третьей интерации

II4 = fourthVectorForRed(2);%Номер Fb на четвертой интерации

III1 = firstVectorForRed(3); %Номер Fc на первой интерации

III2 = secondVectorForRed(3);%Номер Fc на второй интерации

III3 = thirdVectorForRed(3);%Номер Fc на третьей интерации

III4 = fourthVectorForRed(3);%Номер Fc на четвертлй интерации

if ((I1==I2)&&(I2==I3)&&(I3==I4))||((II1==II2)&&(II2==II3)&&(II3==II4))||((III1==III2)&&(III2==III3)&&(III3==III4))

disp('THIS IS REDUCTION');

b1=(xh1+xl1)/2;

b2=(xh2+xl2)/2;

c1=(xg1+xl1)/2;

c2=(xg2+xl2)/2;

a1=xl1;

a2=xl2;

[fb,count]=f(b1,b2,count);

[fc,count]=f(c1,c2,count);

i=1;j=2;k=3;

firstVectorForRed=[0,0,0];

secondVectorForRed=[0,0,0];

thirdVectorForRed=[0,0,0];

fourthVectorForRed=[i,j,k];

massfun=[fa, fb, fc];

massSort = sort(massfun);

fh = massSort(3);

fg = massSort(2);

fl = massSort(1);

massForRed = [i,j,k];

T=max(massForRed);

if fh==fa && fg==fb && fl==fc

xh1=a1;xh2=a2;xg1=b1;xg2=b2;xl1=c1;xl2=c2;

i=T+1; genius=1;%j=j;k=k;

end

if fh==fa && fg==fc && fl==fb

xl2=b2;xh1=a1;xg1=c1;xl1=b1;xh2=a2;xg2=c2;

i=T+1;genius=2;%j=j;k=k;

end

if fh==fb && fg==fa && fl==fc

xh1=b1;xg1=a1;xl1=c1;xh2=b2;xg2=a2;xl2=c2;

j=T+1;genius=3;%k=k;i=i;

end

if fh==fb && fg==fc && fl==fa

xh1=b1;xg1=c1;xl1=a1;xh2=b2;xg2=c2;xl2=a2;

j=T+1;genius=6;%i=i;k=k;

end

if fh==fc && fg==fa && fl==fb

xh1=c1;xg1=a1;xl1=b1;xh2=c2;xg2=a2;xl2=b2;

k=T+1;genius=4;% i=i;j=j;

end

if fh==fc && fg==fb && fl==fa

xh1=c1;xg1=b1;xl1=a1;xh2=c2;xg2=b2;xl2=a2;

k=T+1;genius=5;%i=i;j=j;

end

newLineMassForRed=[i,j,k];

firstVectorForRed=secondVectorForRed;

secondVectorForRed=thirdVectorForRed;

thirdVectorForRed=fourthVectorForRed;

fourthVectorForRed=newLineMassForRed;

end

xc1=(xl1+xg1)/2; %Средина отрезка напротив xh по первой

xc2=(xl2+xg2)/2;% и по второй координатах

xnew1=2*xc1-xh1;xnew2=2*xc2-xh2;

[fnew,count]=f(xnew1, xnew2,count);%Пробная точка, значение ф-ции в ней

if (fnew>=fh)

O=-1/2 %gamma

end

if (fnew<=fl)

O=2 %alpha

end

if (fnew>fl)&&(fnew<=fg)

O=1 %beta1

end

if (fnew<fh)&&(fnew>=fg)

O=1/2 %beta2

end

x1=(1+O)*(xc1-xh1)+xh1;

x2=(1+O)*(xc2-xh2)+xh2;

[fun,count]=f(x1,x2,count);

xKrit1=(xg1+xl1+x1)/3;

xKrit2=(xg2+xl2+x2)/3;

[fKrit,count]=f(xKrit1,xKrit2,count);

count = count - 1;

value = sqrt(((fg-fKrit)^2+(fl-fKrit)^2+(fun-fKrit)^2)/3);

RMSkrit=value

if genius==1

a1=x1;a2=x2; fa=fun;

b1=xg1;b2=xg2; fb=fg;

c1=xl1;c2=xl2; fc=fl;

end

if genius==2

a1=x1;a2=x2; fa=fun;

b1=xl1;b2=xl2; fb=fl;

c1=xg1;c2=xg2; fc=fg;

end

if genius==3

a1=xg1;a2=xg2; fa=fg;

b1=x1;b2=x2; fb=fun

c1=xl1;c2=xl2; fc=fl;

end

if genius==4

a1=xg1;a2=xg2; fa=fg;

b1=xl1;b2=xl2; fb=fl;

c1=x1;c2=x2; fc=fun;

end

if genius==5

a1=xl1;a2=xl2; fa=fl;

b1=xg1;b2=xg2; fb=fg;

c1=x1;c2=x2; fc=fun;

end

if genius==6

a1=xl1;a2=xl2; fa=fl;

b1=x1;b2=x2; fb=fun;

c1=xg1;c2=xg2; fc=fg;

end

end

finalMassFunValue = [fa,fb,fc]

disp('ans');

if min(finalMassFunValue)==fa

x1=a1;x2=a2;fa=vpa(fa)

end

if min(finalMassFunValue)==fb

x1=b1;x2=b2;fb=vpa(fb)

end

if min(finalMassFunValue)==fc

x1=c1;x2=c2;fc=vpa(fc)

end

count

end

Цільова функція - функція Розенброка

function [currentFunction, counterFunCalculate] = f (x1, x2,calc)

%Функция Розенброка, минимум которой ищем

counterFunCalculate=calc+1;

currentFunction = 100*(x1^2-x2)^2+(x1-1)^2

end

Метод ДСК-П

function approximationMethodValue = metAppro (x0, absDelta, e)

function F = fun (x) %Исходная функция

F = 100*((2.3199+x*(-2))^2-(0.3603+(-1)*x))^2 + ((2.3199+x*(-2))-1)^2;

end

count=0;

initialValue = fun(x0)

count=count+1;

plusValue = fun(x0+absDelta),count=count+1;

minusValue = fun(x0-absDelta),count=count+1;

if (minusValue>=initialValue)&(initialValue<=plusValue)

A=x0-absDelta

B=x0+absDelta

disp('Получен интервал')

delta=absDelta;

elseif(minusValue>=initialValue)&(initialValue>=plusValue)

delta=absDelta

disp('Шаг положительный')

lseif(minusValue<=initialValue)&(initialValue<=plusValue)

delta=-absDelta

disp('Шаг отрицательный')

elseif(minusValue<=initialValue)&(initialValue>=plusValue)

disp('Противоречит унимодальности')

end

xPrev=x0;

fPrev=fun(xPrev);count=count+1;

i=0;

xNext=xPrev+delta*2^i;

fNext=fun(xNext);count=count+1;

while (fPrev>=fNext)

xPrev=xNext;

fPrev=fNext;

i=i+1;

xNext=xPrev+delta*2^i

fNext=fun(xNext);count=count+1;

end

%Полшага назад

xBack=(xPrev+xNext)/2

fBack=fun(xBack);count=count+1;

xPrev

xPrevPrev=xPrev-(xNext-xBack)

fPrevPrev=fun(xPrevPrev);count=count+1;

[A, B, C] = ExeptInt (xPrevPrev,fPrevPrev,xPrev,fPrev,xBack,fBack,xNext,fNext)

kritEnd1=e+1 %Для входа в цикл

kritEnd2=2+e %Для входа в цикл

while (abs(kritEnd1)>e)&&(abs(kritEnd2)>e)

x1=A

x2=B

x3=C

[xS, fS, fx2] = findStar (A, B, C)

kritEnd1=x2-xS

kritEnd2=fx2-fS

allPoint=[x1, x2, x3, xS]

sortAllPoint=sort(allPoint)

x1=sortAllPoint(1)

x2=sortAllPoint(2)

x3=sortAllPoint(3)

x4=sortAllPoint(4)

[A, B, C] = ExeptInt (x1,fun(x1),x2,fun(x2),x3,fun(x3),x4,fun(x4))

count=count+4;

end

disp('Ответ:');

count

approximationMethodValue=vpa(xS);

end

Функція, яка використовується в методі ДСК-П

%Исключения интервала для 3х точек

function [leftLim, middlePoint, rightLim]=ExeptInt (a,fa,x1,fx1,x2,fx2,b,fb)

if (fx1>fx2)

leftLim=x1;

middlePoint=x2;

rightLim=b;

elseif (fx1==fx2)

leftLim=x1;

middlePoint=(x1+x2)/2 rightLim=x2;

else (fx1<fx2)

leftLim=a;

middlePoint=x1;

rightLim=x2;

end

if a>b

forHelp=leftLim;

leftLim=rightLim;

rightLim=forHelp;

end

end

Функція, яка використовується в методі ДСК-П

function [xStar, fStar, fx2]=findStar (a, b, c)

function F = fun (x) %Исходаная функция

F = 100*((2.3199+x*(-2))^2-(0.3603+(-1)*x))^2 + ((2.3199+x*(-2))-1)^2;

end

jk=abs(a-b);

j=round(jk*1000)/1000 %Округление до нужного, 4 порядка

ik=abs(c-b);

i=round(ik*1000)/1000 %Округление до нужного, 4 порядка

fx1=fun(a)

fx2=fun(b)

fx3=fun(c)

if i==j

xStar=(b+(i*(fx1-fx3)/(2*(fx1-2*fx2+fx3))))

else

a1=(fx2-fx1)/(b-a),

a2=(1/(c-b))*(((fx3-fx1)/(c-a))-((fx2-fx1)/(b-a))),

xStar=(a+b)/2-a1/(2*a2)

end

fStar=fun(xStar)

end

Метод золотого перерізу

function [leftLim,rightLim] =goldenSectionMethod (a, b, e)

Length=abs(b-a);

%Исходная функция. Другая каждую задачу

function F = fun (x)

F = 100*((0.25505290+x*(-2))^2-(-0.67212305+(-1)*x))^2 + ((0.25505290+x*(-2))-1)^2;

end

count=1;

x1=a+Length*0.382

x2=a+Length*0.618

while (Length>e)

fx1=fun(x1)

fx2=fun(x2),count=count+1;

if (fx1<fx2)

b=x2

Length=b-a

x2=x1

x1=a+Length*0.382

elseif (fx1>=fx2)

a=x1

Length=b-a

x1=x2

x2=a+Length*0.618

else disp('Что-то пошло не так');

end

end

disp('Ответ:');

count

leftLim=vpa(a);

rightLim=vpa(b);

end

Модифікації коду цільової функції для умовної оптимізації з опуклою допустимою областю

function [currentFunction, counterFunCalculate] = f (x1, x2,calc)

if (x1^2+(x2-1)^2)>0.25

disp('Вне области');

currentFunction=10^10;

elseif (x1^2+(x2-1)^2)<=0.25

disp('В области');

currentFunction = 100*(x1^2-x2)^2+(x1-1)^2

end

counterFunCalculate=calc+1;

end

Модифікації коду цільової функції для умовної оптимізації з невипуклою допустимою областю

function [currentFunction, counterFunCalculate] = f (x1, x2,calc)

if (((x1+7)^2 + (x2)^2) > 64)||((x1+4)^2 + (x2-2)^2 < 4)

disp('Вне области');

currentFunction=10^10;

else)

disp('В области');

currentFunction =100*(x1^2-x2)^2+(x1-1)^2

end

counterFunCalculate=calc+1;

end

Модифікації коду цільової функції для умовної оптимізації з лінійним обмеженням

function [currentFunction, counterFunCalculate] = f (x1, x2,calc)

if (2*x1+x2) < 4.999999

disp('Вне области');

currentFunction=10^10;

elseif (2*x1+x2) > 5.001

disp('В области');

currentFunction = 100*(x1^2-x2)^2+(x1-1)^2

disp('На границе');

currentFunction = 0;

end

counterFunCalculate=calc+1;

end

Размещено на Allbest.ru


Подобные документы

  • Формулювання задачі мінімізації. Мінімум функції однієї та багатьох змінних. Прямі методи одновимірної безумовної оптимізації: метод дихотомії і метод золотого перерізу. Метод покоординатного циклічного спуску. Метод правильного і деформованого симплексу.

    курсовая работа [774,0 K], добавлен 11.08.2012

  • Методи багатомірної безумовної оптимізації першого й нульового порядків і їх засвоєння, порівняння ефективності застосування цих методів для конкретних цільових функцій. Загальна схема градієнтного спуску. Метод найшвидшого спуску. Схема яружного методу.

    лабораторная работа [218,0 K], добавлен 10.12.2010

  • Сутність та головний зміст методів ортогоналізації у випадку симетричної та несиметричної матриці. Метод сполучених градієнтів, опис існуючих алгоритмів. Програма мовою програмування С++, що реалізує метод ортогоналізації на ЕОМ, і її результати роботи.

    курсовая работа [191,2 K], добавлен 27.12.2010

  • Метод простої ітерації Якобі і метод Зейделя. Необхідна і достатня умова збіжності методу простої ітерації для розв’язання системи лінейних рівнянь. Оцінка похибки. Діагональне домінування матриці як умова збіжності ітерації. Основні переваги цих методів.

    презентация [79,9 K], добавлен 06.02.2014

  • Загальні поняття про числові ряди. Ознака збіжності Куммера. Дослідження ознаки збіжності Раабе та використання ознаки Даламбера. Ознака збіжності Бертрана. Дослідження ознаки збіжності Гаусса. Застосування ознаки Діріхле для знакозмінних рядів.

    курсовая работа [523,8 K], добавлен 25.03.2012

  • Опис одного з поширених ітераційних методів, методу хорда — ітераційного методу знаходження кореня рівняння, який ще має назви метод лінійного інтерполювання, метод пропорційних частин, або метод хибного положення. Задачі для самостійного розв’язування.

    реферат [336,8 K], добавлен 04.12.2010

  • Дослідження історії виникнення та розвитку координатно-векторного методу навчання розв'язування задач. Розкриття змісту даного методу, розгляд основних формул. Розв'язання факультативних стереометричних задач з використанням координатно-векторного методу.

    курсовая работа [2,5 M], добавлен 10.04.2011

  • Умови та особливості використання модифікованого методу Ейлера для отримання другої похідної в кінцево-різницевій формі. Два обчислення функції за крок. Метод Ейлера-Коші як частковий випадок методу Рунге-Кутта. Метод четвертого порядку точності.

    презентация [171,0 K], добавлен 06.02.2014

  • Схема класифікації та методи розв'язування рівнянь. Метод половинного ділення. Алгоритм. Метод хорд, Ньютона, їх проблеми. Граф-схема алгоритму Ньютона. Метод простої ітерації. Питання збіжності методу простої ітерації. Теорема про стискаючі відображення.

    презентация [310,1 K], добавлен 06.02.2014

  • Огляд проблеми дискретного логарифмування в групі точок еліптичної кривої. Сутність та сфера використання методу Поліга-Хелмана. Особливості використання методу ділення точок на два. Можливі підходи і приклади розв’язання задач дискретного логарифмування.

    реферат [112,8 K], добавлен 09.02.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.