""" main.py - Основ ный скрипт для создания графика смен Использует модуль models.py для создания и решения модели """ from models import create_model, solve_model, get_solution, SHIFTS, OPERATORS import csv def generate_csv_report(schedule: dict, filename: str = 'shift_schedule.csv'): """ Генерирует CSV-отчет на основе расписания. Аргументы: schedule: словарь расписания из get_solution() filename: имя файла для вывода CSV Возвращает: True если файл создан успешно """ with open(filename, 'w', newline='', encoding='utf-8') as file: writer = csv.writer(file) # Заголовок writer.writerow(['День'] + [f'Смена {i+1}' for i in range(len(SHIFTS))]) for day, day_shifts in schedule.items(): row = [day] for shift_idx in range(len(SHIFTS)): op = None for op_name in OPERATORS: if schedule[day][shift_idx].get(op_name, False): op = op_name break row.append(op) writer.writerow(row) print(f"График успешно составлен и сохранен в '{filename}'") return True def main(): """ Главная функция: создает и решает модель, затем генерирует CSV-отчет. """ print("=" * 60) print("Создание графика смен") print("=" * 60) # Шаг 1: Создаем модель print("\n[1] Создание модели...") model, variables, operators_set = create_model() print(f" Модель создана с {len(variables)} переменными") print(f" Операторы: {', '.join(operators_set)}") # Шаг 2: Решаем модель print("\n[2] Решение модели...") success = solve_model() if success: print(" ✅ Модель решена успешно!") # Шаг 3: Получаем решение print("\n[3] Получение решения...") schedule = get_solution() print(f" Решение получено для {len(schedule)} дней") # Шаг 4: Генерируем CSV-отчет print("\n[4] Генерация CSV-отчета...") generate_csv_report(schedule, 'shift_schedule.csv') else: print(" ❌ Не удалось составить график!") print(" Проверьте ограничения и предпочтения операторов.") return False print("\n" + "=" * 60) print("Готово!") print("=" * 60) return True if __name__ == '__main__': main()