LINUX.ORG.RU

Вышла библиотека CrazyCPM

 , , , ,

Вышла библиотека CrazyCPM

3

3

Состоялся первый релиз библиотеки CrazyCPM.

Библиотека написана на Python, C, Cython и предназначена для сетевого моделирования проектов и работ методом критического пути (CPM), а также методом анализа и оценки программ (PERT).

Особенности CrazyCPM:

  1. Построение сетевых моделей типа «работы-дуги» (в большинстве существующих систем управления проектами используются сетевые модели типа «работы-вершины»).
  2. Для моделирования детерминированных проектов и работ реализован метод CPM.
  3. Для моделирования проектов и работ, сопряжённых с рисками реализован метод PERT.
  4. Для расчётов статистических параметров проектов и работ используется модифицированное PERT-распределение, что позволяет использовать библиотеку для моделирования малых и средних проектов (<100 работ на критическом пути).
  5. Библиотека позволяет строить модели с учётом особенностей назначенных на работы ресурсов (производительность, доступность во времени и т.д.)
  6. Возможен экспорт данных построенных моделей в pandas.Dataframe или в словарь.
  7. Для визуализации сетевых графиков используется Graphviz.
  8. Наиболее тяжёлые операции (построение сети) реализованы на C.

Библиотека CrazyCPM используется в прототипе системы управления проектами VibePM.

>>> Страница проекта на GitHub

★★★★★

Проверено: dataman ()
Последнее исправление: cetjs2 (всего исправлений: 3)

так держать

матчасть, кому интересно:

Сетевое Планирование и Управление, Вузфильм, 1973 г. www.youtube.com/watch?v=xDp6xKOVJYE

Сетевые графики в планировании, Разумов И.М., Белова Л.Д., Ипатов М.И., Проскуряков А.В., 1967 https://libgen.bz/edition.php?id=136807930

bender ★★★★★
()

Очень интересно, но нифига не понятно. Оно умеет в диаграммы Ганта или это вообще про другое?

zabbal ★★★★☆
()
Ответ на: комментарий от bender

первый раз слышу, чтобы ютюб по логину давал видео смотреть

Вообще это бывает довольно со многими видео. Самое частое — это если на видео стоит отметка 18+ (а она может быть просто из-за какого-нибудь там упоминания смерти, или типа того, речь не о порнухе), то ютуб требует логина. Бывают ещё какие-то причины, вроде как связанные с авторскими правами, страной IP зрителя, или тем, какие галочки автор видео нажал в настройках (я не вдавался сильно в детали, не судите строго), но самая частая это вот 18+.

Но конкретно видео по ссылке у меня открывается незалогиненным.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 1)

Библиотека CrazyCPM используется в прототипе системы управления проектами VibePM.

Вообще, сетевые графики можно в РедМайн интегрировать по аналогии, как туда интегрированы диаграммы Ганта. Вершины - работы-тикеты, ребра - связи между работами (в Редмайне есть). Оценка времени для работы есть в стандартных полях, если нужно, можно новые поля добавить. Сделать плагин, который будет по этому принципу брать все тикеты из проекта и рисовать по ним на отдельной вкладке сетевой график и гонять на нем алгоритмы поиска критического пути и резервов времени. Главный плюс - у РедМайна уже есть юзеры и такая интеграция не поломает, а дополнит привычный тикетный рабочий процесс.

bender ★★★★★
()
Ответ на: комментарий от question4

оно, оба Свердловская киностудия, 1973, на вк даже лучше, т.к. на ютюбе на 5 минут короче - что-то подрезали

bender ★★★★★
()
Ответ на: комментарий от bender

Вершины - работы-тикеты, ребра - связи между работами (в Редмайне есть)

Только не так, а наоборот, тикеты-работы - это ребра графа, а вершины графа - это связи между тикетами (все входящие в тикет зависимости можно в одну вершину объединить). Остальное, вроде, клеется плюс-минус.

bender ★★★★★
()
Последнее исправление: bender (всего исправлений: 1)
Ответ на: комментарий от keeper_b

Потому что нужно быть слегка странным человеком с немного вздорным характером, чтобы в 2k21 начать писать поделие, которое реализует построение сети «работы-дуги», даже в ГОСТ Р 56716-2015 такое представление записано в легаси.

Ибо математики и программисты смирились с тем, что правильно построить минимальную сеть AoA могут не только лишь все, мало кто может это сделать:

  • нет строгого доказательства минимальности,
  • однозначность построения не доказывается в принципе.

Да ещё и алгоритмы построения, если их реализовывать «в лоб», имеют сложность O(N^4).

В сабже O(N^3).

