下面是一个使用 Pandas 和 openpyxl 库编写的根据上述条件进行遗传排课并输出 Excel 的 Python 代码示例:

import pandas as pd
from openpyxl import Workbook

# 老师列表
teachers = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K']

# 年级和课程列表
grades = ['一年级', '二年级', '三年级', '四年级', '五年级', '六年级']
courses = {
    '一年级': ['语文', '数学', '英语', '体育'],
    '二年级': ['语文', '数学', '英语', '体育'],
    '三年级': ['语文', '数学', '英语', '体育'],
    '四年级': ['语文', '数学', '英语', '体育'],
    '五年级': ['语文', '数学', '英语', '体育'],
    '六年级': ['语文', '数学', '英语', '体育']
}

# 创建空的课程表DataFrame
schedule = pd.DataFrame(index=range(1, 6), columns=range(1, 8))

# 遗传排课函数
def generate_schedule():
    for grade in grades:
        for course in courses[grade]:
            # 根据课程和课时量进行老师分配
            for i in range(2):  # 二年级有2个班
                for j in range(3):  # 每天上3节课
                    # 判断是否为语数英课程或体育课程
                    if course in ['语文', '数学', '英语']:
                        # 判断是否已经连续上了两节课
                        if j < 2 and schedule.iloc[i, j] == course and schedule.iloc[i, j + 1] == course:
                            continue
                        # 判断是否已经在一天中上了三节课
                        if sum(schedule.iloc[i, :j + 1] == course) >= 2:
                            continue
                    elif course == '体育':
                        # 判断是否在1-3节课之间
                        if j < 3:
                            continue

                    # 随机选择一个老师进行分配
                    teacher = teachers.pop()

                    # 将老师填入课程表
                    schedule.iloc[i, j] = teacher

# 生成课程表
generate_schedule()

# 将课程表写入Excel文件
wb = Workbook()
ws = wb.active

for i in range(5):
    for j in range(7):
        ws.cell(row=i+1, column=j+1, value=schedule.iloc[i, j])

wb.save('schedule.xlsx')

这段代码首先定义了老师列表、年级和课程列表,并创建一个空的课程表DataFrame。然后定义了一个遗传排课函数,该函数根据条件进行老师分配,并将老师填入课程表。最后,使用openpyxl库将课程表写入Excel文件。

小学遗传排课算法 Python 代码实现及 Excel 输出

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

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