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