void obtencionDatos( int vectorIterationTries[], int vectorIterationTriesLength, float timeDesc[], float timeRandom []){ int i = 0; int size = 0; int *vector; float timeCounter; for( i=0 ; i< vectorIterationTriesLength; i++){ //printf("Itaration number: %d\n", i ); size = vectorIterationTries[i]; vector = (int *)malloc(sizeof(int)*size); inicializaVector( vector, vectorIterationTries[i], 1); metodo( vector, vectorIterationTries[i], &timeCounter ); compruebaVector( vector, vectorIterationTries[i]); timeDesc[i]= timeCounter; timeCounter = 0; inicializaVector( vector, vectorIterationTries[i], 2); metodo( vector, vectorIterationTries[i], &timeCounter ); compruebaVector( vector, vectorIterationTries[i]); timeRandom[i]= timeCounter; } }
float evalua(int* pedidos, int horizonte, int retraso, int* stock, MEDICINE *med){ //Inicializacion de variables int k; float J = 0; int *orders; int noStock; //Inicializacion de tablas inicializaVector(horizonte, &orders); /*Vemos cuando se realizan o no pedidos*/ for(k=0; k<horizonte; k++){ if(pedidos[k]==0){ orders[k] = 0; }else{ orders[k] = 1; } } //Calculo de J y stock for(k=0;k<horizonte;k++){ if(k==0){ stock[k]=med->stock+pedidos[k]; // printf("%d\n",*stock[k] ); }else{ stock[k]=stock[k-1]+pedidos[k-retraso]-med->repartidos[k]; } /* Tenemos en cuenta la restricción de que el stock no puede ser menor a una cantidad dada. */ if((stock[k])<med->minStock){ noStock = 1; stock[k]=stock[k]+med->vTamPedidos[0]; pedidos[k]=med->vTamPedidos[0]; }else{ noStock = 0; } J = J+med->precio_med*pedidos[k]+(med->precio_alm+med->coste_oportunidad)*stock[k]+(med->coste_pedido+med->coste_recogida)*orders[k]+noStock*(med->coste_sin_stock); } liberaVector(orders); return J; }
void fechaPedido(int dia, int* fecha){ int diasMes; int *fechaActual; inicializaVector(3, &fechaActual); int i; //Obtenemos hoy fechaHoy(fechaActual); //Al día de hoy le añadimos los días en los que se pide for(i=0; i<3; i++){ if(i==0){ fecha[i]=fechaActual[i]+dia; }else{ fecha[i]=fechaActual[i]; } } liberaVector(fechaActual); //Procedemos a comprobar que la fecha obtenida es correcta en funcion del número //de días que tiene cada mes para ver las correcciones a realizar. switch (fecha[1]){ case 1: diasMes = 31; if(fecha[0]>diasMes){ fecha[0]=fecha[0]-diasMes; fecha[1]++; } break; case 2: if(bisiesto(fecha[2])==1){ diasMes=29; if(fecha[0]>diasMes){ fecha[0]=fecha[0]-diasMes; fecha[1]++; } } else{ diasMes=28; if(fecha[0]>diasMes){ fecha[0]=fecha[0]-diasMes; fecha[1]++; } } break; case 3: diasMes=31; if(fecha[0]>diasMes){ fecha[0]=fecha[0]-diasMes; fecha[1]++; } break; case 4: diasMes=30; if(fecha[0]>diasMes){ fecha[0]=fecha[0]-diasMes; fecha[1]++; } break; case 5: diasMes=31; if(fecha[0]>diasMes){ fecha[0]=fecha[0]-diasMes; fecha[1]++; } break; case 6: diasMes=30; if(fecha[0]>diasMes){ fecha[0]=fecha[0]-diasMes; fecha[1]++; } break; case 7: diasMes=31; if(fecha[0]>diasMes){ fecha[0]=fecha[0]-diasMes; fecha[1]++; } break; case 8: diasMes=31; if(fecha[0]>diasMes){ fecha[0]=fecha[0]-diasMes; fecha[1]++; } break; case 9: diasMes=30; if(fecha[0]>diasMes){ fecha[0]=fecha[0]-diasMes; fecha[1]++; } break; case 10: diasMes=31; if(fecha[0]>diasMes){ fecha[0]=fecha[0]-diasMes; fecha[1]++; } break; case 11: diasMes=30; if(fecha[0]>diasMes){ fecha[0]=fecha[0]-diasMes; fecha[1]++; } break; case 12: diasMes=31; if(fecha[0]>diasMes){ fecha[0]=fecha[0]-diasMes; fecha[1]=1; fecha[2]++; } break; default: fecha[0]=fecha[0]-diasMes; fecha[1]++; } }