示例#1
0
 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
 def test_FCFS(self):
     """Prototype for Master.py"""
     stat = Statistics()
     simulator = SimulatorLCFS(0.4)
     simulator.transient_phase()
     res = simulator.simulate_LCFS(1_000_000)
     mean_w = stat.calculate_mean(res[0])
     var_w = stat.calculate_variance(res[0], mean_w)
     mean_nq = stat.calculate_mean(res[1])
     mean_nq2 = sum(res[1]) / res[2]
     var_nq = stat.calculate_variance(res[1], mean_nq)
     var_nq2 = stat.calculate_variance(res[1], mean_nq2)
     center_ew, lower_ew, upper_ew, precision_ew = stat.confidence_interval_for_mean(
         mean_w, var_w, len(res[0]), 0.95)
     center_vw, lower_vw, upper_vw, precision_vw = stat.confidence_interval_for_variance(
         var_w, len(res[0]), 0.95)
     center_enq, lower_enq, upper_enq, precision_enq = stat.confidence_interval_for_mean(
         mean_nq, var_nq, len(res[1]), 0.95)
     center_enq2, lower_enq2, upper_enq2, precision_enq2 = stat.confidence_interval_for_mean(
         mean_nq2, var_nq2, res[2], 0.95)
     center_vnq, lower_vnq, upper_vnq, precision_vnq = stat.confidence_interval_for_variance(
         var_nq, len(res[1]), 0.95)
     center_vnq2, lower_vnq2, upper_vnq2, precision_vnq2 = stat.confidence_interval_for_variance(
         var_nq2, res[2], 0.95)
     print(f"E[W] = {mean_w}")
     print(f"V(W) = {var_w}")
     print(f"E[Nq] = {mean_nq}")
     print(f"E[Nq]2 = {mean_nq2}")
     print(f"V(Nq) = {var_nq}")
     print(f"V(Nq)2 = {var_nq2}")
     print(
         f"E[W] CI: Center = {center_ew} lower = {lower_ew} upper = {upper_ew} precision = {precision_ew}"
     )
     print(
         f"V[W] CI: Center = {center_vw} lower = {lower_vw} upper = {upper_vw} precision = {precision_vw}"
     )
     print(
         f"E[Nq] CI: Center = {center_enq} lower = {lower_enq} upper = {upper_enq} precision = {precision_enq}"
     )
     print(
         f"E[Nq]2 CI: Center = {center_enq2} lower = {lower_enq2} upper = {upper_enq2} precision = {precision_enq2}"
     )
     print(
         f"V[Nq] CI: Center = {center_vnq} lower = {lower_vnq} upper = {upper_vnq} precision = {precision_vnq}"
     )
     print(
         f"V[Nq]2 CI: Center = {center_vnq2} lower = {lower_vnq2} upper = {upper_vnq2} precision = {precision_vnq2}"
     )
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])