2026-04-04 21:56:57 +05:00
2026-04-04 21:56:57 +05:00

📋 ИИ Промпт - Графики смен

🎯 Описание проекта

Проект для автоматического составления графиков смен сотрудников с использованием Constraint Programming (CP-SAT). Решает задачи оптимального распределения персонала с учетом множества ограничений и предпочтений.

📁 Структура проекта

├── main.py              # Основная логика с генерацией графика
├── shift_schedule.csv   # Результат (заполненный график)
├── README.md            # Документация
└── .continue/           # Система контроля версий

🚀 Планы по улучшению проекта

📌 Общее описание плана

Данный план содержит улучшения для:

  1. Удобства использования — понятная документация
  2. Модульности — выделение логических блоков в функции
  3. Гибкости — поддержка разных форматов экспорта
  4. Тестируемости — возможность проверки результатов

📝 Задачи и планы по улучшению

Улучшение 1: Более понятный README.md

🎯 Цель

Сделать документацию дружелюбной для новых разработчиков и пользователей

📋 Подзадачи

  • 2.1.1 — Добавить описание проекта

    • Краткий абзац о назначении
    • Пример использования
  • 2.1.2 — Структурировать условия задачи

    • Сделать списки с маркерами
    • Выделить типы ограничений (жёсткие/мягкие)
  • 2.1.3 — Обновить секцию "Смены"

    • Оформить таблицей с временем работы
    • Добавить комментарии для каждого значения
  • 2.1.4 — Структурировать предпочтения

    • Сформировать таблицу с операторами и пожеланиями
    • Объяснить типы предпочтений (обязательные/желательные)
  • 2.1.5 — Добавить секцию "Как это работает"

    • Краткое описание алгоритма
    • Пример потока выполнения
  • 2.1.6 — Добавить примеры конфигурации

    • Пример добавления нового оператора
    • Пример добавления новой смены
  • 2.1.7 — Добавить секцию "Формат CSV"

    • Объяснить структуру файла
    • Пример содержимого
  • 2.1.8 — Добавить секцию "Как запустить"

    • Команды для запуска скрипта
    • Требования (Python версии и библиотеки)
  • 2.1.9 — Добавить секцию "Возможные расширения"

    • Учёт усталости сотрудников
    • Интеграция с календарными данными
    • Поддержка разных форматов экспорта
  • 2.1.10 — Добавить секцию "FAQ"

    • Ответы на частые вопросы
    • Что делать, если график не составляется
    • Как обработать конфликт предпочтений

Улучшение 2: Модульность ограничений

🎯 Цель

Упростить добавление новых операторов и ограничений

📋 Подзадачи

  • 2.2.1 — Создать функцию add_hard_constraints(operator_name)

    • Обрабатывать обязательные дни отдыха
    • Обрабатывать обязательные дни работы
    • Обрабатывать ограничения на непрерывную работу
  • 2.2.2 — Создать функцию add_soft_preferences(operator_name)

    • Обрабатывать предпочтения по сменам
    • Обрабатывать предпочтения по дням
    • Использовать AddHint() для мягких условий
  • 2.2.3 — Создать функцию add_global_constraints(model)

    • Проверка покрытия всех смен
    • Проверка количества выходных
    • Проверка лимита дней подряд
  • 2.2.4 — Создать функцию create_operator_variables(model)

    • Генерация переменных для одного оператора
    • Создание булевых переменных для всех смен
  • 2.2.5 — Переписать main.py с использованием новых функций

    • Вынести цикл по операторам
    • Вынести создание переменных
    • Добавить тестовые операторы в конце
  • 2.2.6 — Добавить докстринги

    • Документирование всех функций
    • Описание аргументов
    • Возвращаемых значений
  • 2.2.7 — Добавить проверки типов

    • Проверка входных данных
    • Валидация дат и смен

Улучшение 3: Экспорт результатов

🎯 Цель

Поддержка различных форматов вывода

