0


0

L’optimisation s’arrête prématurément (MATLAB)

J’essaie de mon mieux de travailler avec fmincon dans MATLAB. Lorsque j’appelle la fonction, j’obtiens l’une des deux erreurs suivantes:

Nombre d’évaluations de fonctions dépassé, ou

Nombre d’itérations dépassé.

Et quand je regarde la solution jusqu’à présent, elle est bien loin de celle prévue (je le sais parce que j’ai créé un vecteur minimum).

Maintenant, même si j’augmente l’une des contraintes de tolérance ou le nombre maximal d’itérations, j’ai toujours le même problème.

Toute aide est appréciée.

2 Answer


1


Tout d’abord, si votre problème peut être converti en programmation linéaire ou quadratique, faites-le d’abord.

Sinon, avez-vous essayé de l’ensemencer avec différentes valeurs de départ x0? Si cela commence dans un mauvais endroit, il peut être beaucoup plus difficile d’atteindre l’optimum.

S’il vous est possible de fournir le gradient de la fonction, cela peut énormément aider l’optimiseur (mais évidemment seulement si vous pouvez le trouver autrement que par la différenciation numérique). De même, si vous pouvez fournir la Hesse (complète ou clairsemée) à un prix relativement bas, vous êtes en or.

Fondamentalement, fmincon par défaut n’a presque aucune information sur la fonction qu’il essaie d’optimiser, et en fournir plus peut être extrêmement utile. Si vous pouvez nous en dire plus sur la fonction objectif, nous pourrons peut-être vous donner plus de conseils.


0


La norme L1 n’est pas différenciable. Cela peut rendre difficile la convergence de l’algorithme vers un point où l’un des résidus est nul. Je soupçonne que c’est la raison pour laquelle le nombre de limites d’itérations est dépassé. Si votre problème d’origine est

 min norm(residual(x),1)

 s.t. Aeq*x=beq

vous pouvez reformuler le problème différemment, comme suit

 min sum(b)

 s.t.  -b(i)<=residual(x,i)<=b(i)

        Aeq*x=beq

où résiduel (x, i) est le i-ème résiduel, x est le vecteur d’origine des inconnues et b est un autre vecteur inconnu de bornes que vous ajoutez au problème.