• Martes 12 de Noviembre de 2024, 21:15

Autor Tema:  Inteligencia artificial(Busqueda local)  (Leído 2164 veces)

oscarreyesavila

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Inteligencia artificial(Busqueda local)
« en: Martes 9 de Abril de 2019, 21:55 »
0
Hola amigos, estoy realizando un código de búsqueda de local, y consiste :

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

struct vecinos{
   int* vecino;
};
typedef struct vecinos Vecinos;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int* asigsol(int);
void impsol(int*,int);
Vecinos* asigvecinos(void);
int fitness(int *,int );
int fitnessVecinos(int *,int );
void crearVecinos(int,int,int,int,int,int[],int,int);
void burbuja(int arreglo[],int TAM);

int main(int argc, char *argv[]) {

   int i=1,n;
   int * solucion;
   Vecinos vecinos[5];
   int f=0,ite;


   printf("size of the array solution");
   scanf("%d",&n);
   solucion=asigsol(n);

   printf("solucion innicial");
   printf("\n");
impsol(solucion,n);
printf("\n------------------------");



   crearVecinos(*(solucion+0),*(solucion+1),*(solucion+2),*(solucion+3),*(solucion+4),solucion,n,i);




   /*
   vecinos[0].vecino=malloc(3*sizeof(int));
   vecinos[0].vecino[0]=1;
   vecinos[0].vecino[1]=2;
   vecinos[0].vecino[2]=3;

   for(i=0;i<3;i++){
      printf("%d",vecinos[0].vecino);
   }
   */
   free(solucion);

   return 0;
}

int* asigsol(int n){
   int x;
   int * vecino=malloc(n*sizeof(int));

   srand(time(0));
   for(x=0;x<n;x++){
      *(vecino+x)=(rand()%9)+10;//se genera el número aleatorio  entre 0 y 29
    }//for
   return vecino;
   free(vecino);
}

void impsol(int* solucion,int n){
   int i;
   for(i=0;i<n;i++){
      printf("VECINOS[%d]=%d",i,solucion);
      printf("\n");
   }
}

Vecinos* asigvecinos(void){

   Vecinos* vecinos=malloc(5*sizeof(Vecinos));

   return vecinos;

}

int fitness(int * arreglo,int n){

   int i,r=0,R=0;
   for(i=0;i<n;i++){
      r=*(arreglo+i) * *(arreglo+i);
      R+=r;
   }

return R;
}

int fitnessVecinos(int * arreglo,int n ){
      int i,r=0,R=0;
   for(i=0;i<n;i++){
      r=*(arreglo+i) * *(arreglo+i);
      R+=r;
   }

return R;
}

void crearVecinos(int a,int b,int c,int d,int e,int Fit[],int n,int i){

   int x,j,l;
   int Fits=0;
   int A=0,B=0,C=0,D=0,E=0;
   Vecinos vecinos[5];

   for(x=0;x<5;x++){
      vecinos
  • .vecino=malloc(6*sizeof(int));

    }

       srand(time(0));
   for(x=0;x<5;x++){
      for(j=0;j<5;j++){
         vecinos
  • .vecino[j]=(rand()%9)+10;

           }
    }

    vecinos[0].vecino[5]=a;
   vecinos[1].vecino[5]=b;
   vecinos[2].vecino[5]=c;
    vecinos[3].vecino[5]=d;
   vecinos[4].vecino[5]=e;

   for(l=0;l<5;l++){

impsol(vecinos[l].vecino,6);
printf("\n");
}

   Fits=fitness(Fit,n);
   A=fitnessVecinos(vecinos[0].vecino,6);
   B=fitnessVecinos(vecinos[1].vecino,6);
   C=fitnessVecinos(vecinos[2].vecino,6);
   D=fitnessVecinos(vecinos[3].vecino,6);
   E=fitnessVecinos(vecinos[4].vecino,6);

   printf("%d",A);
   printf("\n");
   printf("%d",B);printf("\n");
   printf("%d",C);printf("\n");
   printf("%d",D);printf("\n");
   printf("%d",E);printf("\n");
   printf("%d",Fits);printf("\n");

   int arreglo[6]={A,B,C,D,E,Fits};
   burbuja(arreglo,6);
   printf("ORdebado-----------------\n");
   impsol(arreglo,6);
   printf("-----------------\n");

   while(i<6){

   if(Fits==arreglo[0]){
      printf("fits\n");
      i++;
      crearVecinos(Fit[0],Fit[1],Fit[2],Fit[3],Fit[4],Fit,n,i);

   }else{

      if(arreglo[0]==A){
         printf("A");
         i++;
      crearVecinos(vecinos[0].vecino[0],vecinos[0].vecino[1],vecinos[0].vecino[2],vecinos[0].vecino[3],vecinos[0].vecino[4],vecinos[0].vecino,6,i);
      }

      if(arreglo[0]==B){
         printf("B");
         i++;
      crearVecinos(vecinos[1].vecino[0],vecinos[1].vecino[1],vecinos[1].vecino[2],vecinos[1].vecino[3],vecinos[1].vecino[4],vecinos[1].vecino,6,i);
      }
      if(arreglo[0]==C){
         printf("C");
         i++;
      crearVecinos(vecinos[2].vecino[0],vecinos[2].vecino[1],vecinos[2].vecino[2],vecinos[2].vecino[3],vecinos[2].vecino[4],vecinos[2].vecino,6,i);
      }
      if(arreglo[0]==D){
         printf("D");
         i++;
      crearVecinos(vecinos[3].vecino[0],vecinos[3].vecino[1],vecinos[3].vecino[2],vecinos[3].vecino[3],vecinos[3].vecino[4],vecinos[3].vecino,6,i);
      }
      if(arreglo[0]==E){
         printf("E");
         i++;
      crearVecinos(vecinos[4].vecino[0],vecinos[4].vecino[1],vecinos[4].vecino[2],vecinos[4].vecino[3],vecinos[4].vecino[4],vecinos[4].vecino,6,i);
      }



   }

}


}

void burbuja(int lista[],int TAM){

   int i,j,temp;
   for (i=1;i<TAM;i++)
{
   for (j=0;j<TAM-1;j++)
   {
      if (lista[j] > lista[j+1])    //condicion
      {
         temp = lista[j];    //temp guarda momentaneamente el valor de lista[j]
         lista[j]=lista[j+1];  //Asigno al la posicion lista[j], lo que hay en lista[j+1]
         lista[j+1]=temp;   //obtendra un nuevo valor por parte de temp.
      }
   }

}
}

Alguien puede ayudarme en mi funcion crearvecinos, por que cuando entra en el ciclo while me arroja valores raros ,o tengo que liberar memoria,por que me sale otra cosa.