From 431518e88c484ba6c6ba40899e2e110eb4b4d9a5 Mon Sep 17 00:00:00 2001 From: phowell Date: Mon, 17 Apr 2023 16:29:33 -0700 Subject: [PATCH] add simulation --- simulate.py | 144 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 simulate.py diff --git a/simulate.py b/simulate.py new file mode 100644 index 0000000..f1a0336 --- /dev/null +++ b/simulate.py @@ -0,0 +1,144 @@ + +# This code defines the simulation environment, the resources (rooms and teachers), the courses and majors, and the student +# process. The choose_courses() method of the Student class is left as a placeholder for you to implement your custom +# function that determines which courses the student chooses each semester. The attend_courses() method of the Student +# class requests a room and a teacher for each chosen course and simulates attending the course. The main simulation +# process run_simulation() creates the students and simulates for 8 semesters, each lasting 16 weeks. + +# We initialize Pygame and create a display window to visualize the simulation. In the Pygame loop, we update +# the display with the simulation elements. You can use Pygame's drawing functions (e.g., pygame.draw.circle(), +# pygame.draw.rect()) to draw the simulation elements on the screen. +# +# To make the visualization more interactive, you could also add user input (e.g., mouse clicks, keyboard input) to +# modify the simulation parameters in real time. For example, you could add a button that toggles the display of +# certain simulation elements or changes the number of students in the simulation. + + + +import simpy +import pygame +import random + +# Define the simulation environment +env = simpy.Environment() + +# Define the resources (rooms and teachers) +rooms = [simpy.Resource(env, capacity=20) for i in range(10)] +teachers = [simpy.Resource(env, capacity=1) for i in range(30)] + +# Define the courses and majors +majors = ['major1', 'major2', 'major3', 'major4', 'major5'] +courses = {'course' + str(i): {'credits': 3} for i in range(50)} + +# Define the student process +class Student: + def __init__(self, env, id, major): + self.env = env + self.id = id + self.major = major + self.completed_courses = [] + + def choose_courses(self): + # Implement a custom function to determine which courses the student chooses each semester + pass + + def attend_courses(self): + # Choose the courses to attend + chosen_courses = self.choose_courses() + # Request a room and teacher for each course + for course in chosen_courses: + with rooms[random.randint(0, 9)].request() as room_request: + with teachers[random.randint(0, 29)].request() as teacher_request: + # Simulate attending the course + yield self.env.timeout(1) + # Update the completed courses list + self.completed_courses.append(course) + +# Define the main simulation process +def run_simulation(env, num_students): + # Create the students + students = [Student(env, i, random.choice(majors)) for i in range(num_students)] + # Simulate for 4 years (8 semesters) + for semester in range(8): + for student in students: + env.process(student.attend_courses()) + yield env.timeout(16) # each semester is 16 weeks long + +# Initialize Pygame +pygame.init() +screen = pygame.display.set_mode((800, 600)) +pygame.display.set_caption("School Simulation") + +# Start the simulation +env.process(run_simulation(env, 1000)) + +# Define a Pygame loop to visualize the simulation +while True: + for event in pygame.event.get(): + if event.type == pygame.QUIT: + pygame.quit() + sys.exit() + screen.fill((255, 255, 255)) + # Draw the simulation elements (e.g., students, rooms, teachers, courses) + # ... + pygame.display.update() + + +""" +import simpy +import random + +# Define the simulation environment +env = simpy.Environment() + +# Define the resources (rooms and teachers) +rooms = [simpy.Resource(env, capacity=20) for i in range(10)] +teachers = [simpy.Resource(env, capacity=1) for i in range(30)] + +# Define the courses and majors +majors = ['major1', 'major2', 'major3', 'major4', 'major5'] +courses = {'course' + str(i): {'credits': 3} for i in range(50)} + +# Define the student process +class Student: + def __init__(self, env, id, major): + self.env = env + self.id = id + self.major = major + self.completed_courses = [] + + def choose_courses(self): + # Implement a custom function to determine which courses the student chooses each semester + pass + + def attend_courses(self): + # Choose the courses to attend + chosen_courses = self.choose_courses() + # Request a room and teacher for each course + for course in chosen_courses: + with rooms[random.randint(0, 9)].request() as room_request: + with teachers[random.randint(0, 29)].request() as teacher_request: + # Simulate attending the course + yield self.env.timeout(1) + # Update the completed courses list + self.completed_courses.append(course) + +# Define the main simulation process +def run_simulation(env, num_students): + # Create the students + students = [Student(env, i, random.choice(majors)) for i in range(num_students)] + # Simulate for 4 years (8 semesters) + for semester in range(8): + for student in students: + env.process(student.attend_courses()) + yield env.timeout(16) # each semester is 16 weeks long + +# Start the simulation +env.process(run_simulation(env, 1000)) +env.run() + + + +""" + +