Як зазначає Павло, без більшої інформації важко давати поради без припущень.
З 10-20 змінних та дорогих оцінок функцій тенденція полягає в тому, щоб рекомендувати алгоритми оптимізації без похідних. Я рішуче не погоджуюся з порадою Павла: вам, як правило, потрібен градієнт точного градієнта, якщо ви не використовуєте якийсь спеціальний метод (наприклад, стохастичний градієнтний спуск в машинному навчанні не буде використовувати форму мети, щоб створити розумну градієнтні оцінки).
Кожен квазі-ньютонівський крок має форму:
Н~( хк) dк= - ∇ f( хк) ,
де - деяке наближення матриці Гессі, d k - напрямок пошуку, x k - значення змінних рішень на поточному ітераті, f - ваша цільова функція, і ∇ f - градієнт вашої цілі, і Змінні рішення оновлюються як x k + 1 = x k + α k d k , де α kН~гкхкf∇ fхk + 1= хк+ αкгкαк- розмір кроку, визначений певним чином (наприклад, пошук рядків). Ви можете піти певним чином з наближенням гессієна, і ваші ітерації будуть збігатися, хоча якщо ви використовуєте щось на кшталт кінцевих наближень гессіянської різниці через точні градієнти, ви можете страждати від проблем через неправильне кондиціонування. Як правило, гессіанський апроксимується за допомогою градієнта (наприклад, методи типу BFGS з оновленнями гессенського рівня 1).
Наближення гессі та градієнта як через кінцеві відмінності є поганою ідеєю з кількох причин:
- у вас буде помилка в градієнті, тому метод квазі-Ньютона, який ви застосовуєте, схожий на пошук кореня галасливої функції
- NN
- якщо ви маєте помилку в градієнті, у вас буде більше помилок у вашому гессі, що є великою проблемою з точки зору кондиціонування лінійної системи
- N2
Отже, щоб отримати одну погану ітерацію квазі-Ньютона, ви робите щось на кшталт до 420 оцінок функції за 30 хвилин за оцінку, що означає, що ви або будете чекати деякий час на кожну ітерацію, або збираєтесь потрібен великий кластер саме для оцінки функцій. Дійсні лінійні рішення будуть мати 20 на 20 матриць (максимум!), Тож немає підстав для їх паралелізації. Якщо ви можете отримати інформацію про градієнт, наприклад, вирішивши суміжну проблему, то, можливо, це буде доцільніше, в такому випадку, можливо, варто переглянути книгу на зразок Nocedal & Wright.
Якщо ви збираєтеся робити паралельно багато оцінок функцій, слід замість цього шукати сурогатні підходи моделювання або генерувати задані методи пошуку, перш ніж розглядати квазі-ньютонські підходи. Класичні оглядові статті - це Ріос та Сахінідіс щодо методів , що не містять похідних , який був опублікований у 2012 році та дає справді хороше, широке порівняння; стаття з бенчмаркінгу від More and Wild від 2009 року; підручник 2009 р. "Введення в оптимізацію без похідних" Конна, Шейнберга та Вісенте; та оглядова стаття про створення методів пошуку набору Колдою, Льюїсом та Торкзоном з 2003 року.
Як зазначено вище, програмний пакет DAKOTA реалізує деякі з цих методів, і НЛОПТ , який реалізує DIRECT, та кілька методів сурогатного моделювання Пауелла. Ви також можете поглянути на MCS ; це написано на MATLAB, але, можливо, ви можете перенести реалізацію MATLAB на обрану вами мову. По суті, DAKOTA - це набір сценаріїв, які ви можете використовувати для запуску дорогого моделювання та збору даних для алгоритмів оптимізації, а NLOPT має інтерфейси на великій кількості мов, тому вибір мови програмування не повинен бути серйозною проблемою при використанні жодного програмного пакету; DAKOTA, однак, потребує певного часу, щоб навчитися, і має величезну кількість документації для просіювання.