/** Executa a simulação, em Loop. */ public void run() { while (!confidenceNotAcceptable()) { setFirstEvents(); // Os dados desta fase são subtraídos das estatísticas finais. TransientPhaseData transientPhaseData = transientPhase(); for (int i = 0; i < SimulationProperties.getEventsInARow(); i++) { // Usado no cenário 1. mapCurrentTimePerCwndMSS.put( currentTime, getSystem().getTxs().get(0).getCongestionWindow() / SimulationProperties.getMSS().doubleValue()); // Armazena dados de vazão ao longo do tempo, para cada Tx. populateFlowPerTx(); handleEvents(); } for (int i = 0; i < getSystem().getRxs().size(); i++) { double a = getSystem().getRxs().get(i).getNextExpectedByte() - transientPhaseData.getExpectedBytes().get(i); double b = currentTime - transientPhaseData.getTransientPhaseEndingTime(); statisticsPerTx.get(i).addSample((a * 8) / (b * 1E-3)); } } }
/** * Executa a fase transiente. * * @return Tempo de término da fase e a sequência de bytes esperados nos receptores. */ public TransientPhaseData transientPhase() { for (int i = 0; i < SimulationProperties.getTransientPhaseEvents(); i++) handleEvents(); double transientPhaseEndingTime = currentTime; ArrayList<Long> expectedBytes = new ArrayList<Long>(); for (Rx rx : getSystem().getRxs()) expectedBytes.add(rx.getNextExpectedByte()); return new TransientPhaseData(transientPhaseEndingTime, expectedBytes); }