以下是使用 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 文件,其中包含了排课结果。每个工作表代表一个年级,每个单元格代表一节课的科目。

小学遗传算法排课系统:Python Pandas 实现自动排课并输出 Excel

原文地址: https://www.cveoy.top/t/topic/qos0 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录