Introducción
Explicas sobre el problema
El
algoritmo genético sirve cuando hay combinaciones, y tu quieres maximizar o
minimizar algo y hay ciertos límites entonces se van generando combinaciones
posibles y luego las combinaciones se
intercambian con valores de otras combinaciones, y asi se da la cruza después
de varias cruzas, se supone que quedan combinaciones casi optimas
Objetivos
Que el objetivo es de
encontrar el máximo o el mínimo sin sobrepasarse de las restricciones
Justificación
Se podría usar para mejorar las condiciones de
vida mejorando los genes, tratando de eliminar las enfermedades genéticas,
en la rama de la ciencia de la biogenética y en la medicina.
Algoritmo
El programa de algoritmo genético era originalmente hacer un mejor combinación de los genes y así si mejorar la raza y saber en cuanto tiempo nos llevaría hacer esto, y saber en momento los genes mutarían.
Pero como la idea no estaba bien ideada para la programación fue cambiada por un programa que juntara armas para obtener una mejor arma usando el algoritmo genetico.
- En el primer día fue la planeacion para realizar el código, en la que tuve que investigar que armas debería usar, cuantas armas, también tuve que ver otro programas que hacian lo que yo deseaba hacer con mi programa, y hice un diagrama de flujo para tener mas claras mis ideas.
- En el segundo y tercer día fue la realización de codigo usanndo como base el diagrama que habia hecho con anterioridad y crear las funciones del programa
- en el cuarto, quinto, sexto y septimo fue la corrección del programa uno de los errores fue por el uso de los punteros, y estar mal definido la forma de juntar las armas, t errores de sintaxis.
http://www.youtube.com/watch?v=sPk7n5BwCgM&feature=youtube_gdata
Código :
//algoritmo genetico #include <stdio.h> #include <stdlib.h> #include <time.h> #define prand (rand()%11) #define d_rand ((rand()%4)+1) #define a_rand(i) ((rand()%(i-10))+10) enum {PISTOLA,ESCOPETA,METRALLETA,ESPECIAL}; char tipo_nom[4][11] = {"PISTOLA","ESCOPETA","METRALLETA","ESPECIAL"}; int fuerza_max[4]={90,120,70,140}; short int rango_max[4]={20,16,8,40}; short int municion_max[4]={20,100,12,500}; typedef struct arma_s{ short int tipo;//las variedad de las armas int fuerza; short int rango;//metros //short int recarga;//manual, semiautomatica ,etc.. short int municion;//la capacidad de la arma para cargar balas } arma_t; int new_arma(arma_t *arma,short int _tipo,int _fuerza, short int _rango,short int _municion); int print_arma(arma_t *arma1, arma_t *arma2, arma_t *fuz); int unir_arma(arma_t *arma1, arma_t *arma2, arma_t *fuz){ srand(time(NULL)); fuz->tipo=prand>5?arma1->tipo:arma2->tipo; if(fuz->tipo == arma1->tipo) new_arma(fuz, arma1->tipo, arma1->fuerza, arma1->rango, arma1->municion); else new_arma(fuz, arma2->tipo, arma2->fuerza, arma2->rango, arma2->municion); int aumento = prand; if(aumento > 4) fuz->fuerza +=a_rand(fuz->fuerza); else fuz->fuerza -=fuz->fuerza*d_rand/10; aumento = prand; if(aumento > 4) fuz->municion +=a_rand(fuz->municion); else fuz->municion -=fuz->municion*d_rand/10; aumento = prand; if(aumento > 4) fuz->rango +=a_rand(fuz->rango); else fuz->rango -=fuz->rango*d_rand/10; if(fuz->fuerza>fuerza_max[fuz->tipo]||fuz->rango>rango_max[fuz->tipo]||fuz->municion >municion_max[fuz->tipo]) fuz->tipo = ESPECIAL; printf("Arma 1\t\t\t\t|Arma2\nTipo: %s\t\t\t|Tipo: %s\n",tipo_nom[arma1->tipo], tipo_nom[arma2->tipo]); printf("Fuerza: %d\t\t\t|Fuerza: %d\nRango: %d m.\t\t\t|Rango: %d m.\n", arma1->fuerza, arma2->fuerza, arma1->rango, arma2->rango); printf("Municion: %d balas\t\t|Municion: %d balas\t\t\t\n", arma1->municion, arma2->municion); printf("\n\nArma Fucionada\nTipo: %s\nFuerza: %d\nRango:%d metros\nMunicion: %d balas", tipo_nom[fuz->tipo], fuz->fuerza, fuz->rango, fuz->municion); return 0; } int main(){ arma_t a1,a2, mix; a1.fuerza=90; a1.municion=20; a1.rango=20; a1.tipo=PISTOLA; a2.fuerza=100; a2.municion=6; a2.rango=2; a2.tipo=ESCOPETA; while(1) { unir_arma(&a1,&a2,&mix); //imprimir printf("\n\n"); getwchar(); } printf("aaa"); getwchar(); return 0; } int new_arma(arma_t *arma,short int _tipo,int _fuerza, short int _rango,short int _municion){ arma->tipo=_tipo; arma->fuerza=_fuerza; arma->rango=_rango; arma->municion=_municion; if(_fuerza>fuerza_max[_tipo]||_rango>rango_max[_tipo]||_municion >municion_max[_tipo]) return 1; return 0; } int print_arma(arma_t *arma1, arma_t *arma2, arma_t *fuz) { printf("Arma 1\t\t\t|Arma2\nTipo: %s\t\t\t|Tipo: %s\n",tipo_nom[arma1->tipo], tipo_nom[arma2->tipo]); printf("Fuerza: %d\t\t\t|Fuerza: %d\nRango: %d m.\t\t\t|Rango: %d m.\n", arma1->fuerza, arma2->fuerza, arma1->rango, arma2->rango); printf("Municion: %d balas\t\t\t|Municion: %d balas\t\t\t|\n", arma1->municion, arma2->municion); printf("\n\nArma Fucionada\nTipo: %s\nFuerza: %d\nRango:%d metros\nMunicion. %d balas", tipo_nom[fuz->tipo], fuz->fuerza, fuz->rango, fuz->municion); }