📋 Подзадачи

  • 2.3.1 — Создать базовый класс ScheduleExporter

    • Интерфейс для методов экспорта
    • Конструктор с параметрами модели
  • 2.3.2 — Реализовать экспорт в CSV

    • Метод export_to_csv(self, filename)
    • Форматирование заголовков
    • Обработка пустых значений
  • 2.3.3 — Реализовать экспорт в Excel (.xlsx)

    • Использование pandas
    • Сохранение стилей (опционально)
  • 2.3.4 — Реализовать экспорт в HTML-таблицу

    • Создание интерактивной таблицы
    • Добавление календаря
    • Подсветка выходных
  • 2.3.5 — Добавить вывод в консоль (Pretty Print)

    • Отформатированный вывод в терминал
    • Цветовое кодирование (опционально)
  • 2.3.6 — Создать класс UIExporter (для будущих веб-интерфейсов)

    • Генерация JSON для frontend
    • REST API endpoints (будущее)
  • 2.3.7 — Добавить методы конфигурации

    • Выбор формата по умолчанию
    • Настройки кодировки
    • Дополнительные столбцы (например, время смены)
  • 2.3.8 — Обновить main.py с использованием экспортера

    • Вынести логику записи в main.py
    • Создать экземпляр ScheduleExporter
    • Вызвать нужный метод экспорта
  • 2.3.9 — Добавить тесты для экспортеров

    • Проверка правильности CSV
    • Проверка форматирования Excel
    • Проверка HTML валидности

📅 Дорожная карта (Roadmap)

Этап 1: Фундамент (Неделя 1)

  • Обновление README.md (подзадачи 2.1.*)
  • Добавление докстрингов и комментариев в код

Этап 2: Модульность (Неделя 2)

  • Создание функций ограничений (подзадачи 2.2.12.2.4)
  • Переписывание main.py
  • Тестирование модульных функций

Этап 3: Экспорт (Неделя 3)

  • Разработка базового класса экспортера (2.3.12.3.5)
  • Реализация Excel и HTML
  • Интеграция в main.py

Этап 4: Документация и тесты (Неделя 4)

  • Написание примеров в README
  • Создание секции FAQ
  • Написание unit-тестов
  • Проверка всех форматов экспорта

🛠️ Технические требования

  • Python: 3.8+
  • Библиотеки:
    • ortools (CP-SAT)
    • pandas (для Excel)
    • jinja2 (для HTML)
    • openpyxl (для стилей Excel)

📝 Примечание

Этот план можно выполнять итеративно. Можно начать с улучшения README.md, затем перейти к модульности, и в конце добавить новые форматы экспорта.

ИИ Промпт

Нужно назначить операторов на смены

Условия:

  • апрель 2026 года. Месяц начинается со среды
  • график нужен на каждый день этого месяца
  • Операторов всего 6
  • в каждой смене - должен быть один оператор
  • У каждого оператора должно быть 10 выходных
  • оператор не должен работать больше 5 дней подряд
  • в день оператор может работать только одну смену

Смены(4 на каждый день): с 06:00 до 14:30 с 08:00 до 16:30 с 11:30 до 20:00 с 12:30 до 21:00

Список операторов и их пожелания:

  1. Оператор Иванов: Хочет отдыхать 10 апреля и 13 апреля
  2. Оператор Алексеев: Хочет работать по понедельникам в смену с 06:00 до 14:30
  3. Оператор Сидоров: Хочет отдыхать 25 апреля и 26 апреля
  4. Оператор Козобородов: предпочитает смену 11:3020:00, но может работать в любую, если иначе график не составить.
  5. Оператор Трудяшкина: Хочет отдыхать 4 апреля
  6. Оператор Петрова: Хочет отдыхать 29 и 14 апреля

Задача: Составь конкретный ежедневный график (таблицей: день недели → смена → оператор), соблюдая:

  • условия задачи
  • на каждую смену должен быть назначен оператор
  • выходные - это дни когда оператор вообще не работает
  • пожелания обязательны к исполнению, если это не делает график невозможным
  • дни отдыха входят в 10 выходных

Перед отправкой мне решения - проверь что все условия отрабатывают. Если у тебя есть какой-то вопрос или что-то непонятно - задай, я отвечу Ответ выдай в csv, в котором столбцы - день;1 смена;2 смена;3 смена;4 смена Если возможности подобрать такой график работ нет - то так и ответь

Description
No description provided
Readme 84 KiB
Languages
Python 100%