J'essaie d'implémenter l'algorithme Nelder-Mead pour optimiser une fonction. La page wikipedia sur Nelder-Mead est étonnamment claire sur l'ensemble de l'algorithme, à l'exception de son critère d'arrêt. Là, il dit malheureusement:
Vérifier la convergence [clarification nécessaire] .
J'ai moi-même essayé et testé quelques critères:
Arrêtez si où ϵ est petit et où x i est le i- ème sommet du simplexe, ordonné de bas ( f ( x 1 ) ) à haut ( f ( x N + 1 )) valeurs de fonction. En d'autres termes, lorsque la valeur maximale du simplex est presque égale à la valeur minimale. J'ai trouvé que cela ne fonctionnait pas correctement, car cela ne donne aucune garantie sur ce que fait la fonction à l'intérieur du simplex. Exemple, considérons la fonction: Ceci est bien sûr trivial à optimiser, mais disons que nous le faisons avec NM, et que nos deux points simplex soient x 1 = - 1 et x 2 = 1 . L'algorithme convergerait ici sans trouver son optimum.
La deuxième option consiste à évaluer le centroïde du simplexe: arrêtez si . Cela suppose que si le point le plus bas du simplexe et du centroïde ont des valeurs similaires, le simplexe est suffisamment petit pour appeler la convergence.
Est-ce une bonne façon de vérifier la convergence? Ou existe-t-il un moyen établi de vérifier cela? Je n'ai trouvé aucune source à ce sujet, car la plupart des résultats de recherche se concentrent sur la complexité de l'algorithme.