Skip to content

comparaison test between JuMP and OptimalControl Models #79

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 14 commits into
base: main
Choose a base branch
from

Conversation

Nico77310
Copy link
Collaborator

No description provided.

@Nico77310 Nico77310 linked an issue Jun 17, 2025 that may be closed by this pull request
@Nico77310 Nico77310 marked this pull request as draft June 17, 2025 14:24
@github-actions github-actions bot requested a review from ocots June 17, 2025 14:25
@ocots
Copy link
Member

ocots commented Jun 27, 2025

@Nico77310 Il faut avoir comme tests:

  • le solveur avec le modèle JuMP converge
  • le solveur avec le modèle OptimalControl converge
  • les deux solutions donnent le même objectif
  • les deux solutions donnent la même init (tester avec max_iter=0)
  • les deux solutions sont identiques en norme $L^2$ sur chaque composante

Important

De plus, il faudra modifier les modèles OptimalControl pour pouvoir utiliser ExaModels >pour modéliser le NLP obtenu après discrétisation. Dans ce cas, la dynamique doit être donnée par composante. Voir ce problème par exemple. Ajouter un argument nommé (exa::Bool=false) pour choisir si la dynamique est donnée de manière vectorielle ou par composante:

function OptimalControlProblems.beam(::OptimalControlBackend; nh::Int=100)
# Model
ocp = @def begin
t [0, 1], time
x R², state
u R, control
x(0) == [0, 1]
x(1) == [0, -1]
(t) == [x₂(t), u(t)]
0 x₁(t) 0.1
-10 u(t) 10
(u(t)^2) min
end

@ocots ocots mentioned this pull request Jun 27, 2025
@ocots
Copy link
Member

ocots commented Jun 27, 2025

@Nico77310 Il faut aussi :

  • ajouter une fonction available_problems() qui renvoie la liste des problèmes disponibles
  • utiliser cette fonction dans la documentation au lieu du tableau pour indiquer la liste des problèmes dispos
  • ajouter un test à la fin du runtests :
@test list_of_problems_final == available_problems()

pour vérifier que la fonction available_problems est toujours à jour.

@antoinepichon03
Copy link
Collaborator

@Nico77310 Il faut aussi :

  • ajouter une fonction available_problems() qui renvoie la liste des problèmes disponibles
  • utiliser cette fonction dans la documentation au lieu du tableau pour indiquer la liste des problèmes dispos
  • ajouter un test à la fin du runtests :
@test list_of_problems_final == available_problems()

pour vérifier que la fonction available_problems est toujours à jour.

Hello @ocots ! For the available_problems function, I implemented a solution using a text file cache that gets written every time you run the tests. This way, you can access the list of available/working problems without having to recompile or re-run the entire test suite. The function reads from this cached file to return the last known working problems list. What do you think about this approach? Do you see any potential improvements or issues with this caching strategy?

@antoinepichon03
Copy link
Collaborator

I can't push in the branch, can you send me the permission please ? @ocots

@Nico77310
Copy link
Collaborator Author

Hello @ocots, could you review comparison tests between JuMP and OC ? Thank you by advance.

@ocots
Copy link
Member

ocots commented Jul 2, 2025

@Nico77310 Je fais une relecture. Je vais faire quelques modifications. Il faut que tu merges la PR #80

@ocots
Copy link
Member

ocots commented Jul 2, 2025

@Nico77310 @antoinepichon03 Voici mes remarques, je fais en fonction du code sur la PR #80.

  • La comparaison sur l'objectif peut se faire en même temps que celle sur la solution.
  • La comparaison sur l'init doit pouvoir partager le même code que celle sur la solution. Juste le max_iter qui change. Factoriser le code.
  • La fonction available_problems doit se trouver dans le module OptimalControlProblems et être exportée.

Note

Il faudrait faire ces petits changements pour passer ensuite à l'ajout des modèles avec la dynamique donnée par composante (ce qui est un gros boulot).

@ocots
Copy link
Member

ocots commented Jul 4, 2025

@Nico77310 @antoinepichon03 Avez-vous vu mes messages plus haut ?

@antoinepichon03
Copy link
Collaborator

@Nico77310 @antoinepichon03 Avez-vous vu mes messages plus haut ?

Pardon je n'avais pas vu, je regarde ça de suite.

@ocots
Copy link
Member

ocots commented Jul 4, 2025

@Nico77310 Attention, il y a pleins de problèmes sans init ou avec une init partielle (c'est-à-dire parfois seul le contrôle est initialisé, parfois la variable n'est pas initialisé). Il faut que tous les problèmes aient une init. Mettre 0.1 par défaut.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Dev] Comparison tests
3 participants