Планирование работ

Автор Netlog, 29 марта 2018, 16:56

0 Пользователи и 1 гость просматривают эту тему.

Netlog

Есть список заданий в виде
1 - наименование задания
2 - дата начала (не ранее)
3 - дата завершения (не позднее)
4 - трудозатраты, человеко-часы
сами задачи по нормочасам сильно разные, от минутных до несколькосуточных.
Осложняется ситуация тем, что задания попадаются долгие, на несколько рабочих дней. Но с этим в алгоритмическом смысле проще всего кажется, что справиться можно будет разбивая долгое задание на части по 8 рабочих часов.

И есть список исполнителей в виде
1 - ФИО
2 - Дата
3 - Рабочих часов
На выходе надо получить
список в виде
Дата - ФИО - Задание
21.01 - Иванов - БолтыМ6
21.01 - Иванов - ГайкиМ10
21.01 - Сидоров - ШпилькиМ6
22.01 -  Иванов - БолтыМ10
...
примерно так.
Исполнителей хватает на выполнение всех задач, оптимизации не требуется.
Не вижу, с какой стороны подступиться к задаче...
Пока придумал только то, что задания на раздачу исполнителям стоит сортировать в порядке даты завершения, с тем, чтобы задачи с более близким сроком попадали в обработку раньше.

mikekaganski

Хм, Вы решили решить одностадийную задачу теории расписаний в Calc? :) Интересно, конечно, но мне кажется, трудновато будет.
С уважением,
Михаил Каганский

Netlog

Решать по большому счёту всё равно в чём. Сложность задачи с директивными сроками из-за отсутствия требований по оптимальности должна быть меньше, чем О(n^3).

tagezi

#3
Цитата: Netlog от 29 марта 2018, 14:56Исполнителей хватает на выполнение всех задач, оптимизации не требуется.
То есть мы имеем бесконечное количество работы и рабочей силы. И нам просто нужно придумать для, например, начальника, логичное распределение этой рабочей силы?
У Васи пахнет плохо изо рта  - пойдёт пахать восьми часовую смену.
У Пети дети, пусть не выматывается сильно, будет несколько раз за смену менять работу.
Так?

Или всё таки мы пытаемся минимизировать время простоя, то есть сделать так, чтобы минимальным количеством рабочей силы было охвачено максимальное количество работ?
(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha

Netlog

Конечно есть оптимизация по рабочей силе, но работяг то целое и небольшое число.
Решаем задачу для одного рабочего, потом для двух, потом для трёх... Уложились - хорошо. Нет - следующая итерация, причём в LO эти итерации можно делать вручную. Сроки задач достаточно свободные, т.е. число работяг с большой вероятностью - это просто округление вверх от суммы времён исполнения задач делённой на 8 рабочих часов в сутки.
На простой чихать.
----------------------------------------
Самое интересное, что вручную задача решается довольно просто
1. Получаем отсортированный список директивных дат завершения работ, и начинаем цикл по этим датам
2. Берём первую из дат. И выполняем все работы, которые ДОЛЖНЫ быть исполнены
3. Для исключения простоя исполняем работы, которые МОЖНО исполнить.
4. Переходим к следующей дате, и снова пункт 2.
У меня этих дат заведомо меньше, чем рабочих дней в году. :)

tagezi

#5
Цитата: Netlog от 29 марта 2018, 18:49Самое интересное, что вручную задача решается довольно просто
1. Получаем отсортированный список директивных дат завершения работ, и начинаем цикл по этим датам
2. Берём первую из дат. И выполняем все работы, которые ДОЛЖНЫ быть исполнены
3. Для исключения простоя исполняем работы, которые МОЖНО исполнить.
4. Переходим к следующей дате, и снова пункт 2.
У меня этих дат заведомо меньше, чем рабочих дней в году.
А сколько у вас работников и работ?
И интересно ещё узнать:
минимальное время работы;
максимальное время работы;
и кратность по времени (все ли работы кратны часу?).

А ещё, каждый ли рабочий может выполнять любую работу?
(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha

Netlog

работников от 2 до 20,
работ минимум пара сотен максимум десять тысяч
время работы от десятков секунд до 16 часов и не кратно ничему.
Даты начала и завершения - календарные рабочие дни, в пределах года, максимум около 200 штук. я их сейчас округляю до недели в более жёсткую сторону, внутрь интервала, для простоты.
Про кратность я уже думал.

tagezi

Цитата: Netlog от 30 марта 2018, 07:13работников от 2 до 20,
работ минимум пара сотен максимум десять тысяч
Как на производстве может постоянно меняться количество работников и количество видов работ?

А с этим:
Цитата: Netlog от 30 марта 2018, 07:13время работы от десятков секунд до 16 часов и не кратно ничему.
Я затрудняюсь, даже число сочетаний посчитать. Думаю, что нули придется выписывать достаточно долго.
Число сочетаний: 200! / 20!(200 - 20) = чо-то где-то примерно 5,834941795787915E358 (нулей)
И оно противоречит
Цитата: Netlog от 30 марта 2018, 07:13Даты начала и завершения - календарные рабочие дни, в пределах года, максимум около 200 штук.
Если работник выполняет задание на 10 секунд, это нужно округлить до недели? :)

Ставьте в теме не решаемо :)
(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha

Netlog

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

tagezi

Цитата: Netlog от 30 марта 2018, 09:40
округляется не задание а интервал времени, в который надо уложиться
С разным числом работников - самих объектов много, и число работников фактически изменится только в следующем году, а на одном объекте оно - константа. но на след год его надо вычислить по нормативам.
По вашему условию, я не могу вообще представить реальную картину, даже отдалённо и приблизительно. Потому что, сейчас у меня складывается ощущение, что есть задание "ударить молотком по гвоздю" - 10 секунд, округляем до рабочего дня. И таких 1000 заданий должны выполнить 2 сотрудника за производственный год.
(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha

rami

Netlog, завершайте "Вступительное слово" и переходите к таблицам данных. Для начала дайте таблицу исходных данных для двух-трёх работников на три дня и пояснения как эти данные обработать и что должно получиться.

economist

Netlog - ставить в первую очередь в работу те заказы, которые надо "быстрее отдавать", безотносительно их реальной "срочности/обязательности", как написано в топике - неправильно.

Поясню. Если есть большие и "долгие" заказы, требующие "освоения технологии", переналадки станков и особых условий поставок сырья - их надо начинать делать в первую очередь, причем в режиме мультизадачности, с тем чтобы не просто успеть сделать, а сделать это качественнее и дешевле, чем возможно при другой, скажем, хронологической организации работ.

То есть основной критерий приоритезации работ - не срочность, а масса прибыли, поделенная на число дней, оставшихся до срока сдачи заказа (а по хорошему - с динамикой получения авансовых платежей). В силу бухучета и прочих вещей - этот показатель (прибыль) рассчитать непросто.

Написал бы больше, но мой основательный пост про планирование потерли, поэтому "обижаюсь" и ухожу в read-only отпуск на месяц :-) А тот пост повторил в личку.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...