J'ai deux implémentations d'un algorithme génétique qui sont censées se comporter de manière équivalente. Cependant, en raison de restrictions techniques qui ne peuvent être résolues, leur sortie n'est pas exactement la même, étant donné la même entrée.
Je voudrais quand même montrer qu'il n'y a pas de différence de performance significative.
J'ai 20 exécutions avec la même configuration pour chacun des deux algorithmes, en utilisant différentes graines de nombres aléatoires initiales. Pour chaque série et génération, la capacité d'erreur minimale du meilleur individu de la population a été enregistrée. L'algorithme utilise un mécanisme de préservation de l'élite, de sorte que la forme physique du meilleur individu diminue de façon monotone. Un run se compose de 1000 générations, j'ai donc 1000 valeurs par run. Je ne peux pas obtenir plus de données, car les calculs sont très coûteux.
Quel test dois-je utiliser? Un moyen simple serait probablement de ne comparer l'erreur que dans les générations finales (encore une fois, quel test devrais-je utiliser ici)? Mais on pourrait aussi penser à comparer le comportement de convergence en général.
Réponses:
Tester des algorithmes stochastiques peut être assez délicat!
Je travaille en biologie des systèmes et il existe de nombreux simulateurs stochastiques disponibles pour simuler un modèle. Tester ces simulateurs est délicat car deux réalisations à partir d'un même modèle seront généralement différentes.
Dans les dsmts, nous avons calculé (analytiquement) la valeur et la variance attendues d'un modèle particulier. Nous effectuons ensuite un test d'hypothèse pour déterminer si un simulateur diffère de la vérité. La section 3 du guide d'utilisation donne les détails. Essentiellement, nous faisons un test t pour les valeurs moyennes et un test chi carré pour les variances.
Dans votre cas, vous comparez deux simulateurs, vous devez donc simplement utiliser un test t à deux échantillons.
la source
Peut-être pourriez-vous mesurer la différence moyenne entre deux exécutions du même algorithme à la différence moyenne entre deux exécutions à partir d'algorithmes différents. Ne résout pas le problème de la mesure de cette différence, mais pourrait être un problème plus traitable. Et les valeurs individuelles de la série temporelle alimenteraient le calcul de la différence au lieu d'avoir à être traitées comme des points de données individuels à évaluer les uns par rapport aux autres (je ne pense pas non plus que la différence particulière à la nième étape soit ce que vous voulez vraiment faire des déclarations).
Mise à jour Concernant les détails - quelles sont les fonctionnalités de la série chronologique qui vous intéressent, au-delà de l'erreur finale? Je suppose que vous avez en fait trois questions différentes à résoudre:
Tout ce que je disais dans le premier post, c'est que la réponse à (1) ne tient probablement pas compte des différences individuelles à chacune des 1000 générations. Et que je conseillerais de trouver une valeur scalaire pour chaque série chronologique ou au moins la similitude entre les séries chronologiques. Ce n'est qu'alors que vous arrivez à la question des statistiques réelles (que je connais le moins des trois points, mais on m'a conseillé d'utiliser un test t apparié dans une question similaire que je viens de poser, lorsque vous avez une valeur scalaire par élément).
la source