小学遗传排课算法Python实现:生成Excel排课表
以下是使用Python的pandas库编写的遗传排课代码。代码会将排课结果输出到Excel文件中。
import pandas as pd
import random
# 设置班级、科目和老师
grades = ['一年级', '二年级', '三年级', '四年级', '五年级', '六年级']
subjects = ['语文', '数学', '英语', '体育']
teachers = ['老师1', '老师2', '老师3', '老师4', '老师5', '老师6', '老师7', '老师8', '老师9', '老师10', '老师11']
# 创建排课表格
schedule = pd.DataFrame(columns=['班级', '科目', '老师', '时间'])
# 遗传排课函数
def genetic_scheduling(schedule):
# 按照班级和科目进行排课
for grade in grades:
for subject in subjects:
# 获取该科目的老师列表
available_teachers = [teacher for teacher in teachers if teacher not in schedule[schedule['科目'] == subject]['老师'].tolist()]
# 随机选择一个老师
teacher = random.choice(available_teachers)
# 获取该老师的课时量
teacher_hours = schedule[schedule['老师'] == teacher].shape[0]
# 判断是否超过该老师的课时量
if teacher_hours >= 5:
continue
# 获取该班级的已排课程列表
class_schedule = schedule[schedule['班级'] == grade]
# 判断是否已经排过该科目
if subject in class_schedule['科目'].tolist():
continue
# 判断是否连续上课
if len(class_schedule) > 0 and class_schedule['科目'].values[-1] == subject:
continue
# 判断是否出现3次
if len(class_schedule[class_schedule['科目'] == subject]) >= 2:
continue
# 添加课程到排课表格
schedule = schedule.append({'班级': grade, '科目': subject, '老师': teacher}, ignore_index=True)
return schedule
# 进行10次遗传排课
for i in range(10):
schedule = genetic_scheduling(schedule)
# 输出排课结果到Excel文件
schedule.to_excel('schedule.xlsx', index=False)
这段代码会生成一个名为schedule.xlsx的Excel文件,其中包含了排课结果。每一行代表一个班级的课程安排,包括班级、科目、老师和时间。
原文地址: https://www.cveoy.top/t/topic/qosT 著作权归作者所有。请勿转载和采集!