Exemplo n.º 1
0
double runSimulation(double arrivalRate, double serviceTime, double simTime)
{
	struct Simulation sim;
	struct Data temp;
	int e;

	sim = initSimulation(arrivalRate, serviceTime, simTime);

	while (sim.timeForNextDeparture < simTime) {
			if (sim.timeForNextArrival > sim.timeForNextDeparture && sim.buffer.currSize != 0) {
			sim.e = 1;
		}
		else {
			sim.e = 0;
		}
		e = sim.e;
		switch (e) {
/*Packet arriving*/
			case ARRIVAL:
				temp.arrivalTime = sim.timeForNextArrival;
				enqueue(&(sim.buffer), temp);
				sim.currTime = sim.timeForNextArrival;
				sim.timeForNextArrival += getRandTime(arrivalRate);
				break;
/*Packet departing*/						
			case DEPARTURE:
				temp = dequeue(&(sim.buffer));
				temp.departureTime = sim.timeForNextDeparture;
				sim.currTime = sim.timeForNextDeparture;
				if (sim.buffer.currSize != 0) {
					sim.timeForNextDeparture += serviceTime;
				}
				else {
					sim.timeForNextDeparture = sim.timeForNextArrival + serviceTime;
				}
				enqueue(&(sim.eventQueue), temp);
				break;
			}
		}
		
/*Freeing what was not departed from the queue*/
		while(sim.buffer.currSize > 0) {
			temp = dequeue(&(sim.buffer));
		}
/*Return average wait time*/
		return calcAverageWaitingTime(&sim);
		
}
Exemplo n.º 2
0
double runSimulation(double arrivalRate, double serviceTime, double simTime)
{
    struct Simulation sim = initSimulation(arrivalRate, serviceTime, simTime);
    //int i = 0;
    while(sim.currTime < sim.totalSimTime)
    {
        if(sim.timeForNextArrival < sim.timeForNextDeparture)
        {
            sim.currTime = sim.timeForNextArrival;
            struct Data pktdata;
            pktdata.arrivalTime = sim.currTime;
            /* pktdata.departureTime = -1; */
            enqueue(&sim.buffer, pktdata);
            //printf("%d, arrival: %f \n", ++i, sim.currTime);
            sim.timeForNextArrival = sim.currTime + getRandTime(sim.arrivalRate);
        }
        else if(sim.buffer.currSize == 0)
        {
            sim.currTime = sim.timeForNextArrival;
            //printf("%d, skip: %f \n", i, sim.currTime);
            sim.timeForNextDeparture = sim.currTime + sim.serviceTime;
        }
        else if(sim.timeForNextArrival >= sim.timeForNextDeparture)
        {
            sim.currTime = sim.timeForNextDeparture;
            struct Data tempdata = dequeue(&sim.buffer);
            tempdata.departureTime = sim.currTime;
            enqueue(&sim.eventQueue, tempdata);
            //printf("%d, departure: %f \n", i, sim.currTime);
            if(sim.buffer.currSize == 0) sim.timeForNextDeparture = sim.timeForNextArrival + sim.serviceTime;
            else if(sim.buffer.currSize != 0) sim.timeForNextDeparture = sim.currTime + sim.serviceTime;
        }
    }
    double res = calcAverageWaitingTime(&sim);
    freeQueue(&sim.buffer);
    return res;
}
Exemplo n.º 3
0
double runSimulation(double arrivalRate, double serviceTime, double simTime)
{


	struct Simulation sim = initSimulation(arrivalRate, serviceTime, simTime);


	while(sim.currTime < sim.totalSimTime){

	if((sim.timeForNextArrival < sim.timeForNextDeparture) || (sim.buffer.currSize == 0)){
	sim.e = ARRIVAL;
	}
	else{
	sim.e = DEPARTURE;
	}

	//printf("Curr: %lf\n",sim.currTime);
	
	if(sim.e == ARRIVAL){


		sim.currTime = sim.timeForNextArrival;
		
		struct Data d;
		d.arrivalTime = sim.currTime;

		enqueue(&(sim.buffer), d); 

		sim.timeForNextArrival = sim.currTime + getRandTime(sim.arrivalRate);

		if(sim.buffer.currSize == 1){

		sim.timeForNextDeparture = sim.currTime + serviceTime;
		//printf("ok");
		}

	}

	else if(sim.e == DEPARTURE){

		sim.currTime = sim.timeForNextDeparture;
		
		struct Data packet = dequeue(&(sim.buffer));

		//printf("Depart: %lf\n", packet.arrivalTime);
		
		packet.departureTime = sim.currTime;
		//printf("Arrival: %lf\n", packet.arrivalTime);
		//printf("Depart: %lf\n", packet.departureTime);

		sim.timeForNextDeparture = sim.currTime + serviceTime;

		enqueue(&(sim.eventQueue), packet);
	}


	}
	
	return calcAverageWaitingTime(&sim);


}