shkolnick-kun ★★★★★
() автор топика
Ответ на: комментарий от DzenPython

А потом добавь туда производственный календарь, календари ресурсов, и вечер в экселе перестанет быть томным.

Я гарантирую это!

shkolnick-kun ★★★★★
() автор топика
Последнее исправление: shkolnick-kun (всего исправлений: 1)
Ответ на: комментарий от shkolnick-kun

Ну, у меня для этого на работе есть 1С - там и регистры с ресурсами и автоитогами и срезами, и многомерные календари (ЕМНИП сделанные на справочниках и регистрах). А в шараге такое и не надо, а тем более домой такое тащить…брррр.

Кстати, бесплатный совет: пройдись со спеллчекером или на свежую голову по ридми к твоей сиэрэм - читать описание физически больно.

DzenPython
()
Ответ на: комментарий от shkolnick-kun

слегка странным человеком с немного вздорным характером

Гм :)

hobbit ★★★★★
()

Странная идея делать это отдельным приложением или библиотекой. Критический путь и диаграммы Ганта, помнится, даже Redmine считал и картинки рисовал красивые. Такое полезно как часть всяких джир и редмайнов. Ну или того же Microsoft Project и иже с ним.

gns ★★★★★
()
Последнее исправление: gns (всего исправлений: 1)
Ответ на: комментарий от shkolnick-kun

Да ещё и алгоритмы построения, если их реализовывать «в лоб», имеют сложность O(N^4).
В сабже O(N^3).

Ну значит задача решается за конечное время. Это же прекрасно.

Xintrea ★★★★★
()
Ответ на: комментарий от gns

Ничего странного. На базе одной и той же библиотеки можно сделать абсолютно разные программы:

  • плагин к редмайн/джире и т.д.;
  • аналог **-project;
  • просто программку, которая обсчитывает сетевые графики проектов, технологических процессов на производстве и т.д.
shkolnick-kun ★★★★★
() автор топика
Ответ на: комментарий от shkolnick-kun

Потому что нужно быть слегка странным человеком с немного вздорным характером, чтобы в 2k21 начать писать поделие, которое реализует построение сети «работы-дуги», даже в ГОСТ Р 56716-2015 такое представление записано в легаси.

Нет препятствий патриотам! (с) ДМБ

И вообще, кто мы такие чтобы осуждать, наш отец учил нас не стесняться своего кода…

На самом деле отличная работа! Правда поймут ее не только лишь все, но не суть. Исследования по «работы-дуги» еще ведутся емнип, просто направление не хайповое. Растягивание вершин, борьба с фиктивными работами, вот это вот все.

Сходу возникает два вопроса:

  1. Применяли ли критерий (алгоритм) Келли? Если нет то планируете ли применять?
  2. Если основная часть кода на С, то рассматривали ли вопрос переноса расчета на CUDA С? Параллельное вычисление на GPU даст возможность считать огромные схемы быстро, а cuda ядер для этого потребуется жменька что есть в большинстве карт за выпущенных в последнее десятилетие.
Obezyan
()
Ответ на: комментарий от bender

Диаграмма Ганта это тень на стене от этого метода.

Obezyan
()
Ответ на: комментарий от shkolnick-kun

Представь себе проект на 10к работ)))

Разбивай проект на группы работ и считай их отдельно. Сложность снизится в разы.

Xintrea ★★★★★
()

Глянул код, два момента всплыло:

  1. Насколько я вижу у вас O(N^2) из-за вложенных циклов. Можно попробовать использовать битовые множества (std::bitset (uint64_t) ‑ маски) тогда пересечение будет за O(1).

  2. Для сортировки прямо напрашивается параллелизация. Хоть через TBB или stable sort или parallel merge sort (нужно тестить что лучше подойдет).

Ну и GPU-based опция просто необходима для использования в больших проектах уровня: изготовление продукции на производственной линии завода.

Obezyan
()
Ответ на: комментарий от ugoday

Более наглядное представление работ, чем AoN.

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

shkolnick-kun ★★★★★
() автор топика
Ответ на: комментарий от Obezyan

Метод Келли - про финменеджмент, когда дойду до финансовых показателей проекта - посмотрю, пока хотел сделать только анализ денежных потоков.

CUDA - нет, не рассматривал, необходимости нет.

Ввод данных проекта на 180+ работ общей длительностью 4 года занял около трёх рабочих дней, расчёт сетевой модели вместе с построением графика в виде растрового изображения для этого проекта занял 4 с, из них расчёты - 0,076 с (семьдесят шесть миллисекунд), прототип на Python работал на секунду дольше.

Скорее нужно будет оптимизировать уже сами расчёты временных параметров проекта, особенно PERT.

