Bonjour à tous,
Je tente actuellement de créer un code qui permet d'optimiser une fonction de type :
Les deltaV, V0, a, b sont des constantes connues, u(t) est la fonction de heaviside et t est un vecteur de temps de longueur connue
Les paramètres à optimiser sont donc P1 et P2, des vecteur de longueur inconnue. Ce que je dois optimiser : le temps pendant lequel la pente de la fonction est à plat ou est supérieur à 0, tout en maintenant la valeur en ordonnée entre une valeur minimum Vmin et une maximum Vmax durant tout la durée donnée par le vecteur t. Comme sur cet exemple:
Dans ce cas, P1= [5000 11000] P2=[7000 13000] Vmin = 20 et Vmax = 120 (à peu près).
Je sais que l'optimisation de cette fonction par Matlab n'est pas utile (il suffit de retarder les valeurs des deux paramètres au maximum et le tour est joué) mais je n'ai pas fourni la totalité de l'équation. Si je comprends comment procéder, je pourrai appliquer la méthode à ce qui reste de l'équation.
J'ai déjà codé la fonction ObjFun qui reprend les deux sommations :
Je présente quelques difficultés pour traduire les contraintres Vmin et Vmax et pour le choix de la routine d'optimisation à utiliser (entre fmincon, ga, ...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 function f_v = ObjFun(p1,p2) global t conso Ttour Travit Tpit Reservoir Ess=zeros(1,length(t)); Rem=zeros(1,length(t)); for i=1:length(p1) Ess=Ess+conso/Ttour.*(t-p1(i)).*heaviside(t-p1(i))+1/Travit.*(t-(p1(i)+Tpit)).*heaviside(t-(p1(i)+Tpit)); end for i=1:length(p2) Rem=Rem+1/Travit.*(t-p2(i)).*heaviside(t-p2(i))+conso/Ttour.*(t-p2(i)).*heaviside(t-p2(i)); end f_v=subplus(diff(Reservoir-conso/Ttour.*t+Ess-Rem)); end
Pouvez-vous m'aider ?
Merci d'avance.
Partager