Comparaison de deux algorithmes génétiques

9

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.

nisc
la source
Juste une précision: n'est-il pas vrai qu'un algorithme génétique recherche aléatoirement une solution, de sorte que le segment initial d'une analyse ne produira probablement pas de solution valable? Aussi, que voulez-vous dire exactement par "l'erreur minimale dans la population"? Si vous voulez dire la différence minimale entre une valeur vraie connue et une solution parmi les 1000 valeurs d'une analyse, n'est-ce pas là une indication biaisée du résultat de l'analyse? Après tout, dans la pratique, vous accepteriez la solution finale à chaque exécution et rejeteriez tout ce qui la précède, non?
whuber
Par erreur, je veux dire 1 / fitness, donc je parle de la valeur du meilleur individu d'une génération. J'ai enregistré la valeur physique du meilleur individu pour chaque génération. J'ai donc 1000 * 20 * 2 nombres, chacun correspondant à la "forme physique" du meilleur individu dans une génération particulière d'une course particulière.
2010
Je suppose que la question initiale était mal posée, j'ai ajouté quelques clarifications ..
nisc

Réponses:

9

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.

csgillespie
la source
Comment pourrais-je utiliser les informations de toutes les générations?
2010 à 10h37
Le moyen le plus simple est de faire plusieurs tests, c'est-à-dire de tester à chaque génération, puis d'utiliser une correction Bonferroni ou fdr.
csgillespie
Lors de la comparaison à chaque génération, je devrais tester à un niveau de signification de 1/1000 * 0,05? N'est-ce pas un peu dur?
2010 à 11h18
Certes, mais vous faites également beaucoup de tests - vous ne pouvez pas tout avoir;) Vous pouvez classer les valeurs p, les utiliser comme guide pour voir où des erreurs possibles peuvent se produire.
csgillespie
1
Au lieu d'une correction bonferroni, vous pouvez toujours utiliser le holm bonferroni plus puissant. Voir ma réponse ici: stats.stackexchange.com/questions/575/…
Henrik
4

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:

  1. Qu'est-ce qui constitue une similitude pour vous, c'est-à-dire que voulez-vous dire lorsque vous dites que vous ne pensez pas que les deux méthodes sont différentes?
  2. Comment pouvez-vous le quantifier - peut être répondu après 1, et
  3. Comment pouvez-vous tester les différences significatives entre vos deux méthodes?

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).

user979
la source
semble raisonnable, plus de détails?
2010 à 12h59