range loss simulation + auto select normal distribution or student
This commit is contained in:
@@ -3,7 +3,7 @@ import os
|
|||||||
import time
|
import time
|
||||||
from heapq import heappush, heappop
|
from heapq import heappush, heappop
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
from scipy.stats import t
|
from scipy.stats import t, norm
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from multiprocessing import Pool
|
from multiprocessing import Pool
|
||||||
|
|
||||||
@@ -182,8 +182,13 @@ def simulation_wrapper1(simulation_time, num_runs, min_runs, confidence_level, l
|
|||||||
std_dev = np.std(run_results, ddof=1)
|
std_dev = np.std(run_results, ddof=1)
|
||||||
|
|
||||||
# confidence interval
|
# confidence interval
|
||||||
t_value = t.ppf((1 + confidence_level)/2, n-1)
|
if n>= 30:
|
||||||
ci = t_value * std_dev / np.sqrt(n)
|
z_value = norm.ppf((1 + confidence_level)/2)
|
||||||
|
ci = z_value * std_dev / np.sqrt(n)
|
||||||
|
else:
|
||||||
|
t_value = t.ppf((1 + confidence_level)/2, n-1)
|
||||||
|
ci = t_value * std_dev / np.sqrt(n)
|
||||||
|
|
||||||
|
|
||||||
# loss rate
|
# loss rate
|
||||||
mean_loss = np.mean(loss_rates)
|
mean_loss = np.mean(loss_rates)
|
||||||
@@ -245,7 +250,11 @@ def simulation_wrapper2(simulation_time, num_runs, min_runs, confidence_level, l
|
|||||||
f"{first_lambda if first_lambda is not None else 'never'}; "
|
f"{first_lambda if first_lambda is not None else 'never'}; "
|
||||||
f" last λ with data: {last_lambda}")
|
f" last λ with data: {last_lambda}")
|
||||||
|
|
||||||
lambda_vals2.extend([last_lambda + i/1000 for i in range(-100,51)])
|
if first_lambda is not None:
|
||||||
|
range_vals = int((last_lambda - first_lambda + 0.5)*1000)
|
||||||
|
lambda_vals2.extend(first_lambda + i/1000 for i in range(0, range_vals) )
|
||||||
|
else:
|
||||||
|
lambda_vals2.extend([last_lambda + i/1000 for i in range(-100,51)])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -271,8 +280,12 @@ def simulation_wrapper2(simulation_time, num_runs, min_runs, confidence_level, l
|
|||||||
std_dev = np.std(loss_rates, ddof=1)
|
std_dev = np.std(loss_rates, ddof=1)
|
||||||
|
|
||||||
# confidence interval
|
# confidence interval
|
||||||
t_value = t.ppf((1 + confidence_level)/2, n-1)
|
if n>= 30:
|
||||||
ci = t_value * std_dev / np.sqrt(n)
|
z_value = norm.ppf((1 + confidence_level)/2)
|
||||||
|
ci = z_value * std_dev / np.sqrt(n)
|
||||||
|
else:
|
||||||
|
t_value = t.ppf((1 + confidence_level)/2, n-1)
|
||||||
|
ci = t_value * std_dev / np.sqrt(n)
|
||||||
|
|
||||||
# store results
|
# store results
|
||||||
lambda_points.append(lambda_val)
|
lambda_points.append(lambda_val)
|
||||||
@@ -297,7 +310,7 @@ def simulation_wrapper2(simulation_time, num_runs, min_runs, confidence_level, l
|
|||||||
sorted_C = sorted(mean_at_lambda1.items(), key=lambda item: item[1][0])
|
sorted_C = sorted(mean_at_lambda1.items(), key=lambda item: item[1][0])
|
||||||
(best_C, (mean1, lower1, upper1)), (_, (_, lower2, _)) = sorted_C[:2]
|
(best_C, (mean1, lower1, upper1)), (_, (_, lower2, _)) = sorted_C[:2]
|
||||||
if upper1 < lower2:
|
if upper1 < lower2:
|
||||||
print(f"Optimal C at λ=1 is {best_C} with Mean RT = {mean1:.2f} (non-overlapping CIs)")
|
print(f"\nOptimal C at λ=1 is {best_C} with Mean RT = {mean1:.2f} (non-overlapping CIs)")
|
||||||
else:
|
else:
|
||||||
print("Confidence intervals overlap between the two best C.")
|
print("Confidence intervals overlap between the two best C.")
|
||||||
else:
|
else:
|
||||||
@@ -305,10 +318,11 @@ def simulation_wrapper2(simulation_time, num_runs, min_runs, confidence_level, l
|
|||||||
|
|
||||||
#plot curves
|
#plot curves
|
||||||
if len(lambda_vals) > 1:
|
if len(lambda_vals) > 1:
|
||||||
ax_loss.set_xlim(left=2)
|
ax_loss.set_xlim(left=1)
|
||||||
ax_loss.set_xlabel('Arrival Rate (λ)')
|
ax_loss.set_xlabel('Arrival Rate (λ)')
|
||||||
ax_loss.set_ylabel('Mean Loss Rate')
|
ax_loss.set_ylabel('Mean Loss Rate')
|
||||||
ax_loss.set_title(f'Mean Loss Rate vs Arrival Rate ({num_runs} runs, {int(confidence_level*100)}% CI)')
|
ax_loss.set_title(f'Mean Loss Rate vs Arrival Rate ({num_runs} runs, {int(confidence_level*100)}% CI)')
|
||||||
|
ax_loss.axhline(y=0.05, color='red', linestyle='--', linewidth=1, label='5% Loss Threshold')
|
||||||
ax_loss.legend()
|
ax_loss.legend()
|
||||||
ax_loss.grid(True)
|
ax_loss.grid(True)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user