Bonjour à toutes et tous,

Suite aux retours de la dernière journée utilisateurs, nous travaillons sur l'optimisation des temps de simulation sur ISIS-Fish et nous avons un développement qui mériterait validation.

Nous somme partis d'une simulation de 12 mois sur Defipel pour analyser les temps de calculs. Sur cette simulation test, il s'est avéré que 80% du temps de calcul était dédié au calcul de la matrice de mortalité par pêche par la méthode 'SiMatrix.totalFishingMortality()'. Cette méthode prend un tableau de (stratégie, métier, classe, zone) et retourne une matrice de taille #classes x #zones, obtenue en faisant la somme sur les stratégies et sur les métiers des données d'entrée. 

Avec Benjamin, nous avons amélioré l'algorithme en charge de sommer un tableau le long d'un axe, ce qui a divisé par ~2.8 le temps de calcul de la simulation test.

Souhaiteriez-vous tester cette nouvelle version ? Nous aimerions en particulier vérifier que les résultats sont toujours les mêmes, à epsilon près.

En effet, nous sommes ici sur un problème d'arithmétique sur des nombres à virgules flottantes (en double précision dans le cas d'ISIS). Pour rappel, les nombres flottants sont des représentations de nombres réels, équivalentes à une notation scientifique en base 2. Ces nombres ont un nombre limité de chiffres significatifs (environ 16 sur des type "double"). Il s'en suit qu'un nombre réel pour lequel il n'existe pas de représentation à virgule flottante est approximé. Cette approximation ne peut être égale à la valeur réelle qu'"à un certain epsilon près".

Lorsque des opérations arithmétiques sont effectuées sur des flottants, des erreurs d'approximations peuvent s'accumuler. De plus, contrairement au corps des réels, l'addition sur les flottants n'est pas associative : (a + b) + c n'est pas nécessairement égal à a + (b + c). Le nouvel algorithme n'effectuant pas les additions dans les même ordre qu'avant, et les résultats obtenus peuvent varier.

Sur mes tests, la différence relative entre la précédente et la nouvelle implantation sont de l'ordre de 10^(-15), ce qui me semble acceptable, étant donnée la précision limitée des flottants de type `double`. Il est impossible de dire que l'une des deux implantations donne des résultats plus corrects que l'autre, étant donnée la précision limitée des flottants de type `double`. Cependant, je souhaiterais savoir si sur de vraies simulations, les différences d'approximation sont également raisonnables.

Si certain(e)s sont intéressé(e)s pour tester ce développement, nous mettrons à disposition une pré-release de cette nouvelle version d'ISIS.

En vous souhaitant une belle semaine,

Sarah Bordage