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));
	}
}
示例#2
0
文件: main.c 项目: fetux/simuladorSCP
/**
 * 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;
}
示例#3
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;
}