Bonjour !
J'essai de résoudre le problème du voyageur de commerce avec un algorithme génétique... pour essayer...
Mon problème est pour l'instant lié au c++.
Mes villes sont des Genes. L'objet Gene possède une fonction qui permet de calculer la distance avec un autre Gene :
Code :
- float Gene::distanceWith( const Gene &gene )
- {
- //calcul de la distance entre this et gene
- //racine carré de ( distance entre x1 et x2 au carré + distance entre y1 et y2 au carré )
- return sqrt( ( _x - gene.x() ) * ( _x - gene.x() ) + ( _y - gene.y() ) * ( _y - gene.y() ) );
- }
|
J'ai également un Individu (trajet) qui a donc une liste de Gene (ville). L'objet Individu possède une fonction permettant de calculer la distance totale entre ses Genes (dans l'ordre de la liste de Genes) :
Code :
- //calcul la distance total du trajet dans l'ordre des points
- float Individu::distance()
- {
- float distance = 0.0;
- for( int i = 0; _genes.size() - 1; i++ ) {
- if ( i == _genes.size() - 1 ) //dernier point, on test avec le 1er point
- distance += _genes.at( i ).distanceWith( _genes.at( 0 ) );
- else
- distance += _genes.at( i ).distanceWith( _genes.at( i + 1 ) );
- }
- return distance;
- }
|
Je ne sais pas encore si la fonction fonctionne correctement car pour l'instant je n'arrive pas à la compiler.
J'ai un problème sur l'appel de distanceWith( const Gene &gene) :
Citation :
PVC/Individu.cpp:20: error: passing `const Gene' as `this' argument of `float Gene::distanceWith(const Gene& )' discards qualifiers
|
J'imagine que c'est un problème de const ou pas const dans les paramètres mais je sais pas trop pourquoi. Si vous avez une idée. Si quelque chose vous choque aussi, je suis interessé par vos remarques.
Merci !