<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
--></style>
</head>
<body class='hmmessage'>
hola a todos, estado tratando de entender el sgt codigo pero aun me queda una dudad en estas 3 funciones siguientes, me podrian explicar como funcionan por favor:<br>void elitism(ga_vector &population, ga_vector &buffer, int esize )<br>void mutate(ga_struct &member)<br>void mate(ga_vector &population, ga_vector &buffer)<br> y xq solo corre en el DEV C++ y no en el TURBO C++; el codigo es el sgt: mis dudas lo dejo resaltado con negrita<br>gracias de antemano.<br><br>#pragma warning(disable:4786)        // disable debug warning  DESACTIVAR LA ALERTA DE DEPURACION<br>#include <iostream>                    // for cout etc.<br>#include <vector>                    // for vector class<br>#include <string>                    // for string class<br>#include <algorithm>                // for sort algorithm PARA ALGORITMO DE ORDENACION<br>#include <time.h>                    // for random seed<br>#include <math.h>                    // for abs()<br>#include <stdio.h><br>#include <conio.h>                   //getch()<br><br>#define GA_POPSIZE        2048        // ga population size  TAMAÑO DE LA POBLACION<br>#define GA_MAXITER        16384        // maximum iterations  MAXIMO DE ITERACIONES<br>#define GA_ELITRATE        0.10f        // elitism rate    TASA DE ELITISMO<br>#define GA_MUTATIONRATE    0.25f        // mutation rate   LA TASA DE MUTACION<br>#define GA_MUTATION        RAND_MAX * GA_MUTATIONRATE<br>#define GA_TARGET        std::string("Hola Mundo!")<br><br>using namespace std;                // polluting global namespace, but hey...<br>int i=0;<br>struct ga_struct           //estructura del AG<br>{<br>    string str;                        // the string      LA CADENA<br>    unsigned int fitness;            // its fitness    SU APTITUD<br>};<br><br>typedef vector<ga_struct> ga_vector;// for brevity  PARA ABREVIAR ????????????<br><br>void init_population(ga_vector &population,<br>                     ga_vector &buffer )<br>{<br>    int tsize = GA_TARGET.size();  //tsize toma el tamaño de la cadena inicial<br><br>    for (int i=0; i<GA_POPSIZE; i++) {  // generará un maximo de 2048 vueltas<br>        ga_struct citizen;    // crea la variable citizen de tipo ga_struct<br>        <br>        citizen.fitness = 0;<br>        citizen.str.erase(); //creo q elimina el contenido de la cadena, inicializandolo<br><br>        for (int j=0; j<tsize; j++)<br>            citizen.str += (rand() % 90) + 32;     <br><br>           //aqui se va llenando la poblacion incertando los elementos en el vector population<br>        population.push_back(citizen);  //ver este enlace http://ilengine.wikidot.com/vector<br>    }    <br><br>    buffer.resize(GA_POPSIZE); // genera el vector buffer con con la cantidad de GA_POPSIZE(2048) elementos<br>}<br><br>void calc_fitness(ga_vector &population)<br>{<br>    string target = GA_TARGET; // target recibe la cadena a evolucionar<br>    int tsize = target.size();   // tsize obtiene el tamaño de la cadena<br>    unsigned int fitness;<br><br>    for (int i=0; i<GA_POPSIZE; i++) {   //va a dar 2048 vueltas<br>        fitness = 0;<br>        for (int j=0; j<tsize; j++) {   // esto se hace por cada individuo (cada frase)<br>            fitness += abs(int(population[i].str[j] - target[j]));<br>        }<br>          //el valor acumulado total se almacena en cada una de los individuos (cada frase)<br>        population[i].fitness = fitness;<br>    }<br>}<br> //retorna verdadero o falso dependiendo de la condicion<br>bool fitness_sort(ga_struct x, ga_struct y) <br>{ return (x.fitness < y.fitness); }<br><br><br>inline void sort_by_fitness(ga_vector &population) //??????????????????<br>{ sort(population.begin(), population.end(), fitness_sort); }<br><br><b>void elitism(ga_vector &population, <br>                ga_vector &buffer, int esize )<br>{<br>    for (int i=0; i<esize; i++) {<br>        buffer[i].str = population[i].str;<br>        buffer[i].fitness = population[i].fitness;<br>    }<br>}</b><br><br><b>void mutate(ga_struct &member)<br>{<br>    int tsize = GA_TARGET.size();<br>    int ipos = rand() % tsize;<br>    int delta = (rand() % 90) + 32;<br><br>    member.str[ipos] = ((member.str[ipos] + delta) % 122);<br>}</b><br><br><b>void mate(ga_vector &population, ga_vector &buffer)<br>{<br>    int esize = GA_POPSIZE * GA_ELITRATE;<br>    int tsize = GA_TARGET.size(), spos, i1, i2;<br><br>    elitism(population, buffer, esize);<br><br>    // Mate the rest         MATA EL RESTO<br>    for (int i=esize; i<GA_POPSIZE; i++) {<br>        i1 = rand() % (GA_POPSIZE / 2);<br>        i2 = rand() % (GA_POPSIZE / 2);<br>        spos = rand() % tsize;<br><br>        buffer[i].str = population[i1].str.substr(0, spos) + <br>                        population[i2].str.substr(spos, esize - spos);<br><br>        if (rand() < GA_MUTATION) mutate(buffer[i]);<br>    }<br>}</b><br> // imprime el mejor osea el primer individuo de la poblacion<br>inline void print_best(ga_vector &gav)<br><br>{<br> i++;<br> cout << i;<br> cout << " Best: " << gav[0].str << " (" << gav[0].fitness << ")" << endl;<br> }<br><br>// esta funcion es para realizar el intercambio entre dos variables<br>inline void swap(ga_vector *&population,<br>                 ga_vector *&buffer)<br>     {<br>       ga_vector *temp = population; population = buffer; buffer = temp;<br>     }<br><br>int main()<br>{<br>    srand(unsigned(time(NULL)));//?????????  ???????????????????????????<br><br>    ga_vector pop_alpha, pop_beta;   //creo dos variables vectores<br>    ga_vector *population, *buffer;  //creo dos punteros de vestores<br><br>    init_population(pop_alpha, pop_beta);<br>    population = &pop_alpha;<br>    buffer = &pop_beta;<br><br>    for (int i=0; i<GA_MAXITER; i++) {<br>        calc_fitness(*population);        // CÁLCULO DE LA APTITUD<br>        sort_by_fitness(*population);    // ORDENARLOS<br>        print_best(*population);        // print the best one  INPRIME EL MEJOR<br><br>        if ((*population)[0].fitness == 0) break;<br><br>        mate(*population, *buffer);        // mate the population together<br>        swap(population, buffer);        // swap buffers  BUFFERS DE INTERCAMBIO<br>    }<br> getch();<br><br>    return 0;<br>}<br><br><h3 align="left"> <br></h3><br><br>                                     <br /><hr />Compartir tus mejores FOTOS es fácil en Messenger <a href='http://events.es.msn.com/windows-live/redes-sociales/default.aspx' target='_new'> ¡DESCUBRE cómo!</a></body>
</html>