Je voudrais suggérer une approche quelque peu différente par rapport aux autres réponses, bien que @barron ait indirectement discuté de la même chose.
Au lieu d'optimiser directement votre fonction, c'est-à-dire en l'évaluant en une série de points points qui (espérons-le) convergent vers un optimum (local), vous pouvez utiliser le concept de modélisation de substitution , qui est très bien adapté aux problèmes du type que vous décrivez (coût élevé, lisse, borné, de faible dimension, c'est-à-dire moins de 20 inconnues).x1,x2,…,xksurrogate modelling
Plus précisément, la modélisation de substitution fonctionne par la mise en place d' une fonction de modèle de votre véritable fonction f ∈ R d → R . La clé est que bien que c ne représente pas parfaitement f , il est beaucoup moins cher à évaluer.c ∈ Rré→ RF∈ Rré→ RcF
Ainsi, un processus d'optimisation typique serait le suivant:
- Évaluez à un ensemble de j points initiaux x 1 , x 2 , … , x j . Notez que les dérivés ne sont pas nécessaires. Notez également que ces points doivent être répartis uniformément dans tout l'espace de recherche, par exemple par Latin Hypercube Sampling ou une conception similaire remplissant l'espace.FjX1, x2, … , Xj
- Sur la base de cet ensemble de données d'origine, créez une fonction de modèle . Vous pouvez utiliser la validation croisée pour valider votre modèle (c'est-à-dire utiliser uniquement un sous-ensemble des j points d' origine pour créer c , puis utiliser le reste de l'ensemble de données pour vérifier dans quelle mesure c prédit ces valeurs)cjcc
- Utilisez un critère tel que le critère d'amélioration attendue (IE) pour savoir où «remplir» plus d'échantillons pour rendre plus précis en échantillonnant f . Ceci est en réalité bien mieux étudié théoriquement qu'il n'y paraît, et le critère EI est très bien étudié. Le critère EI n'est pas non plus un critère gourmand, donc vous obtenez tous les deux une bonne amélioration globale de la précision du modèle, tout en priorisant la précision près des optima potentiels.cF
- Si votre modèle n'est pas assez précis, répétez l'étape 3, sinon utilisez votre routine d'optimisation préférée pour trouver l'optimum de , qui sera très bon marché à évaluer (vous pouvez donc utiliser n'importe quelle routine que vous voulez, même celles qui nécessitent des dérivés, ou tout simplement évaluer la fonction dans un maillage fin).c
En général, c'est ce que l'on entend par EGO, Efficient Global Optimization, comme l'a suggéré @barron. Je voudrais souligner que pour votre application, cela semble parfaitement adapté - vous obtenez un modèle étonnamment précis basé sur relativement peu d'évaluations de , et pouvez ensuite utiliser n'importe quel algorithme d'optimisation que vous souhaitez. Ce qui est souvent aussi intéressant, c'est que vous pouvez maintenant évaluer c sur un maillage et le tracer, ce qui permet de mieux comprendre l'apparence générale de f . Un autre point intéressant est que la plupart des techniques de modélisation de substitution fournissent également des estimations d'erreur statistique, permettant ainsi une estimation de l'incertitude.FcF
Comment construire est bien sûr une question ouverte, mais souvent des modèles de krigeage ou dits de cartographie spatiale sont utilisés.c
Bien sûr, c'est tout un travail de codage, mais beaucoup d'autres personnes ont fait de très bonnes implémentations. Dans Matlab, je ne connais que la boîte à outils du logiciel DACE DACE est gratuit. TOMLAB pourrait également offrir un package Matlab, mais coûte de l'argent - cependant, je pense qu'il fonctionne également en C ++ et a beaucoup plus de capacités que DACE n'en aura jamais. (Remarque: je suis l'un des développeurs de la nouvelle version de DACE, qui sortira bientôt et qui offrira un support supplémentaire pour EGO.)
J'espère que cette vue d'ensemble vous a aidé, veuillez poser des questions s'il y a des points qui peuvent être clarifiés ou des choses que j'ai manquées, ou si vous souhaitez plus d'informations sur le sujet.