145 lines
5.2 KiB
Python
145 lines
5.2 KiB
Python
|
|
# 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()
|
|
|
|
|
|
|
|
"""
|
|
|
|
|