Бібліотека C ++ для нелінійного обмеженого мінімізації


9

На даний момент я намагаюся вирішити нелінійну задачу мінімізації з обмеженими можливостями, що реалізується у функції matlab "fmincon". Мої очікування - мінімізувати (fun1, x0, uB, lB, fun2), де x0 - початковий стан, fun1 - це функція, яку потрібно мінімізувати, uB - це верхня межа, lB - нижня межа, а fun2 - функція, яка забезпечує вектори нелінійних рівностей / нерівності, як описано в http://www.mathworks.com/help/optim/ug/fmincon.htmlяк функція noncon. Ці вектори змінюються і через ітерації (вони нелінійно залежать від x_n, n-ї ітерації вектора розчину). У реалізації matlab вони знаходяться у формі c (x) <= 0. Це останній фрагмент коду, який потрібно перенести з matlab до c ++, і я багато намагався, намагаючись знайти відповідну бібліотеку c ++, що містить цей алгоритм. Ось чому я шукаю тут допомоги, і я дуже вдячний, якщо ви зможете надати свою експертизу.

Хороший приклад того, що я хочу зробити - це перший на цій сторінці http://www.mathworks.com/help/optim/ug/constrained-nonlinear-optimization-examples.html#f10960?s_tid=doc_12b Різниця полягає лише в тому, що я також потрібні межі ...

Заздалегідь спасибі.

Петро


Існує можливість використання NLOPT ab-initio.mit.edu/wiki/index.php/NLopt_C-plus-plus_Reference, але мені потрібно обчислити кінцеві різниці, використовуючи кілька викликів для "мінімізованої" оцінки функції від цільової функції, і я був добрим сподіватися на те, що для цього можна буде скористатися алгоритмом, щоб покращити продуктивність. Мою мінімізовану функцію обчислити дуже дорого. Для уточнення, мінімізована функція - це ймовірність журналу оцінюваної моделі з вихідними даними в оцінці моделі комутації часових рядів.
Пітер Коттас

1
Ви подивилися відповіді на це питання ? Якщо ваші вимоги недостатньо вирішені там, вам слід відредагувати своє запитання, щоб вказати на них, щоб отримати корисні рекомендації.
Крістіан Класон

Дякую, є якась корисна інформація. В даний час я перебуваю на ліктях у бібліотеці NLOPT, оскільки я виявив, що це може відповідати і моїй проблемі. Я продовжуватиму цю тему розміщеною, і я запропоную рішення, коли я придумаю її. Будь-яка допомога, яка може прискорити процес, все ще вдячна. Фактична реалізація, наприклад, тощо
Пітер Коттас

1
Кілька питань: 1. Ваша проблема опукла? 2. Чи диференційовані об'єктивні та обмежувальні фактори? Якщо так, то скільки разів? Раз? Двічі? 3. Чи можете ви легко порахувати ці похідні, якщо вони існують? Чи легко буде підрахувати кінцеві різницькі наближення, якщо у вас немає цих похідних? 4. Скільки у вас змінних рішень? (тобто над тим, скільки змінних ви намагаєтеся мінімізувати?) Досить приблизної оцінки. 5. Чи є дорогими оцінки функцій? Було б корисно мати всю цю інформацію, щоб дати вам кращу відповідь.
Джефф Оксберрі

Привіт! Перш за все, дякую за відповідь. 1. Важко сказати, але, швидше за все, ні, тому що мінімізована функція - це ймовірність журналу між оцінкою моделі перемикання маркова часових серій у фінаціональному застосуванні, і від характеру цього я припускаю, що це щось на зразок шумного виводу. 2.не 3. тільки з використанням кінцевих різниць 4. вектор розчинення складається з n змінних, де n залежить від бажаних параметрів моделі, загалом від 12 до дозволяє сказати 30 5.логічна ймовірність між моделлю та вихідними даними дорога, додаткові нелінійні нерівності є писк в вартість
Пітер Kottas

Відповіді:


2

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

Дванадцять-тридцять змінних, ймовірно, знаходяться у верхньому кінці того, що можна зробити з методами пошуку шаблонів (також званих прямим пошуком). Нещодавно оглядовий документ Ріоса та Сахінідіса в Журналі глобальної оптимізації щодо методів оптимізації без похідних (таких як методи пошуку шаблонів) можна знайти тут , а також супутню веб-сторінку . Менш недавній оглядовий документ про такі методи Колди, Льюїса та Торкзона в SIAM Review можна знайти тут . Ці методи досить добре працюють з дорогими оцінками функцій і не обов'язково вимагають диференційованості або похідної інформації.

Багато з цих методів вимагають певної випуклості, щоб гарантувати конвергенцію до глобального оптимуму, тож якщо ви вирішили проблему жорстко, вам, можливо, знадобиться поєднати ці способи вище з розв'язаною галуззю стратегією. Однак якщо ви не дбаєте про жорсткість, такий підхід, як MATLAB, fminconможе працювати досить добре (гарантій більше немає). Кінцеві відмінності, швидше за все, дадуть вам члена піддиференціалу вашої недиференційованої функції, що може бути достатньо для вашої проблемної інстанції та конкретних вхідних даних, щоб повернути достатньо точний результат для ваших цілей. У такому випадку вам, мабуть, варто поглянути на бібліотеки, згадані у відповідях на питання, яке Крістіан посилається у своєму коментарі.


2

Якщо для вирішення проблем нелінійної оптимізації потрібна бібліотека C ++, ви можете використовувати RobOptim . Хоча RobOptim спочатку був розроблений з урахуванням проблем оптимізації робототехніки, він підходить для будь-яких проблем з нелінійною оптимізацією. Він надає простий C ++ інтерфейс із плагінами для декількох нелінійних вирішувачів ( Ipopt , NAG тощо). Використання такого типу обгортки полегшує використання іншого розв'язувача NLP. Якщо ви не можете надати градієнти, обчислення з кінцевою різницею можна зробити автоматично.

Це відкритий код, щоб ви могли перевірити вихідний код на GitHub: https://github.com/roboptim/

Аналіз, зроблений @Geoff Oxberry, має важливе значення для вибору нелінійного вирішувача, який буде викликаний RobOptim. Зауважте, що, працюючи з таким видом вирішення, налаштування параметрів може мати величезний вплив на продуктивність, і ви все одно можете застрягти в локальних мінімумах (це дійсно залежить від проблеми, з якою ви маєте справу).

Примітка. Я один із розробників цього проекту.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.