2011-03-18 2 views
2

J'ai développé une application avec Java qui utilise des algorithmes génétiques. Mon application a besoin de paramètres comme comme:Algorithmes de réseaux neuronaux ou quelque chose comme ça pour trouver des paramètres appropriés pour une application qui utilise des algorithmes génétiques pour l'exécuter moins de temps

How many genes will be populate at first? 
How many genes will be killed after crossover and mutation? 
What will be the mutation rate? 

je peux tester quelque chose d'aussi comme:

How long(milliseconds) does it take to find a solution. 

Comment puis-je trouver les bonnes valeurs en tant que paramètres pour mon application. Je veux dire que je donnerai comme une entrée qui donne:

Genes to populate | Genes to kill | Mutation rate | Result(milliseconds) 
--------------------------------------------------------------------------------- 
50      5     16/1000     146 
50      5     16/1000     208 
50      5     16/1000     1000 
50      5     16/1000     216 
100      5     16/1000     178 
100      5     16/1000     546 
100      5     16/1000     646 
100      5     16/1000     46 
100      5     16/1000     186 
50      10    16/1000     346 
50      10    16/1000     246 
50      10    16/1000     546 
50      5     34/1000     746 
50      5     34/1000     186 
50      5     34/1000     196 
50      10    34/1000     496 
50      10    34/1000     23 
50      10    34/1000     169 

que les résultats sont aléatoires. Je n'ai pas testé mon programme.

Après je lance cet algorithme (je pense que je vais donner un temps de résultat qui est bon pour moi par exemple 78 millisecondes), il dira quelque chose comme ça:

You should use that parameters to get a result that takes 78 milliseconds: 
Genes to populate | Genes to kill | Mutation rate 
-------------------------------------------------------- 
34      7     24/1000   

PS1: Un plus est que, quelle stratégie je devrais suivre pour le tester. Par exemple, changer un paramètre et le tester un certain nombre de fois et changer d'autre paramètre etc.etc (j'ai essayé de donner mes valeurs exemple) ou tester quelques valeurs et trouver un paramètre et utiliser toujours ce paramètre et tester d'autres paramètres cela change un par un et en trouvant un autre paramètre et en utilisant ces deux paramètres et en changeant d'autres un par un et en continuant comme ça.

PS2 Je peux utiliser une API ou un logiciel pour le trouver aussi.

EDIT: Ce sont mes variables que j'utilise nowwith leurs valeurs:

MAX_POPULATION_SIZE = 50; 
HARD_WEIGHTS = {1,20,1,1,1,20,1};/* It means that I have 7 variables for this */ 
NUMBER_OF_GENES_TO_KILL = 5; 
MUTATION_RATE = 100; 
MAX_MUTATION_NUMBER = 1000; 
/* Mutation rate is MUTATION_RATE/MAX_MUTATION_NUMBER */ 

Répondre

1

j'obtenir quelques statistiques pour les combinaisons de paramètres premier
(en fait il semble possible d'essayer toutes les combinaisons - ou ? avez-vous plusieurs paramètres)
Ensuite, la voie directe serait de construire une sorte de cartographie de ces statistiques, comme
{a, b, c} -> {min, max, moyenne, dev}
(paramètres des statistiques de la valeur métrique)
puis de trouver les jeux de paramètres correspondant à la valeur métrique souhaitée.

Il serait plus compliqué si l'espace des paramètres est trop grand pour que l'énumération complète soit impossible. Ensuite, vous devrez d'abord construire une plus petite approximation de l'espace des paramètres, après avoir recueilli suffisamment d'échantillons à des points aléatoires.

Mise à jour:
Il peut être possible d'utiliser certains outils existants. Fondamentalement, c'est la même tâche que ce que les compresseurs de données statistiques doivent faire. Il est donc possible de préparer une table (binaire) avec des lignes N {metric; params} pour construire le modèle, puis une ligne partielle (métrique; ...} ). Ensuite, après avoir traité la valeur métrique désirée, nous devions fournir des données aléatoires au décodeur (au lieu du code arithmétique valide) et décoder la combinaison de paramètres la plus probable en fonction des statistiques accumulées.
Le meilleur outil pour ce serait probablement paq8 - http://www.mattmahoney.net/dc/#paq
Une démonstration simple idée suggérée serait de compresser un texte avec paq8, puis modifier l'archive à la fin (introduire une erreur). Le fichier (cassé) décompressé de l'archive contiendra généralement une phrase générée après l'erreur.
Paq8 peut généralement détecter la taille de ligne dans une table, mais sa prédiction peut être améliorée dans dans un tel cas en ajoutant un en-tête .bmp à la table, avec des dimensions de table spécifiques.

+0

Je vais modifier ma question pour les paramètres. – kamaci

+0

Mise à jour de la réponse. – Shelwien

Questions connexes