ΥΠΟΛΟΓΙΣΤΙΚΗ ΝΟΗΜΟΣΥΝΗ ΙΙ

 

9.6     Ενα απλο παραδειγμα

 

Ένα τυπικό πρόγραμμα που κάνει χρήση των υπηρεσιών της GAlib είναι το εξής:

 

float Objective(GAGenome &);

void
main() {
     GABinaryStringGenome genome(width, height, Objective);
     GASimpleGA ga(genome);

     ga.evolve();
     cout << ga.statistics() << endl;
}

float
Objective(GAGenome &) {
     // the body of function
}

 

Στο παραπάνω πρόγραμμα, καθορίζεται ότι τα άτομα του γενετικού θα είναι binary strings και ότι θα χρησιμοποιηθεί ο απλός Γ.Α.  Μια τυπική αντικειμενική συνάρτηση είναι η εξής:

 

float
Objective(GAGenome & g)
{
    
GA1DBinaryString & genome=(GA1DBinaryString)g;
    
float score=0.0;
    
    
for (int i=0;i<genome.length();i++)
          
score+=genome.gene();
    
return(score);
}

 

Στην objective function θα πρέπει, αρχικά, να γίνεται type casting από το αντικείμενο τύπου GAGenome στο αντικείμενο που χρησιμοποιείται στο συγκεκριμένο πρόβλημα για την αναπαράσταση των λύσεων.  Και αυτό, γιατί η objective function δηλώνεται σαν member function της GAGenome στο GAlib.  Επιπλέον, η objective function θα πρέπει να επιστρέφει μια τιμή τύπου float (το score του συγκεκριμένου ατόμου).

 

 

ΑΡΧΗ ΚΕΦΑΛΑΙΟΥ