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