Bonjour à tous,
Je suis en train d'écrire un programme d'optimisation sous contraintes, dans le cadre d'un petit projet.
C'est un simple algorithme de suivi de gradient.
Au départ je voulais utiliser "fmincon" de matlab, mais ma fonction objective n'est pas continue, elle est affine par morceaux.
Du coup, j'écris un algorithme maison qui est pas loin d'être fini, si ce n'est que j'ai des soucis lors de la projection de mon gradient sur ma contrainte, qui est un hyperplan (hypercube de manière générale).
Je projette mon gradient sur mon hyperplan de la manière suivante :
p = grad - ( grad' * n / (sum(n.^2) ) *n
où grad est mon vecteur à projeter et n un vecteur normal de mon hyperplan ( non unitaire , d'où la division par la norme au carré )
le problème, c'est que mon projeté p, n'est en général pas tout à fait sur la contrainte :
Sur un cas ou deux testé, lorsque j'écris (grad' * p) , j'obtiens une valeur de l'ordre de 10^-16 au lieu de zero.
C'est bien entendu un problème de précision numérique, mais je ne sais pas comment faire, ou plutôt quel seuil S fixer, pour considérer que si (grad' * p) < S alors j'arrondi à 0.
Des idées ? je suis pas très fort pour ces trucs là.
merci d'avance
Partager