add simulation
This commit is contained in:
parent
3f9fa2a8b5
commit
431518e88c
|
|
@ -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()
|
||||
|
||||
|
||||
|
||||
"""
|
||||
|
||||
|
||||
Loading…
Reference in New Issue