void IcarusFitnessCalculator::fitness(std::vector<Cromossomo>& populacao) { #pragma omp parallel for for (unsigned int i = 0; i < populacao.size(); i++) { compilar(populacao[i], i); auto parsed_output = simular(i); populacao[i].set_fitness(fitness_calculator(parsed_output)); } }
/** * Función principal del programa. * @param argc Cantidad de argumentos recibidos en la ejecución * @param argv Arreglo con los argumentos recibidos en la ejecución * @return Devuelve 0 (cero) si el programa finaliza con éxito */ int main(int argc, char *argv[]) { PROCESOS rp=NULL; EVENTOS re=NULL; SYSIND rs; // No lo inicializo porque es solo un struct /* * * Verificación de los parámetros de entrada * */ printf("Verificando parámetros...\n"); if (!comprobarParametros(argc,argv)) return 1; /* * * Carga de los archivos de entrada del programa. * */ // Variables para almacenar las posiciones de los archivos de entrada int ap=0,aio=0,aprec=0; PROCESOSIN procesosIN=NULL; IOSIN iosIN=NULL; PRECSIN precsIN=NULL; printf("Cargando archivos de entrada...\n"); //Busco las posiciones de los parámetros donde estan los archivos de entrada. int i; for (i=1; i<argc; i+=2) { if (!strcmp(argv[i],"-p")) ap=i+1; else if (!strcmp(argv[i],"-io")) aio=i+1; else if (!strcmp(argv[i],"-prec")) aprec=i+1; } //printf("Parámetros de entrada: %d - %d - %d\n",ap,aio,aprec); // Verifico todas las combinaciones de opciones de parámetros de entrada disponibles // en base a si un parámetro de entrada esta o no. if (ap == 0 && aio == 0 && aprec == 0) { if (!cargarArchivos("procesos.txt","io.txt","precedencia.txt",&procesosIN,&iosIN,&precsIN)) return 1; } else { if (ap == 0 && aio == 0 && aprec != 0) { if (!cargarArchivos("procesos.txt","io.txt",argv[aprec],&procesosIN,&iosIN,&precsIN)) return 1; } else { if (ap == 0 && aio !=0 && aprec == 0) { if (!cargarArchivos("procesos.txt",argv[aio],"precedencia.txt",&procesosIN,&iosIN,&precsIN)) return 1; } else { if (ap == 0 && aio != 0 && aprec != 0) { if (!cargarArchivos("procesos.txt",argv[aio],argv[aprec],&procesosIN,&iosIN,&precsIN)) return 1; } else { if (ap != 0 && aio == 0 && aprec == 0) { if (!cargarArchivos(argv[ap],"io.txt","precedencia.txt",&procesosIN,&iosIN,&precsIN)) return 1; } else { if (ap != 0 && aio == 0 && aprec != 0) { if (!cargarArchivos(argv[ap],"io.txt",argv[aprec],&procesosIN,&iosIN,&precsIN)) return 1; } else { if (ap != 0 && aio != 0 && aprec == 0) { if (!cargarArchivos(argv[ap],argv[aio],"precedencia.txt",&procesosIN,&iosIN,&precsIN)) return 1; } else { if (ap != 0 && aio != 0 && aprec != 0) { if (!cargarArchivos(argv[ap],argv[aio],argv[aprec],&procesosIN,&iosIN,&precsIN)) return 1; } } } } } } } } /* * Validación de los datos */ printf("Validando los datos de entrada...\n"); if (!validarDatos(procesosIN,iosIN,precsIN)) { printf("Los datos de entrada son inválidos!\n"); return 1; } else { printf("Los datos fueron validados con éxito!\n"); } /* * Comprobación de las listas de entrada (solo en desarrollo - comentar para publicación) */ PROCESOSIN pin=procesosIN; IOSIN iosin=iosIN; PRECSIN precsin=precsIN; while(pin != NULL) { printf("PROCESO\n"); printf("PID %d\n",pin->pid); printf("ARRIBO %d\n",pin->arribo); printf("T CPU %d\n",pin->Tcpu); printf("\n"); pin = pin->sig; } while(iosin != NULL) { printf("I/O\n"); printf("PID %d\n",iosin->pid); printf("INSTANTE %d\n",iosin->instante); printf("T RES %d\n",iosin->tiempo); printf("\n"); iosin = iosin->sig; } while(precsin != NULL) { printf("PRECEDENCIA\n"); printf("PRECEDENTE %d\n",precsin->precedente); printf("PRECEDIDO %d\n",precsin->precedido); printf("\n"); precsin = precsin->sig; } /* * * Inicializar los procesos que se van a simular * */ pin = procesosIN; PROCESOS procesos=NULL,ultimo; while(pin != NULL) { if (procesos == NULL) { procesos = (PROCESOS)malloc(sizeof(PROCESO)); procesos->pid = pin->pid; procesos->tcpu = pin->Tcpu; procesos->necesidad = pin->Tcpu; procesos->arribo = pin->arribo; procesos->turnAround = 0; procesos->tResp = 0; procesos->tEListos = 0; procesos->tESync = 0; procesos->tETotal = 0; procesos->tEDisp = 0; procesos->semaforos = cargarSemaforos(precsIN,pin->pid); procesos->sig = NULL; ultimo = procesos; } else { ultimo->sig = (PROCESOS)malloc(sizeof(PROCESO)); ultimo = ultimo->sig; ultimo->pid = pin->pid; ultimo->tcpu = pin->Tcpu; ultimo->necesidad = pin->Tcpu; ultimo->arribo = pin->arribo; ultimo->turnAround = 0; ultimo->tResp = 0; ultimo->tEListos = 0; ultimo->tESync = 0; ultimo->tETotal = 0; ultimo->tEDisp = 0; ultimo->semaforos = cargarSemaforos(precsIN,pin->pid); ultimo->sig = NULL; } pin = pin->sig; } SEMAFOROS s; ultimo = procesos; while(ultimo!=NULL) { printf("PROCESO\n"); printf("PID: %d\n",ultimo->pid); printf("NEC: %d\n",ultimo->necesidad); printf("Semaforos\n"); s = ultimo->semaforos; while (s!=NULL) { printf("Tipo: %c\n",s->tipo); printf("Nombre: %c\n",s->nombre); printf("Estado: %d\n\n",s->valor); s = s->sig; } ultimo = ultimo->sig; } /* * * Creación de la lista de System Calls * */ SCALLS systemcalls,actSC; EVENTOS eventos; systemcalls = systemCalls(procesos,iosIN); actSC = systemcalls; /* Comprobación de la lista de system calls * --- SOLO EN DESARROLLO - COMENTAR PARA PUBLICACIÓN */ printf("\nTABLA DE SYSTEM CALLS\n"); printf("----------------------\n"); printf("PID\t\tINSTATNTE\tRESOL\t\tTIPO\t\tSEMAFORO\n"); while (actSC != NULL) { printf("%d\t\t%d\t\t%d\t\t%s\t\t%c\n",actSC->pid,actSC->instante,actSC->resolucion,actSC->tipo,actSC->semaforo); actSC = actSC->sig; } /* * * Inicializar la lista de eventos con los arribos de los procesos * */ EVENTOS ant=NULL,act,nuevo; eventos = NULL; pin=procesosIN; while(pin != NULL) { act = eventos; while(act != NULL && act->instante <= pin->arribo) { ant = act; act = act->sig; } if (eventos == NULL) { eventos = (EVENTOS) malloc(sizeof(EVENTO)); eventos->pid=pin->pid; eventos->instante=pin->arribo; strcpy(eventos->codigo,"ANP"); eventos->semaforo = '-'; eventos->sig=NULL; //ultEvento = eventos; } else { nuevo = (EVENTOS) malloc(sizeof(EVENTO)); //ultEvento = ultEvento->sig; nuevo->pid=pin->pid; nuevo->instante=pin->arribo; strcpy(nuevo->codigo,"ANP"); nuevo->semaforo = '-'; nuevo->sig=act; ant->sig = nuevo; } pin = pin->sig; } //Muestro la tabla inicial de eventos act = eventos; printf("TABLA DE EVENTOS INICIAL\n"); printf("------------------------\n"); while (act!=NULL) { printf("%d\t\t%d\t\t%s\t\t%c\n",act->pid,act->instante,act->codigo,act->semaforo); act = act->sig; } /* * * Menú de opciones del programa. * * */ int opcion; int arp=0,are=0,ars=0; do { printf("Presione una tecla para volver al menú\n"); getchar();getchar(); system("clear"); printf("******************************************************************\n"); printf(" SIMULACIÓN DE PLANEAMIENTO A CORTO PLAZO\n"); printf("******************************************************************\n"); printf("\n"); printf("\n"); printf("Menu\n"); printf("----\n\n\n"); printf("1) Simulación paso a paso.\n"); printf("2) Generar directamente resultados de la simulación\n"); printf("3) Salir inmediatamente!\n"); printf("\n"); printf("\n"); do { printf("Seleccione una opcion: "); scanf("%d",&opcion); } while (opcion != 1 && opcion != 2 && opcion != 3); switch (opcion) { case 1: system("clear"); printf("Iniciando simulación paso a paso...\n"); simular(procesos,systemcalls,eventos,1,&rp,&re,&rs); printf("Simulación paso a paso finalizada.\n"); break; case 2: system("clear"); printf("Iniciando simulación...\n"); simular(procesos,systemcalls,eventos,0,&rp,&re,&rs); printf("Simulación finalizada.\n"); break; } if (opcion != 3) { printf("Generando resultados...\n"); //Busco las posiciones de los parámetros donde estan los archivos de entrada. for (i=1; i<argc; i+=2) { if (!strcmp(argv[i],"-rp")) arp=i+1; else if (!strcmp(argv[i],"-rs")) ars=i+1; else if (!strcmp(argv[i],"-ev")) are=i+1; } // Verifico todas las combinaciones de opciones de parámetros de salida disponibles // en base a si un parámetro de entrada esta o no. if (arp == 0 && ars == 0 && are == 0) { if (!escribirResultados("proc-ind.txt","sys-ind.txt","trace.txt",rp,rs,re)) return 1; } else { if (arp == 0 && ars == 0 && are != 0) { if (!escribirResultados("proc-ind.txt","sys-ind.txt",argv[are],rp,rs,re)) return 1; } else { if (arp == 0 && ars !=0 && are == 0) { if (!escribirResultados("proc-ind.txt",argv[ars],"trace.txt",rp,rs,re)) return 1; } else { if (arp == 0 && ars != 0 && are != 0) { if (!escribirResultados("proc-ind.txt",argv[ars],argv[are],rp,rs,re)) return 1; } else { if (arp != 0 && ars == 0 && are == 0) { if (!escribirResultados(argv[arp],"sys-ind.txt","trace.txt",rp,rs,re)) return 1; } else { if (arp != 0 && ars == 0 && are != 0) { if (!escribirResultados(argv[arp],"sys-ind.txt",argv[are],rp,rs,re)) return 1; } else { if (arp != 0 && ars != 0 && are == 0) { if (!escribirResultados(argv[arp],argv[ars],"trace.txt",rp,rs,re)) return 1; } else { if (arp != 0 && ars != 0 && are != 0) { if (!escribirResultados(argv[arp],argv[ars],argv[are],rp,rs,re)) return 1; } } } } } } } } } } while (opcion != 3); printf("Saliendo del progrma...\n"); return 0; }
FormSimularCuotas::FormSimularCuotas(QWidget *parent) : EVentana(parent), Ui::FormSimularCuotasBase() { setupUi(this); setWindowTitle( "Simulador de cuotas" ); setWindowIcon( QIcon( ":/imagenes/simular_cuota.png" ) ); ActSimular = new QAction( this ); ActSimular->setText( "Simular" ); ActSimular->setStatusTip( "Simula los pagos según los datos ingresados" ); ActSimular->setIcon( QIcon( ":/imagenes/simular_cuota.png" ) ); connect( ActSimular, SIGNAL( triggered() ), this, SLOT( simular() ) ); ActImprimir = new QAction( this ); ActImprimir->setText( "Imprimir" ); ActImprimir->setText( QString::fromUtf8( "Imprimir" ) ); ActImprimir->setIcon( QIcon( ":/imagenes/impresora.png" ) ); connect( ActImprimir, SIGNAL( triggered() ), this, SLOT( imprimir() ) ); ActPdf = new QAction( this ); ActPdf->setText( "PDF" ); ActPdf->setStatusTip( "Convierte a PDF la simulacion actual" ); ActPdf->setIcon( QIcon( ":/imagenes/acroread.png" ) ); connect( ActPdf, SIGNAL( triggered() ), this, SLOT( pdf() ) ); ActConfirmar = new QAction( this ); ActConfirmar->setText( "Confirmar" ); connect( ActConfirmar, SIGNAL( triggered() ), this, SLOT( confirmar() ) ); modelo = new MSimularCuotas( this ); connect( DSBEntrega, SIGNAL( valueChanged( double ) ), this, SLOT( cambioEntrega( double ) ) ); connect( DSBImporte, SIGNAL( valueChanged( double ) ), this, SLOT( cambioImporte( double ) ) ); connect( DSBInteres, SIGNAL( valueChanged( double ) ), this, SLOT( cambioInteres( double ) ) ); connect( SBCantidad, SIGNAL( valueChanged( int ) ), this, SLOT( cambioCantidad( int ) ) ); connect( CBPeriodo , SIGNAL( currentIndexChanged( int ) ), this, SLOT( cambioPeriodo( int ) ) ); connect( DEInicio , SIGNAL( dateChanged( QDate ) ), this, SLOT( cambioFechaInicio( QDate ) ) ); CBPeriodo->insertItem( MPlanCuota::Semanal , "Semanal" , MPlanCuota::Semanal ); CBPeriodo->insertItem( MPlanCuota::Quincenal , "Quincenal" , MPlanCuota::Quincenal ); CBPeriodo->insertItem( MPlanCuota::Mensual , "Mensual" , MPlanCuota::Mensual ); CBPeriodo->insertItem( MPlanCuota::BiMensual , "Bimensual" , MPlanCuota::BiMensual ); CBPeriodo->insertItem( MPlanCuota::Trimestral , "Trimestral" , MPlanCuota::Trimestral ); CBPeriodo->insertItem( MPlanCuota::Cuatrimestral, "Cuatrimestral" , MPlanCuota::Cuatrimestral ); CBPeriodo->insertItem( MPlanCuota::Seximestral , "Semestral" , MPlanCuota::Seximestral ); CBPeriodo->insertItem( MPlanCuota::Anual , "Anual" , MPlanCuota::Anual ); DEInicio->setDate( QDate::currentDate() ); preferencias *p = preferencias::getInstancia(); p->inicio(); p->beginGroup( "Preferencias" ); p->beginGroup( "Cuotas" ); CBPeriodo->setCurrentIndex( p->value( "id-periodo", 2 ).toInt() ); DSBInteres->setValue( p->value( "interes", 10.00 ).toDouble() ); //CkBInicioPeriodo->setChecked( p->value( "inicio-periodo", false ).toBool() ); p->endGroup(); p->endGroup(); p = 0; addAction( ActSimular ); addAction( ActImprimir ); addAction( ActPdf ); addAction( new EActCerrar( this ) ); _id_cliente = -1; _tipo_comprobante = MPlanCuota::Factura; }