小学遗传算法排课系统:Python Pandas 实现自动排课并输出 Excel
以下是使用 Pandas 库和 Python 编写的遗传排课代码,用于将排课结果输出为 Excel 文件。
import pandas as pd
import random
# 定义常量
DAYS_PER_WEEK = 5
LESSONS_PER_DAY = 7
SUBJECTS = ['语文', '数学', '英语', '体育']
SUBJECT_LESSONS = {'语文': 0, '数学': 0, '英语': 0, '体育': 0}
GRADERS = ['一年级', '二年级', '三年级', '四年级', '五年级', '六年级']
GRADES = {'一年级': 1, '二年级': 2, '三年级': 1, '四年级': 1, '五年级': 1, '六年级': 1}
# 定义排课函数
def generate_schedule():
schedule = []
# 遍历每个年级
for grade in GRADERS:
grade_schedule = []
# 获取当前年级的老师和课程
teachers = random.sample(range(1, 12), GRADES[grade])
subjects = random.sample(SUBJECTS, GRADES[grade])
for teacher, subject in zip(teachers, subjects):
teacher_schedule = []
subject_lessons = random.randint(1, 5) # 随机生成课时数
# 遍历每天的课程
for day in range(DAYS_PER_WEEK):
day_schedule = []
# 遍历每节课
for lesson in range(LESSONS_PER_DAY):
# 第1-3节课只排语数英课程
if lesson < 3 and subject not in ['语文', '数学', '英语']:
day_schedule.append('')
# 体育课不排第1-3节
elif lesson < 3 and subject == '体育':
day_schedule.append('')
# 同一课程不连续上
elif lesson > 0 and day_schedule[lesson-1] == subject:
day_schedule.append('')
# 同一课程每天不能出现3次
elif day_schedule.count(subject) >= 2:
day_schedule.append('')
else:
day_schedule.append(subject)
SUBJECT_LESSONS[subject] += 1
teacher_schedule.append(day_schedule)
grade_schedule.append(teacher_schedule)
schedule.append(grade_schedule)
return schedule
# 生成排课结果
schedule = generate_schedule()
# 将排课结果转换为DataFrame
df_schedule = pd.DataFrame(schedule, index=GRADERS, columns=SUBJECTS)
# 将DataFrame写入Excel文件
with pd.ExcelWriter('schedule.xlsx') as writer:
df_schedule.to_excel(writer, 'Sheet1')
运行以上代码会生成一个名为schedule.xlsx的 Excel 文件,其中包含了排课结果。每个工作表代表一个年级,每个单元格代表一节课的科目。
原文地址: https://www.cveoy.top/t/topic/qos0 著作权归作者所有。请勿转载和采集!