2024-05-14 14:36:05 +09:00

33 lines
1.5 KiB
Python

import argparse
import matplotlib.pyplot as plt
import pandas as pd
import seaborn
from node import Node
from simulation import Simulation
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Run simulation', formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("--running-time", type=int, default=30, help="Running time of the simulation")
parser.add_argument("--num-nodes", type=int, default=2, help="Number of nodes in the network")
parser.add_argument("--num-mix-layers", type=int, default=2, help="Number of mix layers in the network")
parser.add_argument("--message-interval", type=int, default=1, help="Message emission interval")
parser.add_argument("--message-prob", type=float, default=0.2, help="Message emission probability per interval")
parser.add_argument("--max-message-prep-time", type=float, default=0.3, help="Max preparation time before sending a message")
args = parser.parse_args()
node_params = Node.Parameters(args.num_mix_layers, args.message_interval, args.message_prob, args.max_message_prep_time)
sim = Simulation(args.num_nodes, node_params)
sim.run(until=args.running_time)
df = pd.DataFrame(sim.p2p.message_sizes, columns=["message_size"])
print(df.describe())
plt.figure(figsize=(10, 6))
seaborn.boxplot(y=df["message_size"])
plt.title("Message size distribution")
plt.ylabel("Message Size (bytes)")
plt.show()
print("Simulation complete!")