0Yassine0 / COTS.jl

Control Optimal Test Set
7 stars 2 forks source link

Hang Glidder Problem solved with OC #9

Closed 0Yassine0 closed 1 month ago

0Yassine0 commented 2 months ago

@ocots J'ai oublié qu'il y a aussi le problème de Hang Glider qui ne se résout pas avec OptimalControl.jl Modelisation en JuMP : gliderJMP Modelisation en OC : gliderOC Le notebook de comparison : testGlider

ocots commented 2 months ago

Merci.

Ping @PierreMartinon

0Yassine0 commented 2 months ago

@ocots @PierreMartinon. En réglant le problème de syntaxe j'obtiens des meilleurs résultats avec OC il résout le problème de Hang Glider. Mais vu que l'initialisation de OC ne prend pas en compte les matrices et que le temps final tf est variable, je ne sais pas comment ça sera possible de faire l'équivalent par exemple entre: 0.0 <= x[k=0:nh], (start=x_0 + vx_0*(k/nh)) et t -> x_0 + vx_0*t Je pense que ça peut causer des résultats différents entre JuMP et OptimalControl.

PierreMartinon commented 2 months ago

@ocots @PierreMartinon. En réglant le problème de syntaxe j'obtiens des meilleurs résultats avec OC il résout le problème de Hang Glider. Mais vu que l'initialisation de OC ne prend pas en compte les matrices et que le temps final tf est variable, je ne sais pas comment ça sera possible de faire l'équivalent par exemple entre: 0.0 <= x[k=0:nh], (start=x_0 + vx_0*(k/nh)) et t -> x_0 + vx_0*t Je pense que ça peut causer des résultats différents entre JuMP et OptimalControl.

Alors pour les matrices normalement tu peux passer les fonctions interpolees a partir des matrices.

De facon generale, les fonctions donnees en initialisation seront tout simplement evaluees sur la grille de temps initiale. A tf libre cette grille initiale sera une subdivision reguliere de [t0,tf] a n intervalles, avec comme valeur de tf la valeur initiale de la variable d'optimisation correspondante. Par exemple si tf est la premiere variable, tu peux prendre init=(state=(t->x0+vx0*t, t->...), control=..., variable=[tf_init, ...])

Une astuce: en faisant un solve avec l'option max_iter=0 et un plot derriere, tu dois retrouver l'initialisation (a quelque chose pres, car avant l'optimisation ipopt va par exemple projeter a l'interieur des bornes si besoin).

ocots commented 1 month ago

Il est possible maintenant de fournir un vecteur de vecteurs pour l'initialisation. Voir ce tutoriel : https://control-toolbox.org/docs/optimalcontrol/stable/tutorial-initial-guess.html#Vector-initial-guess-(interpolated)

0Yassine0 commented 1 month ago

Il est possible maintenant de fournir un vecteur de vecteurs pour l'initialisation. Voir ce tutoriel : https://control-toolbox.org/docs/optimalcontrol/stable/tutorial-initial-guess.html#Vector-initial-guess-(interpolated)

C'est parfait. Notebook. L'update améliore les valeurs obtenues. Il y a juste une petite différence au début de chaque figure de la vitesse. Les valeurs sont symétriques dans les 10 premières valeurs.

0Yassine0 commented 1 month ago

On a plus ce problème avec les nouvelles updates. Je ferme cette issue.