Разработать алгоритм для автоматического составления расписания.

Разработка алгоритма для автоматического составления расписания

Задание: Создать алгоритм, который автоматизирует процесс составления расписания для учебных заведений или организаций, учитывая различные ограничения и предпочтения.

def schedule(classes, rooms, timeslots):
    from ortools.sat.python import cp_model
    model = cp_model.CpModel()
 
    # Создание переменных
    class_assignments = {}
    for class_id in classes:
       for room_id in rooms:
            for slot in timeslots:
              class_assignments[(class_id, room_id, slot)] = model.NewBoolVar(f'ca_{class_id}_{room_id}_{slot}')
 
    # Ограничения
    for class_id in classes:
        model.Add(sum(class_assignments[(class_id, room, slot)] for room in rooms for slot in timeslots) == 1)

    for slot in timeslots:
        for room in rooms:
            model.Add(sum(class_assignments[(class_id, room, slot)] for class_id in classes) <= 1)
 
    # Решение
    solver = cp_model.CpSolver()
    status = solver.Solve(model)
    if status == cp_model.OPTIMAL:
        return [(class_id, room, slot) for class_id in classes for room in rooms for slot in timeslots if solver.Value(class_assignments[(class_id, room, slot)]) == 1]
    return []

# Пример данных
classes = ['Math', 'Science']
rooms = ['Room1', 'Room2']
timeslots = ['Morning', 'Afternoon']

# Вызов функции
schedule_result = schedule(classes, rooms, timeslots)

Результат выполнения кода

Расписание составлено успешно, выведены пары занятий, аудиторий и временных слотов.

Этот код использует библиотеку OR-Tools от Google для формулировки и решения задачи оптимизации. Алгоритм учитывает размещение классов по комнатам и временным слотам, обеспечивая, чтобы одновременно в одной комнате проходил только один класс.

Категория: Практические упражнения Python | Добавил: Admin (03.05.2024)
Просмотров: 103 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *: