Salut tout le monde,
J'essaie d'utiliser la fonction minimiser dans JSL pour obtenir les valeurs de deux (ou plus) variables qui minimisent le carré moyen d'erreur d'un grand modèle. Je n'arrive pas à le faire converger même si je sais vers quelle valeur il doit converger (par essais et erreurs).
La syntaxe de base que j'ai utilisée est la suivante :
minfun = Minimize( min_test, {kD( 0.4, 0.8 ), wshc( 0.1, 1.5 )}, <<DETAILS></DETAILS>J'ai essayé différents messages mais ils ne changent rien.
Le but ici est de trouver les valeurs de kD et wshc en minimisant l'expression min_test qui est elle-même une séquence d'expressions évaluées comme dans
min_test = Expr(
Eval( light );
Eval( parafile );
Eval( runprg );
Eval( reshandling2 );
Eval( SSE2 );
);
Les valeurs kD et wshc modifiées modifient les expressions "light" et "parafile" qui exécutent ensuite un programme exécutable (dans l'expression runprg) dont les résultats sont manipulés et à partir duquel l'erreur quadratique moyenne (MSE) est la dernière chose qui est évalué dans l’expression SSE2. Pour le contexte, l'expression "runprg" soumet plusieurs fichiers créés à un exécutable autonome qui simule l'évolution thermique des lacs. Chaque passage à l'expression « runprg » nécessite environ 10 à 20 secondes de calcul, dont les résultats sont réingérés dans JSL pour calculer le MSE.
Le processus lui-même semble fonctionner correctement dans la mesure où il lit correctement la valeur de la fonction objectif à chaque étape et semble transmettre correctement les valeurs des paramètres à l'expression. Le problème est que l'algorithme "déplace" les paramètres kD et wshc si légèrement (uniquement à la 5ème décimale) par rapport aux valeurs initiales que je leur ai données qu'il ne parvient pas à converger. Par exemple, si je commence avec des valeurs initiales de 0,8 et 0,5 respectivement, j'obtiendrai généralement quelque chose comme
0,8
0,49999945654133
à l'itération suivante et n'affecte donc pas de manière significative le MSE résultant. Avec les limites des paramètres que j'ai données dans la fonction minimiser, il y a beaucoup d'espace pour que les paramètres se déplacent. Je comprends que mon cas est assez loin de la simple fonction différentiable typique. Cependant, en exécutant "manuellement" le programme avec différentes valeurs de paramètres, je sais que la fonction objectif est assez convexe par rapport aux paramètres et j'ai donc pensé que la fonction minimiser fonctionnerait OK , notamment en utilisant le message <
Avez-vous des suggestions de solution de contournement qui pourraient aider dans cette situation ?
Un grand merci d'avance, Yves