multiple subplots
This commit is contained in:
@@ -149,11 +149,9 @@ def run_single_simulation(args):
|
|||||||
except ValueError: # Loss rate too high
|
except ValueError: # Loss rate too high
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def simulation_wrapper1(simulation_time, num_runs, min_runs, confidence_level, lambda_vals):
|
def simulation_wrapper1(simulation_time, num_runs, min_runs, confidence_level, lambda_vals, ax_rt):
|
||||||
C_values = [1, 2, 3, 6]
|
C_values = [1, 2, 3, 6]
|
||||||
|
|
||||||
plt.figure(figsize=(12, 8))
|
|
||||||
|
|
||||||
mean_at_lambda1 = {}
|
mean_at_lambda1 = {}
|
||||||
loss_data = {}
|
loss_data = {}
|
||||||
|
|
||||||
@@ -205,8 +203,8 @@ def simulation_wrapper1(simulation_time, num_runs, min_runs, confidence_level, l
|
|||||||
print(f"Stopped at λ={lambda_val:.2f} - no successful run")
|
print(f"Stopped at λ={lambda_val:.2f} - no successful run")
|
||||||
break
|
break
|
||||||
|
|
||||||
plt.plot(lambda_points, means, label=f'C={c}')
|
ax_rt.plot(lambda_points, means, label=f'C={c}')
|
||||||
plt.fill_between(lambda_points, ci_lower, ci_upper, alpha=0.2)
|
ax_rt.fill_between(lambda_points, ci_lower, ci_upper, alpha=0.2)
|
||||||
|
|
||||||
# store response time for lamba = 1
|
# store response time for lamba = 1
|
||||||
if 1 in lambda_points:
|
if 1 in lambda_points:
|
||||||
@@ -229,17 +227,18 @@ def simulation_wrapper1(simulation_time, num_runs, min_runs, confidence_level, l
|
|||||||
|
|
||||||
# plot curves
|
# plot curves
|
||||||
if len(lambda_vals)>1:
|
if len(lambda_vals)>1:
|
||||||
plt.xlabel('Arrival Rate (λ)')
|
ax_rt.set_xlim(left=0)
|
||||||
plt.ylabel('Mean Response Time')
|
ax_rt.set_xlabel('Arrival Rate (λ)')
|
||||||
plt.title(f'Mean Response Time vs Arrival Rate ({num_runs} runs, 95% CI)')
|
ax_rt.set_ylabel('Mean Response Time')
|
||||||
plt.legend()
|
ax_rt.set_title(f'Mean Response Time vs Arrival Rate ({num_runs} runs, {int(confidence_level*100)}% CI)')
|
||||||
plt.grid(True)
|
ax_rt.legend()
|
||||||
|
ax_rt.grid(True)
|
||||||
|
|
||||||
return loss_data
|
return loss_data
|
||||||
|
|
||||||
def simulation_wrapper2(simulation_time, num_runs, min_runs, confidence_level, lambda_vals, max_loss_value=0.1):
|
def simulation_wrapper2(simulation_time, num_runs, min_runs, confidence_level, lambda_vals, max_loss_value=0.1):
|
||||||
loss_data = simulation_wrapper1(simulation_time, num_runs, min_runs, confidence_level, lambda_vals)
|
fig, (ax_rt, ax_loss) = plt.subplots(2,1, figsize=(12,10), gridspec_kw={'height_ratios': [4, 3], 'hspace': 0.4}, sharex=False)
|
||||||
plt.show()
|
loss_data = simulation_wrapper1(simulation_time, num_runs, min_runs, confidence_level, lambda_vals, ax_rt)
|
||||||
|
|
||||||
for c, (lams, losses) in loss_data.items():
|
for c, (lams, losses) in loss_data.items():
|
||||||
lambda_vals2 = []
|
lambda_vals2 = []
|
||||||
@@ -300,14 +299,16 @@ def simulation_wrapper2(simulation_time, num_runs, min_runs, confidence_level, l
|
|||||||
print(f"Stopped at λ={lambda_val:.4f} - no successful run")
|
print(f"Stopped at λ={lambda_val:.4f} - no successful run")
|
||||||
break
|
break
|
||||||
|
|
||||||
plt.plot(lambda_points, losses, label=f'C={c}')
|
ax_loss.plot(lambda_points, losses, label=f'C={c}')
|
||||||
plt.fill_between(lambda_points, ci_lower, ci_upper, alpha=0.2)
|
ax_loss.fill_between(lambda_points, ci_lower, ci_upper, alpha=0.2)
|
||||||
|
|
||||||
|
ax_loss.set_xlim(left=2)
|
||||||
|
ax_loss.set_xlabel('Arrival 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.legend()
|
||||||
|
ax_loss.grid(True)
|
||||||
|
|
||||||
plt.xlabel('Arrival Rate (λ)')
|
|
||||||
plt.ylabel('Mean Loss Rate')
|
|
||||||
plt.title(f'Mean Loss Rate vs Arrival Rate ({num_runs} runs, 95% CI)')
|
|
||||||
plt.legend()
|
|
||||||
plt.grid(True)
|
|
||||||
plt.show()
|
plt.show()
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user