shkolnick-kun ★★★★★
() автор топика
Ответ на: комментарий от Obezyan
  1. Там уже используются массивы bool, поэтому O(N^3), а не O(N^4).
  2. Узкое место - минимизация списков зависимостей с разрежением матрицы зависимостей работ.
shkolnick-kun ★★★★★
() автор топика
Последнее исправление: shkolnick-kun (всего исправлений: 1)
Ответ на: комментарий от shkolnick-kun

Там уже используются массивы bool, поэтому O(N^3), а не O(N^4).

Не понял откуда в беседе появилось O(N^4). По поводу O(N^3): на самом деле там O(n²·m) где m - среднее число зависимостей, поэтому я просто написал O(N^2).

В остальном - спасибо за ответы. Я понял что программа нацелена в первую очередь на малые и средние проекты. Про проекты на 10к работ речь пока не идет и оптимизации под них не планируются.

Obezyan
()
Ответ на: комментарий от shkolnick-kun

А такие плагины там уже есть. :) Это просто необходимая часть project management software. И реализовано там это несколько красивее квадратиков и дуг.

gns ★★★★★
()
Ответ на: комментарий от Obezyan

на самом деле там O(n²·m)

Да. Но я предпочитаю оценивать наихудший случай.

Про проекты на 10к работ речь пока не идет и оптимизации под них не планируются.

До 10к работ текущая версия кода вполне приемлема:

  • исходя из прошлого поста 180+ работ превращаются в 0,076 с,
  • грубо говоря 200 работ превращаются в 0,1 с
  • 1000 работ превращается 12,5 с
  • 10000 работ превращаются 1250 с а это около 20 минут
  • при темпе ввода 100 работ в смену, ввод проекта на 10000 работ займёт 100 дней (3 - 5 мес),
  • 20 минут по сравнению с 3 - 5 месяцами - мелочи.

Если будет больше условных 10к работ, матрицы будут занимать > 4 Гб, придётся:

  • переходить от списков и матриц к чисто спискам зависимостей работ (спарсы - те же списки),
  • возвращаться к О(n^4),
  • в сутках 1440 мин., 20 мин. * 10000 = 20000 мин = около 138 суток расчётов на ЦПУ

Можно ли соптимизтировать это на GPU обратно к 20 минутам ? - вопрос.

Есть ли смысл оптимизировать текущую реализацию для работы на GPU ? - тоже вопрос.

Нужна ли эта оптимизация до начала использования библиотеки в кровавом ЫнтЫрпрайзе? - Нет, не нужна.

Как-то так)))

shkolnick-kun ★★★★★
() автор топика
Последнее исправление: shkolnick-kun (всего исправлений: 1)
Ответ на: комментарий от shkolnick-kun

Вы делаете расчеты на сейчас, на MVP так сказать, с конкретным m (числом зависимостей) и они полностью верны.

Затем, ваша программа обрастет дополнительным нужным функционалом, фин показателями, оптимизациями по затратам/времени и эти прогнозирумые 20 минут превратятся в 40 минут или даже в час, что уже сделает целесообразным использование GPU.

А уже при сотнях суток - тем более. Из опыта могу сказать что перенос тяжелых алгоритмов на GPU ускоряет общее время выполнения в 50-60 раз. Это просто информация для размышления, надо оно вам или нет.

Единственное ограничение которое я вижу сходу это малое количество связей между работами (очень малое m). В этом случае использование CSR (разряженные матрицы) на проце будет эффективнее использования GPU. Получается что оптимальность работы CPU/GPU сильно зависит от проекта. Если связей мало - проца более чем достаточно. Если очень много (сложное производство) то тут конечно было бы здорово иметь возможность поставить галочку «Использовать GPU для расчетов».

Но, опять же, можно вернуться к этому вопросу после того как программа займет свое место в кровавом ынтерпрайзе. У меня просто проф деформация системного архитектора, строить фундамент сразу так чтобы решать и текущие и будущие проблемы которые неминуемо возникнут на пути. Не обращайте внимания.

Obezyan
()
Ответ на: комментарий от shkolnick-kun

AoA нет ни в Redmine ни в MS Project просто потому что удобнее делать AoN (PDM) графы. Этим ваша программа и интересна.

Я уже 10+ лет как не CTO, но руки то помнят. Управленческая травма - это на всю жизнь.

Obezyan
()
Ответ на: комментарий от shkolnick-kun

Не, не про это. Я давно это видел, там что-то цветное было. Ганг точно был красивее. Надо redmine ставить и смотреть. Там что-то было искаропки, что-то платными плагинами доставляли. Я ж не менеджер и за настройку redmine не отвечал.

gns ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.