Метод еліпсоїдів

Матеріал з testwiki
Перейти до навігації Перейти до пошуку

Метод еліпсоїдів — алгоритм знаходження точки, що лежить у перетині опуклих множин. Розробив Шаблон:Нп, до алгоритмічної реалізації ловів Шаблон:Нп у Шаблон:Нп.

Опис алгоритму

На початку вибирається велика куля, що містить перетин опуклих множин. Спосіб побудови цієї кулі залежить від задачі. Далі на кожному кроці є еліпсоїд, заданий центром v та векторами v1,v2,,vnn. Еліпсоїду належать точки v+c1v1+c2v2++cnvn, для яких c12+c22++cn21 . Зазначимо, що той самий еліпсоїд можна задати декількома способами. Якщо центр цього еліпсоїда належить усім опуклим множинам, то точку знайдено. Інакше існує гіперплощина π, що проходить через точку v, така, що одна з множин повністю лежить по один бік від неї. Тоді можна перейти від початкового базису vi до іншого базису τ,w2,wn такого, що wi паралельні π, а τ спрямований у бік множини. Покладемо тепер v=v+τn+1, v'1=nτn+1, v'i=winn21 при i2 . Цей новий еліпсоїд містить половину старого і має менший об'єм. Таким чином, об'єм еліпсоїда зменшується експоненційно зі зростанням числа кроків і шукану точку буде знайдено за O(n2log(V1/V2)) кроків, де V1 — об'єм початкової кулі, а V2 — об'єм області перетину. Загальний час роботи алгоритму виходить рівним O(Ntn2log(V1/V2)), де N — число множин, t — час перевірки належності точки множині.

Застосування до задачі лінійного програмування

Якщо в задачі лінійного програмування вдалося побудувати кулю, що містить шуканий розв'язок, її можна розв'язати методом еліпсоїдів. Для цього спочатку знаходимо якусь точку u всередині кулі, що задовольняє обмеження задачі. Проводимо через неї гіперплощину f(x)<f(u), де f — цільова функція, і знаходимо точку в перетині початкових та нової гіперплощин (починаючи з поточного еліпсоїда). З новою знайденою точкою проробляємо те саме. Процес збігається до оптимального розв'язку з експоненційною швидкістю (оскільки з цією швидкістю зменшується об'єм еліпсоїда).

Ефективність методу

Поліноміальний алгоритм теоретично міг би стати новим стандартом, однак, на практиці алгоритм Хачіяна застосовувати слід обережно: існують задачі розміром 50 змінних, для яких знадобиться понад 24 тис. ітерацій методу Хачіяна, а кількість істотно простіших ітерацій симплекс-методу в таких випадках обчислюється сотнями чи навіть десяткамиШаблон:SfnШаблон:Sfn. Однак є приклади задач, для яких алгоритми цього класу працюють у сотні разів ефективніше за стандартні реалізації симплекс-методу.

Примітки

Шаблон:Reflist

Література

Шаблон:Refbegin

Шаблон:Refend Шаблон:Методи оптимізації