Está en la página 1de 2

Algoritmo Algoritmo_genetico

//Ingresar datos
Definir matriz_distancias;
Definir matriz_pasajeros;
Definir min_lineas;
Definir max_lineas;
Definir prob_cruce;
Definir prob_mutacion;
Definir cant_bloques;
Definir iteraciones;
Definir cant_individuos //Un individuo es una posible soluci�n al problema,
es una matriz bidimensional de n lineas, las lineas son matrices de nodos;

Funcion GenerarIndividuo
Se genera aleatoriamente(desde min_lineas hasta max_lineas) la cantidad
de lineas del individuo;
Se genera aleatoriamente los bloques o nodos (deacuerdo con la
cant_bloques) por cada linea del individuo;
Retorna Individuo(Matriz bidimensional);
FinFuncion

Funcion ValidarIndividuo(individuo)
Si el individuo tiene lineas repetidas
Retorna Falso;
FinSi
Si todos los bloques no son recorridos
Retorna Falso;
FinSi
Si las lineas no se conectan
Retorna Falso;
FinSi
Retorna Verdadero;
FinFuncion

Funcion mutar(individuo)
Se muta aleatoriamente segun prob_mutacion;
Se elige aleatoriamente la linea del individuo a mutar;
Se genera aleatoriamente la nueva cantidad de bloques o nodos
(deacuerdo con la cant_bloques);
Se reemplaza la linea mutada
Retorna individuo;
FinFuncion

Funcion fitness(individuo)
//Funcion a optimizar deacuerdo la cantidad de pasajeros y las
distancias entre bloques
FinFuncion

// Generar Primera poblacion


Se define la matriz_poblacion;
Se define la matriz_fitness;
Para i=1 Hasta cant_individuos;
individuo = GenerarIndividuo;
Mientras ValidarIndividuo(individuo) = Falso
individuo = mutar(individuo);
Fin Mientras
matriz_poblacion <- a�adir individuo;
matriz_fitness <- a�adir fitness(individuo);
FinPara

Escribir "Poblacion n: "matriz_poblacion, matriz_fitness

Para i=1 Hasta iteraciones;


Para Cada individuo de matriz_poblacion
Se cruza aleatoriamente segun prob_cruce;
Se elige mediante torneo 2 individuos;
Se elige aleatoriamente la linea de cada individuo a
cruzar;
Se cruzan por cada individuo las dos lineas elegidas;
Se reemplaza la linea de cada individuo con la nueva linea
generada por el cruce;
Se reemplazan los individuo en matriz_poblacion;
Se reemplazan los fitness en matriz_fitness;
FinPara

Para Cada individuo de matriz_poblacion


mutar(individuo);
matriz_poblacion <- reemplazar individuo;
matriz_fitness <- reemplazar fitness(individuo);
FinPara

Para Cada individuo de matriz_poblacion


Mientras ValidarIndividuo(individuo) = Falso
individuo = mutar(individuo);
Fin Mientras
matriz_poblacion <- reemplazar individuo;
matriz_fitness <- reemplazar fitness(individuo);
FinPara

Escribir "Poblacion n: "matriz_poblacion, matriz_fitness;


FinPara

Ordenar matriz_poblacion Segun matriz_fitness de mayor a menor;


Escribir "Mejor Solucion: "matriz_poblacion(0), matriz_fitness(0);
FinAlgoritmo

También podría gustarte