Я хотів би запропонувати дещо інший підхід порівняно з іншими відповідями, хоча @barron побічно обговорював те саме.
Замість того, щоб оптимізувати свою функцію безпосередньо, тобто оцінюючи її у серії точок балів, які (сподіваємось) сходяться до (локального) оптимуму, ви можете використовувати концепцію сурогатного моделювання , яка є дуже добре підходить для задач описаного типу (висока вартість, гладка, обмежена, низька розмірність, тобто менше 20 невідомих).x1,x2,…,xksurrogate modelling
В Зокрема, сурогатне моделювання працює шляхом створення модельної функції вашої істинної функції F ∈ R d → R . Ключовим є те, що хоч c, звичайно, не ідеально відповідає f , оцінити його набагато дешевше.c∈Rd→Rf∈Rd→Rcf
Отже, типовим процесом оптимізації буде такий:
- Оцініть за набором j початкових точок x 1 , x 2 , … , x j . Зауважте, що похідні не потрібні. Також зауважте, що ці точки повинні розподілятися рівномірно по всьому простору пошуку, наприклад, за допомогою зразків латинської гіперкуби або подібної конструкції, що заповнює простір.fjx1,x2,…,xj
- На основі цього оригінального набору даних створіть функцію моделі . Ви можете використовувати перехресну перевірку для перевірки вашої моделі (тобто, для створення c , використовуйте лише підмножину початкових j точок , а потім використовуйте решту набору даних, щоб перевірити, наскільки c спрогнозує ці значення)cjcc
- Використовуйте такий критерій, як критерій очікуваного вдосконалення (EI), щоб з’ясувати, де «заповнити» більше зразків, щоб зробити більш точним шляхом вибірки f . Це насправді набагато краще вивчено теоретично, ніж може здатися, і критерій ЕІ дуже добре вивчений. Критерій EI також не є жадібним критерієм, тому ви обидва отримуєте хороше загальне поліпшення точності моделі, одночасно визначаючи пріоритетність точності біля потенційних оптимізмів.cf
- Якщо ваша модель недостатньо точна, повторіть крок 3, інакше скористайтеся улюбленою програмою оптимізації, щоб знайти оптимум , який буде дуже дешево оцінити (так що ви можете використовувати будь-яку потрібну рутину, навіть ту, яка вимагає похідних, або просто оцініть функцію в тонкій сітці).c
Загалом, це означає EGO, Efficient Global Optimization, як запропонував @barron. Я хотів би підкреслити, що для вашого застосування це здається цілком підходящим - ви отримуєте напрочуд точну модель, засновану на порівняно мало оцінках , а потім можете використовувати будь-який алгоритм оптимізації, який ви хочете. Що часто також цікаво, це те, що тепер ви можете оцінити c на сітці та побудувати її, тим самим отримавши уявлення про загальний вигляд f . Ще один цікавий момент полягає в тому, що більшість методів сурогатного моделювання також дають статистичні оцінки помилок, що дозволяє оцінити невизначеність.fcf
Як побудувати , звичайно, є відкритим питанням, але часто використовуються моделі Кріґінга або так звані космічні карти.c
Звичайно, це все досить багато роботи з кодування, але багато інших людей зробили дуже хороші реалізації. У Matlab я знаю лише про те, що програмне забезпечення DACE програмне забезпечення DACE безкоштовне. TOMLAB також може запропонувати пакет Matlab, але коштує грошей - однак, я вважаю, що він також працює в C ++ і має набагато більше можливостей, ніж коли-небудь матиме DACE. (Примітка. Я один із розробників нової версії DACE, незабаром вийде, яка запропонує додаткову підтримку EGO.)
Сподіваємось, що цей грубий огляд вам допоміг, будь ласка, задайте питання, чи є моменти, які можна зробити більш зрозумілими або те, що я пропустив, або якщо ви хочете отримати додатковий матеріал з цього питання.