def run_FCFS(rho, k, seed=None): """Runs the simulation for FCFS discipline with given parameters, returning its statistics""" results_w = [] results_nq = [] stat_w = Statistics() stat_nq = Statistics() simulator = SimulatorFCFS(rho, seed) simulator.transient_phase() for i in range(0, 3200): res = simulator.simulate_FCFS(k) mean_w = stat_w.calculate_incremental_mean(res[0]) var_w = stat_w.calculate_incremental_variance(res[0]) mean_nq = stat_nq.calculate_incremental_time_mean(res[1], res[2]) var_nq = stat_nq.calculate_incremental_variance(res[1]) center_ew, lower_ew, upper_ew, precision_ew = stat_w.confidence_interval_for_mean( mean_w, var_w, len(res[0]), 0.95) center_vw, lower_vw, upper_vw, precision_vw = stat_w.confidence_interval_for_variance( var_w, len(res[0]), 0.95) center_enq, lower_enq, upper_enq, precision_enq = stat_nq.confidence_interval_for_mean( mean_nq, var_nq, res[2], 0.95) center_vnq, lower_vnq, upper_vnq, precision_vnq = stat_nq.confidence_interval_for_variance( var_nq, res[2], 0.95) results_w.append( ((mean_w, center_ew, lower_ew, upper_ew, precision_ew), (var_w, center_vw, lower_vw, upper_vw, precision_vw))) results_nq.append( ((mean_nq, center_enq, lower_enq, upper_enq, precision_enq), (var_nq, center_vnq, lower_vnq, upper_vnq, precision_vnq))) return results_w, results_nq
class TestStatistics(TestCase): def setUp(self): self.stat = Statistics() def test_calculate_mean(self): sample = [] for i in range(0, 100): sample.append(random()) mean = self.stat.calculate_mean(sample) control = tmean(sample) self.assertAlmostEqual(mean, control) def test_calculate_incremental_mean(self): control_sample = [] sample = [] mean = 0 for i in range(0, 20): for _ in range(0, 100): elem = random() sample.append(elem) control_sample.append(elem) mean = self.stat.calculate_incremental_mean(sample) sample.clear() control = tmean(control_sample) self.assertAlmostEqual(mean, control) def test_calculate_incremental_time_mean(self): control_sample = [] sample = [] mean = 0 for i in range(0, 20): for _ in range(0, 100): elem = random() sample.append(elem) control_sample.append(elem) mean = self.stat.calculate_incremental_time_mean( sample, len(sample)) sample.clear() control = tmean(control_sample) self.assertAlmostEqual(mean, control) def test_calculate_variance(self): sample = [] for i in range(0, 100): sample.append(random()) var = self.stat.calculate_variance(sample, self.stat.calculate_mean(sample)) control = tvar(sample) self.assertAlmostEqual(var, control) def test_calculate_incremental_variance(self): control_sample = [] sample = [] var = 0 for i in range(0, 20): for _ in range(0, 100): elem = random() sample.append(elem) control_sample.append(elem) var = self.stat.calculate_incremental_variance(sample) sample.clear() control = tvar(control_sample) self.assertAlmostEqual(var, control) def test_confidence_interval_for_mean(self): n = 100 sample = [] for i in range(0, n): sample.append(random()) mean = self.stat.calculate_mean(sample) var = self.stat.calculate_variance(sample, mean) center, lower, upper, precision = self.stat.confidence_interval_for_mean( mean, var, n, 0.95) res = bayes_mvs(sample, 0.95) self.assertAlmostEqual(center, res[0][0]) self.assertAlmostEqual(lower, res[0][1][0]) self.assertAlmostEqual(upper, res[0][1][1]) def test_confidence_interval_for_variance(self): n = 100 sample = [] for i in range(0, n): sample.append(random()) mean = self.stat.calculate_mean(sample) var = self.stat.calculate_variance(sample, mean) center, lower, upper, precision = self.stat.confidence_interval_for_variance( var, n, 0.95) res = bayes_mvs(sample, 0.95) self.assertAlmostEqual(lower, res[1][1][0]) self.assertAlmostEqual(upper, res[1][1][1])